This commit is contained in:
r888888888
2013-09-12 15:20:20 -07:00
parent 19d886af01
commit e127e8b6f2
2 changed files with 28 additions and 3 deletions

View File

@@ -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

View File

@@ -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