diff --git a/app/logical/current_user.rb b/app/logical/current_user.rb index 964229899..5e0c9d2eb 100644 --- a/app/logical/current_user.rb +++ b/app/logical/current_user.rb @@ -34,6 +34,10 @@ class CurrentUser user.id end + def self.name + user.name + end + def self.method_missing(method, *params, &block) if user.respond_to?(method) user.__send__(method, *params, &block) diff --git a/app/models/post.rb b/app/models/post.rb index 39fb492a6..cbb752f31 100644 --- a/app/models/post.rb +++ b/app/models/post.rb @@ -1,4 +1,6 @@ class Post < ActiveRecord::Base + class ApprovalError < Exception ; end + attr_accessor :old_tag_string, :old_parent_id after_destroy :delete_files after_save :update_history @@ -211,9 +213,11 @@ class Post < ActiveRecord::Base end def approve! + raise ApprovalError.new("You have already approved this post previously") if approver_string == "approver:#{CurrentUser.name}" + self.is_flagged = false self.is_pending = false - self.approver_string = "approver:#{CurrentUser.user.name}" + self.approver_string = "approver:#{CurrentUser.name}" save! end end diff --git a/test/unit/post_test.rb b/test/unit/post_test.rb index f6d4ba334..f3e4e562d 100644 --- a/test/unit/post_test.rb +++ b/test/unit/post_test.rb @@ -192,6 +192,19 @@ class PostTest < ActiveSupport::TestCase assert_equal("bad", removed_post.unapproval.reason) end + context "that was previously approved by person X" do + should "not allow person X to reapprove that post" do + user = Factory.create(:janitor_user, :name => "xxx") + post = Factory.create(:post, :approver_string => "approver:xxx") + post.unapprove!("bad") + CurrentUser.scoped(user, "127.0.0.1") do + assert_raises(Post::ApprovalError) do + post.approve! + end + end + end + end + context "that has been reapproved" do should "no longer be flagged or pending" do post = Factory.create(:post) @@ -213,41 +226,6 @@ class PostTest < ActiveSupport::TestCase end end - context "Versioning:" do - context "Saving a post" do - should "create a new version" do - post = Factory.create(:post) - assert_equal(1, post.versions.size) - - post.rating = "e" - post.save - assert_equal(2, post.versions.size) - assert_equal(CurrentUser.user.id, post.versions.last.updater_id) - assert_equal(CurrentUser.ip_addr, post.versions.last.updater_ip_addr) - - post.revert_to!(PostVersion.first) - assert_equal("tag1 tag2", post.tag_string) - assert_equal("q", post.rating) - end - end - - context "Reverting a post" do - should "identify the person who reverted the post" do - post = Factory.create(:post) - reverter = Factory.create(:user) - post.rating = "e" - post.save - post.rating = "q" - post.save - - CurrentUser.user = Factory.create(:user) - post.revert_to!(PostVersion.first) - post.reload - assert_equal(CurrentUser.user.id, post.versions.last.updater_id) - end - end - end - context "Tagging:" do context "A post" do should "have an array representation of its tags" do