diff options
Diffstat (limited to 'test/models')
22 files changed, 721 insertions, 0 deletions
diff --git a/test/models/asset_test.rb b/test/models/asset_test.rb new file mode 100644 index 0000000..a1041e4 --- /dev/null +++ b/test/models/asset_test.rb | |||
| @@ -0,0 +1,23 @@ | |||
| 1 | require 'test_helper' | ||
| 2 | |||
| 3 | class AssetTest < ActiveSupport::TestCase | ||
| 4 | |||
| 5 | test "related assets get destroyed when assets get destroyed" do | ||
| 6 | Asset.delete_all | ||
| 7 | RelatedAsset.delete_all | ||
| 8 | |||
| 9 | assert asset = Asset.create | ||
| 10 | assert node = Node.root.children.create( :slug => "asset" ) | ||
| 11 | assert_equal [], node.draft.assets | ||
| 12 | |||
| 13 | draft = node.draft | ||
| 14 | draft.assets << asset | ||
| 15 | assert_equal 1, draft.assets.length | ||
| 16 | |||
| 17 | asset.destroy | ||
| 18 | draft.reload | ||
| 19 | assert_equal 0, draft.assets.length | ||
| 20 | assert_equal 0, RelatedAsset.count | ||
| 21 | end | ||
| 22 | |||
| 23 | end | ||
diff --git a/test/models/event_test.rb b/test/models/event_test.rb new file mode 100644 index 0000000..f310af8 --- /dev/null +++ b/test/models/event_test.rb | |||
| @@ -0,0 +1,114 @@ | |||
| 1 | require 'test_helper' | ||
| 2 | |||
| 3 | class EventTest < ActiveSupport::TestCase | ||
| 4 | |||
| 5 | def setup | ||
| 6 | Page.delete_all | ||
| 7 | @cal_node = Node.root.children.create! :slug => "calendar" | ||
| 8 | @draft = @cal_node.find_or_create_draft User.first | ||
| 9 | @draft.title = "99C3" | ||
| 10 | @draft.abstract = "The 99th Chaos Comunication Congress" | ||
| 11 | @draft.body = "Its totally freakin awesome" | ||
| 12 | @draft.save | ||
| 13 | @cal_node.publish_draft! | ||
| 14 | @cal_node.head.reload | ||
| 15 | end | ||
| 16 | |||
| 17 | test 'verfy setup data' do | ||
| 18 | assert_not_nil @cal_node | ||
| 19 | assert_not_nil @cal_node.head | ||
| 20 | end | ||
| 21 | |||
| 22 | test 'creating an event with malformed rrule raises exception' do | ||
| 23 | assert_raise(ArgumentError) do | ||
| 24 | Event.create!( | ||
| 25 | :start_time => "2009-01-01T15:23:42".to_time, | ||
| 26 | :end_time => "2009-01-01T20:05:23".to_time, | ||
| 27 | :url => "http://events.ccc.de/congress/2082", | ||
| 28 | :latitude => 52.525308, | ||
| 29 | :longitude => 13.378944, | ||
| 30 | :rrule => "FOOBAR", | ||
| 31 | :allday => false, | ||
| 32 | :custom_rrule => false, | ||
| 33 | :node_id => @cal_node.id | ||
| 34 | ) | ||
| 35 | end | ||
| 36 | end | ||
| 37 | |||
| 38 | test 'create day event for node with one occurrence' do | ||
| 39 | assert_not_nil event = Event.create!( | ||
| 40 | :start_time => "2009-01-01T15:23:42".to_time, | ||
| 41 | :end_time => "2009-01-01T20:05:23".to_time, | ||
| 42 | :url => "http://events.ccc.de/congress/2082", | ||
| 43 | :latitude => 52.525308, | ||
| 44 | :longitude => 13.378944, | ||
| 45 | :rrule => nil, | ||
| 46 | :allday => false, | ||
| 47 | :custom_rrule => false, | ||
| 48 | :node_id => @cal_node.id | ||
| 49 | ) | ||
| 50 | |||
| 51 | assert_equal 1, Occurrence.count | ||
| 52 | assert_equal event.start_time, Occurrence.first.start_time | ||
| 53 | assert_equal event.end_time, Occurrence.first.end_time | ||
| 54 | end | ||
| 55 | |||
| 56 | test 'create day event with weekly reoccurrence and checking data' do | ||
| 57 | assert_not_nil event = Event.create!( | ||
| 58 | :start_time => "2009-01-01T15:23:42".to_time, | ||
| 59 | :end_time => "2009-01-01T20:05:23".to_time, | ||
| 60 | :url => "http://events.ccc.de/congress/2082", | ||
| 61 | :latitude => 52.525308, | ||
| 62 | :longitude => 13.378944, | ||
| 63 | :rrule => "FREQ=WEEKLY;INTERVAL=1", | ||
| 64 | :allday => false, | ||
| 65 | :custom_rrule => false, | ||
| 66 | :node_id => @cal_node.id | ||
| 67 | ) | ||
| 68 | |||
| 69 | assert_not_nil scoped_occurrences = event.occurrences_in_range( | ||
| 70 | "2009-01-01".to_time, "2009-12-31".to_time | ||
| 71 | ) | ||
| 72 | |||
| 73 | assert_equal 52, scoped_occurrences.length | ||
| 74 | |||
| 75 | assert_equal "2009-12-24T15:23:42".to_time, scoped_occurrences[51].start_time | ||
| 76 | assert_equal "2009-12-24T20:05:23".to_time, scoped_occurrences[51].end_time | ||
| 77 | assert_equal @cal_node.event, scoped_occurrences[51].event | ||
| 78 | assert_equal @cal_node, scoped_occurrences[51].node | ||
| 79 | |||
| 80 | assert_equal "2009-03-19T15:23:42".to_time, scoped_occurrences[11].start_time | ||
| 81 | assert_equal "2009-03-19T20:05:23".to_time, scoped_occurrences[11].end_time | ||
| 82 | assert_equal @cal_node.event, scoped_occurrences[11].event | ||
| 83 | assert_equal @cal_node, scoped_occurrences[11].node | ||
| 84 | |||
| 85 | assert_equal "2009-01-01T15:23:42".to_time, scoped_occurrences[0].start_time | ||
| 86 | assert_equal "2009-01-01T20:05:23".to_time, scoped_occurrences[0].end_time | ||
| 87 | assert_equal @cal_node.event, scoped_occurrences[11].event | ||
| 88 | assert_equal @cal_node, scoped_occurrences[11].node | ||
| 89 | end | ||
| 90 | |||
| 91 | test 'create chaosradio event with custom rrule and interval' do | ||
| 92 | assert_not_nil event = Event.create!( | ||
| 93 | :start_time => "2009-01-28T21:00:00".to_time, | ||
| 94 | :end_time => "2009-01-28T23:00:00".to_time, | ||
| 95 | :url => "http://chaosradio.ccc.de", | ||
| 96 | :latitude => 52.525308, | ||
| 97 | :longitude => 13.378944, | ||
| 98 | :rrule => "FREQ=MONTHLY;INTERVAL=1;BYDAY=-1WE", | ||
| 99 | :allday => false, | ||
| 100 | :custom_rrule => true, | ||
| 101 | :node_id => @cal_node.id | ||
| 102 | ) | ||
| 103 | |||
| 104 | assert_not_nil scoped_occurrences = event.occurrences_in_range( | ||
| 105 | "2009-01-01".to_time, "2009-12-31".to_time | ||
| 106 | ) | ||
| 107 | |||
| 108 | assert_equal 12, scoped_occurrences.length | ||
| 109 | |||
| 110 | expected_days = [28, 25, 25, 29, 27, 24, 29, 26, 30, 28, 25, 30] | ||
| 111 | chaosradio_days = scoped_occurrences.map {|x| x.start_time.day} | ||
| 112 | assert_equal expected_days, chaosradio_days | ||
| 113 | end | ||
| 114 | end \ No newline at end of file | ||
diff --git a/test/models/helpers/admin_helper_test.rb b/test/models/helpers/admin_helper_test.rb new file mode 100644 index 0000000..23d9f40 --- /dev/null +++ b/test/models/helpers/admin_helper_test.rb | |||
| @@ -0,0 +1,4 @@ | |||
| 1 | require 'test_helper' | ||
| 2 | |||
| 3 | class AdminHelperTest < ActionView::TestCase | ||
| 4 | end | ||
diff --git a/test/models/helpers/assets_helper_test.rb b/test/models/helpers/assets_helper_test.rb new file mode 100644 index 0000000..ae50bff --- /dev/null +++ b/test/models/helpers/assets_helper_test.rb | |||
| @@ -0,0 +1,4 @@ | |||
| 1 | require 'test_helper' | ||
| 2 | |||
| 3 | class AssetsHelperTest < ActionView::TestCase | ||
| 4 | end | ||
diff --git a/test/models/helpers/content_helper_test.rb b/test/models/helpers/content_helper_test.rb new file mode 100644 index 0000000..2da82d7 --- /dev/null +++ b/test/models/helpers/content_helper_test.rb | |||
| @@ -0,0 +1,4 @@ | |||
| 1 | require 'test_helper' | ||
| 2 | |||
| 3 | class ContentHelperTest < ActionView::TestCase | ||
| 4 | end | ||
diff --git a/test/models/helpers/events_helper_test.rb b/test/models/helpers/events_helper_test.rb new file mode 100644 index 0000000..2e7567e --- /dev/null +++ b/test/models/helpers/events_helper_test.rb | |||
| @@ -0,0 +1,4 @@ | |||
| 1 | require 'test_helper' | ||
| 2 | |||
| 3 | class EventsHelperTest < ActionView::TestCase | ||
| 4 | end | ||
diff --git a/test/models/helpers/menu_items_helper_test.rb b/test/models/helpers/menu_items_helper_test.rb new file mode 100644 index 0000000..8919dfd --- /dev/null +++ b/test/models/helpers/menu_items_helper_test.rb | |||
| @@ -0,0 +1,4 @@ | |||
| 1 | require 'test_helper' | ||
| 2 | |||
| 3 | class MenuItemsHelperTest < ActionView::TestCase | ||
| 4 | end | ||
diff --git a/test/models/helpers/nodes_helper_test.rb b/test/models/helpers/nodes_helper_test.rb new file mode 100644 index 0000000..13011de --- /dev/null +++ b/test/models/helpers/nodes_helper_test.rb | |||
| @@ -0,0 +1,4 @@ | |||
| 1 | require 'test_helper' | ||
| 2 | |||
| 3 | class NodesHelperTest < ActionView::TestCase | ||
| 4 | end | ||
diff --git a/test/models/helpers/occurrences_helper_test.rb b/test/models/helpers/occurrences_helper_test.rb new file mode 100644 index 0000000..0692926 --- /dev/null +++ b/test/models/helpers/occurrences_helper_test.rb | |||
| @@ -0,0 +1,4 @@ | |||
| 1 | require 'test_helper' | ||
| 2 | |||
| 3 | class OccurrencesHelperTest < ActionView::TestCase | ||
| 4 | end | ||
diff --git a/test/models/helpers/pages_helper_test.rb b/test/models/helpers/pages_helper_test.rb new file mode 100644 index 0000000..535dfe1 --- /dev/null +++ b/test/models/helpers/pages_helper_test.rb | |||
| @@ -0,0 +1,4 @@ | |||
| 1 | require 'test_helper' | ||
| 2 | |||
| 3 | class PagesHelperTest < ActionView::TestCase | ||
| 4 | end | ||
diff --git a/test/models/helpers/revisions_helper_test.rb b/test/models/helpers/revisions_helper_test.rb new file mode 100644 index 0000000..6bb5f07 --- /dev/null +++ b/test/models/helpers/revisions_helper_test.rb | |||
| @@ -0,0 +1,4 @@ | |||
| 1 | require 'test_helper' | ||
| 2 | |||
| 3 | class RevisionsHelperTest < ActionView::TestCase | ||
| 4 | end | ||
diff --git a/test/models/helpers/rss_helper_test.rb b/test/models/helpers/rss_helper_test.rb new file mode 100644 index 0000000..b040b3e --- /dev/null +++ b/test/models/helpers/rss_helper_test.rb | |||
| @@ -0,0 +1,4 @@ | |||
| 1 | require 'test_helper' | ||
| 2 | |||
| 3 | class RssHelperTest < ActionView::TestCase | ||
| 4 | end | ||
diff --git a/test/models/helpers/search_helper_test.rb b/test/models/helpers/search_helper_test.rb new file mode 100644 index 0000000..3034163 --- /dev/null +++ b/test/models/helpers/search_helper_test.rb | |||
| @@ -0,0 +1,4 @@ | |||
| 1 | require 'test_helper' | ||
| 2 | |||
| 3 | class SearchHelperTest < ActionView::TestCase | ||
| 4 | end | ||
diff --git a/test/models/helpers/tags_helper_test.rb b/test/models/helpers/tags_helper_test.rb new file mode 100644 index 0000000..4b1935f --- /dev/null +++ b/test/models/helpers/tags_helper_test.rb | |||
| @@ -0,0 +1,4 @@ | |||
| 1 | require 'test_helper' | ||
| 2 | |||
| 3 | class TagsHelperTest < ActionView::TestCase | ||
| 4 | end | ||
diff --git a/test/models/helpers/users_helper_test.rb b/test/models/helpers/users_helper_test.rb new file mode 100644 index 0000000..96af37a --- /dev/null +++ b/test/models/helpers/users_helper_test.rb | |||
| @@ -0,0 +1,4 @@ | |||
| 1 | require 'test_helper' | ||
| 2 | |||
| 3 | class UsersHelperTest < ActionView::TestCase | ||
| 4 | end | ||
diff --git a/test/models/menu_item_test.rb b/test/models/menu_item_test.rb new file mode 100644 index 0000000..81d9c01 --- /dev/null +++ b/test/models/menu_item_test.rb | |||
| @@ -0,0 +1,8 @@ | |||
| 1 | require 'test_helper' | ||
| 2 | |||
| 3 | class MenuItemTest < ActiveSupport::TestCase | ||
| 4 | # Replace this with your real tests. | ||
| 5 | test "the truth" do | ||
| 6 | assert true | ||
| 7 | end | ||
| 8 | end | ||
diff --git a/test/models/node_test.rb b/test/models/node_test.rb new file mode 100644 index 0000000..514ba3f --- /dev/null +++ b/test/models/node_test.rb | |||
| @@ -0,0 +1,290 @@ | |||
| 1 | require 'test_helper' | ||
| 2 | |||
| 3 | class NodeTest < ActiveSupport::TestCase | ||
| 4 | |||
| 5 | def setup | ||
| 6 | @root = Node.find(1) | ||
| 7 | @first_child = Node.find(2) | ||
| 8 | @first_child.pages.create! :title => "one" | ||
| 9 | @first_child.draft = @first_child.pages.last | ||
| 10 | @first_child.save | ||
| 11 | @second_child = Node.find(3) | ||
| 12 | @second_child.pages.create! :title => "one" | ||
| 13 | |||
| 14 | @user1 = User.create :login => 'demo', :email => "f@b.com", :password => 'foobar', :password_confirmation => 'foobar' | ||
| 15 | @user2 = User.create :login => 'show', :email => "f@b.com", :password => 'foobar', :password_confirmation => 'foobar' | ||
| 16 | end | ||
| 17 | |||
| 18 | test "can only create one root node" do | ||
| 19 | Node.delete_all | ||
| 20 | Node.create! :slug => :root | ||
| 21 | assert_raise(ActiveRecord::RecordInvalid) do | ||
| 22 | Node.create! :slug => :root | ||
| 23 | end | ||
| 24 | end | ||
| 25 | |||
| 26 | def test_returning_existing_drafts | ||
| 27 | test_node = Node.root.children.create! :slug => "test_node" | ||
| 28 | |||
| 29 | assert_not_nil test_node.draft | ||
| 30 | assert_equal 1, test_node.pages.length | ||
| 31 | assert_nil test_node.draft.user | ||
| 32 | |||
| 33 | 3.times do | ||
| 34 | test_node.find_or_create_draft @user1 | ||
| 35 | end | ||
| 36 | |||
| 37 | assert_equal 1, test_node.pages.length | ||
| 38 | end | ||
| 39 | |||
| 40 | def test_user_gets_assigned_to_unlocked_draft | ||
| 41 | assert_not_nil @first_child.draft | ||
| 42 | assert_nil @first_child.draft.user | ||
| 43 | @first_child.find_or_create_draft @user1 | ||
| 44 | assert_equal @user1, @first_child.lock_owner | ||
| 45 | end | ||
| 46 | |||
| 47 | def test_unique_path_returns_an_array | ||
| 48 | assert_equal ["first_child"], @first_child.unique_path | ||
| 49 | new_node = @first_child.children.create! :slug => "third_child" | ||
| 50 | assert_equal ["first_child", "third_child"], new_node.unique_path | ||
| 51 | end | ||
| 52 | |||
| 53 | def test_specifying_a_revision_other_than_with_a_fixnum_raises_exception | ||
| 54 | assert_raise(ArgumentError) { Node.find_page "first_child", 1.9 } | ||
| 55 | assert_raise(ArgumentError) { Node.find_page "first_child", "1" } | ||
| 56 | assert_raise(ArgumentError) { Node.find_page "first_child", :head } | ||
| 57 | end | ||
| 58 | |||
| 59 | def test_publish_draft_on_a_node_without_a_draft_returns_nil | ||
| 60 | |||
| 61 | assert @first_child.publish_draft! | ||
| 62 | assert_nil @first_child.publish_draft! | ||
| 63 | end | ||
| 64 | |||
| 65 | def test_cloning_a_head_page_to_a_new_draft_with_translations | ||
| 66 | assert_not_nil draft = @first_child.draft | ||
| 67 | I18n.locale = :de | ||
| 68 | draft.title = "Hallo" | ||
| 69 | draft.abstract = "Bitte" | ||
| 70 | draft.body = "Danke" | ||
| 71 | draft.save | ||
| 72 | I18n.locale = :en | ||
| 73 | draft.title = "Hello" | ||
| 74 | draft.abstract = "Please" | ||
| 75 | draft.body = "Thanks" | ||
| 76 | draft.save | ||
| 77 | |||
| 78 | @first_child.publish_draft! | ||
| 79 | |||
| 80 | draft1 = @first_child.find_or_create_draft(@user1) | ||
| 81 | |||
| 82 | I18n.locale = :de | ||
| 83 | assert_equal "Hallo", draft1.title | ||
| 84 | assert_equal "Bitte", draft1.abstract | ||
| 85 | assert_equal "Danke", draft1.body | ||
| 86 | |||
| 87 | I18n.locale = :en | ||
| 88 | assert_equal "Hello", draft1.title | ||
| 89 | assert_equal "Please", draft1.abstract | ||
| 90 | assert_equal "Thanks", draft1.body | ||
| 91 | end | ||
| 92 | |||
| 93 | def test_created_nodes_have_an_empty_draft_and_no_head | ||
| 94 | node = Node.root.children.create! :slug => "third_child_beta" | ||
| 95 | |||
| 96 | assert !node.pages.empty? | ||
| 97 | assert_equal 1, node.pages.length | ||
| 98 | assert_not_nil node.draft | ||
| 99 | assert_nil node.draft.user | ||
| 100 | assert_nil node.head | ||
| 101 | end | ||
| 102 | |||
| 103 | def test_create_new_draft_of_published_page | ||
| 104 | node = Node.root.children.create :slug => "xyz" | ||
| 105 | assert node.publish_draft! | ||
| 106 | end | ||
| 107 | |||
| 108 | def test_find_or_create_draft_if_no_draft_exists | ||
| 109 | node = Node.root.children.create :slug => "xyz" | ||
| 110 | node.publish_draft! | ||
| 111 | assert_not_nil node.find_or_create_draft( @user1 ) | ||
| 112 | end | ||
| 113 | |||
| 114 | def test_find_or_create_draft_if_draft_exists_and_is_owned_by_user | ||
| 115 | node = Node.root.children.create :slug => "xyz" | ||
| 116 | node.publish_draft! | ||
| 117 | |||
| 118 | node.find_or_create_draft @user1 | ||
| 119 | node.find_or_create_draft @user1 | ||
| 120 | end | ||
| 121 | |||
| 122 | def test_exception_if_draft_exists_but_locked_by_another_user | ||
| 123 | node = Node.root.children.create :slug => "xyz" | ||
| 124 | node.publish_draft! | ||
| 125 | node.find_or_create_draft @user1 | ||
| 126 | assert_equal @user1, node.lock_owner | ||
| 127 | assert_raise(LockedByAnotherUser) do | ||
| 128 | node.find_or_create_draft @user2 | ||
| 129 | end | ||
| 130 | end | ||
| 131 | |||
| 132 | def test_creation_of_unique_name | ||
| 133 | node = Node.root.children.create :slug => 'child' | ||
| 134 | node.reload | ||
| 135 | assert_equal 'child', node.unique_name | ||
| 136 | |||
| 137 | node = @first_child.children.create :slug => 'deep_child' | ||
| 138 | node.reload | ||
| 139 | assert_equal 'first_child/deep_child', node.unique_name | ||
| 140 | end | ||
| 141 | |||
| 142 | def test_order_of_pages_by_revision | ||
| 143 | # This test should make sure the order is the same on different db's | ||
| 144 | # Remember, there is already an empty draft | ||
| 145 | two = @second_child.pages.create :title => "two" | ||
| 146 | three = @second_child.pages.create :title => "three" | ||
| 147 | four = @second_child.pages.create :title => "four" | ||
| 148 | |||
| 149 | @second_child.pages.reload | ||
| 150 | |||
| 151 | assert_equal [1,2,3,4], @second_child.pages.map { |x| x.revision } | ||
| 152 | end | ||
| 153 | |||
| 154 | def test_behavior_of_acts_as_list | ||
| 155 | two = @second_child.pages.create :title => "two" | ||
| 156 | three = @second_child.pages.create :title => "three" | ||
| 157 | four = @second_child.pages.create :title => "four" | ||
| 158 | |||
| 159 | assert_equal 2, two.revision | ||
| 160 | assert_equal 3, three.revision | ||
| 161 | assert_equal 4, four.revision | ||
| 162 | |||
| 163 | assert_equal four, @second_child.pages.last | ||
| 164 | |||
| 165 | assert two.move_to_bottom | ||
| 166 | |||
| 167 | two.reload; three.reload; four.reload; | ||
| 168 | |||
| 169 | assert_equal 4, two.revision | ||
| 170 | assert_equal 2, three.revision | ||
| 171 | assert_equal 3, four.revision | ||
| 172 | end | ||
| 173 | |||
| 174 | def test_retrieving_page_current | ||
| 175 | updates = Node.root.children.create(:slug => 'updates') | ||
| 176 | year = updates.children.create(:slug => '2008') | ||
| 177 | foo = year.children.create(:slug => 'foo') | ||
| 178 | |||
| 179 | assert_not_nil Node.find_by_unique_name('updates/2008/foo') | ||
| 180 | |||
| 181 | # Note that there is already an initial, blank revision | ||
| 182 | foo.pages.create :title => "Version 2" | ||
| 183 | foo.pages.create :title => "Version 3" | ||
| 184 | foo.pages.create :title => "Version 4" | ||
| 185 | |||
| 186 | foo.head = foo.pages.last | ||
| 187 | foo.save! | ||
| 188 | |||
| 189 | page = Node.find_page("updates/2008/foo") | ||
| 190 | assert_equal page, foo.pages.find_by_revision(4) | ||
| 191 | end | ||
| 192 | |||
| 193 | def test_retrieving_page_by_revision | ||
| 194 | updates = Node.root.children.create(:slug => 'updates') | ||
| 195 | year = updates.children.create(:slug => '2008') | ||
| 196 | foo = year.children.create(:slug => 'foo') | ||
| 197 | |||
| 198 | assert_not_nil Node.find_by_unique_name('updates/2008/foo') | ||
| 199 | |||
| 200 | # Note that there is already an initial, blank revision | ||
| 201 | foo.pages.create :title => "Version 2" | ||
| 202 | foo.pages.create :title => "Version 3" | ||
| 203 | foo.pages.create :title => "Version 4" | ||
| 204 | |||
| 205 | page = Node.find_page("updates/2008/foo", 2) | ||
| 206 | assert_equal "Version 2", page.title | ||
| 207 | end | ||
| 208 | |||
| 209 | # Thats a lengthy test to make sure everything works as it should, it was | ||
| 210 | # created during a bug hunt | ||
| 211 | def test_creating_new_draft | ||
| 212 | test_node = Node.root.children.create! :slug => "test_node" | ||
| 213 | test_node.draft.user = @user1 | ||
| 214 | test_node.save | ||
| 215 | assert test_node.publish_draft! | ||
| 216 | test_node.reload | ||
| 217 | assert_equal 1, test_node.pages.length | ||
| 218 | assert_not_nil test_node.head | ||
| 219 | assert_nil test_node.draft | ||
| 220 | test_node.find_or_create_draft @user1 | ||
| 221 | test_node.reload | ||
| 222 | assert_equal 2, test_node.pages.length | ||
| 223 | assert_not_nil test_node.draft | ||
| 224 | assert test_node.head != test_node.draft | ||
| 225 | end | ||
| 226 | |||
| 227 | test "restoring a revision" do | ||
| 228 | test_node = Node.root.children.create! :slug => "test_node" | ||
| 229 | create_revisions( test_node, 3 ) | ||
| 230 | test_node.find_or_create_draft @user1 | ||
| 231 | test_node.reload | ||
| 232 | |||
| 233 | assert_equal 4, test_node.pages.count | ||
| 234 | assert_equal 3, test_node.head.revision | ||
| 235 | |||
| 236 | test_node.restore_revision!(1) | ||
| 237 | assert_equal 1, test_node.head.revision | ||
| 238 | assert_equal 4, test_node.draft.revision | ||
| 239 | end | ||
| 240 | |||
| 241 | test "a new revision keeps the initial user" do | ||
| 242 | Node.root.descendants.destroy_all | ||
| 243 | node = create_node_with_draft | ||
| 244 | draft = node.draft | ||
| 245 | draft.user = users(:aaron) | ||
| 246 | draft.save | ||
| 247 | node.publish_draft! | ||
| 248 | new_draft = node.find_or_create_draft( users(:quentin) ) | ||
| 249 | assert_equal "aaron", new_draft.user.login | ||
| 250 | end | ||
| 251 | |||
| 252 | test "a new revision can overwrite the initial author" do | ||
| 253 | Node.root.descendants.destroy_all | ||
| 254 | node = create_node_with_draft | ||
| 255 | draft = node.draft | ||
| 256 | draft.user = users(:aaron) | ||
| 257 | draft.save! | ||
| 258 | node.publish_draft! | ||
| 259 | new_draft = node.find_or_create_draft( users(:quentin) ) | ||
| 260 | new_draft.user_id = users(:quentin).id | ||
| 261 | new_draft.save | ||
| 262 | node.publish_draft! | ||
| 263 | assert_equal "quentin", node.head.user.login | ||
| 264 | end | ||
| 265 | |||
| 266 | |||
| 267 | test "update?" do | ||
| 268 | Node.root.descendants.delete_all | ||
| 269 | updates = Node.root.children.create!( :slug => "updates" ) | ||
| 270 | assert !updates.update? | ||
| 271 | |||
| 272 | updates2009 = updates.children.create!( :slug => "2009" ) | ||
| 273 | assert !updates2009.update? | ||
| 274 | |||
| 275 | update = updates2009.children.create!( :slug => "my-first-update" ) | ||
| 276 | assert update.update? | ||
| 277 | end | ||
| 278 | |||
| 279 | test "new nodes should have drafts with no publidhed_at set" do | ||
| 280 | node = Node.root.children.create( :slug => "wow" ) | ||
| 281 | assert_nil node.draft.published_at | ||
| 282 | end | ||
| 283 | |||
| 284 | def create_revisions node, count | ||
| 285 | count.times do | ||
| 286 | node.find_or_create_draft @user1 | ||
| 287 | node.publish_draft! | ||
| 288 | end | ||
| 289 | end | ||
| 290 | end | ||
diff --git a/test/models/occurrence_test.rb b/test/models/occurrence_test.rb new file mode 100644 index 0000000..91a78ec --- /dev/null +++ b/test/models/occurrence_test.rb | |||
| @@ -0,0 +1,8 @@ | |||
| 1 | require 'test_helper' | ||
| 2 | |||
| 3 | class OccurrenceTest < ActiveSupport::TestCase | ||
| 4 | # Replace this with your real tests. | ||
| 5 | test "the truth" do | ||
| 6 | assert true | ||
| 7 | end | ||
| 8 | end | ||
diff --git a/test/models/page_test.rb b/test/models/page_test.rb new file mode 100644 index 0000000..afba8b5 --- /dev/null +++ b/test/models/page_test.rb | |||
| @@ -0,0 +1,146 @@ | |||
| 1 | require 'test_helper' | ||
| 2 | |||
| 3 | class PageTest < ActiveSupport::TestCase | ||
| 4 | |||
| 5 | def setup | ||
| 6 | @user1 = User.create :login => 'demo', :email => "f@b.com", :password => 'foobar', :password_confirmation => 'foobar' | ||
| 7 | @user2 = User.create :login => 'show', :email => "f@b.com", :password => 'foobar', :password_confirmation => 'foobar' | ||
| 8 | end | ||
| 9 | |||
| 10 | def test_aggregation | ||
| 11 | # Create two nodes and move them beneath the root node | ||
| 12 | n1 = Node.root.children.create! :slug => "one" | ||
| 13 | n2 = Node.root.children.create! :slug => "two" | ||
| 14 | |||
| 15 | # get the drafts and assign a user to it | ||
| 16 | assert_not_nil d1 = n1.find_or_create_draft( @user1 ) | ||
| 17 | assert_not_nil d3 = n2.find_or_create_draft( @user1 ) | ||
| 18 | |||
| 19 | # tag and double publish so we have 4 pages tagged with "update" | ||
| 20 | d1.tag_list = "update" | ||
| 21 | d1.save | ||
| 22 | n1.publish_draft! | ||
| 23 | |||
| 24 | d2 = n1.find_or_create_draft @user1 | ||
| 25 | n1.publish_draft! | ||
| 26 | |||
| 27 | |||
| 28 | d3.tag_list = "update, pressemitteilung" | ||
| 29 | d3.save | ||
| 30 | n2.publish_draft! | ||
| 31 | |||
| 32 | d4 = n2.find_or_create_draft @user1 | ||
| 33 | n2.publish_draft! | ||
| 34 | |||
| 35 | # Set up two options hashes for the assertions | ||
| 36 | options1 = { | ||
| 37 | :tags => "update" | ||
| 38 | } | ||
| 39 | |||
| 40 | options2 = { | ||
| 41 | :tags => "update, pressemitteilung" | ||
| 42 | } | ||
| 43 | |||
| 44 | assert_equal 2, Page.aggregate( options1 ).length | ||
| 45 | assert_equal 1, Page.aggregate( options2 ).length | ||
| 46 | assert_equal 4, Page.tagged_with( "update" ).length | ||
| 47 | assert_equal [d2.id, d4.id], Page.aggregate( options1 ).map {|x| x.id} | ||
| 48 | end | ||
| 49 | |||
| 50 | def test_before_save_rewrite_links_in_body | ||
| 51 | n = Node.root.children.create :slug => "link_test" | ||
| 52 | d = n.find_or_create_draft @user1 | ||
| 53 | |||
| 54 | before = "<h1>Hello World</h1>\n" \ | ||
| 55 | "<a href=\"/club\" target=\"_blank\">Linkme</a>" | ||
| 56 | |||
| 57 | after = "<h1>Hello World</h1>\n" \ | ||
| 58 | "<a href=\"/de/club\" target=\"_blank\">Linkme</a>" | ||
| 59 | |||
| 60 | I18n.locale = :de | ||
| 61 | |||
| 62 | d.body = before | ||
| 63 | d.save! | ||
| 64 | |||
| 65 | assert_equal after, d.body | ||
| 66 | end | ||
| 67 | |||
| 68 | def test_before_save_rewrite_links_in_body_if_no_locale_prefix_present | ||
| 69 | n = Node.root.children.create :slug => "link_test" | ||
| 70 | d = n.find_or_create_draft @user1 | ||
| 71 | |||
| 72 | before = "<h1>Hello World</h1>\n" \ | ||
| 73 | "<a href=\"/de/club\" target=\"_blank\">Linkme</a>" | ||
| 74 | |||
| 75 | after = "<h1>Hello World</h1>\n" \ | ||
| 76 | "<a href=\"/de/club\" target=\"_blank\">Linkme</a>" | ||
| 77 | |||
| 78 | I18n.locale = :de | ||
| 79 | |||
| 80 | d.body = before | ||
| 81 | d.save | ||
| 82 | |||
| 83 | assert_equal after, d.body | ||
| 84 | end | ||
| 85 | |||
| 86 | def test_before_save_rewrite_links_skips_on_external_links | ||
| 87 | n = Node.root.children.create :slug => "link_test" | ||
| 88 | d = n.find_or_create_draft @user1 | ||
| 89 | |||
| 90 | before = "<h1>Hello World</h1>\n" \ | ||
| 91 | "<a href=\"http://www.ccc.de/club\" target=\"_blank\">Linkme</a>" | ||
| 92 | |||
| 93 | after = "<h1>Hello World</h1>\n" \ | ||
| 94 | "<a href=\"http://www.ccc.de/club\" target=\"_blank\">Linkme</a>" | ||
| 95 | |||
| 96 | I18n.locale = :de | ||
| 97 | |||
| 98 | d.body = before | ||
| 99 | d.save | ||
| 100 | |||
| 101 | assert_equal after, d.body | ||
| 102 | end | ||
| 103 | |||
| 104 | def test_find_with_outdated_translations | ||
| 105 | Node.delete_all | ||
| 106 | Page.delete_all | ||
| 107 | I18n.locale = :de | ||
| 108 | |||
| 109 | assert_not_nil page = Page.create!( :title => "Hallo" ) | ||
| 110 | page.reload | ||
| 111 | assert_equal 1, page.translations.size | ||
| 112 | assert_equal [], Page.find_with_outdated_translations | ||
| 113 | |||
| 114 | I18n.locale = :en | ||
| 115 | page.title = "Hello" | ||
| 116 | page.save | ||
| 117 | |||
| 118 | assert_equal 2, page.translations.size | ||
| 119 | assert_equal 0, Page.find_with_outdated_translations.size | ||
| 120 | |||
| 121 | english = page.translations.select {|x| x.locale == :en}.first | ||
| 122 | Page::Translation.record_timestamps = false | ||
| 123 | english.update(:updated_at => (Time.now+25.hours)) | ||
| 124 | Page::Translation.record_timestamps = true | ||
| 125 | assert_equal 1, Page.find_with_outdated_translations.count | ||
| 126 | |||
| 127 | I18n.locale = :de | ||
| 128 | page2 = Page.create!( :title => "Hallo2" ) | ||
| 129 | I18n.locale = :en | ||
| 130 | page2.title = "Hello2" | ||
| 131 | page2.save! | ||
| 132 | |||
| 133 | assert_equal 0, Page.find_with_outdated_translations(:delta_time => 23.days).count | ||
| 134 | assert_equal 1, Page.find_with_outdated_translations(:delta_time => 23.minutes).count | ||
| 135 | assert_equal 2, Page.count | ||
| 136 | end | ||
| 137 | |||
| 138 | test "pages under /updates node get the update template assigned" do | ||
| 139 | Node.root.descendants.delete_all | ||
| 140 | updates = Node.root.children.create!( :slug => "updates" ) | ||
| 141 | updates2009 = updates.children.create!( :slug => "2009" ) | ||
| 142 | update = updates2009.children.create!( :slug => "my-first-update" ) | ||
| 143 | assert_equal "update", update.draft.template_name | ||
| 144 | end | ||
| 145 | |||
| 146 | end | ||
diff --git a/test/models/permission_test.rb b/test/models/permission_test.rb new file mode 100644 index 0000000..08fcc0b --- /dev/null +++ b/test/models/permission_test.rb | |||
| @@ -0,0 +1,8 @@ | |||
| 1 | require 'test_helper' | ||
| 2 | |||
| 3 | class PermissionTest < ActiveSupport::TestCase | ||
| 4 | # Replace this with your real tests. | ||
| 5 | test "the truth" do | ||
| 6 | assert true | ||
| 7 | end | ||
| 8 | end | ||
diff --git a/test/models/related_asset_test.rb b/test/models/related_asset_test.rb new file mode 100644 index 0000000..a739e6b --- /dev/null +++ b/test/models/related_asset_test.rb | |||
| @@ -0,0 +1,8 @@ | |||
| 1 | require 'test_helper' | ||
| 2 | |||
| 3 | class RelatedImageTest < ActiveSupport::TestCase | ||
| 4 | # Replace this with your real tests. | ||
| 5 | test "the truth" do | ||
| 6 | assert true | ||
| 7 | end | ||
| 8 | end | ||
diff --git a/test/models/user_test.rb b/test/models/user_test.rb new file mode 100644 index 0000000..6e4d2d7 --- /dev/null +++ b/test/models/user_test.rb | |||
| @@ -0,0 +1,64 @@ | |||
| 1 | require File.dirname(__FILE__) + '/../test_helper' | ||
| 2 | |||
| 3 | class UserTest < ActiveSupport::TestCase | ||
| 4 | # Be sure to include AuthenticatedTestHelper in test/test_helper.rb instead. | ||
| 5 | # Then, you can remove it from this and the functional test. | ||
| 6 | include AuthenticatedTestHelper | ||
| 7 | fixtures :users | ||
| 8 | |||
| 9 | def test_should_create_user | ||
| 10 | assert_difference 'User.count' do | ||
| 11 | user = create_user | ||
| 12 | assert !user.new_record?, "#{user.errors.full_messages.to_sentence}" | ||
| 13 | end | ||
| 14 | end | ||
| 15 | |||
| 16 | def test_should_require_login | ||
| 17 | assert_no_difference 'User.count' do | ||
| 18 | u = create_user(:login => nil) | ||
| 19 | assert u.errors[:login].any? | ||
| 20 | end | ||
| 21 | end | ||
| 22 | |||
| 23 | def test_should_require_password | ||
| 24 | assert_no_difference 'User.count' do | ||
| 25 | u = create_user(:password => nil) | ||
| 26 | assert u.errors[:password].any? | ||
| 27 | end | ||
| 28 | end | ||
| 29 | |||
| 30 | def test_should_require_password_confirmation | ||
| 31 | assert_no_difference 'User.count' do | ||
| 32 | u = create_user(:password_confirmation => nil) | ||
| 33 | assert u.errors[:password_confirmation].any? | ||
| 34 | end | ||
| 35 | end | ||
| 36 | |||
| 37 | def test_should_require_email | ||
| 38 | assert_no_difference 'User.count' do | ||
| 39 | u = create_user(:email => nil) | ||
| 40 | assert u.errors[:email].any? | ||
| 41 | end | ||
| 42 | end | ||
| 43 | |||
| 44 | def test_should_reset_password | ||
| 45 | users(:quentin).update(:password => 'new password', :password_confirmation => 'new password') | ||
| 46 | assert_equal users(:quentin), User.authenticate('quentin', 'new password') | ||
| 47 | end | ||
| 48 | |||
| 49 | def test_should_not_rehash_password | ||
| 50 | users(:quentin).update(:login => 'quentin2') | ||
| 51 | assert_equal users(:quentin), User.authenticate('quentin2', 'monkey') | ||
| 52 | end | ||
| 53 | |||
| 54 | def test_should_authenticate_user | ||
| 55 | assert_equal users(:quentin), User.authenticate('quentin', 'monkey') | ||
| 56 | end | ||
| 57 | |||
| 58 | protected | ||
| 59 | def create_user(options = {}) | ||
| 60 | record = User.new({ :login => 'quire', :email => 'quire@example.com', :password => 'quire69', :password_confirmation => 'quire69' }.merge(options)) | ||
| 61 | record.save | ||
| 62 | record | ||
| 63 | end | ||
| 64 | end | ||
