pull moderator into own column, rename trust levels
This commit is contained in:
parent
0f5046a9cc
commit
62c60540be
21 changed files with 75 additions and 62 deletions
app
controllers
models
serializers
config/locales
db/migrate
lib
spec
components
controllers
fabricators
models
|
@ -67,7 +67,7 @@ class Admin::UsersController < Admin::AdminController
|
||||||
def revoke_moderation
|
def revoke_moderation
|
||||||
@moderator = User.where(id: params[:user_id]).first
|
@moderator = User.where(id: params[:user_id]).first
|
||||||
guardian.ensure_can_revoke_moderation!(@moderator)
|
guardian.ensure_can_revoke_moderation!(@moderator)
|
||||||
@moderator.change_trust_level(:advanced)
|
@moderator.moderator = false
|
||||||
@moderator.save
|
@moderator.save
|
||||||
render nothing: true
|
render nothing: true
|
||||||
end
|
end
|
||||||
|
@ -75,7 +75,7 @@ class Admin::UsersController < Admin::AdminController
|
||||||
def grant_moderation
|
def grant_moderation
|
||||||
@user = User.where(id: params[:user_id]).first
|
@user = User.where(id: params[:user_id]).first
|
||||||
guardian.ensure_can_grant_moderation!(@user)
|
guardian.ensure_can_grant_moderation!(@user)
|
||||||
@user.change_trust_level(:moderator)
|
@user.moderator = true
|
||||||
@user.save
|
@user.save
|
||||||
render_serialized(@user, AdminUserSerializer)
|
render_serialized(@user, AdminUserSerializer)
|
||||||
end
|
end
|
||||||
|
|
|
@ -71,8 +71,8 @@ class PostActionsController < ApplicationController
|
||||||
requires_parameter(:id)
|
requires_parameter(:id)
|
||||||
finder = Post.where(id: params[:id])
|
finder = Post.where(id: params[:id])
|
||||||
|
|
||||||
# Include deleted posts if the user is a moderator
|
# Include deleted posts if the user is a moderator (to guardian ?)
|
||||||
finder = finder.with_deleted if current_user.try(:has_trust_level?, :moderator)
|
finder = finder.with_deleted if current_user.moderator?
|
||||||
|
|
||||||
@post = finder.first
|
@post = finder.first
|
||||||
guardian.ensure_can_see!(@post)
|
guardian.ensure_can_see!(@post)
|
||||||
|
|
|
@ -153,7 +153,7 @@ class PostsController < ApplicationController
|
||||||
finder = Post.where(id: params[:id] || params[:post_id])
|
finder = Post.where(id: params[:id] || params[:post_id])
|
||||||
|
|
||||||
# Include deleted posts if the user is a moderator
|
# Include deleted posts if the user is a moderator
|
||||||
finder = finder.with_deleted if current_user.try(:has_trust_level?, :moderator)
|
finder = finder.with_deleted if current_user.try(:moderator?)
|
||||||
|
|
||||||
post = finder.first
|
post = finder.first
|
||||||
guardian.ensure_can_see!(post)
|
guardian.ensure_can_see!(post)
|
||||||
|
|
|
@ -237,7 +237,10 @@ class User < ActiveRecord::Base
|
||||||
end
|
end
|
||||||
|
|
||||||
def moderator?
|
def moderator?
|
||||||
has_trust_level?(:moderator)
|
# this saves us from checking both, admins are always moderators
|
||||||
|
#
|
||||||
|
# in future we may split this out
|
||||||
|
admin || moderator
|
||||||
end
|
end
|
||||||
|
|
||||||
def regular?
|
def regular?
|
||||||
|
@ -399,7 +402,7 @@ class User < ActiveRecord::Base
|
||||||
# Takes into account admin, etc.
|
# Takes into account admin, etc.
|
||||||
def has_trust_level?(level)
|
def has_trust_level?(level)
|
||||||
raise "Invalid trust level #{level}" unless TrustLevel.valid_level?(level)
|
raise "Invalid trust level #{level}" unless TrustLevel.valid_level?(level)
|
||||||
admin? || TrustLevel.compare(trust_level, level)
|
admin? || moderator? || TrustLevel.compare(trust_level, level)
|
||||||
end
|
end
|
||||||
|
|
||||||
# a touch faster than automatic
|
# a touch faster than automatic
|
||||||
|
|
|
@ -36,7 +36,7 @@ class AdminDetailedUserSerializer < AdminUserSerializer
|
||||||
end
|
end
|
||||||
|
|
||||||
def moderator
|
def moderator
|
||||||
object.has_trust_level?(:moderator)
|
object.moderator
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -27,7 +27,7 @@ class CurrentUserSerializer < BasicUserSerializer
|
||||||
end
|
end
|
||||||
|
|
||||||
def moderator?
|
def moderator?
|
||||||
object.has_trust_level?(:moderator)
|
object.moderator?
|
||||||
end
|
end
|
||||||
|
|
||||||
def site_flagged_posts_count
|
def site_flagged_posts_count
|
||||||
|
|
|
@ -53,7 +53,7 @@ class PostSerializer < ApplicationSerializer
|
||||||
end
|
end
|
||||||
|
|
||||||
def moderator?
|
def moderator?
|
||||||
object.user.has_trust_level?(:moderator)
|
object.user.moderator?
|
||||||
end
|
end
|
||||||
|
|
||||||
def avatar_template
|
def avatar_template
|
||||||
|
|
|
@ -80,18 +80,16 @@ en:
|
||||||
post_template: "%{replace_paragraph}\n\nUse this space below for a longer description, as well as to establish any rules or discussion!"
|
post_template: "%{replace_paragraph}\n\nUse this space below for a longer description, as well as to establish any rules or discussion!"
|
||||||
|
|
||||||
trust_levels:
|
trust_levels:
|
||||||
new:
|
visitor:
|
||||||
title: "new user"
|
title: "visitor"
|
||||||
basic:
|
basic:
|
||||||
title: "basic user"
|
title: "basic user"
|
||||||
regular:
|
regular:
|
||||||
title: "regular user"
|
title: "regular user"
|
||||||
experienced:
|
leader:
|
||||||
title: "experienced user"
|
title: "leader"
|
||||||
advanced:
|
elder:
|
||||||
title: "advanced user"
|
title: "elder"
|
||||||
moderator:
|
|
||||||
title: "moderator"
|
|
||||||
|
|
||||||
rate_limiter:
|
rate_limiter:
|
||||||
too_many_requests: "You're doing that too often. Please wait %{time_left} before trying again."
|
too_many_requests: "You're doing that too often. Please wait %{time_left} before trying again."
|
||||||
|
|
10
db/migrate/20130320024345_add_moderator_to_user.rb
Normal file
10
db/migrate/20130320024345_add_moderator_to_user.rb
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
class AddModeratorToUser < ActiveRecord::Migration
|
||||||
|
def up
|
||||||
|
add_column :users, :moderator, :boolean, default: false
|
||||||
|
execute "UPDATE users SET trust_level = 1, moderator = 't' where trust_level = 5"
|
||||||
|
end
|
||||||
|
|
||||||
|
def down
|
||||||
|
remove_column :users, :moderator
|
||||||
|
end
|
||||||
|
end
|
|
@ -50,7 +50,7 @@ class Guardian
|
||||||
def can_moderate?(obj)
|
def can_moderate?(obj)
|
||||||
return false if obj.blank?
|
return false if obj.blank?
|
||||||
return false if @user.blank?
|
return false if @user.blank?
|
||||||
@user.has_trust_level?(:moderator)
|
@user.moderator?
|
||||||
end
|
end
|
||||||
alias :can_move_posts? :can_moderate?
|
alias :can_move_posts? :can_moderate?
|
||||||
alias :can_see_flags? :can_moderate?
|
alias :can_see_flags? :can_moderate?
|
||||||
|
@ -99,7 +99,7 @@ class Guardian
|
||||||
return false if target.blank?
|
return false if target.blank?
|
||||||
return false if @user.blank?
|
return false if @user.blank?
|
||||||
return false if target.approved?
|
return false if target.approved?
|
||||||
@user.has_trust_level?(:moderator)
|
@user.moderator?
|
||||||
end
|
end
|
||||||
|
|
||||||
def can_ban?(user)
|
def can_ban?(user)
|
||||||
|
@ -112,7 +112,7 @@ class Guardian
|
||||||
def can_clear_flags?(post)
|
def can_clear_flags?(post)
|
||||||
return false if @user.blank?
|
return false if @user.blank?
|
||||||
return false if post.blank?
|
return false if post.blank?
|
||||||
@user.has_trust_level?(:moderator)
|
@user.moderator?
|
||||||
end
|
end
|
||||||
|
|
||||||
def can_revoke_admin?(admin)
|
def can_revoke_admin?(admin)
|
||||||
|
@ -135,7 +135,7 @@ class Guardian
|
||||||
return false unless @user.try(:admin?)
|
return false unless @user.try(:admin?)
|
||||||
return false if moderator.blank?
|
return false if moderator.blank?
|
||||||
return false if @user.id == moderator.id
|
return false if @user.id == moderator.id
|
||||||
return false unless moderator.trust_level == TrustLevel.levels[:moderator]
|
return false unless moderator.moderator?
|
||||||
true
|
true
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -144,7 +144,7 @@ class Guardian
|
||||||
return false if user.blank?
|
return false if user.blank?
|
||||||
return false if @user.id == user.id
|
return false if @user.id == user.id
|
||||||
return false if user.admin?
|
return false if user.admin?
|
||||||
return false if user.has_trust_level?(:moderator)
|
return false if user.moderator?
|
||||||
true
|
true
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -175,7 +175,7 @@ class Guardian
|
||||||
return false if @user.blank?
|
return false if @user.blank?
|
||||||
return false unless can_see?(object)
|
return false unless can_see?(object)
|
||||||
return false if SiteSetting.must_approve_users?
|
return false if SiteSetting.must_approve_users?
|
||||||
@user.has_trust_level?(:moderator)
|
@user.moderator?
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
@ -218,11 +218,11 @@ class Guardian
|
||||||
|
|
||||||
# Creating Methods
|
# Creating Methods
|
||||||
def can_create_category?(parent)
|
def can_create_category?(parent)
|
||||||
@user.has_trust_level?(:moderator)
|
@user.moderator?
|
||||||
end
|
end
|
||||||
|
|
||||||
def can_create_post_on_topic?(topic)
|
def can_create_post_on_topic?(topic)
|
||||||
return true if @user.has_trust_level?(:moderator)
|
return true if @user.moderator?
|
||||||
return false if topic.closed?
|
return false if topic.closed?
|
||||||
return false if topic.archived?
|
return false if topic.archived?
|
||||||
true
|
true
|
||||||
|
@ -230,11 +230,11 @@ class Guardian
|
||||||
|
|
||||||
# Editing Methods
|
# Editing Methods
|
||||||
def can_edit_category?(category)
|
def can_edit_category?(category)
|
||||||
@user.has_trust_level?(:moderator)
|
@user.moderator?
|
||||||
end
|
end
|
||||||
|
|
||||||
def can_edit_post?(post)
|
def can_edit_post?(post)
|
||||||
return true if @user.has_trust_level?(:moderator)
|
return true if @user.moderator?
|
||||||
return false if post.topic.archived?
|
return false if post.topic.archived?
|
||||||
(post.user == @user)
|
(post.user == @user)
|
||||||
end
|
end
|
||||||
|
@ -245,7 +245,7 @@ class Guardian
|
||||||
end
|
end
|
||||||
|
|
||||||
def can_edit_topic?(topic)
|
def can_edit_topic?(topic)
|
||||||
return true if @user.has_trust_level?(:moderator)
|
return true if @user.moderator?
|
||||||
return true if topic.user == @user
|
return true if topic.user == @user
|
||||||
false
|
false
|
||||||
end
|
end
|
||||||
|
@ -258,22 +258,22 @@ class Guardian
|
||||||
# You can delete your own posts
|
# You can delete your own posts
|
||||||
return !post.user_deleted? if post.user == @user
|
return !post.user_deleted? if post.user == @user
|
||||||
|
|
||||||
@user.has_trust_level?(:moderator)
|
@user.moderator?
|
||||||
end
|
end
|
||||||
|
|
||||||
# Recovery Method
|
# Recovery Method
|
||||||
def can_recover_post?(post)
|
def can_recover_post?(post)
|
||||||
return false if @user.blank?
|
return false if @user.blank?
|
||||||
@user.has_trust_level?(:moderator)
|
@user.moderator?
|
||||||
end
|
end
|
||||||
|
|
||||||
def can_delete_category?(category)
|
def can_delete_category?(category)
|
||||||
return false unless @user.has_trust_level?(:moderator)
|
return false unless @user.moderator?
|
||||||
return category.topic_count == 0
|
return category.topic_count == 0
|
||||||
end
|
end
|
||||||
|
|
||||||
def can_delete_topic?(topic)
|
def can_delete_topic?(topic)
|
||||||
return false unless @user.has_trust_level?(:moderator)
|
return false unless @user.moderator?
|
||||||
return false if Category.exists?(topic_id: topic.id)
|
return false if Category.exists?(topic_id: topic.id)
|
||||||
true
|
true
|
||||||
end
|
end
|
||||||
|
|
|
@ -21,7 +21,7 @@ class Promotion
|
||||||
false
|
false
|
||||||
end
|
end
|
||||||
|
|
||||||
def review_new
|
def review_visitor
|
||||||
return false if @user.topics_entered < SiteSetting.basic_requires_topics_entered
|
return false if @user.topics_entered < SiteSetting.basic_requires_topics_entered
|
||||||
return false if @user.posts_read_count < SiteSetting.basic_requires_read_posts
|
return false if @user.posts_read_count < SiteSetting.basic_requires_read_posts
|
||||||
return false if (@user.time_read / 60) < SiteSetting.basic_requires_time_spent_mins
|
return false if (@user.time_read / 60) < SiteSetting.basic_requires_time_spent_mins
|
||||||
|
|
|
@ -22,7 +22,7 @@ class RateLimiter
|
||||||
|
|
||||||
def can_perform?
|
def can_perform?
|
||||||
return true if RateLimiter.disabled?
|
return true if RateLimiter.disabled?
|
||||||
return true if @user.has_trust_level?(:moderator)
|
return true if @user.moderator?
|
||||||
|
|
||||||
result = $redis.get(@key)
|
result = $redis.get(@key)
|
||||||
return true if result.blank?
|
return true if result.blank?
|
||||||
|
@ -32,7 +32,7 @@ class RateLimiter
|
||||||
|
|
||||||
def performed!
|
def performed!
|
||||||
return if RateLimiter.disabled?
|
return if RateLimiter.disabled?
|
||||||
return if @user.has_trust_level?(:moderator)
|
return if @user.moderator?
|
||||||
|
|
||||||
result = $redis.incr(@key).to_i
|
result = $redis.incr(@key).to_i
|
||||||
$redis.expire(@key, @secs) if result == 1
|
$redis.expire(@key, @secs) if result == 1
|
||||||
|
|
|
@ -6,7 +6,7 @@ class TrustLevel
|
||||||
class << self
|
class << self
|
||||||
def levels
|
def levels
|
||||||
@levels ||= Enum.new(
|
@levels ||= Enum.new(
|
||||||
:new, :basic, :regular, :experienced, :advanced, :moderator, start: 0
|
:visitor, :basic, :regular, :leader, :elder, start: 0
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -21,7 +21,7 @@ class TrustLevel
|
||||||
end
|
end
|
||||||
|
|
||||||
def compare(current_level, level)
|
def compare(current_level, level)
|
||||||
(current_level || levels[:new]) >= levels[level] rescue binding.pry
|
(current_level || levels[:visitor]) >= levels[level] rescue binding.pry
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -126,7 +126,7 @@ describe PostCreator do
|
||||||
end
|
end
|
||||||
|
|
||||||
it "returns a post for moderators" do
|
it "returns a post for moderators" do
|
||||||
user.trust_level = TrustLevel.levels[:moderator]
|
user.moderator = true
|
||||||
new_post_creator.create
|
new_post_creator.create
|
||||||
new_post_creator.errors.should be_blank
|
new_post_creator.errors.should be_blank
|
||||||
end
|
end
|
||||||
|
|
|
@ -3,9 +3,9 @@ require 'promotion'
|
||||||
|
|
||||||
describe Promotion do
|
describe Promotion do
|
||||||
|
|
||||||
context "new user" do
|
context "visitor" do
|
||||||
|
|
||||||
let(:user) { Fabricate(:user, trust_level: TrustLevel.levels[:new])}
|
let(:user) { Fabricate(:user, trust_level: TrustLevel.levels[:visitor])}
|
||||||
let(:promotion) { Promotion.new(user) }
|
let(:promotion) { Promotion.new(user) }
|
||||||
|
|
||||||
it "doesn't raise an error with a nil user" do
|
it "doesn't raise an error with a nil user" do
|
||||||
|
@ -20,7 +20,7 @@ describe Promotion do
|
||||||
end
|
end
|
||||||
|
|
||||||
it "has not changed the user's trust level" do
|
it "has not changed the user's trust level" do
|
||||||
user.trust_level.should == TrustLevel.levels[:new]
|
user.trust_level.should == TrustLevel.levels[:visitor]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -66,12 +66,12 @@ describe RateLimiter do
|
||||||
end
|
end
|
||||||
|
|
||||||
it "returns true for can_perform if the user is a mod" do
|
it "returns true for can_perform if the user is a mod" do
|
||||||
user.trust_level = TrustLevel.levels[:moderator]
|
user.moderator = true
|
||||||
rate_limiter.can_perform?.should be_true
|
rate_limiter.can_perform?.should be_true
|
||||||
end
|
end
|
||||||
|
|
||||||
it "doesn't raise an error when a moderator performs the task" do
|
it "doesn't raise an error when a moderator performs the task" do
|
||||||
user.trust_level = TrustLevel.levels[:moderator]
|
user.moderator = true
|
||||||
lambda { rate_limiter.performed! }.should_not raise_error
|
lambda { rate_limiter.performed! }.should_not raise_error
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -134,7 +134,7 @@ describe Admin::UsersController do
|
||||||
it 'updates the moderator flag' do
|
it 'updates the moderator flag' do
|
||||||
xhr :put, :revoke_moderation, user_id: @moderator.id
|
xhr :put, :revoke_moderation, user_id: @moderator.id
|
||||||
@moderator.reload
|
@moderator.reload
|
||||||
@moderator.has_trust_level?(:moderator).should_not be_true
|
@moderator.moderator.should_not be_true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -157,7 +157,7 @@ describe Admin::UsersController do
|
||||||
it 'updates the moderator flag' do
|
it 'updates the moderator flag' do
|
||||||
xhr :put, :grant_moderation, user_id: @another_user.id
|
xhr :put, :grant_moderation, user_id: @another_user.id
|
||||||
@another_user.reload
|
@another_user.reload
|
||||||
@another_user.has_trust_level?(:moderator).should be_true
|
@another_user.moderator.should be_true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -326,7 +326,7 @@ describe TopicsController do
|
||||||
end
|
end
|
||||||
|
|
||||||
it "reviews the user for a promotion if they're new" do
|
it "reviews the user for a promotion if they're new" do
|
||||||
user.update_column(:trust_level, TrustLevel.levels[:new])
|
user.update_column(:trust_level, TrustLevel.levels[:visitor])
|
||||||
Promotion.any_instance.expects(:review)
|
Promotion.any_instance.expects(:review)
|
||||||
get :show, id: topic.id
|
get :show, id: topic.id
|
||||||
end
|
end
|
||||||
|
|
|
@ -32,7 +32,7 @@ Fabricator(:moderator, from: :user) do
|
||||||
name 'A. Moderator'
|
name 'A. Moderator'
|
||||||
username 'moderator'
|
username 'moderator'
|
||||||
email 'moderator@discourse.org'
|
email 'moderator@discourse.org'
|
||||||
trust_level TrustLevel.levels[:moderator]
|
moderator true
|
||||||
end
|
end
|
||||||
|
|
||||||
Fabricator(:admin, from: :user) do
|
Fabricator(:admin, from: :user) do
|
||||||
|
|
|
@ -161,8 +161,8 @@ describe Invite do
|
||||||
context 'invite trust levels' do
|
context 'invite trust levels' do
|
||||||
|
|
||||||
it "returns the trust level in default_invitee_trust_level" do
|
it "returns the trust level in default_invitee_trust_level" do
|
||||||
SiteSetting.stubs(:default_invitee_trust_level).returns(TrustLevel.levels[:experienced])
|
SiteSetting.stubs(:default_invitee_trust_level).returns(TrustLevel.levels[:leader])
|
||||||
invite.redeem.trust_level.should == TrustLevel.levels[:experienced]
|
invite.redeem.trust_level.should == TrustLevel.levels[:leader]
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -225,11 +225,13 @@ describe User do
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "trust levels" do
|
describe "trust levels" do
|
||||||
let(:user) { Fabricate(:user, trust_level: TrustLevel.levels[:new]) }
|
|
||||||
|
# NOTE be sure to use build to avoid db calls
|
||||||
|
let(:user) { Fabricate.build(:user, trust_level: TrustLevel.levels[:visitor]) }
|
||||||
|
|
||||||
it "sets to the default trust level setting" do
|
it "sets to the default trust level setting" do
|
||||||
SiteSetting.expects(:default_trust_level).returns(TrustLevel.levels[:advanced])
|
SiteSetting.expects(:default_trust_level).returns(TrustLevel.levels[:elder])
|
||||||
User.new.trust_level.should == TrustLevel.levels[:advanced]
|
User.new.trust_level.should == TrustLevel.levels[:elder]
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'has_trust_level?' do
|
describe 'has_trust_level?' do
|
||||||
|
@ -239,39 +241,39 @@ describe User do
|
||||||
end
|
end
|
||||||
|
|
||||||
it "is true for your basic level" do
|
it "is true for your basic level" do
|
||||||
user.has_trust_level?(:new).should be_true
|
user.has_trust_level?(:visitor).should be_true
|
||||||
end
|
end
|
||||||
|
|
||||||
it "is false for a higher level" do
|
it "is false for a higher level" do
|
||||||
user.has_trust_level?(:moderator).should be_false
|
user.has_trust_level?(:regular).should be_false
|
||||||
end
|
end
|
||||||
|
|
||||||
it "is true if you exceed the level" do
|
it "is true if you exceed the level" do
|
||||||
user.trust_level = TrustLevel.levels[:advanced]
|
user.trust_level = TrustLevel.levels[:elder]
|
||||||
user.has_trust_level?(:basic).should be_true
|
user.has_trust_level?(:visitor).should be_true
|
||||||
end
|
end
|
||||||
|
|
||||||
it "is true for an admin even with a low trust level" do
|
it "is true for an admin even with a low trust level" do
|
||||||
user.trust_level = TrustLevel.levels[:new]
|
user.trust_level = TrustLevel.levels[:new]
|
||||||
user.admin = true
|
user.admin = true
|
||||||
user.has_trust_level?(:advanced).should be_true
|
user.has_trust_level?(:elder).should be_true
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'moderator' do
|
describe 'moderator' do
|
||||||
it "isn't a moderator by default" do
|
it "isn't a moderator by default" do
|
||||||
user.has_trust_level?(:moderator).should be_false
|
user.moderator?.should be_false
|
||||||
end
|
end
|
||||||
|
|
||||||
it "is a moderator if the user level is moderator" do
|
it "is a moderator if the user level is moderator" do
|
||||||
user.trust_level = TrustLevel.levels[:moderator]
|
user.moderator = true
|
||||||
user.has_trust_level?(:moderator).should be_true
|
user.has_trust_level?(:elder).should be_true
|
||||||
end
|
end
|
||||||
|
|
||||||
it "is a moderator if the user is an admin" do
|
it "is a moderator if the user is an admin" do
|
||||||
user.admin = true
|
user.admin = true
|
||||||
user.has_trust_level?(:moderator).should be_true
|
user.moderator?.should be_true
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
Reference in a new issue