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