a bit of the testing framework
Oleg
committed Aug 23, 2010
commit 3f31885a9a36d339e7518eac19c230833006df32
Showing 16
changed files with
92 additions
and 43 deletions
app/models/cms_layout.rb
+3
-0
| @@ | @@ -1,2 +1,5 @@ |
| class CmsLayout < ActiveRecord::Base | |
| + | |
| + | has_many :cms_pages, :dependent => :nullify |
| + | |
| end | |
app/models/cms_page.rb
+2
-0
| @@ | @@ -1,5 +1,7 @@ |
| class CmsPage < ActiveRecord::Base | |
| + | belongs_to :cms_layout |
| + | |
| has_many :page_contents, :dependent => :destroy | |
| end | |
app/models/cms_page_content.rb
+4
-1
| @@ | @@ -3,8 +3,11 @@ class CmsPageContent < ActiveRecord::Base |
| belongs_to :cms_page | |
| # -- Class Methods -------------------------------------------------------- | |
| + | # method called by the subclasses |
| def self.initialize_content_objects(content = '') | |
| - | raise tag_signature.to_s |
| + | content.scan(regex_tag_signature).flatten.collect do |label| |
| + | self.new(:label => label) |
| + | end |
| end | |
| end | |
app/models/cms_page_text_content.rb
+6
-2
| @@ | @@ -1,13 +1,17 @@ |
| class CmsPageTextContent < CmsPageContent | |
| # -- Class Methods -------------------------------------------------------- | |
| - | |
| # will match tags with this format: | |
| # <cms:page:label:text /> | |
| # <cms:page:label /> | |
| def self.regex_tag_signature(label = nil) | |
| label ||= /\w+/ | |
| - | /<\s*?cms:page:(#{label}):?(text)?\s*?\/?>/ |
| + | /<\s*?cms:page:(#{label}):?(?:text)?\s*?\/?>/ |
| + | end |
| + | |
| + | # -- Instance Methods ----------------------------------------------------- |
| + | def regex_tag_signature |
| + | self.class.regex_tag_signature(label) |
| end | |
| end | |
| \ No newline at end of file | |
migrate/01_create_cms.rb b/db/migrate/01_create_cms.rb
+18
-7
| @@ | @@ -1,24 +1,36 @@ |
| class CreateCms < ActiveRecord::Migration | |
| + | |
| def self.up | |
| # -- Layouts ------------------------------------------------------------ | |
| create_table :cms_layouts do |t| | |
| + | t.string :label |
| + | t.text :content |
| t.timestamps | |
| end | |
| # -- Pages -------------------------------------------------------------- | |
| - | |
| create_table :cms_pages do |t| | |
| + | t.integer :cms_layout_id |
| + | t.string :label |
| + | t.string :slug |
| + | t.string :full_path |
| t.timestamps | |
| end | |
| + | add_index :cms_pages, :full_path |
| - | # -- Blocks ------------------------------------------------------------- |
| - | |
| - | create_table :cms_blocks do |t| |
| + | # -- Page Content -------------------------------------------------------- |
| + | create_table :cms_page_contents do |t| |
| + | t.string :type |
| + | t.integer :cms_page_id |
| + | t.string :label |
| + | t.string :content_string |
| + | t.text :content_text |
| + | t.integer :content_integer |
| t.timestamps | |
| end | |
| + | add_index :cms_page_contents, [:cms_page_id, :type, :label] |
| # -- Snippets ----------------------------------------------------------- | |
| - | |
| create_table :cms_snippets do |t| | |
| t.string :label | |
| t.text :content | |
| @@ | @@ -27,12 +39,11 @@ class CreateCms < ActiveRecord::Migration |
| add_index :cms_snippets, :label, :unique => true | |
| # -- Assets ------------------------------------------------------------- | |
| - | |
| create_table :cms_assets do |t| | |
| t.timestamps | |
| end | |
| end | |
| - | |
| + | |
| def self.down | |
| drop_table :cms_assets | |
| drop_table :cms_snippets | |
test/fixtures/cms_blocks.yml
+0
-0
test/fixtures/cms_layouts.yml
+10
-0
| @@ | @@ -0,0 +1,10 @@ |
| + | default: &layout |
| + | label: Default Layout |
| + | content: |- |
| + | <html> |
| + | <cms:page:header/> |
| + | <div class='content'> |
| + | <cms:page:content> |
| + | </div> |
| + | <cms:page:footer> |
| + | </html> |
test/fixtures/cms_page_contents.yml
+7
-0
| @@ | @@ -0,0 +1,7 @@ |
| + | default: &page_content |
| + | cms_page: default |
| + | type: CmsPageTextContent |
| + | label: content |
| + | content_text: Text Content |
| + | content_string: |
| + | content_integer: |
test/fixtures/cms_pages.yml
+6
-0
| @@ | @@ -0,0 +1,6 @@ |
| + | default: &page |
| + | cms_layout: default |
| + | label: Default Page |
| + | slug: |
| + | full_path: '/' |
| + | |
| \ No newline at end of file | |
test/fixtures/cms_snippets.yml
+1
-1
| @@ | @@ -1,3 +1,3 @@ |
| default: | |
| label: default_snippet | |
| - | content: snippet content |
| \ No newline at end of file | |
| + | content: snippet content |
test/unit/cms_asset_test.rb
+5
-4
| @@ | @@ -1,8 +1,9 @@ |
| - | require 'test_helper' |
| + | require File.dirname(__FILE__) + '/../test_helper' |
| class CmsAssetTest < ActiveSupport::TestCase | |
| - | # Replace this with your real tests. |
| - | test "the truth" do |
| - | assert true |
| + | |
| + | def test_something |
| + | flunk |
| end | |
| + | |
| end | |
test/unit/cms_layout_test.rb
+5
-4
| @@ | @@ -1,8 +1,9 @@ |
| - | require 'test_helper' |
| + | require File.dirname(__FILE__) + '/../test_helper' |
| class CmsLayoutTest < ActiveSupport::TestCase | |
| - | # Replace this with your real tests. |
| - | test "the truth" do |
| - | assert true |
| + | |
| + | def test_something |
| + | flunk |
| end | |
| + | |
| end | |
test/unit/cms_page_content_test.rb
+2
-11
| @@ | @@ -2,17 +2,8 @@ require File.dirname(__FILE__) + '/../test_helper' |
| class CmsPageContentTest < ActiveSupport::TestCase | |
| - | def test_initialization_of_content_objects |
| - | content = %( |
| - | <html><body class='awesome'> |
| - | <cms:page:header/> |
| - | <div class='main'> |
| - | <cms:page:content/> |
| - | </div> |
| - | <cms:page:footer/> |
| - | </body></html> |
| - | ) |
| - | CmsPageContent.initialize_content_objects(content) |
| + | def test_something |
| + | flunk |
| end | |
| end | |
test/unit/cms_page_test.rb
+5
-4
| @@ | @@ -1,8 +1,9 @@ |
| - | require 'test_helper' |
| + | require File.dirname(__FILE__) + '/../test_helper' |
| class CmsPageTest < ActiveSupport::TestCase | |
| - | # Replace this with your real tests. |
| - | test "the truth" do |
| - | assert true |
| + | |
| + | def test_something |
| + | flunk |
| end | |
| + | |
| end | |
test/unit/cms_page_text_content_test.rb
+16
-5
| @@ | @@ -4,13 +4,14 @@ class CmsPageTextContentTest < ActiveSupport::TestCase |
| def test_regex_tag_signature | |
| %w( | |
| - | <cms:page:header:text/> |
| - | <cms:page:header/> |
| - | <cms:page:header> |
| - | <cms:page:header:text> |
| + | <cms:page:content:text/> |
| + | <cms:page:content/> |
| + | <cms:page:content> |
| + | <cms:page:content:text> |
| ).each do |tag| | |
| assert_match CmsPageTextContent.regex_tag_signature, tag | |
| - | assert_match CmsPageTextContent.regex_tag_signature('header'), tag |
| + | assert_match CmsPageTextContent.regex_tag_signature('content'), tag |
| + | assert_match cms_page_contents(:default).regex_tag_signature, tag |
| end | |
| assert_no_match CmsPageTextContent.regex_tag_signature, '<cms:page:header:string>' | |
| @@ | @@ -18,4 +19,14 @@ class CmsPageTextContentTest < ActiveSupport::TestCase |
| assert_no_match CmsPageTextContent.regex_tag_signature, '<cms_page:header>' | |
| end | |
| + | def test_initialization_of_content_objects |
| + | content = cms_layouts(:default).content |
| + | objects = CmsPageTextContent.initialize_content_objects(content) |
| + | assert_equal 3, objects.size |
| + | objects.each do |object| |
| + | assert_equal CmsPageTextContent, object.class |
| + | assert_not_nil object.label |
| + | end |
| + | end |
| + | |
| end | |
test/unit/cms_snippet_test.rb
+2
-4
| @@ | @@ -1,10 +1,8 @@ |
| - | require 'test_helper' |
| + | require File.dirname(__FILE__) + '/../test_helper' |
| class CmsSnippetTest < ActiveSupport::TestCase | |
| - | # -- Class Methods -------------------------------------------------------- |
| - | |
| - | test "get snippet content" do |
| + | def test_method_content |
| assert_equal cms_snippets(:default).content, CmsSnippet.content_for('default_snippet') | |
| assert_equal '', CmsSnippet.content_for('nonexistent_snippet') | |
| end | |