From e127e8b6f2ff213b78c914ce85f4e5403558b2c0 Mon Sep 17 00:00:00 2001 From: r888888888 Date: Thu, 12 Sep 2013 15:20:20 -0700 Subject: [PATCH] fixes #1977 --- app/models/wiki_page.rb | 8 ++++++++ test/unit/wiki_page_test.rb | 23 ++++++++++++++++++++--- 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/app/models/wiki_page.rb b/app/models/wiki_page.rb index 3efef35ad..bfd90ec04 100644 --- a/app/models/wiki_page.rb +++ b/app/models/wiki_page.rb @@ -9,6 +9,7 @@ class WikiPage < ActiveRecord::Base validates_uniqueness_of :title, :case_sensitive => false validates_presence_of :title validate :validate_locker_is_janitor + validate :validate_not_locked attr_accessible :title, :body, :is_locked has_one :tag, :foreign_key => "name", :primary_key => "title" has_one :artist, :foreign_key => "name", :primary_key => "title", :conditions => {:is_active => true} @@ -101,6 +102,13 @@ class WikiPage < ActiveRecord::Base end end + def validate_not_locked + if is_locked? && !CurrentUser.is_janitor? + errors.add(:is_locked, "and cannot be updated") + return false + end + end + def revert_to(version) self.title = version.title self.body = version.body diff --git a/test/unit/wiki_page_test.rb b/test/unit/wiki_page_test.rb index f50a93caa..0e5a30223 100644 --- a/test/unit/wiki_page_test.rb +++ b/test/unit/wiki_page_test.rb @@ -3,6 +3,7 @@ require 'test_helper' class WikiPageTest < ActiveSupport::TestCase setup do MEMCACHE.flush_all + CurrentUser.ip_addr = "127.0.0.1" end teardown do @@ -11,11 +12,28 @@ class WikiPageTest < ActiveSupport::TestCase end context "A wiki page" do + context "that is locked" do + should "not be editable by a member" do + CurrentUser.user = FactoryGirl.create(:janitor_user) + @wiki_page = FactoryGirl.create(:wiki_page, :is_locked => true) + CurrentUser.user = FactoryGirl.create(:user) + @wiki_page.update_attributes(:body => "hello") + assert_equal(["Is locked and cannot be updated"], @wiki_page.errors.full_messages) + end + + should "be editable by a janitor" do + CurrentUser.user = FactoryGirl.create(:janitor_user) + @wiki_page = FactoryGirl.create(:wiki_page, :is_locked => true) + CurrentUser.user = FactoryGirl.create(:janitor_user) + @wiki_page.update_attributes(:body => "hello") + assert_equal([], @wiki_page.errors.full_messages) + end + end + context "updated by a janitor" do setup do @user = FactoryGirl.create(:janitor_user) CurrentUser.user = @user - CurrentUser.ip_addr = "127.0.0.1" @wiki_page = FactoryGirl.create(:wiki_page) end @@ -30,13 +48,12 @@ class WikiPageTest < ActiveSupport::TestCase setup do @user = FactoryGirl.create(:user) CurrentUser.user = @user - CurrentUser.ip_addr = "127.0.0.1" @wiki_page = FactoryGirl.create(:wiki_page, :title => "HOT POTATO") end should "not allow the is_locked attribute to be updated" do @wiki_page.update_attributes(:is_locked => true) - assert_equal(["Is locked can be modified by janitors only"], @wiki_page.errors.full_messages) + assert_equal(["Is locked can be modified by janitors only", "Is locked and cannot be updated"], @wiki_page.errors.full_messages) @wiki_page.reload assert_equal(false, @wiki_page.is_locked?) end