diff options
| -rw-r--r-- | app/models/node.rb | 51 | ||||
| -rw-r--r-- | test/controllers/admin_controller_test.rb | 2 | ||||
| -rw-r--r-- | test/controllers/content_controller_test.rb | 14 | ||||
| -rw-r--r-- | test/controllers/nodes_controller_test.rb | 26 | ||||
| -rw-r--r-- | test/controllers/revisions_controller_test.rb | 16 | ||||
| -rw-r--r-- | test/controllers/rss_controller_test.rb | 2 | ||||
| -rw-r--r-- | test/controllers/shared_previews_controller_test.rb | 2 | ||||
| -rw-r--r-- | test/controllers/tags_controller_test.rb | 2 | ||||
| -rw-r--r-- | test/models/event_test.rb | 2 | ||||
| -rw-r--r-- | test/models/node_test.rb | 63 | ||||
| -rw-r--r-- | test/models/page_test.rb | 52 | ||||
| -rw-r--r-- | test/test_helper.rb | 5 |
12 files changed, 83 insertions, 154 deletions
diff --git a/app/models/node.rb b/app/models/node.rb index 73eefd1..311c5c0 100644 --- a/app/models/node.rb +++ b/app/models/node.rb | |||
| @@ -145,28 +145,6 @@ class Node < ApplicationRecord | |||
| 145 | pairs | 145 | pairs |
| 146 | end | 146 | end |
| 147 | 147 | ||
| 148 | def find_or_create_draft current_user | ||
| 149 | self.wipe_draft! | ||
| 150 | if draft && self.lock_owner == current_user | ||
| 151 | draft | ||
| 152 | elsif draft && self.lock_owner.nil? | ||
| 153 | lock_for! current_user | ||
| 154 | draft.user = current_user if draft.user.nil? | ||
| 155 | draft.editor = current_user | ||
| 156 | draft.save | ||
| 157 | draft | ||
| 158 | elsif draft && self.lock_owner != current_user | ||
| 159 | raise( | ||
| 160 | LockedByAnotherUser, | ||
| 161 | "Page is locked by another user who is working on it! " \ | ||
| 162 | "Last modification: #{draft.updated_at.to_fs(:db)}" | ||
| 163 | ) | ||
| 164 | else | ||
| 165 | lock_for! current_user | ||
| 166 | create_new_draft current_user | ||
| 167 | end | ||
| 168 | end | ||
| 169 | |||
| 170 | def create_new_draft user | 148 | def create_new_draft user |
| 171 | empty_page = self.pages.create! | 149 | empty_page = self.pages.create! |
| 172 | empty_page.user = (self.head ? self.head.user : user) | 150 | empty_page.user = (self.head ? self.head.user : user) |
| @@ -249,35 +227,6 @@ class Node < ApplicationRecord | |||
| 249 | self | 227 | self |
| 250 | end | 228 | end |
| 251 | 229 | ||
| 252 | # Releases whatever's stale and abandoned; never anything actively in | ||
| 253 | # use. Three independent cases share one rule -- nothing is touched | ||
| 254 | # unless it's been sitting untouched for over a day: | ||
| 255 | # - a lock held with no draft or autosave at all (the editor opened | ||
| 256 | # the page and never actually wrote anything) | ||
| 257 | # - a fresh autosave older than a day, never promoted to a draft | ||
| 258 | # - a draft older than a day that's still identical to head | ||
| 259 | def wipe_draft! | ||
| 260 | return if self.autosave && self.autosave.updated_at > 1.day.ago | ||
| 261 | |||
| 262 | unless self.draft | ||
| 263 | return if self.autosave.nil? && self.locked? && self.updated_at > 1.day.ago | ||
| 264 | self.autosave&.destroy | ||
| 265 | self.autosave_id = nil | ||
| 266 | self.unlock! | ||
| 267 | self.save! | ||
| 268 | return | ||
| 269 | end | ||
| 270 | return unless self.head | ||
| 271 | return unless self.draft.updated_at < 1.day.ago | ||
| 272 | return if self.head.has_changes_to? self.draft | ||
| 273 | |||
| 274 | self.draft.destroy | ||
| 275 | self.draft_id = nil | ||
| 276 | self.unlock! | ||
| 277 | self.save! | ||
| 278 | self.reload | ||
| 279 | end | ||
| 280 | |||
| 281 | def restore_revision! revision | 230 | def restore_revision! revision |
| 282 | if page = self.pages.find_by_revision(revision) | 231 | if page = self.pages.find_by_revision(revision) |
| 283 | self.head = page | 232 | self.head = page |
diff --git a/test/controllers/admin_controller_test.rb b/test/controllers/admin_controller_test.rb index 00a51e2..cba4a59 100644 --- a/test/controllers/admin_controller_test.rb +++ b/test/controllers/admin_controller_test.rb | |||
| @@ -17,7 +17,7 @@ class AdminControllerTest < ActionController::TestCase | |||
| 17 | 17 | ||
| 18 | test "dashboard_search returns matching tags and nodes grouped separately" do | 18 | test "dashboard_search returns matching tags and nodes grouped separately" do |
| 19 | node = Node.root.children.create!(:slug => "dashboard_search_test") | 19 | node = Node.root.children.create!(:slug => "dashboard_search_test") |
| 20 | node.find_or_create_draft(User.find_by_login("aaron")) | 20 | find_or_create_draft(node, User.find_by_login("aaron")) |
| 21 | node.draft.update(:title => "Biometrics Workshop") | 21 | node.draft.update(:title => "Biometrics Workshop") |
| 22 | node.draft.tag_list = "biometrics-workshop" | 22 | node.draft.tag_list = "biometrics-workshop" |
| 23 | node.draft.save! | 23 | node.draft.save! |
diff --git a/test/controllers/content_controller_test.rb b/test/controllers/content_controller_test.rb index 9313783..e8bc55f 100644 --- a/test/controllers/content_controller_test.rb +++ b/test/controllers/content_controller_test.rb | |||
| @@ -39,7 +39,7 @@ class ContentControllerTest < ActionController::TestCase | |||
| 39 | fill_pages_with_content | 39 | fill_pages_with_content |
| 40 | 40 | ||
| 41 | new_node = create_node_under_root "fnord" | 41 | new_node = create_node_under_root "fnord" |
| 42 | draft = new_node.find_or_create_draft @user1 | 42 | draft = find_or_create_draft(new_node, @user1) |
| 43 | draft.body = '[aggregate tags="update" limit="20"]' | 43 | draft.body = '[aggregate tags="update" limit="20"]' |
| 44 | draft.save | 44 | draft.save |
| 45 | new_node.publish_draft! | 45 | new_node.publish_draft! |
| @@ -58,7 +58,7 @@ class ContentControllerTest < ActionController::TestCase | |||
| 58 | fill_pages_with_content | 58 | fill_pages_with_content |
| 59 | 59 | ||
| 60 | new_node = create_node_under_root "fnord" | 60 | new_node = create_node_under_root "fnord" |
| 61 | draft = new_node.find_or_create_draft @user1 | 61 | draft = find_or_create_draft(new_node, @user1) |
| 62 | draft.body = '[aggregate tags="update" limit="20" partial="sidebar_title_only"]' | 62 | draft.body = '[aggregate tags="update" limit="20" partial="sidebar_title_only"]' |
| 63 | draft.save | 63 | draft.save |
| 64 | new_node.publish_draft! | 64 | new_node.publish_draft! |
| @@ -72,7 +72,7 @@ class ContentControllerTest < ActionController::TestCase | |||
| 72 | 72 | ||
| 73 | def test_nonexistant_custom_template_defaults_to_standard_template | 73 | def test_nonexistant_custom_template_defaults_to_standard_template |
| 74 | new_node = create_node_under_root "fnord" | 74 | new_node = create_node_under_root "fnord" |
| 75 | draft = new_node.find_or_create_draft @user1 | 75 | draft = find_or_create_draft(new_node, @user1) |
| 76 | draft.template_name = "huchibu" | 76 | draft.template_name = "huchibu" |
| 77 | draft.save | 77 | draft.save |
| 78 | new_node.publish_draft! | 78 | new_node.publish_draft! |
| @@ -84,7 +84,7 @@ class ContentControllerTest < ActionController::TestCase | |||
| 84 | 84 | ||
| 85 | def test_custom_template_no_date_and_author | 85 | def test_custom_template_no_date_and_author |
| 86 | new_node = create_node_under_root "fnord" | 86 | new_node = create_node_under_root "fnord" |
| 87 | draft = new_node.find_or_create_draft @user1 | 87 | draft = find_or_create_draft(new_node, @user1) |
| 88 | draft.template_name = "no_date_and_author" | 88 | draft.template_name = "no_date_and_author" |
| 89 | draft.save | 89 | draft.save |
| 90 | new_node.publish_draft! | 90 | new_node.publish_draft! |
| @@ -96,7 +96,7 @@ class ContentControllerTest < ActionController::TestCase | |||
| 96 | 96 | ||
| 97 | def test_aggregator_without_fill | 97 | def test_aggregator_without_fill |
| 98 | new_node = create_node_under_root "fnord" | 98 | new_node = create_node_under_root "fnord" |
| 99 | draft = new_node.find_or_create_draft @user1 | 99 | draft = find_or_create_draft(new_node, @user1) |
| 100 | draft.body = '<aggregate tags="xyzzy_unique_test_tag" limit="20" />' | 100 | draft.body = '<aggregate tags="xyzzy_unique_test_tag" limit="20" />' |
| 101 | draft.save | 101 | draft.save |
| 102 | new_node.publish_draft! | 102 | new_node.publish_draft! |
| @@ -114,13 +114,13 @@ class ContentControllerTest < ActionController::TestCase | |||
| 114 | end | 114 | end |
| 115 | 115 | ||
| 116 | def fill_pages_with_content | 116 | def fill_pages_with_content |
| 117 | d1 = @first_child.find_or_create_draft @user1 | 117 | d1 = find_or_create_draft(@first_child, @user1) |
| 118 | d1.title = "one" | 118 | d1.title = "one" |
| 119 | d1.tag_list = "update" | 119 | d1.tag_list = "update" |
| 120 | d1.save | 120 | d1.save |
| 121 | @first_child.publish_draft! | 121 | @first_child.publish_draft! |
| 122 | 122 | ||
| 123 | d2 = @second_child.find_or_create_draft @user1 | 123 | d2 = find_or_create_draft(@second_child, @user1) |
| 124 | d2.title = "two" | 124 | d2.title = "two" |
| 125 | d2.tag_list = "update" | 125 | d2.tag_list = "update" |
| 126 | d2.save | 126 | d2.save |
diff --git a/test/controllers/nodes_controller_test.rb b/test/controllers/nodes_controller_test.rb index 81e3f45..9da9514 100644 --- a/test/controllers/nodes_controller_test.rb +++ b/test/controllers/nodes_controller_test.rb | |||
| @@ -89,7 +89,7 @@ class NodesControllerTest < ActionController::TestCase | |||
| 89 | 89 | ||
| 90 | assert_equal 1, node.pages.length | 90 | assert_equal 1, node.pages.length |
| 91 | 91 | ||
| 92 | draft = node.find_or_create_draft( User.first ) | 92 | draft = find_or_create_draft(node, User.first) |
| 93 | draft.title = "Hello" | 93 | draft.title = "Hello" |
| 94 | draft.body = "World" | 94 | draft.body = "World" |
| 95 | draft.save | 95 | draft.save |
| @@ -102,8 +102,8 @@ class NodesControllerTest < ActionController::TestCase | |||
| 102 | 102 | ||
| 103 | node.reload | 103 | node.reload |
| 104 | assert_equal 1, node.pages.length | 104 | assert_equal 1, node.pages.length |
| 105 | assert_equal "Hello", node.find_or_create_draft( User.first ).title | 105 | assert_equal "Hello", find_or_create_draft(node, User.first).title |
| 106 | assert_equal "World", node.find_or_create_draft( User.first ).body | 106 | assert_equal "World", find_or_create_draft(node, User.first).body |
| 107 | end | 107 | end |
| 108 | 108 | ||
| 109 | test "editing a locked node raises LockedByAnotherUser Exception" do | 109 | test "editing a locked node raises LockedByAnotherUser Exception" do |
| @@ -228,7 +228,7 @@ class NodesControllerTest < ActionController::TestCase | |||
| 228 | test "unlocking a locked node" do | 228 | test "unlocking a locked node" do |
| 229 | login_as :quentin | 229 | login_as :quentin |
| 230 | node = create_node_with_published_page | 230 | node = create_node_with_published_page |
| 231 | node.find_or_create_draft User.first | 231 | find_or_create_draft(node, User.first) |
| 232 | 232 | ||
| 233 | assert node.locked? | 233 | assert node.locked? |
| 234 | 234 | ||
| @@ -250,7 +250,7 @@ class NodesControllerTest < ActionController::TestCase | |||
| 250 | Node.root.descendants.destroy_all | 250 | Node.root.descendants.destroy_all |
| 251 | login_as :quentin | 251 | login_as :quentin |
| 252 | node = create_node_with_published_page | 252 | node = create_node_with_published_page |
| 253 | node.find_or_create_draft User.first | 253 | find_or_create_draft(node, User.first) |
| 254 | 254 | ||
| 255 | other_node = Node.root.children.create( :slug => "other" ) | 255 | other_node = Node.root.children.create( :slug => "other" ) |
| 256 | 256 | ||
| @@ -274,7 +274,7 @@ class NodesControllerTest < ActionController::TestCase | |||
| 274 | Node.root.descendants.destroy_all | 274 | Node.root.descendants.destroy_all |
| 275 | node = create_node_with_published_page | 275 | node = create_node_with_published_page |
| 276 | assert_equal "quentin", node.head.user.login | 276 | assert_equal "quentin", node.head.user.login |
| 277 | node.find_or_create_draft users(:quentin) | 277 | find_or_create_draft(node, users(:quentin)) |
| 278 | assert node.draft.valid? | 278 | assert node.draft.valid? |
| 279 | assert node.valid? | 279 | assert node.valid? |
| 280 | 280 | ||
| @@ -336,7 +336,7 @@ class NodesControllerTest < ActionController::TestCase | |||
| 336 | 336 | ||
| 337 | test "unlocking and relocking changes editor if done by another user" do | 337 | test "unlocking and relocking changes editor if done by another user" do |
| 338 | node = create_node_with_published_page | 338 | node = create_node_with_published_page |
| 339 | draft = node.find_or_create_draft users(:quentin) | 339 | draft = find_or_create_draft(node, users(:quentin)) |
| 340 | assert_equal draft.user.login, draft.editor.login | 340 | assert_equal draft.user.login, draft.editor.login |
| 341 | assert node.locked? | 341 | assert node.locked? |
| 342 | node.unlock! | 342 | node.unlock! |
| @@ -481,13 +481,13 @@ class NodesControllerTest < ActionController::TestCase | |||
| 481 | 481 | ||
| 482 | test "chapters filters by kind, matching head or draft, and shows both by default" do | 482 | test "chapters filters by kind, matching head or draft, and shows both by default" do |
| 483 | erfa_node = Node.root.children.create!(:slug => "chapters_erfa_test") | 483 | erfa_node = Node.root.children.create!(:slug => "chapters_erfa_test") |
| 484 | erfa_node.find_or_create_draft(@user1) | 484 | find_or_create_draft(erfa_node, @user1) |
| 485 | erfa_node.draft.tag_list = "erfa-detail" | 485 | erfa_node.draft.tag_list = "erfa-detail" |
| 486 | erfa_node.draft.save! | 486 | erfa_node.draft.save! |
| 487 | erfa_node.publish_draft! | 487 | erfa_node.publish_draft! |
| 488 | 488 | ||
| 489 | chaostreff_node = Node.root.children.create!(:slug => "chapters_chaostreff_test") | 489 | chaostreff_node = Node.root.children.create!(:slug => "chapters_chaostreff_test") |
| 490 | chaostreff_node.find_or_create_draft(@user1) | 490 | find_or_create_draft(chaostreff_node, @user1) |
| 491 | chaostreff_node.draft.tag_list = "chaostreff-detail" | 491 | chaostreff_node.draft.tag_list = "chaostreff-detail" |
| 492 | chaostreff_node.draft.save! | 492 | chaostreff_node.draft.save! |
| 493 | chaostreff_node.publish_draft! | 493 | chaostreff_node.publish_draft! |
| @@ -549,13 +549,13 @@ class NodesControllerTest < ActionController::TestCase | |||
| 549 | 549 | ||
| 550 | test "tags path filters by an arbitrary raw tag, generalizing chapters" do | 550 | test "tags path filters by an arbitrary raw tag, generalizing chapters" do |
| 551 | presse_node = Node.root.children.create!(:slug => "tags_path_presse_test") | 551 | presse_node = Node.root.children.create!(:slug => "tags_path_presse_test") |
| 552 | presse_node.find_or_create_draft(@user1) | 552 | find_or_create_draft(presse_node, @user1) |
| 553 | presse_node.draft.tag_list = "pressemitteilung" | 553 | presse_node.draft.tag_list = "pressemitteilung" |
| 554 | presse_node.draft.save! | 554 | presse_node.draft.save! |
| 555 | presse_node.publish_draft! | 555 | presse_node.publish_draft! |
| 556 | 556 | ||
| 557 | erfa_node = Node.root.children.create!(:slug => "tags_path_erfa_test") | 557 | erfa_node = Node.root.children.create!(:slug => "tags_path_erfa_test") |
| 558 | erfa_node.find_or_create_draft(@user1) | 558 | find_or_create_draft(erfa_node, @user1) |
| 559 | erfa_node.draft.tag_list = "erfa-detail" | 559 | erfa_node.draft.tag_list = "erfa-detail" |
| 560 | erfa_node.draft.save! | 560 | erfa_node.draft.save! |
| 561 | erfa_node.publish_draft! | 561 | erfa_node.publish_draft! |
| @@ -572,13 +572,13 @@ class NodesControllerTest < ActionController::TestCase | |||
| 572 | 572 | ||
| 573 | test "tags path with multiple tags matches any of them, not all" do | 573 | test "tags path with multiple tags matches any of them, not all" do |
| 574 | erfa_node = Node.root.children.create!(:slug => "tags_path_multi_erfa_test") | 574 | erfa_node = Node.root.children.create!(:slug => "tags_path_multi_erfa_test") |
| 575 | erfa_node.find_or_create_draft(@user1) | 575 | find_or_create_draft(erfa_node, @user1) |
| 576 | erfa_node.draft.tag_list = "erfa-detail" | 576 | erfa_node.draft.tag_list = "erfa-detail" |
| 577 | erfa_node.draft.save! | 577 | erfa_node.draft.save! |
| 578 | erfa_node.publish_draft! | 578 | erfa_node.publish_draft! |
| 579 | 579 | ||
| 580 | chaostreff_node = Node.root.children.create!(:slug => "tags_path_multi_chaostreff_test") | 580 | chaostreff_node = Node.root.children.create!(:slug => "tags_path_multi_chaostreff_test") |
| 581 | chaostreff_node.find_or_create_draft(@user1) | 581 | find_or_create_draft(chaostreff_node, @user1) |
| 582 | chaostreff_node.draft.tag_list = "chaostreff-detail" | 582 | chaostreff_node.draft.tag_list = "chaostreff-detail" |
| 583 | chaostreff_node.draft.save! | 583 | chaostreff_node.draft.save! |
| 584 | chaostreff_node.publish_draft! | 584 | chaostreff_node.publish_draft! |
diff --git a/test/controllers/revisions_controller_test.rb b/test/controllers/revisions_controller_test.rb index e5726f7..96c6d6c 100644 --- a/test/controllers/revisions_controller_test.rb +++ b/test/controllers/revisions_controller_test.rb | |||
| @@ -10,7 +10,7 @@ class RevisionsControllerTest < ActionController::TestCase | |||
| 10 | draft = @node.draft | 10 | draft = @node.draft |
| 11 | draft.body = "first" | 11 | draft.body = "first" |
| 12 | @node.publish_draft! | 12 | @node.publish_draft! |
| 13 | @node.find_or_create_draft @user | 13 | find_or_create_draft(@node, @user) |
| 14 | draft = @node.draft | 14 | draft = @node.draft |
| 15 | draft.update(:body => "second") | 15 | draft.update(:body => "second") |
| 16 | @node.publish_draft! | 16 | @node.publish_draft! |
| @@ -103,7 +103,7 @@ class RevisionsControllerTest < ActionController::TestCase | |||
| 103 | 103 | ||
| 104 | test "diffing head against draft by name" do | 104 | test "diffing head against draft by name" do |
| 105 | login_as :quentin | 105 | login_as :quentin |
| 106 | @node.find_or_create_draft(@user) | 106 | find_or_create_draft(@node, @user) |
| 107 | @node.draft.update(:body => "draft body") | 107 | @node.draft.update(:body => "draft body") |
| 108 | 108 | ||
| 109 | post(:diff, params: { :node_id => @node.id, :start_revision => "head", :end_revision => "draft" }) | 109 | post(:diff, params: { :node_id => @node.id, :start_revision => "head", :end_revision => "draft" }) |
| @@ -119,7 +119,7 @@ class RevisionsControllerTest < ActionController::TestCase | |||
| 119 | 119 | ||
| 120 | test "diffing by name shows a clear comparison label instead of a misleading revision picker" do | 120 | test "diffing by name shows a clear comparison label instead of a misleading revision picker" do |
| 121 | login_as :quentin | 121 | login_as :quentin |
| 122 | @node.find_or_create_draft(@user) | 122 | find_or_create_draft(@node, @user) |
| 123 | 123 | ||
| 124 | post(:diff, params: { :node_id => @node.id, :start_revision => "head", :end_revision => "draft" }) | 124 | post(:diff, params: { :node_id => @node.id, :start_revision => "head", :end_revision => "draft" }) |
| 125 | assert_response :success | 125 | assert_response :success |
| @@ -130,7 +130,7 @@ class RevisionsControllerTest < ActionController::TestCase | |||
| 130 | 130 | ||
| 131 | test "pair-switcher buttons carry their params as real hidden fields, not a query string" do | 131 | test "pair-switcher buttons carry their params as real hidden fields, not a query string" do |
| 132 | login_as :quentin | 132 | login_as :quentin |
| 133 | @node.find_or_create_draft(@user) | 133 | find_or_create_draft(@node, @user) |
| 134 | @node.lock_for_editing!(@user) | 134 | @node.lock_for_editing!(@user) |
| 135 | @node.autosave!({ :body => "unsaved" }, @user) | 135 | @node.autosave!({ :body => "unsaved" }, @user) |
| 136 | 136 | ||
| @@ -142,7 +142,7 @@ class RevisionsControllerTest < ActionController::TestCase | |||
| 142 | 142 | ||
| 143 | test "the view toggle is available even when comparing named layers" do | 143 | test "the view toggle is available even when comparing named layers" do |
| 144 | login_as :quentin | 144 | login_as :quentin |
| 145 | @node.find_or_create_draft(@user) | 145 | find_or_create_draft(@node, @user) |
| 146 | 146 | ||
| 147 | post(:diff, params: { :node_id => @node.id, :start_revision => "head", :end_revision => "draft" }) | 147 | post(:diff, params: { :node_id => @node.id, :start_revision => "head", :end_revision => "draft" }) |
| 148 | assert_response :success | 148 | assert_response :success |
| @@ -151,7 +151,7 @@ class RevisionsControllerTest < ActionController::TestCase | |||
| 151 | 151 | ||
| 152 | test "diffing two revisions also shows tag, template, and asset changes" do | 152 | test "diffing two revisions also shows tag, template, and asset changes" do |
| 153 | login_as :quentin | 153 | login_as :quentin |
| 154 | @node.find_or_create_draft(@user) | 154 | find_or_create_draft(@node, @user) |
| 155 | @node.draft.tag_list = "update" | 155 | @node.draft.tag_list = "update" |
| 156 | @node.draft.save! | 156 | @node.draft.save! |
| 157 | 157 | ||
| @@ -175,7 +175,7 @@ class RevisionsControllerTest < ActionController::TestCase | |||
| 175 | node.draft.save! | 175 | node.draft.save! |
| 176 | node.publish_draft! | 176 | node.publish_draft! |
| 177 | 177 | ||
| 178 | node.find_or_create_draft(@user) | 178 | find_or_create_draft(node, @user) |
| 179 | Globalize.with_locale(:en) { node.draft.update!(:title => "Changed in English only") } | 179 | Globalize.with_locale(:en) { node.draft.update!(:title => "Changed in English only") } |
| 180 | node.draft.save! | 180 | node.draft.save! |
| 181 | 181 | ||
| @@ -191,7 +191,7 @@ class RevisionsControllerTest < ActionController::TestCase | |||
| 191 | node.draft.save! | 191 | node.draft.save! |
| 192 | node.publish_draft! | 192 | node.publish_draft! |
| 193 | 193 | ||
| 194 | node.find_or_create_draft(@user) | 194 | find_or_create_draft(node, @user) |
| 195 | Globalize.with_locale(:en) { node.draft.update!(:title => "English changed") } | 195 | Globalize.with_locale(:en) { node.draft.update!(:title => "English changed") } |
| 196 | node.draft.save! | 196 | node.draft.save! |
| 197 | 197 | ||
diff --git a/test/controllers/rss_controller_test.rb b/test/controllers/rss_controller_test.rb index 7e28844..3f4b4fb 100644 --- a/test/controllers/rss_controller_test.rb +++ b/test/controllers/rss_controller_test.rb | |||
| @@ -6,7 +6,7 @@ class RssControllerTest < ActionController::TestCase | |||
| 6 | @user = User.create :login => 'rsstest', :email => 'rsstest@example.com', | 6 | @user = User.create :login => 'rsstest', :email => 'rsstest@example.com', |
| 7 | :password => 'foobar', :password_confirmation => 'foobar' | 7 | :password => 'foobar', :password_confirmation => 'foobar' |
| 8 | @node = Node.root.children.create! :slug => 'rss_test_node' | 8 | @node = Node.root.children.create! :slug => 'rss_test_node' |
| 9 | draft = @node.find_or_create_draft @user | 9 | draft = find_or_create_draft(@node, @user) |
| 10 | draft.title = "RSS Update Article" | 10 | draft.title = "RSS Update Article" |
| 11 | draft.tag_list = "update" | 11 | draft.tag_list = "update" |
| 12 | draft.save | 12 | draft.save |
diff --git a/test/controllers/shared_previews_controller_test.rb b/test/controllers/shared_previews_controller_test.rb index 5f2d20d..4ebc785 100644 --- a/test/controllers/shared_previews_controller_test.rb +++ b/test/controllers/shared_previews_controller_test.rb | |||
| @@ -13,7 +13,7 @@ class SharedPreviewsControllerTest < ActionController::TestCase | |||
| 13 | test "renders the preview for a brand-new draft on an already-published node" do | 13 | test "renders the preview for a brand-new draft on an already-published node" do |
| 14 | node = Node.root.children.create!(:slug => "shared_preview_published_node_test") | 14 | node = Node.root.children.create!(:slug => "shared_preview_published_node_test") |
| 15 | node.publish_draft! | 15 | node.publish_draft! |
| 16 | node.find_or_create_draft(User.first) | 16 | find_or_create_draft(node, User.first) |
| 17 | node.draft.ensure_preview_token! | 17 | node.draft.ensure_preview_token! |
| 18 | 18 | ||
| 19 | get :show, params: { :token => node.draft.preview_token } | 19 | get :show, params: { :token => node.draft.preview_token } |
diff --git a/test/controllers/tags_controller_test.rb b/test/controllers/tags_controller_test.rb index 95c0d31..b2d30c5 100644 --- a/test/controllers/tags_controller_test.rb +++ b/test/controllers/tags_controller_test.rb | |||
| @@ -6,7 +6,7 @@ class TagsControllerTest < ActionController::TestCase | |||
| 6 | @user = User.create :login => 'tagtest', :email => 'tagtest@example.com', | 6 | @user = User.create :login => 'tagtest', :email => 'tagtest@example.com', |
| 7 | :password => 'foobar', :password_confirmation => 'foobar' | 7 | :password => 'foobar', :password_confirmation => 'foobar' |
| 8 | @node = Node.root.children.create! :slug => 'tag_test_node' | 8 | @node = Node.root.children.create! :slug => 'tag_test_node' |
| 9 | draft = @node.find_or_create_draft @user | 9 | draft = find_or_create_draft(@node, @user) |
| 10 | draft.title = "Tagged Article" | 10 | draft.title = "Tagged Article" |
| 11 | draft.tag_list = "testtag" | 11 | draft.tag_list = "testtag" |
| 12 | draft.save | 12 | draft.save |
diff --git a/test/models/event_test.rb b/test/models/event_test.rb index e98605e..2a671b7 100644 --- a/test/models/event_test.rb +++ b/test/models/event_test.rb | |||
| @@ -5,7 +5,7 @@ class EventTest < ActiveSupport::TestCase | |||
| 5 | def setup | 5 | def setup |
| 6 | Page.delete_all | 6 | Page.delete_all |
| 7 | @cal_node = Node.root.children.create! :slug => "calendar" | 7 | @cal_node = Node.root.children.create! :slug => "calendar" |
| 8 | @draft = @cal_node.find_or_create_draft User.first | 8 | @draft = find_or_create_draft(@cal_node, User.first) |
| 9 | @draft.title = "99C3" | 9 | @draft.title = "99C3" |
| 10 | @draft.abstract = "The 99th Chaos Comunication Congress" | 10 | @draft.abstract = "The 99th Chaos Comunication Congress" |
| 11 | @draft.body = "Its totally freakin awesome" | 11 | @draft.body = "Its totally freakin awesome" |
diff --git a/test/models/node_test.rb b/test/models/node_test.rb index 91a4a6d..959387d 100644 --- a/test/models/node_test.rb +++ b/test/models/node_test.rb | |||
| @@ -31,7 +31,7 @@ class NodeTest < ActiveSupport::TestCase | |||
| 31 | assert_nil test_node.draft.user | 31 | assert_nil test_node.draft.user |
| 32 | 32 | ||
| 33 | 3.times do | 33 | 3.times do |
| 34 | test_node.find_or_create_draft @user1 | 34 | find_or_create_draft(test_node, @user1) |
| 35 | end | 35 | end |
| 36 | 36 | ||
| 37 | assert_equal 1, test_node.pages.length | 37 | assert_equal 1, test_node.pages.length |
| @@ -40,7 +40,7 @@ class NodeTest < ActiveSupport::TestCase | |||
| 40 | def test_user_gets_assigned_to_unlocked_draft | 40 | def test_user_gets_assigned_to_unlocked_draft |
| 41 | assert_not_nil @first_child.draft | 41 | assert_not_nil @first_child.draft |
| 42 | assert_nil @first_child.draft.user | 42 | assert_nil @first_child.draft.user |
| 43 | @first_child.find_or_create_draft @user1 | 43 | find_or_create_draft(@first_child, @user1) |
| 44 | assert_equal @user1, @first_child.lock_owner | 44 | assert_equal @user1, @first_child.lock_owner |
| 45 | end | 45 | end |
| 46 | 46 | ||
| @@ -77,7 +77,7 @@ class NodeTest < ActiveSupport::TestCase | |||
| 77 | 77 | ||
| 78 | @first_child.publish_draft! | 78 | @first_child.publish_draft! |
| 79 | 79 | ||
| 80 | draft1 = @first_child.find_or_create_draft(@user1) | 80 | draft1 = find_or_create_draft(@first_child, @user1) |
| 81 | 81 | ||
| 82 | I18n.locale = :de | 82 | I18n.locale = :de |
| 83 | assert_equal "Hallo", draft1.title | 83 | assert_equal "Hallo", draft1.title |
| @@ -109,15 +109,15 @@ class NodeTest < ActiveSupport::TestCase | |||
| 109 | def test_find_or_create_draft_if_no_draft_exists | 109 | def test_find_or_create_draft_if_no_draft_exists |
| 110 | node = Node.root.children.create :slug => "xyz" | 110 | node = Node.root.children.create :slug => "xyz" |
| 111 | node.publish_draft! | 111 | node.publish_draft! |
| 112 | assert_not_nil node.find_or_create_draft( @user1 ) | 112 | assert_not_nil find_or_create_draft(node, @user1) |
| 113 | end | 113 | end |
| 114 | 114 | ||
| 115 | def test_find_or_create_draft_if_draft_exists_and_is_owned_by_user | 115 | def test_find_or_create_draft_if_draft_exists_and_is_owned_by_user |
| 116 | node = Node.root.children.create :slug => "xyz" | 116 | node = Node.root.children.create :slug => "xyz" |
| 117 | node.publish_draft! | 117 | node.publish_draft! |
| 118 | 118 | ||
| 119 | first_call = node.find_or_create_draft @user1 | 119 | first_call = find_or_create_draft(node, @user1) |
| 120 | second_call = node.find_or_create_draft @user1 | 120 | second_call = find_or_create_draft(node, @user1) |
| 121 | 121 | ||
| 122 | assert_equal first_call, second_call | 122 | assert_equal first_call, second_call |
| 123 | assert_equal 2, node.pages.count | 123 | assert_equal 2, node.pages.count |
| @@ -127,10 +127,10 @@ class NodeTest < ActiveSupport::TestCase | |||
| 127 | def test_exception_if_draft_exists_but_locked_by_another_user | 127 | def test_exception_if_draft_exists_but_locked_by_another_user |
| 128 | node = Node.root.children.create :slug => "xyz" | 128 | node = Node.root.children.create :slug => "xyz" |
| 129 | node.publish_draft! | 129 | node.publish_draft! |
| 130 | node.find_or_create_draft @user1 | 130 | find_or_create_draft(node, @user1) |
| 131 | assert_equal @user1, node.lock_owner | 131 | assert_equal @user1, node.lock_owner |
| 132 | assert_raise(LockedByAnotherUser) do | 132 | assert_raise(LockedByAnotherUser) do |
| 133 | node.find_or_create_draft @user2 | 133 | find_or_create_draft(node, @user2) |
| 134 | end | 134 | end |
| 135 | end | 135 | end |
| 136 | 136 | ||
| @@ -222,7 +222,7 @@ class NodeTest < ActiveSupport::TestCase | |||
| 222 | assert_equal 1, test_node.pages.length | 222 | assert_equal 1, test_node.pages.length |
| 223 | assert_not_nil test_node.head | 223 | assert_not_nil test_node.head |
| 224 | assert_nil test_node.draft | 224 | assert_nil test_node.draft |
| 225 | test_node.find_or_create_draft @user1 | 225 | find_or_create_draft(test_node, @user1) |
| 226 | test_node.reload | 226 | test_node.reload |
| 227 | assert_equal 2, test_node.pages.length | 227 | assert_equal 2, test_node.pages.length |
| 228 | assert_not_nil test_node.draft | 228 | assert_not_nil test_node.draft |
| @@ -232,7 +232,7 @@ class NodeTest < ActiveSupport::TestCase | |||
| 232 | test "restoring a revision" do | 232 | test "restoring a revision" do |
| 233 | test_node = Node.root.children.create! :slug => "test_node" | 233 | test_node = Node.root.children.create! :slug => "test_node" |
| 234 | create_revisions( test_node, 3 ) | 234 | create_revisions( test_node, 3 ) |
| 235 | test_node.find_or_create_draft @user1 | 235 | find_or_create_draft(test_node, @user1) |
| 236 | test_node.reload | 236 | test_node.reload |
| 237 | 237 | ||
| 238 | assert_equal 4, test_node.pages.count | 238 | assert_equal 4, test_node.pages.count |
| @@ -250,7 +250,7 @@ class NodeTest < ActiveSupport::TestCase | |||
| 250 | draft.user = users(:aaron) | 250 | draft.user = users(:aaron) |
| 251 | draft.save | 251 | draft.save |
| 252 | node.publish_draft! | 252 | node.publish_draft! |
| 253 | new_draft = node.find_or_create_draft( users(:quentin) ) | 253 | new_draft = find_or_create_draft(node, users(:quentin)) |
| 254 | assert_equal "aaron", new_draft.user.login | 254 | assert_equal "aaron", new_draft.user.login |
| 255 | end | 255 | end |
| 256 | 256 | ||
| @@ -261,7 +261,7 @@ class NodeTest < ActiveSupport::TestCase | |||
| 261 | draft.user = users(:aaron) | 261 | draft.user = users(:aaron) |
| 262 | draft.save! | 262 | draft.save! |
| 263 | node.publish_draft! | 263 | node.publish_draft! |
| 264 | new_draft = node.find_or_create_draft( users(:quentin) ) | 264 | new_draft = find_or_create_draft(node, users(:quentin)) |
| 265 | new_draft.user_id = users(:quentin).id | 265 | new_draft.user_id = users(:quentin).id |
| 266 | new_draft.save | 266 | new_draft.save |
| 267 | node.publish_draft! | 267 | node.publish_draft! |
| @@ -359,31 +359,6 @@ class NodeTest < ActiveSupport::TestCase | |||
| 359 | assert_equal @user1, node.reload.lock_owner | 359 | assert_equal @user1, node.reload.lock_owner |
| 360 | end | 360 | end |
| 361 | 361 | ||
| 362 | test "wipe_draft! leaves a fresh autosave and its lock untouched" do | ||
| 363 | node = create_node_with_published_page | ||
| 364 | node.lock_for_editing!(@user1) | ||
| 365 | node.autosave!({ :title => "still typing" }, @user1) | ||
| 366 | |||
| 367 | node.wipe_draft! | ||
| 368 | node.reload | ||
| 369 | |||
| 370 | assert_not_nil node.autosave | ||
| 371 | assert_equal @user1, node.lock_owner | ||
| 372 | end | ||
| 373 | |||
| 374 | test "wipe_draft! destroys a stale, orphaned autosave and releases its lock" do | ||
| 375 | node = create_node_with_published_page | ||
| 376 | node.lock_for_editing!(@user1) | ||
| 377 | node.autosave!({ :title => "abandoned mid-session" }, @user1) | ||
| 378 | node.autosave.update_column(:updated_at, 2.days.ago) | ||
| 379 | |||
| 380 | node.wipe_draft! | ||
| 381 | node.reload | ||
| 382 | |||
| 383 | assert_nil node.autosave | ||
| 384 | assert_nil node.lock_owner | ||
| 385 | end | ||
| 386 | |||
| 387 | test "revert! is a safe no-op on a fresh node with only a draft" do | 362 | test "revert! is a safe no-op on a fresh node with only a draft" do |
| 388 | node = create_node_with_draft | 363 | node = create_node_with_draft |
| 389 | node.lock_for_editing!(@user1) | 364 | node.lock_for_editing!(@user1) |
| @@ -473,7 +448,7 @@ class NodeTest < ActiveSupport::TestCase | |||
| 473 | 448 | ||
| 474 | def create_revisions node, count | 449 | def create_revisions node, count |
| 475 | count.times do | 450 | count.times do |
| 476 | node.find_or_create_draft @user1 | 451 | find_or_create_draft(node, @user1) |
| 477 | node.publish_draft! | 452 | node.publish_draft! |
| 478 | end | 453 | end |
| 479 | end | 454 | end |
| @@ -514,7 +489,7 @@ class NodeTest < ActiveSupport::TestCase | |||
| 514 | 489 | ||
| 515 | test "editor_search matches a partial substring, not just a whole word" do | 490 | test "editor_search matches a partial substring, not just a whole word" do |
| 516 | node = Node.root.children.create!(:slug => "editor_search_substring_test") | 491 | node = Node.root.children.create!(:slug => "editor_search_substring_test") |
| 517 | node.find_or_create_draft(@user1) | 492 | find_or_create_draft(node, @user1) |
| 518 | node.draft.update(:title => "Biometrics Conference") | 493 | node.draft.update(:title => "Biometrics Conference") |
| 519 | node.publish_draft! | 494 | node.publish_draft! |
| 520 | 495 | ||
| @@ -530,7 +505,7 @@ class NodeTest < ActiveSupport::TestCase | |||
| 530 | 505 | ||
| 531 | test "editor_search requires every word to match, but each word can match a different field" do | 506 | test "editor_search requires every word to match, but each word can match a different field" do |
| 532 | node = Node.root.children.create!(:slug => "editor_search_multiword_test") | 507 | node = Node.root.children.create!(:slug => "editor_search_multiword_test") |
| 533 | node.find_or_create_draft(@user1) | 508 | find_or_create_draft(node, @user1) |
| 534 | node.draft.update(:title => "Backspace e.V. Bamberg", :abstract => "Spiegelgraben 41, 96052 Bamberg") | 509 | node.draft.update(:title => "Backspace e.V. Bamberg", :abstract => "Spiegelgraben 41, 96052 Bamberg") |
| 535 | node.publish_draft! | 510 | node.publish_draft! |
| 536 | 511 | ||
| @@ -540,9 +515,9 @@ class NodeTest < ActiveSupport::TestCase | |||
| 540 | 515 | ||
| 541 | test "drafts_and_autosaves without a user sorts by recency only" do | 516 | test "drafts_and_autosaves without a user sorts by recency only" do |
| 542 | older = Node.root.children.create!(:slug => "drafts_order_older") | 517 | older = Node.root.children.create!(:slug => "drafts_order_older") |
| 543 | older.find_or_create_draft(@user1) | 518 | find_or_create_draft(older, @user1) |
| 544 | newer = Node.root.children.create!(:slug => "drafts_order_newer") | 519 | newer = Node.root.children.create!(:slug => "drafts_order_newer") |
| 545 | newer.find_or_create_draft(@user1) | 520 | find_or_create_draft(newer, @user1) |
| 546 | 521 | ||
| 547 | result = Node.drafts_and_autosaves.to_a | 522 | result = Node.drafts_and_autosaves.to_a |
| 548 | assert result.index(newer) < result.index(older) | 523 | assert result.index(newer) < result.index(older) |
| @@ -564,7 +539,7 @@ class NodeTest < ActiveSupport::TestCase | |||
| 564 | 539 | ||
| 565 | test "recently_changed includes a node whose head was recently published" do | 540 | test "recently_changed includes a node whose head was recently published" do |
| 566 | node = Node.root.children.create!(:slug => "recent_changed_published") | 541 | node = Node.root.children.create!(:slug => "recent_changed_published") |
| 567 | node.find_or_create_draft(@user1) | 542 | find_or_create_draft(node, @user1) |
| 568 | node.autosave!({:title => "v1"}, @user1) | 543 | node.autosave!({:title => "v1"}, @user1) |
| 569 | node.save_draft!(@user1) | 544 | node.save_draft!(@user1) |
| 570 | node.publish_draft! | 545 | node.publish_draft! |
| @@ -574,7 +549,7 @@ class NodeTest < ActiveSupport::TestCase | |||
| 574 | 549 | ||
| 575 | test "recently_changed excludes a node only touched by locking or unlocking after an old publish" do | 550 | test "recently_changed excludes a node only touched by locking or unlocking after an old publish" do |
| 576 | node = Node.root.children.create!(:slug => "recent_changed_lock_only") | 551 | node = Node.root.children.create!(:slug => "recent_changed_lock_only") |
| 577 | node.find_or_create_draft(@user1) | 552 | find_or_create_draft(node, @user1) |
| 578 | node.autosave!({:title => "v1"}, @user1) | 553 | node.autosave!({:title => "v1"}, @user1) |
| 579 | node.save_draft!(@user1) | 554 | node.save_draft!(@user1) |
| 580 | node.publish_draft! | 555 | node.publish_draft! |
diff --git a/test/models/page_test.rb b/test/models/page_test.rb index 24bc7c5..edb7c37 100644 --- a/test/models/page_test.rb +++ b/test/models/page_test.rb | |||
| @@ -13,15 +13,15 @@ class PageTest < ActiveSupport::TestCase | |||
| 13 | n2 = Node.root.children.create! :slug => "two" | 13 | n2 = Node.root.children.create! :slug => "two" |
| 14 | 14 | ||
| 15 | # get the drafts and assign a user to it | 15 | # get the drafts and assign a user to it |
| 16 | assert_not_nil d1 = n1.find_or_create_draft( @user1 ) | 16 | assert_not_nil d1 = find_or_create_draft(n1, @user1) |
| 17 | assert_not_nil d3 = n2.find_or_create_draft( @user1 ) | 17 | assert_not_nil d3 = find_or_create_draft(n2, @user1) |
| 18 | 18 | ||
| 19 | # tag and double publish so we have 4 pages tagged with "update" | 19 | # tag and double publish so we have 4 pages tagged with "update" |
| 20 | d1.tag_list = "update" | 20 | d1.tag_list = "update" |
| 21 | d1.save | 21 | d1.save |
| 22 | n1.publish_draft! | 22 | n1.publish_draft! |
| 23 | 23 | ||
| 24 | d2 = n1.find_or_create_draft @user1 | 24 | d2 = find_or_create_draft(n1, @user1) |
| 25 | n1.publish_draft! | 25 | n1.publish_draft! |
| 26 | 26 | ||
| 27 | 27 | ||
| @@ -29,7 +29,7 @@ class PageTest < ActiveSupport::TestCase | |||
| 29 | d3.save | 29 | d3.save |
| 30 | n2.publish_draft! | 30 | n2.publish_draft! |
| 31 | 31 | ||
| 32 | d4 = n2.find_or_create_draft @user1 | 32 | d4 = find_or_create_draft(n2, @user1) |
| 33 | n2.publish_draft! | 33 | n2.publish_draft! |
| 34 | 34 | ||
| 35 | # Set up two options hashes for the assertions | 35 | # Set up two options hashes for the assertions |
| @@ -49,7 +49,7 @@ class PageTest < ActiveSupport::TestCase | |||
| 49 | 49 | ||
| 50 | def test_before_save_rewrite_links_in_body | 50 | def test_before_save_rewrite_links_in_body |
| 51 | n = Node.root.children.create :slug => "link_test" | 51 | n = Node.root.children.create :slug => "link_test" |
| 52 | d = n.find_or_create_draft @user1 | 52 | d = find_or_create_draft(n, @user1) |
| 53 | 53 | ||
| 54 | before = "<h1>Hello World</h1>\n" \ | 54 | before = "<h1>Hello World</h1>\n" \ |
| 55 | "<a href=\"/club\" target=\"_blank\">Linkme</a>" | 55 | "<a href=\"/club\" target=\"_blank\">Linkme</a>" |
| @@ -67,7 +67,7 @@ class PageTest < ActiveSupport::TestCase | |||
| 67 | 67 | ||
| 68 | def test_before_save_rewrite_links_in_body_if_no_locale_prefix_present | 68 | def test_before_save_rewrite_links_in_body_if_no_locale_prefix_present |
| 69 | n = Node.root.children.create :slug => "link_test" | 69 | n = Node.root.children.create :slug => "link_test" |
| 70 | d = n.find_or_create_draft @user1 | 70 | d = find_or_create_draft(n, @user1) |
| 71 | 71 | ||
| 72 | before = "<h1>Hello World</h1>\n" \ | 72 | before = "<h1>Hello World</h1>\n" \ |
| 73 | "<a href=\"/de/club\" target=\"_blank\">Linkme</a>" | 73 | "<a href=\"/de/club\" target=\"_blank\">Linkme</a>" |
| @@ -85,7 +85,7 @@ class PageTest < ActiveSupport::TestCase | |||
| 85 | 85 | ||
| 86 | def test_before_save_rewrite_links_skips_on_external_links | 86 | def test_before_save_rewrite_links_skips_on_external_links |
| 87 | n = Node.root.children.create :slug => "link_test" | 87 | n = Node.root.children.create :slug => "link_test" |
| 88 | d = n.find_or_create_draft @user1 | 88 | d = find_or_create_draft(n, @user1) |
| 89 | 89 | ||
| 90 | before = "<h1>Hello World</h1>\n" \ | 90 | before = "<h1>Hello World</h1>\n" \ |
| 91 | "<a href=\"http://www.ccc.de/club\" target=\"_blank\">Linkme</a>" | 91 | "<a href=\"http://www.ccc.de/club\" target=\"_blank\">Linkme</a>" |
| @@ -145,7 +145,7 @@ class PageTest < ActiveSupport::TestCase | |||
| 145 | 145 | ||
| 146 | test "a page scheduled for future publication is not yet public even after being published" do | 146 | test "a page scheduled for future publication is not yet public even after being published" do |
| 147 | node = Node.root.children.create!(slug: "preview-scheduled-test") | 147 | node = Node.root.children.create!(slug: "preview-scheduled-test") |
| 148 | draft = node.find_or_create_draft(@user1) | 148 | draft = find_or_create_draft(node, @user1) |
| 149 | draft.title = "Scheduled test" | 149 | draft.title = "Scheduled test" |
| 150 | draft.published_at = 1.day.from_now | 150 | draft.published_at = 1.day.from_now |
| 151 | draft.save! | 151 | draft.save! |
| @@ -160,13 +160,13 @@ class PageTest < ActiveSupport::TestCase | |||
| 160 | 160 | ||
| 161 | test "a superseded page is no longer the head, even though it was once published" do | 161 | test "a superseded page is no longer the head, even though it was once published" do |
| 162 | node = Node.root.children.create!(slug: "preview-superseded-test") | 162 | node = Node.root.children.create!(slug: "preview-superseded-test") |
| 163 | first_draft = node.find_or_create_draft(@user1) | 163 | first_draft = find_or_create_draft(node, @user1) |
| 164 | first_draft.title = "First version" | 164 | first_draft.title = "First version" |
| 165 | first_draft.save! | 165 | first_draft.save! |
| 166 | first_token = first_draft.ensure_preview_token! | 166 | first_token = first_draft.ensure_preview_token! |
| 167 | node.publish_draft! | 167 | node.publish_draft! |
| 168 | 168 | ||
| 169 | second_draft = node.find_or_create_draft(@user1) | 169 | second_draft = find_or_create_draft(node, @user1) |
| 170 | second_draft.title = "Second version" | 170 | second_draft.title = "Second version" |
| 171 | second_draft.save! | 171 | second_draft.save! |
| 172 | node.publish_draft! | 172 | node.publish_draft! |
| @@ -229,12 +229,12 @@ class PageTest < ActiveSupport::TestCase | |||
| 229 | 229 | ||
| 230 | def test_diff_against_inline_keeps_tags_and_marks_only_the_changed_word | 230 | def test_diff_against_inline_keeps_tags_and_marks_only_the_changed_word |
| 231 | n = Node.root.children.create! :slug => "diff_against_test" | 231 | n = Node.root.children.create! :slug => "diff_against_test" |
| 232 | d = n.find_or_create_draft @user1 | 232 | d = find_or_create_draft(n, @user1) |
| 233 | d.title = "Old heading" | 233 | d.title = "Old heading" |
| 234 | d.save! | 234 | d.save! |
| 235 | n.publish_draft! | 235 | n.publish_draft! |
| 236 | 236 | ||
| 237 | d2 = n.find_or_create_draft @user1 | 237 | d2 = find_or_create_draft(n, @user1) |
| 238 | d2.title = "New heading" | 238 | d2.title = "New heading" |
| 239 | d2.save! | 239 | d2.save! |
| 240 | 240 | ||
| @@ -246,12 +246,12 @@ class PageTest < ActiveSupport::TestCase | |||
| 246 | 246 | ||
| 247 | def test_diff_against_side_by_side_returns_two_annotated_strings | 247 | def test_diff_against_side_by_side_returns_two_annotated_strings |
| 248 | n = Node.root.children.create! :slug => "diff_against_sbs_test" | 248 | n = Node.root.children.create! :slug => "diff_against_sbs_test" |
| 249 | d = n.find_or_create_draft @user1 | 249 | d = find_or_create_draft(n, @user1) |
| 250 | d.title = "Old heading" | 250 | d.title = "Old heading" |
| 251 | d.save! | 251 | d.save! |
| 252 | n.publish_draft! | 252 | n.publish_draft! |
| 253 | 253 | ||
| 254 | d2 = n.find_or_create_draft @user1 | 254 | d2 = find_or_create_draft(n, @user1) |
| 255 | d2.title = "New heading" | 255 | d2.title = "New heading" |
| 256 | d2.save! | 256 | d2.save! |
| 257 | 257 | ||
| @@ -263,12 +263,12 @@ class PageTest < ActiveSupport::TestCase | |||
| 263 | 263 | ||
| 264 | test "diff_against handles an inserted paragraph split without corrupting the document" do | 264 | test "diff_against handles an inserted paragraph split without corrupting the document" do |
| 265 | n = Node.root.children.create! :slug => "paragraph_split_test" | 265 | n = Node.root.children.create! :slug => "paragraph_split_test" |
| 266 | d = n.find_or_create_draft @user1 | 266 | d = find_or_create_draft(n, @user1) |
| 267 | d.body = "<p>Der Vortragsraum ist ab 19 Uhr geöffnet, der Zugang erfolgt über den Hinterhof.</p>" | 267 | d.body = "<p>Der Vortragsraum ist ab 19 Uhr geöffnet, der Zugang erfolgt über den Hinterhof.</p>" |
| 268 | d.save! | 268 | d.save! |
| 269 | n.publish_draft! | 269 | n.publish_draft! |
| 270 | 270 | ||
| 271 | d2 = n.find_or_create_draft @user1 | 271 | d2 = find_or_create_draft(n, @user1) |
| 272 | d2.body = "<p>Der Vortragsraum ist ab 19 Uhr geöffnet,</p>\n<p>der Zugang erfolgt über den Hinterhof.</p>" | 272 | d2.body = "<p>Der Vortragsraum ist ab 19 Uhr geöffnet,</p>\n<p>der Zugang erfolgt über den Hinterhof.</p>" |
| 273 | d2.save! | 273 | d2.save! |
| 274 | 274 | ||
| @@ -281,13 +281,13 @@ class PageTest < ActiveSupport::TestCase | |||
| 281 | 281 | ||
| 282 | test "diff_against reports tag and template changes" do | 282 | test "diff_against reports tag and template changes" do |
| 283 | n = Node.root.children.create! :slug => "field_diff_test" | 283 | n = Node.root.children.create! :slug => "field_diff_test" |
| 284 | d = n.find_or_create_draft @user1 | 284 | d = find_or_create_draft(n, @user1) |
| 285 | d.tag_list = "update" | 285 | d.tag_list = "update" |
| 286 | d.template_name = "standard_template" | 286 | d.template_name = "standard_template" |
| 287 | d.save! | 287 | d.save! |
| 288 | n.publish_draft! | 288 | n.publish_draft! |
| 289 | 289 | ||
| 290 | d2 = n.find_or_create_draft @user1 | 290 | d2 = find_or_create_draft(n, @user1) |
| 291 | d2.tag_list = "update, pressemitteilung" | 291 | d2.tag_list = "update, pressemitteilung" |
| 292 | d2.template_name = "title_only" | 292 | d2.template_name = "title_only" |
| 293 | d2.save! | 293 | d2.save! |
| @@ -303,7 +303,7 @@ class PageTest < ActiveSupport::TestCase | |||
| 303 | 303 | ||
| 304 | test "diff_against reports added and removed assets by filename" do | 304 | test "diff_against reports added and removed assets by filename" do |
| 305 | n = Node.root.children.create! :slug => "asset_diff_test" | 305 | n = Node.root.children.create! :slug => "asset_diff_test" |
| 306 | d = n.find_or_create_draft @user1 | 306 | d = find_or_create_draft(n, @user1) |
| 307 | d.save! | 307 | d.save! |
| 308 | n.publish_draft! | 308 | n.publish_draft! |
| 309 | 309 | ||
| @@ -311,7 +311,7 @@ class PageTest < ActiveSupport::TestCase | |||
| 311 | removed_asset = Asset.create!(:upload_file_name => "removed.pdf", :upload_content_type => "application/pdf", :upload_file_size => 1) | 311 | removed_asset = Asset.create!(:upload_file_name => "removed.pdf", :upload_content_type => "application/pdf", :upload_file_size => 1) |
| 312 | n.head.update_assets([kept_asset.id, removed_asset.id]) | 312 | n.head.update_assets([kept_asset.id, removed_asset.id]) |
| 313 | 313 | ||
| 314 | d2 = n.find_or_create_draft @user1 | 314 | d2 = find_or_create_draft(n, @user1) |
| 315 | added_asset = Asset.create!(:upload_file_name => "added.png", :upload_content_type => "image/png", :upload_file_size => 1) | 315 | added_asset = Asset.create!(:upload_file_name => "added.png", :upload_content_type => "image/png", :upload_file_size => 1) |
| 316 | d2.update_assets([kept_asset.id, added_asset.id]) | 316 | d2.update_assets([kept_asset.id, added_asset.id]) |
| 317 | d2.save! | 317 | d2.save! |
| @@ -324,12 +324,12 @@ class PageTest < ActiveSupport::TestCase | |||
| 324 | 324 | ||
| 325 | test "diff_against with an explicit locale compares that locale's own translation on each side" do | 325 | test "diff_against with an explicit locale compares that locale's own translation on each side" do |
| 326 | n = Node.root.children.create!(:slug => "diff_locale_test") | 326 | n = Node.root.children.create!(:slug => "diff_locale_test") |
| 327 | d = n.find_or_create_draft(@user1) | 327 | d = find_or_create_draft(n, @user1) |
| 328 | Globalize.with_locale(:en) { d.update!(:title => "Old English") } | 328 | Globalize.with_locale(:en) { d.update!(:title => "Old English") } |
| 329 | d.save! | 329 | d.save! |
| 330 | n.publish_draft! | 330 | n.publish_draft! |
| 331 | 331 | ||
| 332 | d2 = n.find_or_create_draft(@user1) | 332 | d2 = find_or_create_draft(n, @user1) |
| 333 | Globalize.with_locale(:en) { d2.update!(:title => "New English") } | 333 | Globalize.with_locale(:en) { d2.update!(:title => "New English") } |
| 334 | d2.save! | 334 | d2.save! |
| 335 | 335 | ||
| @@ -341,11 +341,11 @@ class PageTest < ActiveSupport::TestCase | |||
| 341 | 341 | ||
| 342 | test "diff_against with an explicit locale ignores content in other locales entirely" do | 342 | test "diff_against with an explicit locale ignores content in other locales entirely" do |
| 343 | n = Node.root.children.create!(:slug => "diff_locale_isolation_test") | 343 | n = Node.root.children.create!(:slug => "diff_locale_isolation_test") |
| 344 | d = n.find_or_create_draft(@user1) | 344 | d = find_or_create_draft(n, @user1) |
| 345 | d.save! | 345 | d.save! |
| 346 | n.publish_draft! | 346 | n.publish_draft! |
| 347 | 347 | ||
| 348 | d2 = n.find_or_create_draft(@user1) | 348 | d2 = find_or_create_draft(n, @user1) |
| 349 | Globalize.with_locale(:de) { d2.update!(:title => "Nur Deutsch geändert") } | 349 | Globalize.with_locale(:de) { d2.update!(:title => "Nur Deutsch geändert") } |
| 350 | d2.save! | 350 | d2.save! |
| 351 | 351 | ||
| @@ -356,11 +356,11 @@ class PageTest < ActiveSupport::TestCase | |||
| 356 | 356 | ||
| 357 | test "locale_diff_summary flags a locale that only exists on one side as changed" do | 357 | test "locale_diff_summary flags a locale that only exists on one side as changed" do |
| 358 | n = Node.root.children.create!(:slug => "diff_locale_summary_test") | 358 | n = Node.root.children.create!(:slug => "diff_locale_summary_test") |
| 359 | d = n.find_or_create_draft(@user1) | 359 | d = find_or_create_draft(n, @user1) |
| 360 | d.save! | 360 | d.save! |
| 361 | n.publish_draft! | 361 | n.publish_draft! |
| 362 | 362 | ||
| 363 | d2 = n.find_or_create_draft(@user1) | 363 | d2 = find_or_create_draft(n, @user1) |
| 364 | Globalize.with_locale(:en) { d2.update!(:title => "New English translation") } | 364 | Globalize.with_locale(:en) { d2.update!(:title => "New English translation") } |
| 365 | d2.save! | 365 | d2.save! |
| 366 | 366 | ||
diff --git a/test/test_helper.rb b/test/test_helper.rb index c494c68..7ab9c8c 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb | |||
| @@ -67,4 +67,9 @@ class ActiveSupport::TestCase | |||
| 67 | node.reload | 67 | node.reload |
| 68 | node | 68 | node |
| 69 | end | 69 | end |
| 70 | |||
| 71 | def find_or_create_draft(node, user) | ||
| 72 | node.lock_for_editing!(user) | ||
| 73 | node.draft || node.create_new_draft(user) | ||
| 74 | end | ||
| 70 | end | 75 | end |
