mirror of
https://github.com/discourse/discourse.git
synced 2025-04-16 20:59:06 +08:00
Internal renaming of elder,leader,regular,basic to numbers
Changed internals so trust levels are referred to with TrustLevel[1], TrustLevel[2] etc. This gives us much better flexibility naming trust levels, these names are meant to be controlled by various communities.
This commit is contained in:
parent
c8d3ffb1ee
commit
59d04c0695
@ -127,8 +127,7 @@ class Admin::UsersController < Admin::AdminController
|
|||||||
|
|
||||||
def trust_level
|
def trust_level
|
||||||
guardian.ensure_can_change_trust_level!(@user)
|
guardian.ensure_can_change_trust_level!(@user)
|
||||||
level = TrustLevel.levels[params[:level].to_i]
|
@user.change_trust_level!(params[:level].to_i, log_action_for: current_user)
|
||||||
@user.change_trust_level!(level, log_action_for: current_user)
|
|
||||||
|
|
||||||
render_serialized(@user, AdminUserSerializer)
|
render_serialized(@user, AdminUserSerializer)
|
||||||
rescue Discourse::InvalidAccess => e
|
rescue Discourse::InvalidAccess => e
|
||||||
|
@ -6,23 +6,23 @@ module Jobs
|
|||||||
def execute(args)
|
def execute(args)
|
||||||
# Demotions
|
# Demotions
|
||||||
demoted_user_ids = []
|
demoted_user_ids = []
|
||||||
User.real.where(trust_level: TrustLevel.levels[:leader]).find_each do |u|
|
User.real.where(trust_level: TrustLevel[3]).find_each do |u|
|
||||||
# Don't demote too soon after being promoted
|
# Don't demote too soon after being promoted
|
||||||
next if UserHistory.for(u, :auto_trust_level_change)
|
next if UserHistory.for(u, :auto_trust_level_change)
|
||||||
.where('created_at >= ?', SiteSetting.leader_promotion_min_duration.to_i.days.ago)
|
.where('created_at >= ?', SiteSetting.leader_promotion_min_duration.to_i.days.ago)
|
||||||
.where(previous_value: TrustLevel.levels[:regular].to_s)
|
.where(previous_value: TrustLevel[2].to_s)
|
||||||
.where(new_value: TrustLevel.levels[:leader].to_s)
|
.where(new_value: TrustLevel[3].to_s)
|
||||||
.exists?
|
.exists?
|
||||||
|
|
||||||
if Promotion.leader_lost?(u)
|
if Promotion.tl3_lost?(u)
|
||||||
demoted_user_ids << u.id
|
demoted_user_ids << u.id
|
||||||
Promotion.new(u).change_trust_level!(:regular)
|
Promotion.new(u).change_trust_level!(TrustLevel[2])
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# Promotions
|
# Promotions
|
||||||
User.real.where(trust_level: TrustLevel.levels[:regular]).where.not(id: demoted_user_ids).find_each do |u|
|
User.real.where(trust_level: TrustLevel[2]).where.not(id: demoted_user_ids).find_each do |u|
|
||||||
Promotion.new(u).review_regular
|
Promotion.new(u).review_tl2
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -153,7 +153,7 @@ class Post < ActiveRecord::Base
|
|||||||
return raw if cook_method == Post.cook_methods[:raw_html]
|
return raw if cook_method == Post.cook_methods[:raw_html]
|
||||||
|
|
||||||
# Default is to cook posts
|
# Default is to cook posts
|
||||||
cooked = if !self.user || SiteSetting.tl3_links_no_follow || !self.user.has_trust_level?(:leader)
|
cooked = if !self.user || SiteSetting.tl3_links_no_follow || !self.user.has_trust_level?(TrustLevel[3])
|
||||||
post_analyzer.cook(*args)
|
post_analyzer.cook(*args)
|
||||||
else
|
else
|
||||||
# At trust level 3, we don't apply nofollow to links
|
# At trust level 3, we don't apply nofollow to links
|
||||||
@ -213,7 +213,7 @@ class Post < ActiveRecord::Base
|
|||||||
|
|
||||||
# Prevent new users from posting the same hosts too many times.
|
# Prevent new users from posting the same hosts too many times.
|
||||||
def has_host_spam?
|
def has_host_spam?
|
||||||
return false if acting_user.present? && acting_user.has_trust_level?(:basic)
|
return false if acting_user.present? && acting_user.has_trust_level?(TrustLevel[1])
|
||||||
|
|
||||||
total_hosts_usage.each do |_, count|
|
total_hosts_usage.each do |_, count|
|
||||||
return true if count >= SiteSetting.newuser_spam_host_threshold
|
return true if count >= SiteSetting.newuser_spam_host_threshold
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
# This class performs calculations to determine if a user qualifies for
|
# This class performs calculations to determine if a user qualifies for
|
||||||
# the Leader (3) trust level.
|
# the Leader (3) trust level.
|
||||||
class LeaderRequirements
|
class TrustLevel3Requirements
|
||||||
|
|
||||||
include ActiveModel::Serialization
|
include ActiveModel::Serialization
|
||||||
|
|
||||||
@ -75,7 +75,7 @@ class LeaderRequirements
|
|||||||
end
|
end
|
||||||
|
|
||||||
def min_topics_viewed
|
def min_topics_viewed
|
||||||
(LeaderRequirements.num_topics_in_time_period.to_i * (SiteSetting.tl3_requires_topics_viewed.to_f / 100.0)).round
|
(TrustLevel3Requirements.num_topics_in_time_period.to_i * (SiteSetting.tl3_requires_topics_viewed.to_f / 100.0)).round
|
||||||
end
|
end
|
||||||
|
|
||||||
def posts_read
|
def posts_read
|
||||||
@ -83,7 +83,7 @@ class LeaderRequirements
|
|||||||
end
|
end
|
||||||
|
|
||||||
def min_posts_read
|
def min_posts_read
|
||||||
(LeaderRequirements.num_posts_in_time_period.to_i * (SiteSetting.tl3_requires_posts_read.to_f / 100.0)).round
|
(TrustLevel3Requirements.num_posts_in_time_period.to_i * (SiteSetting.tl3_requires_posts_read.to_f / 100.0)).round
|
||||||
end
|
end
|
||||||
|
|
||||||
def topics_viewed_all_time
|
def topics_viewed_all_time
|
@ -11,6 +11,6 @@ class TrustLevelSetting < EnumSiteSetting
|
|||||||
end
|
end
|
||||||
|
|
||||||
def self.valid_values
|
def self.valid_values
|
||||||
TrustLevel.levels.values.sort
|
TrustLevel.valid_range.to_a
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -298,7 +298,7 @@ class User < ActiveRecord::Base
|
|||||||
end
|
end
|
||||||
|
|
||||||
def new_user?
|
def new_user?
|
||||||
created_at >= 24.hours.ago || trust_level == TrustLevel.levels[:newuser]
|
created_at >= 24.hours.ago || trust_level == TrustLevel[0]
|
||||||
end
|
end
|
||||||
|
|
||||||
def seen_before?
|
def seen_before?
|
||||||
@ -405,7 +405,7 @@ class User < ActiveRecord::Base
|
|||||||
|
|
||||||
# Does not apply to staff, non-new members or your own topics
|
# Does not apply to staff, non-new members or your own topics
|
||||||
return false if staff? ||
|
return false if staff? ||
|
||||||
(trust_level != TrustLevel.levels[:newuser]) ||
|
(trust_level != TrustLevel[0]) ||
|
||||||
Topic.where(id: topic_id, user_id: id).exists?
|
Topic.where(id: topic_id, user_id: id).exists?
|
||||||
|
|
||||||
last_action_in_topic = UserAction.last_action_in_topic(id, topic_id)
|
last_action_in_topic = UserAction.last_action_in_topic(id, topic_id)
|
||||||
@ -438,7 +438,7 @@ class User < ActiveRecord::Base
|
|||||||
# Use this helper to determine if the user has a particular trust level.
|
# Use this helper to determine if the user has a particular trust level.
|
||||||
# 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)
|
||||||
admin? || moderator? || TrustLevel.compare(trust_level, level)
|
admin? || moderator? || TrustLevel.compare(trust_level, level)
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -562,7 +562,7 @@ class User < ActiveRecord::Base
|
|||||||
end
|
end
|
||||||
|
|
||||||
def leader_requirements
|
def leader_requirements
|
||||||
@lq ||= LeaderRequirements.new(self)
|
@lq ||= TrustLevel3Requirements.new(self)
|
||||||
end
|
end
|
||||||
|
|
||||||
def should_be_redirected_to_top
|
def should_be_redirected_to_top
|
||||||
|
@ -9,12 +9,12 @@ class UserProfile < ActiveRecord::Base
|
|||||||
|
|
||||||
def bio_excerpt
|
def bio_excerpt
|
||||||
excerpt = PrettyText.excerpt(bio_cooked, 350)
|
excerpt = PrettyText.excerpt(bio_cooked, 350)
|
||||||
return excerpt if excerpt.blank? || user.has_trust_level?(:basic)
|
return excerpt if excerpt.blank? || user.has_trust_level?(TrustLevel[1])
|
||||||
PrettyText.strip_links(excerpt)
|
PrettyText.strip_links(excerpt)
|
||||||
end
|
end
|
||||||
|
|
||||||
def bio_processed
|
def bio_processed
|
||||||
return bio_cooked if bio_cooked.blank? || user.has_trust_level?(:basic)
|
return bio_cooked if bio_cooked.blank? || user.has_trust_level?(TrustLevel[1])
|
||||||
PrettyText.strip_links(bio_cooked)
|
PrettyText.strip_links(bio_cooked)
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -65,7 +65,7 @@ class UserProfile < ActiveRecord::Base
|
|||||||
|
|
||||||
def cooked
|
def cooked
|
||||||
if self.bio_raw.present?
|
if self.bio_raw.present?
|
||||||
PrettyText.cook(self.bio_raw, omit_nofollow: user.has_trust_level?(:leader) && !SiteSetting.tl3_links_no_follow)
|
PrettyText.cook(self.bio_raw, omit_nofollow: user.has_trust_level?(TrustLevel[3]) && !SiteSetting.tl3_links_no_follow)
|
||||||
else
|
else
|
||||||
nil
|
nil
|
||||||
end
|
end
|
||||||
|
@ -22,7 +22,7 @@ class AdminDetailedUserSerializer < AdminUserSerializer
|
|||||||
has_one :approved_by, serializer: BasicUserSerializer, embed: :objects
|
has_one :approved_by, serializer: BasicUserSerializer, embed: :objects
|
||||||
has_one :api_key, serializer: ApiKeySerializer, embed: :objects
|
has_one :api_key, serializer: ApiKeySerializer, embed: :objects
|
||||||
has_one :suspended_by, serializer: BasicUserSerializer, embed: :objects
|
has_one :suspended_by, serializer: BasicUserSerializer, embed: :objects
|
||||||
has_one :leader_requirements, serializer: LeaderRequirementsSerializer, embed: :objects
|
has_one :leader_requirements, serializer: TrustLevel3RequirementsSerializer, embed: :objects
|
||||||
has_many :groups, embed: :object, serializer: BasicGroupSerializer
|
has_many :groups, embed: :object, serializer: BasicGroupSerializer
|
||||||
|
|
||||||
def can_revoke_admin
|
def can_revoke_admin
|
||||||
@ -70,7 +70,7 @@ class AdminDetailedUserSerializer < AdminUserSerializer
|
|||||||
end
|
end
|
||||||
|
|
||||||
def include_leader_requirements?
|
def include_leader_requirements?
|
||||||
object.has_trust_level?(:regular)
|
object.has_trust_level?(TrustLevel[2])
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
class LeaderRequirementsSerializer < ApplicationSerializer
|
class TrustLevel3RequirementsSerializer < ApplicationSerializer
|
||||||
attributes :time_period,
|
attributes :time_period,
|
||||||
:requirements_met,
|
:requirements_met,
|
||||||
:days_visited, :min_days_visited,
|
:days_visited, :min_days_visited,
|
||||||
@ -13,7 +13,7 @@ class LeaderRequirementsSerializer < ApplicationSerializer
|
|||||||
:num_likes_received, :min_likes_received
|
:num_likes_received, :min_likes_received
|
||||||
|
|
||||||
def time_period
|
def time_period
|
||||||
LeaderRequirements::TIME_PERIOD
|
TrustLevel3Requirements::TIME_PERIOD
|
||||||
end
|
end
|
||||||
|
|
||||||
def requirements_met
|
def requirements_met
|
@ -18,7 +18,7 @@ class SpamRule::AutoBlock
|
|||||||
|
|
||||||
def block?
|
def block?
|
||||||
@user.blocked? or
|
@user.blocked? or
|
||||||
(!@user.has_trust_level?(:basic) and
|
(!@user.has_trust_level?(TrustLevel[1]) and
|
||||||
SiteSetting.num_flags_to_block_new_user > 0 and
|
SiteSetting.num_flags_to_block_new_user > 0 and
|
||||||
SiteSetting.num_users_to_block_new_user > 0 and
|
SiteSetting.num_users_to_block_new_user > 0 and
|
||||||
num_spam_flags_against_user >= SiteSetting.num_flags_to_block_new_user and
|
num_spam_flags_against_user >= SiteSetting.num_flags_to_block_new_user and
|
||||||
|
@ -17,8 +17,8 @@ class StaffActionLogger
|
|||||||
|
|
||||||
def log_trust_level_change(user, old_trust_level, new_trust_level, opts={})
|
def log_trust_level_change(user, old_trust_level, new_trust_level, opts={})
|
||||||
raise Discourse::InvalidParameters.new('user is nil') unless user and user.is_a?(User)
|
raise Discourse::InvalidParameters.new('user is nil') unless user and user.is_a?(User)
|
||||||
raise Discourse::InvalidParameters.new('old trust level is invalid') unless TrustLevel.levels.values.include? old_trust_level
|
raise Discourse::InvalidParameters.new('old trust level is invalid') unless TrustLevel.valid? old_trust_level
|
||||||
raise Discourse::InvalidParameters.new('new trust level is invalid') unless TrustLevel.levels.values.include? new_trust_level
|
raise Discourse::InvalidParameters.new('new trust level is invalid') unless TrustLevel.valid? new_trust_level
|
||||||
UserHistory.create!( params(opts).merge({
|
UserHistory.create!( params(opts).merge({
|
||||||
action: UserHistory.actions[:change_trust_level],
|
action: UserHistory.actions[:change_trust_level],
|
||||||
target_user_id: user.id,
|
target_user_id: user.id,
|
||||||
|
@ -19,7 +19,7 @@ User.seed do |u|
|
|||||||
u.email_direct = false
|
u.email_direct = false
|
||||||
u.approved = true
|
u.approved = true
|
||||||
u.email_private_messages = false
|
u.email_private_messages = false
|
||||||
u.trust_level = TrustLevel.levels[:elder]
|
u.trust_level = TrustLevel[4]
|
||||||
end
|
end
|
||||||
|
|
||||||
Group.user_trust_level_change!(-1 ,TrustLevel.levels[:elder])
|
Group.user_trust_level_change!(-1 ,TrustLevel[4])
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
class RemoveTrustLevels < ActiveRecord::Migration
|
class RemoveTrustLevels < ActiveRecord::Migration
|
||||||
def up
|
def up
|
||||||
drop_table :trust_levels
|
drop_table :trust_levels
|
||||||
change_column_default :users, :trust_level_id, TrustLevel.levels[:new]
|
change_column_default :users, :trust_level_id, TrustLevel[0]
|
||||||
rename_column :users, :trust_level_id, :trust_level
|
rename_column :users, :trust_level_id, :trust_level
|
||||||
|
|
||||||
update "UPDATE users set trust_level = 1"
|
update "UPDATE users set trust_level = 1"
|
||||||
|
@ -44,7 +44,7 @@ class ComposerMessagesFinder
|
|||||||
def check_avatar_notification
|
def check_avatar_notification
|
||||||
|
|
||||||
# A user has to be basic at least to be considered for an avatar notification
|
# A user has to be basic at least to be considered for an avatar notification
|
||||||
return unless @user.has_trust_level?(:basic)
|
return unless @user.has_trust_level?(TrustLevel[1])
|
||||||
|
|
||||||
# We don't notify users who have avatars or who have been notified already.
|
# We don't notify users who have avatars or who have been notified already.
|
||||||
return if @user.uploaded_avatar_id || UserHistory.exists_for_user?(@user, :notified_about_avatar)
|
return if @user.uploaded_avatar_id || UserHistory.exists_for_user?(@user, :notified_about_avatar)
|
||||||
|
@ -61,7 +61,7 @@ module Email
|
|||||||
end
|
end
|
||||||
|
|
||||||
raise UserNotFoundError if @user.blank?
|
raise UserNotFoundError if @user.blank?
|
||||||
raise UserNotSufficientTrustLevelError.new @user unless @allow_strangers || @user.has_trust_level?(TrustLevel.levels[SiteSetting.email_in_min_trust.to_i])
|
raise UserNotSufficientTrustLevelError.new @user unless @allow_strangers || @user.has_trust_level?(TrustLevel[SiteSetting.email_in_min_trust.to_i])
|
||||||
|
|
||||||
create_new_topic
|
create_new_topic
|
||||||
else
|
else
|
||||||
|
@ -103,7 +103,7 @@ class Guardian
|
|||||||
end
|
end
|
||||||
|
|
||||||
def can_moderate?(obj)
|
def can_moderate?(obj)
|
||||||
obj && authenticated? && (is_staff? || (obj.is_a?(Topic) && @user.has_trust_level?(:elder)))
|
obj && authenticated? && (is_staff? || (obj.is_a?(Topic) && @user.has_trust_level?(TrustLevel[4])))
|
||||||
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?
|
||||||
@ -196,7 +196,7 @@ class Guardian
|
|||||||
!SiteSetting.enable_sso &&
|
!SiteSetting.enable_sso &&
|
||||||
SiteSetting.enable_local_logins &&
|
SiteSetting.enable_local_logins &&
|
||||||
(
|
(
|
||||||
(!SiteSetting.must_approve_users? && @user.has_trust_level?(:regular)) ||
|
(!SiteSetting.must_approve_users? && @user.has_trust_level?(TrustLevel[2])) ||
|
||||||
is_staff?
|
is_staff?
|
||||||
) &&
|
) &&
|
||||||
(groups.blank? || is_admin?)
|
(groups.blank? || is_admin?)
|
||||||
@ -232,7 +232,7 @@ class Guardian
|
|||||||
# Can't send message to yourself
|
# Can't send message to yourself
|
||||||
is_not_me?(target) &&
|
is_not_me?(target) &&
|
||||||
# Have to be a basic level at least
|
# Have to be a basic level at least
|
||||||
@user.has_trust_level?(:basic) &&
|
@user.has_trust_level?(TrustLevel[1]) &&
|
||||||
# PMs are enabled
|
# PMs are enabled
|
||||||
(SiteSetting.enable_private_messages ||
|
(SiteSetting.enable_private_messages ||
|
||||||
@user.username == SiteSetting.site_contact_username ||
|
@user.username == SiteSetting.site_contact_username ||
|
||||||
|
@ -10,7 +10,7 @@ module PostGuardian
|
|||||||
|
|
||||||
if authenticated? && post
|
if authenticated? && post
|
||||||
# we allow flagging for trust level 1 and higher
|
# we allow flagging for trust level 1 and higher
|
||||||
(is_flag && @user.has_trust_level?(:basic) && not(already_did_flagging)) ||
|
(is_flag && @user.has_trust_level?(TrustLevel[1]) && not(already_did_flagging)) ||
|
||||||
|
|
||||||
# not a flagging action, and haven't done it already
|
# not a flagging action, and haven't done it already
|
||||||
not(is_flag || already_taken_this_action) &&
|
not(is_flag || already_taken_this_action) &&
|
||||||
@ -25,7 +25,7 @@ module PostGuardian
|
|||||||
not(action_key == :like && is_my_own?(post)) &&
|
not(action_key == :like && is_my_own?(post)) &&
|
||||||
|
|
||||||
# new users can't notify_user because they are not allowed to send private messages
|
# new users can't notify_user because they are not allowed to send private messages
|
||||||
not(action_key == :notify_user && !@user.has_trust_level?(:basic)) &&
|
not(action_key == :notify_user && !@user.has_trust_level?(TrustLevel[1])) &&
|
||||||
|
|
||||||
# no voting more than once on single vote topics
|
# no voting more than once on single vote topics
|
||||||
not(action_key == :vote && opts[:voted_in_topic] && post.topic.has_meta_data_boolean?(:single_vote))
|
not(action_key == :vote && opts[:voted_in_topic] && post.topic.has_meta_data_boolean?(:single_vote))
|
||||||
@ -76,7 +76,7 @@ module PostGuardian
|
|||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
if is_staff? || @user.has_trust_level?(:elder)
|
if is_staff? || @user.has_trust_level?(TrustLevel[4])
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -149,7 +149,7 @@ module PostGuardian
|
|||||||
end
|
end
|
||||||
|
|
||||||
authenticated? &&
|
authenticated? &&
|
||||||
(is_staff? || @user.has_trust_level?(:elder) || @user.id == post.user_id) &&
|
(is_staff? || @user.has_trust_level?(TrustLevel[4]) || @user.id == post.user_id) &&
|
||||||
can_see_post?(post)
|
can_see_post?(post)
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -162,7 +162,7 @@ module PostGuardian
|
|||||||
end
|
end
|
||||||
|
|
||||||
def can_wiki?
|
def can_wiki?
|
||||||
is_staff? || @user.has_trust_level?(:elder)
|
is_staff? || @user.has_trust_level?(TrustLevel[4])
|
||||||
end
|
end
|
||||||
|
|
||||||
def can_see_flagged_posts?
|
def can_see_flagged_posts?
|
||||||
|
@ -22,13 +22,13 @@ module TopicGuardian
|
|||||||
# No users can create posts on deleted topics
|
# No users can create posts on deleted topics
|
||||||
return false if topic.trashed?
|
return false if topic.trashed?
|
||||||
|
|
||||||
is_staff? || (authenticated? && user.has_trust_level?(:elder)) || (not(topic.closed? || topic.archived? || topic.trashed?) && can_create_post?(topic))
|
is_staff? || (authenticated? && user.has_trust_level?(TrustLevel[4])) || (not(topic.closed? || topic.archived? || topic.trashed?) && can_create_post?(topic))
|
||||||
end
|
end
|
||||||
|
|
||||||
# Editing Method
|
# Editing Method
|
||||||
def can_edit_topic?(topic)
|
def can_edit_topic?(topic)
|
||||||
return false if Discourse.static_doc_topic_ids.include?(topic.id) && !is_admin?
|
return false if Discourse.static_doc_topic_ids.include?(topic.id) && !is_admin?
|
||||||
return true if is_staff? || user.has_trust_level?(:leader)
|
return true if is_staff? || user.has_trust_level?(TrustLevel[3])
|
||||||
return false if topic.archived
|
return false if topic.archived
|
||||||
is_my_own?(topic)
|
is_my_own?(topic)
|
||||||
end
|
end
|
||||||
@ -46,7 +46,7 @@ module TopicGuardian
|
|||||||
end
|
end
|
||||||
|
|
||||||
def can_reply_as_new_topic?(topic)
|
def can_reply_as_new_topic?(topic)
|
||||||
authenticated? && topic && not(topic.private_message?) && @user.has_trust_level?(:basic)
|
authenticated? && topic && not(topic.private_message?) && @user.has_trust_level?(TrustLevel[1])
|
||||||
end
|
end
|
||||||
|
|
||||||
def can_see_deleted_topics?
|
def can_see_deleted_topics?
|
||||||
|
@ -15,37 +15,36 @@ class Promotion
|
|||||||
return false if @user.blank?
|
return false if @user.blank?
|
||||||
|
|
||||||
# Promotion beyond basic requires some expensive queries, so don't do that here.
|
# Promotion beyond basic requires some expensive queries, so don't do that here.
|
||||||
return false if @user.trust_level >= TrustLevel.levels[:regular]
|
return false if @user.trust_level >= TrustLevel[2]
|
||||||
|
|
||||||
trust_key = TrustLevel.levels[@user.trust_level]
|
|
||||||
|
|
||||||
review_method = :"review_#{trust_key}"
|
review_method = :"review_tl#{@user.trust_level}"
|
||||||
return send(review_method) if respond_to?(review_method)
|
return send(review_method) if respond_to?(review_method)
|
||||||
|
|
||||||
false
|
false
|
||||||
end
|
end
|
||||||
|
|
||||||
def review_newuser
|
def review_tl0
|
||||||
Promotion.basic_met?(@user) && change_trust_level!(:basic)
|
Promotion.tl1_met?(@user) && change_trust_level!(TrustLevel[1])
|
||||||
end
|
end
|
||||||
|
|
||||||
def review_basic
|
def review_tl1
|
||||||
Promotion.regular_met?(@user) && change_trust_level!(:regular)
|
Promotion.tl2_met?(@user) && change_trust_level!(TrustLevel[2])
|
||||||
end
|
end
|
||||||
|
|
||||||
def review_regular
|
def review_tl2
|
||||||
Promotion.leader_met?(@user) && change_trust_level!(:leader)
|
Promotion.tl3_met?(@user) && change_trust_level!(TrustLevel[3])
|
||||||
end
|
end
|
||||||
|
|
||||||
def change_trust_level!(level, opts = {})
|
def change_trust_level!(level, opts = {})
|
||||||
raise "Invalid trust level #{level}" unless TrustLevel.valid_level?(level)
|
raise "Invalid trust level #{level}" unless TrustLevel.valid?(level)
|
||||||
|
|
||||||
old_level = @user.trust_level
|
old_level = @user.trust_level
|
||||||
new_level = TrustLevel.levels[level]
|
new_level = level
|
||||||
|
|
||||||
if new_level < old_level
|
if new_level < old_level
|
||||||
next_up = TrustLevel.levels[new_level+1]
|
next_up = new_level+1
|
||||||
key = "#{next_up}_met?"
|
key = "tl#{next_up}_met?"
|
||||||
if self.class.respond_to?(key) && self.class.send(key, @user)
|
if self.class.respond_to?(key) && self.class.send(key, @user)
|
||||||
raise Discourse::InvalidAccess.new, I18n.t('trust_levels.change_failed_explanation',
|
raise Discourse::InvalidAccess.new, I18n.t('trust_levels.change_failed_explanation',
|
||||||
user_name: @user.name,
|
user_name: @user.name,
|
||||||
@ -79,7 +78,7 @@ class Promotion
|
|||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
def self.regular_met?(user)
|
def self.tl2_met?(user)
|
||||||
stat = user.user_stat
|
stat = user.user_stat
|
||||||
return false if stat.topics_entered < SiteSetting.tl2_requires_topics_entered
|
return false if stat.topics_entered < SiteSetting.tl2_requires_topics_entered
|
||||||
return false if stat.posts_read_count < SiteSetting.tl2_requires_read_posts
|
return false if stat.posts_read_count < SiteSetting.tl2_requires_read_posts
|
||||||
@ -92,7 +91,7 @@ class Promotion
|
|||||||
true
|
true
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.basic_met?(user)
|
def self.tl1_met?(user)
|
||||||
stat = user.user_stat
|
stat = user.user_stat
|
||||||
return false if stat.topics_entered < SiteSetting.tl1_requires_topics_entered
|
return false if stat.topics_entered < SiteSetting.tl1_requires_topics_entered
|
||||||
return false if stat.posts_read_count < SiteSetting.tl1_requires_read_posts
|
return false if stat.posts_read_count < SiteSetting.tl1_requires_read_posts
|
||||||
@ -100,12 +99,12 @@ class Promotion
|
|||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.leader_met?(user)
|
def self.tl3_met?(user)
|
||||||
LeaderRequirements.new(user).requirements_met?
|
TrustLevel3Requirements.new(user).requirements_met?
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.leader_lost?(user)
|
def self.tl3_lost?(user)
|
||||||
LeaderRequirements.new(user).requirements_lost?
|
TrustLevel3Requirements.new(user).requirements_lost?
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
@ -94,7 +94,7 @@ class TopicQuery
|
|||||||
score = "#{period}_score"
|
score = "#{period}_score"
|
||||||
create_list(:top, unordered: true) do |topics|
|
create_list(:top, unordered: true) do |topics|
|
||||||
topics = topics.joins(:top_topic).where("top_topics.#{score} > 0")
|
topics = topics.joins(:top_topic).where("top_topics.#{score} > 0")
|
||||||
if period == :yearly && @user.try(:trust_level) == TrustLevel.levels[:newuser]
|
if period == :yearly && @user.try(:trust_level) == TrustLevel[0]
|
||||||
topics.order(TopicQuerySQL.order_top_with_pinned_category_for(score))
|
topics.order(TopicQuerySQL.order_top_with_pinned_category_for(score))
|
||||||
else
|
else
|
||||||
topics.order(TopicQuerySQL.order_top_for(score))
|
topics.order(TopicQuerySQL.order_top_for(score))
|
||||||
|
@ -6,11 +6,11 @@ class TrustLevel
|
|||||||
|
|
||||||
class << self
|
class << self
|
||||||
|
|
||||||
def[](val)
|
def[](level)
|
||||||
if val < 0 || val > 4
|
if !valid?(level)
|
||||||
raise InvalidTrustLevel
|
raise InvalidTrustLevel
|
||||||
end
|
end
|
||||||
val
|
level
|
||||||
end
|
end
|
||||||
|
|
||||||
def levels
|
def levels
|
||||||
@ -25,12 +25,16 @@ class TrustLevel
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def valid_level?(level)
|
def valid?(level)
|
||||||
levels.valid?(level)
|
valid_range === level
|
||||||
|
end
|
||||||
|
|
||||||
|
def valid_range
|
||||||
|
(0..4)
|
||||||
end
|
end
|
||||||
|
|
||||||
def compare(current_level, level)
|
def compare(current_level, level)
|
||||||
(current_level || levels[:newuser]) >= levels[level] rescue binding.pry
|
(current_level || 0) >= level
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -81,7 +81,7 @@ class Validators::PostValidator < ActiveModel::Validator
|
|||||||
private
|
private
|
||||||
|
|
||||||
def acting_user_is_trusted?(post)
|
def acting_user_is_trusted?(post)
|
||||||
post.acting_user.present? && post.acting_user.has_trust_level?(:basic)
|
post.acting_user.present? && post.acting_user.has_trust_level?(TrustLevel[1])
|
||||||
end
|
end
|
||||||
|
|
||||||
def add_error_if_count_exceeded(post, key_for_translation, current_count, max_count)
|
def add_error_if_count_exceeded(post, key_for_translation, current_count, max_count)
|
||||||
|
@ -159,7 +159,7 @@ class ImportScripts::Base
|
|||||||
admin.password = SecureRandom.uuid
|
admin.password = SecureRandom.uuid
|
||||||
admin.save!
|
admin.save!
|
||||||
admin.grant_admin!
|
admin.grant_admin!
|
||||||
admin.change_trust_level!(:regular)
|
admin.change_trust_level!(TrustLevel[4])
|
||||||
admin.email_tokens.update_all(confirmed: true)
|
admin.email_tokens.update_all(confirmed: true)
|
||||||
admin
|
admin
|
||||||
end
|
end
|
||||||
@ -280,7 +280,7 @@ class ImportScripts::Base
|
|||||||
opts[:username] = UserNameSuggester.suggest(opts[:username] || opts[:name] || opts[:email])
|
opts[:username] = UserNameSuggester.suggest(opts[:username] || opts[:name] || opts[:email])
|
||||||
end
|
end
|
||||||
opts[:email] = opts[:email].downcase
|
opts[:email] = opts[:email].downcase
|
||||||
opts[:trust_level] = TrustLevel.levels[:basic] unless opts[:trust_level]
|
opts[:trust_level] = TrustLevel[1] unless opts[:trust_level]
|
||||||
opts[:active] = true
|
opts[:active] = true
|
||||||
opts[:import_mode] = true
|
opts[:import_mode] = true
|
||||||
|
|
||||||
|
@ -98,7 +98,7 @@ class ImportScripts::Vanilla < ImportScripts::Base
|
|||||||
}
|
}
|
||||||
|
|
||||||
# if @comments.select { |c| c[:insert_user_id] == user[:user_id] }.map { |c| c[:discussion_id] }.uniq.count > 3
|
# if @comments.select { |c| c[:insert_user_id] == user[:user_id] }.map { |c| c[:discussion_id] }.uniq.count > 3
|
||||||
# u[:trust_level] = TrustLevel.levels[:regular]
|
# u[:trust_level] = TrustLevel[2]
|
||||||
# end
|
# end
|
||||||
|
|
||||||
u
|
u
|
||||||
|
@ -49,7 +49,7 @@ def create_admin(seq)
|
|||||||
admin.password = "password"
|
admin.password = "password"
|
||||||
admin.save
|
admin.save
|
||||||
admin.grant_admin!
|
admin.grant_admin!
|
||||||
admin.change_trust_level!(:regular)
|
admin.change_trust_level!(TrustLevel[4])
|
||||||
admin.email_tokens.update_all(confirmed: true)
|
admin.email_tokens.update_all(confirmed: true)
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
@ -107,7 +107,7 @@ describe ComposerMessagesFinder do
|
|||||||
end
|
end
|
||||||
|
|
||||||
it "doesn't return notifications for new users" do
|
it "doesn't return notifications for new users" do
|
||||||
user.trust_level = TrustLevel.levels[:newuser]
|
user.trust_level = TrustLevel[0]
|
||||||
finder.check_avatar_notification.should be_blank
|
finder.check_avatar_notification.should be_blank
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -310,7 +310,7 @@ greatest show ever created. Everyone should watch it.
|
|||||||
to = "some@email.com"
|
to = "some@email.com"
|
||||||
|
|
||||||
Fabricate(:category, email_in_allow_strangers: false, email_in: to)
|
Fabricate(:category, email_in_allow_strangers: false, email_in: to)
|
||||||
SiteSetting.email_in_min_trust = TrustLevel.levels[:elder].to_s
|
SiteSetting.email_in_min_trust = TrustLevel[4].to_s
|
||||||
|
|
||||||
# no email in for user
|
# no email in for user
|
||||||
expect{
|
expect{
|
||||||
|
@ -64,22 +64,22 @@ describe Guardian do
|
|||||||
|
|
||||||
describe "trust levels" do
|
describe "trust levels" do
|
||||||
it "returns true for a new user liking something" do
|
it "returns true for a new user liking something" do
|
||||||
user.trust_level = TrustLevel.levels[:new]
|
user.trust_level = TrustLevel[0]
|
||||||
Guardian.new(user).post_can_act?(post, :like).should be_true
|
Guardian.new(user).post_can_act?(post, :like).should be_true
|
||||||
end
|
end
|
||||||
|
|
||||||
it "returns false for a new user flagging something as spam" do
|
it "returns false for a new user flagging something as spam" do
|
||||||
user.trust_level = TrustLevel.levels[:new]
|
user.trust_level = TrustLevel[0]
|
||||||
Guardian.new(user).post_can_act?(post, :spam).should be_false
|
Guardian.new(user).post_can_act?(post, :spam).should be_false
|
||||||
end
|
end
|
||||||
|
|
||||||
it "returns false for a new user flagging something as off topic" do
|
it "returns false for a new user flagging something as off topic" do
|
||||||
user.trust_level = TrustLevel.levels[:new]
|
user.trust_level = TrustLevel[0]
|
||||||
Guardian.new(user).post_can_act?(post, :off_topic).should be_false
|
Guardian.new(user).post_can_act?(post, :off_topic).should be_false
|
||||||
end
|
end
|
||||||
|
|
||||||
it "returns false for a new user flagging with notify_user" do
|
it "returns false for a new user flagging with notify_user" do
|
||||||
user.trust_level = TrustLevel.levels[:new]
|
user.trust_level = TrustLevel[0]
|
||||||
Guardian.new(user).post_can_act?(post, :notify_user).should be_false # because new users can't send private messages
|
Guardian.new(user).post_can_act?(post, :notify_user).should be_false # because new users can't send private messages
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -127,7 +127,7 @@ describe Guardian do
|
|||||||
end
|
end
|
||||||
|
|
||||||
it "returns false when you are untrusted" do
|
it "returns false when you are untrusted" do
|
||||||
user.trust_level = TrustLevel.levels[:new]
|
user.trust_level = TrustLevel[0]
|
||||||
Guardian.new(user).can_send_private_message?(another_user).should be_false
|
Guardian.new(user).can_send_private_message?(another_user).should be_false
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -174,7 +174,7 @@ describe Guardian do
|
|||||||
end
|
end
|
||||||
|
|
||||||
it "returns false for an untrusted user" do
|
it "returns false for an untrusted user" do
|
||||||
user.trust_level = TrustLevel.levels[:new]
|
user.trust_level = TrustLevel[0]
|
||||||
Guardian.new(user).can_reply_as_new_topic?(topic).should be_false
|
Guardian.new(user).can_reply_as_new_topic?(topic).should be_false
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -6,16 +6,16 @@ describe Promotion do
|
|||||||
describe "review" do
|
describe "review" do
|
||||||
it "skips regular users" do
|
it "skips regular users" do
|
||||||
# Reviewing users at higher trust levels is expensive, so trigger those reviews in a background job.
|
# Reviewing users at higher trust levels is expensive, so trigger those reviews in a background job.
|
||||||
regular = Fabricate.build(:user, trust_level: TrustLevel.levels[:regular])
|
regular = Fabricate.build(:user, trust_level: TrustLevel[2])
|
||||||
promotion = described_class.new(regular)
|
promotion = described_class.new(regular)
|
||||||
promotion.expects(:review_regular).never
|
promotion.expects(:review_tl2).never
|
||||||
promotion.review
|
promotion.review
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context "newuser" do
|
context "newuser" do
|
||||||
|
|
||||||
let(:user) { Fabricate(:user, trust_level: TrustLevel.levels[:newuser])}
|
let(:user) { Fabricate(:user, trust_level: TrustLevel[0])}
|
||||||
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
|
||||||
@ -30,7 +30,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[:newuser]
|
user.trust_level.should == TrustLevel[0]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -49,7 +49,7 @@ describe Promotion do
|
|||||||
end
|
end
|
||||||
|
|
||||||
it "has upgraded the user to basic" do
|
it "has upgraded the user to basic" do
|
||||||
user.trust_level.should == TrustLevel.levels[:basic]
|
user.trust_level.should == TrustLevel[1]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -57,7 +57,7 @@ describe Promotion do
|
|||||||
|
|
||||||
context "basic" do
|
context "basic" do
|
||||||
|
|
||||||
let(:user) { Fabricate(:user, trust_level: TrustLevel.levels[:basic])}
|
let(:user) { Fabricate(:user, trust_level: TrustLevel[1])}
|
||||||
let(:promotion) { Promotion.new(user) }
|
let(:promotion) { Promotion.new(user) }
|
||||||
|
|
||||||
context 'that has done nothing' do
|
context 'that has done nothing' do
|
||||||
@ -68,7 +68,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[:basic]
|
user.trust_level.should == TrustLevel[1]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -92,57 +92,57 @@ describe Promotion do
|
|||||||
end
|
end
|
||||||
|
|
||||||
it "has upgraded the user to regular" do
|
it "has upgraded the user to regular" do
|
||||||
user.trust_level.should == TrustLevel.levels[:regular]
|
user.trust_level.should == TrustLevel[2]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
context "regular" do
|
context "regular" do
|
||||||
let(:user) { Fabricate(:user, trust_level: TrustLevel.levels[:regular])}
|
let(:user) { Fabricate(:user, trust_level: TrustLevel[2])}
|
||||||
let(:promotion) { Promotion.new(user) }
|
let(:promotion) { Promotion.new(user) }
|
||||||
|
|
||||||
context "doesn't qualify for promotion" do
|
context "doesn't qualify for promotion" do
|
||||||
before do
|
before do
|
||||||
LeaderRequirements.any_instance.expects(:requirements_met?).at_least_once.returns(false)
|
TrustLevel3Requirements.any_instance.expects(:requirements_met?).at_least_once.returns(false)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "review_regular returns false" do
|
it "review_tl2 returns false" do
|
||||||
expect {
|
expect {
|
||||||
promotion.review_regular.should == false
|
promotion.review_tl2.should == false
|
||||||
}.to_not change { user.reload.trust_level }
|
}.to_not change { user.reload.trust_level }
|
||||||
end
|
end
|
||||||
|
|
||||||
it "doesn't promote" do
|
it "doesn't promote" do
|
||||||
expect {
|
expect {
|
||||||
promotion.review_regular
|
promotion.review_tl2
|
||||||
}.to_not change { user.reload.trust_level }
|
}.to_not change { user.reload.trust_level }
|
||||||
end
|
end
|
||||||
|
|
||||||
it "doesn't log a trust level change" do
|
it "doesn't log a trust level change" do
|
||||||
expect {
|
expect {
|
||||||
promotion.review_regular
|
promotion.review_tl2
|
||||||
}.to_not change { UserHistory.count }
|
}.to_not change { UserHistory.count }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context "qualifies for promotion" do
|
context "qualifies for promotion" do
|
||||||
before do
|
before do
|
||||||
LeaderRequirements.any_instance.expects(:requirements_met?).at_least_once.returns(true)
|
TrustLevel3Requirements.any_instance.expects(:requirements_met?).at_least_once.returns(true)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "review_regular returns true" do
|
it "review_tl2 returns true" do
|
||||||
promotion.review_regular.should == true
|
promotion.review_tl2.should == true
|
||||||
end
|
end
|
||||||
|
|
||||||
it "promotes to leader" do
|
it "promotes to tl3" do
|
||||||
promotion.review_regular.should == true
|
promotion.review_tl2.should == true
|
||||||
user.reload.trust_level.should == TrustLevel.levels[:leader]
|
user.reload.trust_level.should == TrustLevel[3]
|
||||||
end
|
end
|
||||||
|
|
||||||
it "logs a trust level change" do
|
it "logs a trust level change" do
|
||||||
expect {
|
expect {
|
||||||
promotion.review_regular
|
promotion.review_tl2
|
||||||
}.to change { UserHistory.where(action: UserHistory.actions[:auto_trust_level_change]).count }.by(1)
|
}.to change { UserHistory.where(action: UserHistory.actions[:auto_trust_level_change]).count }.by(1)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -25,7 +25,7 @@ describe TopicCreator do
|
|||||||
end
|
end
|
||||||
|
|
||||||
context 'regular user' do
|
context 'regular user' do
|
||||||
before { SiteSetting.stubs(:min_trust_to_create_topic).returns(TrustLevel.levels[:newuser]) }
|
before { SiteSetting.stubs(:min_trust_to_create_topic).returns(TrustLevel[0]) }
|
||||||
|
|
||||||
it "should be possible for a regular user to create a topic" do
|
it "should be possible for a regular user to create a topic" do
|
||||||
TopicCreator.create(user, Guardian.new(user), valid_attrs).should be_valid
|
TopicCreator.create(user, Guardian.new(user), valid_attrs).should be_valid
|
||||||
|
@ -194,8 +194,8 @@ describe Admin::UsersController do
|
|||||||
stat.posts_read_count = SiteSetting.tl1_requires_read_posts + 1
|
stat.posts_read_count = SiteSetting.tl1_requires_read_posts + 1
|
||||||
stat.time_read = SiteSetting.tl1_requires_time_spent_mins * 60
|
stat.time_read = SiteSetting.tl1_requires_time_spent_mins * 60
|
||||||
stat.save!
|
stat.save!
|
||||||
@another_user.update_attributes(trust_level: TrustLevel.levels[:basic])
|
@another_user.update_attributes(trust_level: TrustLevel[1])
|
||||||
xhr :put, :trust_level, user_id: @another_user.id, level: TrustLevel.levels[:newuser]
|
xhr :put, :trust_level, user_id: @another_user.id, level: TrustLevel[0]
|
||||||
response.should_not be_success
|
response.should_not be_success
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -622,7 +622,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[:newuser])
|
user.update_column(:trust_level, TrustLevel[0])
|
||||||
Promotion.any_instance.expects(:review)
|
Promotion.any_instance.expects(:review)
|
||||||
get :show, topic_id: topic.id, slug: topic.slug
|
get :show, topic_id: topic.id, slug: topic.slug
|
||||||
end
|
end
|
||||||
|
@ -6,7 +6,7 @@ Fabricator(:user) do
|
|||||||
username { sequence(:username) { |i| "bruce#{i}" } }
|
username { sequence(:username) { |i| "bruce#{i}" } }
|
||||||
email { sequence(:email) { |i| "bruce#{i}@wayne.com" } }
|
email { sequence(:email) { |i| "bruce#{i}@wayne.com" } }
|
||||||
password 'myawesomepassword'
|
password 'myawesomepassword'
|
||||||
trust_level TrustLevel.levels[:basic]
|
trust_level TrustLevel[1]
|
||||||
ip_address { sequence(:ip_address) { |i| "99.232.23.#{i%254}"} }
|
ip_address { sequence(:ip_address) { |i| "99.232.23.#{i%254}"} }
|
||||||
active true
|
active true
|
||||||
end
|
end
|
||||||
@ -50,7 +50,7 @@ Fabricator(:newuser, from: :user) do
|
|||||||
name 'Newbie Newperson'
|
name 'Newbie Newperson'
|
||||||
username 'newbie'
|
username 'newbie'
|
||||||
email 'newbie@new.com'
|
email 'newbie@new.com'
|
||||||
trust_level TrustLevel.levels[:newuser]
|
trust_level TrustLevel[0]
|
||||||
end
|
end
|
||||||
|
|
||||||
Fabricator(:active_user, from: :user) do
|
Fabricator(:active_user, from: :user) do
|
||||||
@ -58,7 +58,7 @@ Fabricator(:active_user, from: :user) do
|
|||||||
username { sequence(:username) { |i| "luke#{i}" } }
|
username { sequence(:username) { |i| "luke#{i}" } }
|
||||||
email { sequence(:email) { |i| "luke#{i}@skywalker.com" } }
|
email { sequence(:email) { |i| "luke#{i}@skywalker.com" } }
|
||||||
password 'myawesomepassword'
|
password 'myawesomepassword'
|
||||||
trust_level TrustLevel.levels[:basic]
|
trust_level TrustLevel[1]
|
||||||
|
|
||||||
after_create do |user|
|
after_create do |user|
|
||||||
user.user_profile.bio_raw = "Don't ask me about my dad!"
|
user.user_profile.bio_raw = "Don't ask me about my dad!"
|
||||||
@ -70,12 +70,12 @@ Fabricator(:leader, from: :user) do
|
|||||||
name 'Veteran McVeteranish'
|
name 'Veteran McVeteranish'
|
||||||
username { sequence(:username) { |i| "leader#{i}" } }
|
username { sequence(:username) { |i| "leader#{i}" } }
|
||||||
email { sequence(:email) { |i| "leader#{i}@leaderfun.com" } }
|
email { sequence(:email) { |i| "leader#{i}@leaderfun.com" } }
|
||||||
trust_level TrustLevel.levels[:leader]
|
trust_level TrustLevel[3]
|
||||||
end
|
end
|
||||||
|
|
||||||
Fabricator(:elder, from: :user) do
|
Fabricator(:elder, from: :user) do
|
||||||
name 'Elder McElderson'
|
name 'Elder McElderson'
|
||||||
username { sequence(:username) { |i| "elder#{i}" } }
|
username { sequence(:username) { |i| "elder#{i}" } }
|
||||||
email { sequence(:email) { |i| "elder#{i}@elderfun.com" } }
|
email { sequence(:email) { |i| "elder#{i}@elderfun.com" } }
|
||||||
trust_level TrustLevel.levels[:elder]
|
trust_level TrustLevel[4]
|
||||||
end
|
end
|
||||||
|
@ -41,7 +41,7 @@ describe SpamRulesEnforcer do
|
|||||||
end
|
end
|
||||||
|
|
||||||
context 'first user is not new' do
|
context 'first user is not new' do
|
||||||
Given!(:old_user) { Fabricate(:user, ip_address: ip_address, created_at: 2.days.ago, trust_level: TrustLevel.levels[:basic]) }
|
Given!(:old_user) { Fabricate(:user, ip_address: ip_address, created_at: 2.days.ago, trust_level: TrustLevel[1]) }
|
||||||
|
|
||||||
context 'first user starts a topic' do
|
context 'first user starts a topic' do
|
||||||
Given!(:first_post) { create_post(user: old_user) }
|
Given!(:first_post) { create_post(user: old_user) }
|
||||||
|
@ -17,7 +17,7 @@ describe SpamRulesEnforcer do
|
|||||||
Given(:user2) { Fabricate(:user) }
|
Given(:user2) { Fabricate(:user) }
|
||||||
|
|
||||||
context 'spammer is a new user' do
|
context 'spammer is a new user' do
|
||||||
Given(:spammer) { Fabricate(:user, trust_level: TrustLevel.levels[:newuser]) }
|
Given(:spammer) { Fabricate(:user, trust_level: TrustLevel[0]) }
|
||||||
|
|
||||||
context 'spammer post is not flagged enough times' do
|
context 'spammer post is not flagged enough times' do
|
||||||
Given!(:spam_post) { create_post(user: spammer) }
|
Given!(:spam_post) { create_post(user: spammer) }
|
||||||
@ -64,7 +64,7 @@ describe SpamRulesEnforcer do
|
|||||||
end
|
end
|
||||||
|
|
||||||
context "spammer becomes trust level 1" do
|
context "spammer becomes trust level 1" do
|
||||||
When { spammer.change_trust_level!(:basic); spammer.reload }
|
When { spammer.change_trust_level!(TrustLevel[1]); spammer.reload }
|
||||||
Then { expect(spammer.reload).to be_blocked }
|
Then { expect(spammer.reload).to be_blocked }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -79,7 +79,7 @@ describe SpamRulesEnforcer do
|
|||||||
end
|
end
|
||||||
|
|
||||||
context "spammer has trust level basic" do
|
context "spammer has trust level basic" do
|
||||||
Given(:spammer) { Fabricate(:user, trust_level: TrustLevel.levels[:basic]) }
|
Given(:spammer) { Fabricate(:user, trust_level: TrustLevel[1]) }
|
||||||
|
|
||||||
context 'one spam post is flagged enough times by enough users' do
|
context 'one spam post is flagged enough times by enough users' do
|
||||||
Given!(:spam_post) { Fabricate(:post, user: spammer) }
|
Given!(:spam_post) { Fabricate(:post, user: spammer) }
|
||||||
@ -93,7 +93,7 @@ describe SpamRulesEnforcer do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
[[:user, trust_level: TrustLevel.levels[:regular]], [:admin], [:moderator]].each do |spammer_args|
|
[[:user, trust_level: TrustLevel[2]], [:admin], [:moderator]].each do |spammer_args|
|
||||||
context "spammer is trusted #{spammer_args[0]}" do
|
context "spammer is trusted #{spammer_args[0]}" do
|
||||||
Given!(:spammer) { Fabricate(*spammer_args) }
|
Given!(:spammer) { Fabricate(*spammer_args) }
|
||||||
Given!(:spam_post) { Fabricate(:post, user: spammer) }
|
Given!(:spam_post) { Fabricate(:post, user: spammer) }
|
||||||
|
@ -5,25 +5,25 @@ describe Jobs::LeaderPromotions do
|
|||||||
subject(:run_job) { described_class.new.execute({}) }
|
subject(:run_job) { described_class.new.execute({}) }
|
||||||
|
|
||||||
it "promotes tl2 user who qualifies for tl3" do
|
it "promotes tl2 user who qualifies for tl3" do
|
||||||
tl2_user = Fabricate(:user, trust_level: TrustLevel.levels[:regular])
|
_tl2_user = Fabricate(:user, trust_level: TrustLevel[2])
|
||||||
LeaderRequirements.any_instance.stubs(:requirements_met?).returns(true)
|
TrustLevel3Requirements.any_instance.stubs(:requirements_met?).returns(true)
|
||||||
Promotion.any_instance.expects(:change_trust_level!).with(:leader, anything).once
|
Promotion.any_instance.expects(:change_trust_level!).with(TrustLevel[3], anything).once
|
||||||
run_job
|
run_job
|
||||||
end
|
end
|
||||||
|
|
||||||
it "doesn't promote tl1 and tl0 users who have met tl3 requirements" do
|
it "doesn't promote tl1 and tl0 users who have met tl3 requirements" do
|
||||||
tl1_user = Fabricate(:user, trust_level: TrustLevel.levels[:basic])
|
_tl1_user = Fabricate(:user, trust_level: TrustLevel[1])
|
||||||
tl0_user = Fabricate(:user, trust_level: TrustLevel.levels[:newuser])
|
_tl0_user = Fabricate(:user, trust_level: TrustLevel[0])
|
||||||
LeaderRequirements.any_instance.expects(:requirements_met?).never
|
TrustLevel3Requirements.any_instance.expects(:requirements_met?).never
|
||||||
Promotion.any_instance.expects(:change_trust_level!).never
|
Promotion.any_instance.expects(:change_trust_level!).never
|
||||||
run_job
|
run_job
|
||||||
end
|
end
|
||||||
|
|
||||||
context "tl3 user who doesn't qualify for tl3 anymore" do
|
context "tl3 user who doesn't qualify for tl3 anymore" do
|
||||||
def create_leader_user
|
def create_leader_user
|
||||||
user = Fabricate(:user, trust_level: TrustLevel.levels[:regular])
|
user = Fabricate(:user, trust_level: TrustLevel[2])
|
||||||
LeaderRequirements.any_instance.stubs(:requirements_met?).returns(true)
|
TrustLevel3Requirements.any_instance.stubs(:requirements_met?).returns(true)
|
||||||
Promotion.new(user).review_regular.should == true
|
Promotion.new(user).review_tl2.should == true
|
||||||
user
|
user
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -37,10 +37,10 @@ describe Jobs::LeaderPromotions do
|
|||||||
user = create_leader_user
|
user = create_leader_user
|
||||||
end
|
end
|
||||||
|
|
||||||
LeaderRequirements.any_instance.stubs(:requirements_met?).returns(false)
|
TrustLevel3Requirements.any_instance.stubs(:requirements_met?).returns(false)
|
||||||
LeaderRequirements.any_instance.stubs(:requirements_lost?).returns(true)
|
TrustLevel3Requirements.any_instance.stubs(:requirements_lost?).returns(true)
|
||||||
run_job
|
run_job
|
||||||
user.reload.trust_level.should == TrustLevel.levels[:regular]
|
user.reload.trust_level.should == TrustLevel[2]
|
||||||
end
|
end
|
||||||
|
|
||||||
it "doesn't demote if user was promoted recently" do
|
it "doesn't demote if user was promoted recently" do
|
||||||
@ -49,10 +49,10 @@ describe Jobs::LeaderPromotions do
|
|||||||
user = create_leader_user
|
user = create_leader_user
|
||||||
end
|
end
|
||||||
|
|
||||||
LeaderRequirements.any_instance.stubs(:requirements_met?).returns(false)
|
TrustLevel3Requirements.any_instance.stubs(:requirements_met?).returns(false)
|
||||||
LeaderRequirements.any_instance.stubs(:requirements_lost?).returns(true)
|
TrustLevel3Requirements.any_instance.stubs(:requirements_lost?).returns(true)
|
||||||
run_job
|
run_job
|
||||||
user.reload.trust_level.should == TrustLevel.levels[:leader]
|
user.reload.trust_level.should == TrustLevel[3]
|
||||||
end
|
end
|
||||||
|
|
||||||
it "doesn't demote if user hasn't lost requirements (low water mark)" do
|
it "doesn't demote if user hasn't lost requirements (low water mark)" do
|
||||||
@ -61,10 +61,10 @@ describe Jobs::LeaderPromotions do
|
|||||||
user = create_leader_user
|
user = create_leader_user
|
||||||
end
|
end
|
||||||
|
|
||||||
LeaderRequirements.any_instance.stubs(:requirements_met?).returns(false)
|
TrustLevel3Requirements.any_instance.stubs(:requirements_met?).returns(false)
|
||||||
LeaderRequirements.any_instance.stubs(:requirements_lost?).returns(false)
|
TrustLevel3Requirements.any_instance.stubs(:requirements_lost?).returns(false)
|
||||||
run_job
|
run_job
|
||||||
user.reload.trust_level.should == TrustLevel.levels[:leader]
|
user.reload.trust_level.should == TrustLevel[3]
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
@ -95,7 +95,7 @@ describe Jobs::PollMailbox do
|
|||||||
SiteSetting.reply_by_email_address = "reply+%{reply_key}@appmail.adventuretime.ooo"
|
SiteSetting.reply_by_email_address = "reply+%{reply_key}@appmail.adventuretime.ooo"
|
||||||
category.email_in = 'incoming+amazing@appmail.adventuretime.ooo'
|
category.email_in = 'incoming+amazing@appmail.adventuretime.ooo'
|
||||||
category.save
|
category.save
|
||||||
user.change_trust_level! :regular
|
user.change_trust_level! 2
|
||||||
user.username = 'Jake'
|
user.username = 'Jake'
|
||||||
user.email = 'jake@adventuretime.ooo'
|
user.email = 'jake@adventuretime.ooo'
|
||||||
user.save
|
user.save
|
||||||
@ -127,7 +127,7 @@ describe Jobs::PollMailbox do
|
|||||||
|
|
||||||
describe "with insufficient trust" do
|
describe "with insufficient trust" do
|
||||||
before do
|
before do
|
||||||
user.change_trust_level! :newuser
|
user.change_trust_level! 0
|
||||||
end
|
end
|
||||||
|
|
||||||
it "raises a UserNotSufficientTrustLevelError" do
|
it "raises a UserNotSufficientTrustLevelError" do
|
||||||
|
@ -13,12 +13,12 @@ describe CategoryFeaturedTopic do
|
|||||||
it "should feature topics for a secure category" do
|
it "should feature topics for a secure category" do
|
||||||
|
|
||||||
# so much dancing, I am thinking fixures make sense here.
|
# so much dancing, I am thinking fixures make sense here.
|
||||||
user.change_trust_level!(:basic)
|
user.change_trust_level!(TrustLevel[1])
|
||||||
|
|
||||||
category.set_permissions(:trust_level_1 => :full)
|
category.set_permissions(:trust_level_1 => :full)
|
||||||
category.save
|
category.save
|
||||||
|
|
||||||
uncategorized_post = PostCreator.create(user, raw: "this is my new post 123 post", title: "hello world")
|
_uncategorized_post = PostCreator.create(user, raw: "this is my new post 123 post", title: "hello world")
|
||||||
|
|
||||||
CategoryFeaturedTopic.feature_topics_for(category)
|
CategoryFeaturedTopic.feature_topics_for(category)
|
||||||
CategoryFeaturedTopic.count.should == 1
|
CategoryFeaturedTopic.count.should == 1
|
||||||
|
@ -81,17 +81,17 @@ describe Group do
|
|||||||
user = Fabricate(:user)
|
user = Fabricate(:user)
|
||||||
Group[:trust_level_0].user_ids.should include user.id
|
Group[:trust_level_0].user_ids.should include user.id
|
||||||
|
|
||||||
user.change_trust_level!(:basic)
|
user.change_trust_level!(TrustLevel[1])
|
||||||
|
|
||||||
Group[:trust_level_1].user_ids.should include user.id
|
Group[:trust_level_1].user_ids.should include user.id
|
||||||
|
|
||||||
user.change_trust_level!(:regular)
|
user.change_trust_level!(TrustLevel[2])
|
||||||
|
|
||||||
Group[:trust_level_1].user_ids.should include user.id
|
Group[:trust_level_1].user_ids.should include user.id
|
||||||
Group[:trust_level_2].user_ids.should include user.id
|
Group[:trust_level_2].user_ids.should include user.id
|
||||||
|
|
||||||
user2 = Fabricate(:coding_horror)
|
user2 = Fabricate(:coding_horror)
|
||||||
user2.change_trust_level!(:regular)
|
user2.change_trust_level!(TrustLevel[3])
|
||||||
|
|
||||||
Group[:trust_level_2].user_ids.sort.should == [-1, user.id, user2.id].sort
|
Group[:trust_level_2].user_ids.sort.should == [-1, user.id, user2.id].sort
|
||||||
end
|
end
|
||||||
@ -99,7 +99,7 @@ describe Group do
|
|||||||
it "Correctly updates all automatic groups upon request" do
|
it "Correctly updates all automatic groups upon request" do
|
||||||
Fabricate(:admin)
|
Fabricate(:admin)
|
||||||
user = Fabricate(:user)
|
user = Fabricate(:user)
|
||||||
user.change_trust_level!(:regular)
|
user.change_trust_level!(TrustLevel[2])
|
||||||
|
|
||||||
Group.exec_sql("update groups set user_count=0 where id = #{Group::AUTO_GROUPS[:trust_level_2]}")
|
Group.exec_sql("update groups set user_count=0 where id = #{Group::AUTO_GROUPS[:trust_level_2]}")
|
||||||
|
|
||||||
|
@ -158,8 +158,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[:leader])
|
SiteSetting.stubs(:default_invitee_trust_level).returns(TrustLevel[3])
|
||||||
invite.redeem.trust_level.should == TrustLevel.levels[:leader]
|
invite.redeem.trust_level.should == TrustLevel[3]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -104,7 +104,7 @@ describe Post do
|
|||||||
end
|
end
|
||||||
|
|
||||||
describe "maximum images" do
|
describe "maximum images" do
|
||||||
let(:newuser) { Fabricate(:user, trust_level: TrustLevel.levels[:newuser]) }
|
let(:newuser) { Fabricate(:user, trust_level: TrustLevel[0]) }
|
||||||
let(:post_no_images) { Fabricate.build(:post, post_args.merge(user: newuser)) }
|
let(:post_no_images) { Fabricate.build(:post, post_args.merge(user: newuser)) }
|
||||||
let(:post_one_image) { post_with_body("", newuser) }
|
let(:post_one_image) { post_with_body("", newuser) }
|
||||||
let(:post_two_images) { post_with_body("<img src='http://discourse.org/logo.png'> <img src='http://bbc.co.uk/sherlock.jpg'>", newuser) }
|
let(:post_two_images) { post_with_body("<img src='http://discourse.org/logo.png'> <img src='http://bbc.co.uk/sherlock.jpg'>", newuser) }
|
||||||
@ -158,7 +158,7 @@ describe Post do
|
|||||||
end
|
end
|
||||||
|
|
||||||
it "doesn't allow a new user to edit their post to insert an image" do
|
it "doesn't allow a new user to edit their post to insert an image" do
|
||||||
post_no_images.user.trust_level = TrustLevel.levels[:new]
|
post_no_images.user.trust_level = TrustLevel[0]
|
||||||
post_no_images.save
|
post_no_images.save
|
||||||
-> {
|
-> {
|
||||||
post_no_images.revise(post_no_images.user, post_two_images.raw)
|
post_no_images.revise(post_no_images.user, post_two_images.raw)
|
||||||
@ -168,7 +168,7 @@ describe Post do
|
|||||||
end
|
end
|
||||||
|
|
||||||
it "allows more images from a not-new account" do
|
it "allows more images from a not-new account" do
|
||||||
post_two_images.user.trust_level = TrustLevel.levels[:basic]
|
post_two_images.user.trust_level = TrustLevel[1]
|
||||||
post_two_images.should be_valid
|
post_two_images.should be_valid
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -177,7 +177,7 @@ describe Post do
|
|||||||
end
|
end
|
||||||
|
|
||||||
describe "maximum attachments" do
|
describe "maximum attachments" do
|
||||||
let(:newuser) { Fabricate(:user, trust_level: TrustLevel.levels[:newuser]) }
|
let(:newuser) { Fabricate(:user, trust_level: TrustLevel[0]) }
|
||||||
let(:post_no_attachments) { Fabricate.build(:post, post_args.merge(user: newuser)) }
|
let(:post_no_attachments) { Fabricate.build(:post, post_args.merge(user: newuser)) }
|
||||||
let(:post_one_attachment) { post_with_body('<a class="attachment" href="/uploads/default/1/2082985.txt">file.txt</a>', newuser) }
|
let(:post_one_attachment) { post_with_body('<a class="attachment" href="/uploads/default/1/2082985.txt">file.txt</a>', newuser) }
|
||||||
let(:post_two_attachments) { post_with_body('<a class="attachment" href="/uploads/default/2/20947092.log">errors.log</a> <a class="attachment" href="/uploads/default/3/283572385.3ds">model.3ds</a>', newuser) }
|
let(:post_two_attachments) { post_with_body('<a class="attachment" href="/uploads/default/2/20947092.log">errors.log</a> <a class="attachment" href="/uploads/default/3/283572385.3ds">model.3ds</a>', newuser) }
|
||||||
@ -206,7 +206,7 @@ describe Post do
|
|||||||
end
|
end
|
||||||
|
|
||||||
it "doesn't allow a new user to edit their post to insert an attachment" do
|
it "doesn't allow a new user to edit their post to insert an attachment" do
|
||||||
post_no_attachments.user.trust_level = TrustLevel.levels[:new]
|
post_no_attachments.user.trust_level = TrustLevel[0]
|
||||||
post_no_attachments.save
|
post_no_attachments.save
|
||||||
-> {
|
-> {
|
||||||
post_no_attachments.revise(post_no_attachments.user, post_two_attachments.raw)
|
post_no_attachments.revise(post_no_attachments.user, post_two_attachments.raw)
|
||||||
@ -216,7 +216,7 @@ describe Post do
|
|||||||
end
|
end
|
||||||
|
|
||||||
it "allows more attachments from a not-new account" do
|
it "allows more attachments from a not-new account" do
|
||||||
post_two_attachments.user.trust_level = TrustLevel.levels[:basic]
|
post_two_attachments.user.trust_level = TrustLevel[1]
|
||||||
post_two_attachments.should be_valid
|
post_two_attachments.should be_valid
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -225,7 +225,7 @@ describe Post do
|
|||||||
end
|
end
|
||||||
|
|
||||||
context "links" do
|
context "links" do
|
||||||
let(:newuser) { Fabricate(:user, trust_level: TrustLevel.levels[:newuser]) }
|
let(:newuser) { Fabricate(:user, trust_level: TrustLevel[0]) }
|
||||||
let(:no_links) { post_with_body("hello world my name is evil trout", newuser) }
|
let(:no_links) { post_with_body("hello world my name is evil trout", newuser) }
|
||||||
let(:one_link) { post_with_body("[jlawr](http://www.imdb.com/name/nm2225369)", newuser) }
|
let(:one_link) { post_with_body("[jlawr](http://www.imdb.com/name/nm2225369)", newuser) }
|
||||||
let(:two_links) { post_with_body("<a href='http://disneyland.disney.go.com/'>disney</a> <a href='http://reddit.com'>reddit</a>", newuser)}
|
let(:two_links) { post_with_body("<a href='http://disneyland.disney.go.com/'>disney</a> <a href='http://reddit.com'>reddit</a>", newuser)}
|
||||||
@ -292,7 +292,7 @@ describe Post do
|
|||||||
|
|
||||||
|
|
||||||
describe "maximum links" do
|
describe "maximum links" do
|
||||||
let(:newuser) { Fabricate(:user, trust_level: TrustLevel.levels[:newuser]) }
|
let(:newuser) { Fabricate(:user, trust_level: TrustLevel[0]) }
|
||||||
let(:post_one_link) { post_with_body("[sherlock](http://www.bbc.co.uk/programmes/b018ttws)", newuser) }
|
let(:post_one_link) { post_with_body("[sherlock](http://www.bbc.co.uk/programmes/b018ttws)", newuser) }
|
||||||
let(:post_two_links) { post_with_body("<a href='http://discourse.org'>discourse</a> <a href='http://twitter.com'>twitter</a>", newuser) }
|
let(:post_two_links) { post_with_body("<a href='http://discourse.org'>discourse</a> <a href='http://twitter.com'>twitter</a>", newuser) }
|
||||||
let(:post_with_mentions) { post_with_body("hello @#{newuser.username} how are you doing?", newuser) }
|
let(:post_with_mentions) { post_with_body("hello @#{newuser.username} how are you doing?", newuser) }
|
||||||
@ -330,7 +330,7 @@ describe Post do
|
|||||||
end
|
end
|
||||||
|
|
||||||
it "allows multiple images for basic accounts" do
|
it "allows multiple images for basic accounts" do
|
||||||
post_two_links.user.trust_level = TrustLevel.levels[:basic]
|
post_two_links.user.trust_level = TrustLevel[1]
|
||||||
post_two_links.should be_valid
|
post_two_links.should be_valid
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -382,7 +382,7 @@ describe Post do
|
|||||||
|
|
||||||
context "max mentions" do
|
context "max mentions" do
|
||||||
|
|
||||||
let(:newuser) { Fabricate(:user, trust_level: TrustLevel.levels[:newuser]) }
|
let(:newuser) { Fabricate(:user, trust_level: TrustLevel[0]) }
|
||||||
let(:post_with_one_mention) { post_with_body("@Jake is the person I'm mentioning", newuser) }
|
let(:post_with_one_mention) { post_with_body("@Jake is the person I'm mentioning", newuser) }
|
||||||
let(:post_with_two_mentions) { post_with_body("@Jake @Finn are the people I'm mentioning", newuser) }
|
let(:post_with_two_mentions) { post_with_body("@Jake @Finn are the people I'm mentioning", newuser) }
|
||||||
|
|
||||||
@ -408,12 +408,12 @@ describe Post do
|
|||||||
end
|
end
|
||||||
|
|
||||||
it "allows vmax_mentions_per_post mentions" do
|
it "allows vmax_mentions_per_post mentions" do
|
||||||
post_with_one_mention.user.trust_level = TrustLevel.levels[:basic]
|
post_with_one_mention.user.trust_level = TrustLevel[1]
|
||||||
post_with_one_mention.should be_valid
|
post_with_one_mention.should be_valid
|
||||||
end
|
end
|
||||||
|
|
||||||
it "doesn't allow to have more than max_mentions_per_post mentions" do
|
it "doesn't allow to have more than max_mentions_per_post mentions" do
|
||||||
post_with_two_mentions.user.trust_level = TrustLevel.levels[:basic]
|
post_with_two_mentions.user.trust_level = TrustLevel[1]
|
||||||
post_with_two_mentions.should_not be_valid
|
post_with_two_mentions.should_not be_valid
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -131,16 +131,16 @@ describe Report do
|
|||||||
|
|
||||||
context "with users at different trust levels" do
|
context "with users at different trust levels" do
|
||||||
before do
|
before do
|
||||||
3.times { Fabricate(:user, trust_level: TrustLevel.levels[:newuser]) }
|
3.times { Fabricate(:user, trust_level: TrustLevel[0]) }
|
||||||
2.times { Fabricate(:user, trust_level: TrustLevel.levels[:regular]) }
|
2.times { Fabricate(:user, trust_level: TrustLevel[2]) }
|
||||||
Fabricate(:user, trust_level: TrustLevel.levels[:elder])
|
Fabricate(:user, trust_level: TrustLevel[4])
|
||||||
end
|
end
|
||||||
|
|
||||||
it "returns a report with data" do
|
it "returns a report with data" do
|
||||||
report.data.should be_present
|
report.data.should be_present
|
||||||
report.data.find {|d| d[:x] == TrustLevel.levels[:newuser]}[:y].should == 3
|
report.data.find {|d| d[:x] == TrustLevel[0]}[:y].should == 3
|
||||||
report.data.find {|d| d[:x] == TrustLevel.levels[:regular]}[:y].should == 2
|
report.data.find {|d| d[:x] == TrustLevel[2]}[:y].should == 2
|
||||||
report.data.find {|d| d[:x] == TrustLevel.levels[:elder]}[:y].should == 1
|
report.data.find {|d| d[:x] == TrustLevel[4]}[:y].should == 1
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -1,64 +1,64 @@
|
|||||||
require 'spec_helper'
|
require 'spec_helper'
|
||||||
|
|
||||||
describe LeaderRequirements do
|
describe TrustLevel3Requirements do
|
||||||
|
|
||||||
let(:user) { Fabricate.build(:user) }
|
let(:user) { Fabricate.build(:user) }
|
||||||
subject(:leader_requirements) { described_class.new(user) }
|
subject(:tl3_requirements) { described_class.new(user) }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
described_class.clear_cache
|
described_class.clear_cache
|
||||||
end
|
end
|
||||||
|
|
||||||
def make_view(id, at, user_id)
|
def make_view(id, at, user_id)
|
||||||
TopicViewItem.add(id, '11.22.33.44', user_id, at)
|
TopicViewItem.add(id, '11.22.33.44', user_id, at, _skip_redis=true)
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "requirements" do
|
describe "requirements" do
|
||||||
it "min_days_visited uses site setting" do
|
it "min_days_visited uses site setting" do
|
||||||
SiteSetting.stubs(:tl3_requires_days_visited).returns(66)
|
SiteSetting.stubs(:tl3_requires_days_visited).returns(66)
|
||||||
leader_requirements.min_days_visited.should == 66
|
tl3_requirements.min_days_visited.should == 66
|
||||||
end
|
end
|
||||||
|
|
||||||
it "min_topics_replied_to uses site setting" do
|
it "min_topics_replied_to uses site setting" do
|
||||||
SiteSetting.stubs(:tl3_requires_topics_replied_to).returns(12)
|
SiteSetting.stubs(:tl3_requires_topics_replied_to).returns(12)
|
||||||
leader_requirements.min_topics_replied_to.should == 12
|
tl3_requirements.min_topics_replied_to.should == 12
|
||||||
end
|
end
|
||||||
|
|
||||||
it "min_topics_viewed depends on site setting and number of topics created" do
|
it "min_topics_viewed depends on site setting and number of topics created" do
|
||||||
SiteSetting.stubs(:tl3_requires_topics_viewed).returns(75)
|
SiteSetting.stubs(:tl3_requires_topics_viewed).returns(75)
|
||||||
described_class.stubs(:num_topics_in_time_period).returns(31)
|
described_class.stubs(:num_topics_in_time_period).returns(31)
|
||||||
leader_requirements.min_topics_viewed.should == 23
|
tl3_requirements.min_topics_viewed.should == 23
|
||||||
end
|
end
|
||||||
|
|
||||||
it "min_posts_read depends on site setting and number of posts created" do
|
it "min_posts_read depends on site setting and number of posts created" do
|
||||||
SiteSetting.stubs(:tl3_requires_posts_read).returns(66)
|
SiteSetting.stubs(:tl3_requires_posts_read).returns(66)
|
||||||
described_class.stubs(:num_posts_in_time_period).returns(1234)
|
described_class.stubs(:num_posts_in_time_period).returns(1234)
|
||||||
leader_requirements.min_posts_read.should == 814
|
tl3_requirements.min_posts_read.should == 814
|
||||||
end
|
end
|
||||||
|
|
||||||
it "min_topics_viewed_all_time depends on site setting" do
|
it "min_topics_viewed_all_time depends on site setting" do
|
||||||
SiteSetting.stubs(:tl3_requires_topics_viewed_all_time).returns(75)
|
SiteSetting.stubs(:tl3_requires_topics_viewed_all_time).returns(75)
|
||||||
leader_requirements.min_topics_viewed_all_time.should == 75
|
tl3_requirements.min_topics_viewed_all_time.should == 75
|
||||||
end
|
end
|
||||||
|
|
||||||
it "min_posts_read_all_time depends on site setting" do
|
it "min_posts_read_all_time depends on site setting" do
|
||||||
SiteSetting.stubs(:tl3_requires_posts_read_all_time).returns(1001)
|
SiteSetting.stubs(:tl3_requires_posts_read_all_time).returns(1001)
|
||||||
leader_requirements.min_posts_read_all_time.should == 1001
|
tl3_requirements.min_posts_read_all_time.should == 1001
|
||||||
end
|
end
|
||||||
|
|
||||||
it "max_flagged_posts depends on site setting" do
|
it "max_flagged_posts depends on site setting" do
|
||||||
SiteSetting.stubs(:tl3_requires_max_flagged).returns(3)
|
SiteSetting.stubs(:tl3_requires_max_flagged).returns(3)
|
||||||
leader_requirements.max_flagged_posts.should == 3
|
tl3_requirements.max_flagged_posts.should == 3
|
||||||
end
|
end
|
||||||
|
|
||||||
it "min_likes_given depends on site setting" do
|
it "min_likes_given depends on site setting" do
|
||||||
SiteSetting.stubs(:tl3_requires_likes_given).returns(30)
|
SiteSetting.stubs(:tl3_requires_likes_given).returns(30)
|
||||||
leader_requirements.min_likes_given.should == 30
|
tl3_requirements.min_likes_given.should == 30
|
||||||
end
|
end
|
||||||
|
|
||||||
it "min_likes_received depends on site setting" do
|
it "min_likes_received depends on site setting" do
|
||||||
SiteSetting.stubs(:tl3_requires_likes_received).returns(20)
|
SiteSetting.stubs(:tl3_requires_likes_received).returns(20)
|
||||||
leader_requirements.min_likes_received.should == 20
|
tl3_requirements.min_likes_received.should == 20
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -69,7 +69,7 @@ describe LeaderRequirements do
|
|||||||
user.update_posts_read!(1, 3.days.ago)
|
user.update_posts_read!(1, 3.days.ago)
|
||||||
user.update_posts_read!(0, 4.days.ago)
|
user.update_posts_read!(0, 4.days.ago)
|
||||||
user.update_posts_read!(3, 101.days.ago)
|
user.update_posts_read!(3, 101.days.ago)
|
||||||
leader_requirements.days_visited.should == 2
|
tl3_requirements.days_visited.should == 2
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -77,16 +77,16 @@ describe LeaderRequirements do
|
|||||||
it "counts topics in which user replied in last 100 days" do
|
it "counts topics in which user replied in last 100 days" do
|
||||||
user.save
|
user.save
|
||||||
|
|
||||||
not_a_reply = create_post(user: user) # user created the topic, so it doesn't count
|
_not_a_reply = create_post(user: user) # user created the topic, so it doesn't count
|
||||||
|
|
||||||
topic1 = create_post.topic
|
topic1 = create_post.topic
|
||||||
reply1 = create_post(topic: topic1, user: user)
|
_reply1 = create_post(topic: topic1, user: user)
|
||||||
reply_again = create_post(topic: topic1, user: user) # two replies in one topic
|
_reply_again = create_post(topic: topic1, user: user) # two replies in one topic
|
||||||
|
|
||||||
topic2 = create_post(created_at: 101.days.ago).topic
|
topic2 = create_post(created_at: 101.days.ago).topic
|
||||||
reply2 = create_post(topic: topic2, user: user, created_at: 101.days.ago) # topic is over 100 days old
|
_reply2 = create_post(topic: topic2, user: user, created_at: 101.days.ago) # topic is over 100 days old
|
||||||
|
|
||||||
leader_requirements.num_topics_replied_to.should == 1
|
tl3_requirements.num_topics_replied_to.should == 1
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -97,7 +97,7 @@ describe LeaderRequirements do
|
|||||||
make_view(9, 3.days.ago, user.id) # same topic, different day
|
make_view(9, 3.days.ago, user.id) # same topic, different day
|
||||||
make_view(3, 4.days.ago, user.id)
|
make_view(3, 4.days.ago, user.id)
|
||||||
make_view(2, 101.days.ago, user.id) # too long ago
|
make_view(2, 101.days.ago, user.id) # too long ago
|
||||||
leader_requirements.topics_viewed.should == 2
|
tl3_requirements.topics_viewed.should == 2
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -108,7 +108,7 @@ describe LeaderRequirements do
|
|||||||
user.update_posts_read!(1, 3.days.ago)
|
user.update_posts_read!(1, 3.days.ago)
|
||||||
user.update_posts_read!(0, 4.days.ago)
|
user.update_posts_read!(0, 4.days.ago)
|
||||||
user.update_posts_read!(5, 101.days.ago)
|
user.update_posts_read!(5, 101.days.ago)
|
||||||
leader_requirements.posts_read.should == 4
|
tl3_requirements.posts_read.should == 4
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -118,7 +118,7 @@ describe LeaderRequirements do
|
|||||||
make_view(10, 1.day.ago, user.id)
|
make_view(10, 1.day.ago, user.id)
|
||||||
make_view(9, 100.days.ago, user.id)
|
make_view(9, 100.days.ago, user.id)
|
||||||
make_view(8, 101.days.ago, user.id)
|
make_view(8, 101.days.ago, user.id)
|
||||||
leader_requirements.topics_viewed_all_time.should == 3
|
tl3_requirements.topics_viewed_all_time.should == 3
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -127,7 +127,7 @@ describe LeaderRequirements do
|
|||||||
user.save
|
user.save
|
||||||
user.update_posts_read!(3, 2.days.ago)
|
user.update_posts_read!(3, 2.days.ago)
|
||||||
user.update_posts_read!(1, 101.days.ago)
|
user.update_posts_read!(1, 101.days.ago)
|
||||||
leader_requirements.posts_read_all_time.should == 4
|
tl3_requirements.posts_read_all_time.should == 4
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -138,11 +138,11 @@ describe LeaderRequirements do
|
|||||||
Fabricate(:flag, post: Fabricate(:post, user: user), post_action_type_id: PostActionType.types[t], agreed_at: 1.minute.ago)
|
Fabricate(:flag, post: Fabricate(:post, user: user), post_action_type_id: PostActionType.types[t], agreed_at: 1.minute.ago)
|
||||||
end
|
end
|
||||||
|
|
||||||
deferred_flags = [:off_topic, :inappropriate, :notify_user, :notify_moderators, :spam].map do |t|
|
_deferred_flags = [:off_topic, :inappropriate, :notify_user, :notify_moderators, :spam].map do |t|
|
||||||
Fabricate(:flag, post: Fabricate(:post, user: user), post_action_type_id: PostActionType.types[t], deferred_at: 1.minute.ago)
|
Fabricate(:flag, post: Fabricate(:post, user: user), post_action_type_id: PostActionType.types[t], deferred_at: 1.minute.ago)
|
||||||
end
|
end
|
||||||
|
|
||||||
deleted_flags = [:off_topic, :inappropriate, :notify_user, :notify_moderators, :spam].map do |t|
|
_deleted_flags = [:off_topic, :inappropriate, :notify_user, :notify_moderators, :spam].map do |t|
|
||||||
Fabricate(:flag, post: Fabricate(:post, user: user), post_action_type_id: PostActionType.types[t], deleted_at: 1.minute.ago)
|
Fabricate(:flag, post: Fabricate(:post, user: user), post_action_type_id: PostActionType.types[t], deleted_at: 1.minute.ago)
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -157,8 +157,8 @@ describe LeaderRequirements do
|
|||||||
end
|
end
|
||||||
|
|
||||||
it "num_flagged_posts and num_flagged_by_users count spam and inappropriate agreed flags in the last 100 days" do
|
it "num_flagged_posts and num_flagged_by_users count spam and inappropriate agreed flags in the last 100 days" do
|
||||||
leader_requirements.num_flagged_posts.should == 2
|
tl3_requirements.num_flagged_posts.should == 2
|
||||||
leader_requirements.num_flagged_by_users.should == 3
|
tl3_requirements.num_flagged_by_users.should == 3
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -174,7 +174,7 @@ describe LeaderRequirements do
|
|||||||
Fabricate(:like, user: user, post: recent_post2, created_at: 5.days.ago)
|
Fabricate(:like, user: user, post: recent_post2, created_at: 5.days.ago)
|
||||||
Fabricate(:like, user: user, post: old_post, created_at: 101.days.ago)
|
Fabricate(:like, user: user, post: old_post, created_at: 101.days.ago)
|
||||||
|
|
||||||
leader_requirements.num_likes_given.should == 2
|
tl3_requirements.num_likes_given.should == 2
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -192,103 +192,103 @@ describe LeaderRequirements do
|
|||||||
Fabricate(:like, user: liker, post: recent_post2, created_at: 5.days.ago)
|
Fabricate(:like, user: liker, post: recent_post2, created_at: 5.days.ago)
|
||||||
Fabricate(:like, user: liker, post: old_post, created_at: 101.days.ago)
|
Fabricate(:like, user: liker, post: old_post, created_at: 101.days.ago)
|
||||||
|
|
||||||
leader_requirements.num_likes_received.should == 2
|
tl3_requirements.num_likes_received.should == 2
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "requirements" do
|
describe "requirements" do
|
||||||
|
|
||||||
before do
|
before do
|
||||||
leader_requirements.stubs(:min_days_visited).returns(50)
|
tl3_requirements.stubs(:min_days_visited).returns(50)
|
||||||
leader_requirements.stubs(:min_topics_replied_to).returns(10)
|
tl3_requirements.stubs(:min_topics_replied_to).returns(10)
|
||||||
leader_requirements.stubs(:min_topics_viewed).returns(25)
|
tl3_requirements.stubs(:min_topics_viewed).returns(25)
|
||||||
leader_requirements.stubs(:min_posts_read).returns(25)
|
tl3_requirements.stubs(:min_posts_read).returns(25)
|
||||||
leader_requirements.stubs(:min_topics_viewed_all_time).returns(200)
|
tl3_requirements.stubs(:min_topics_viewed_all_time).returns(200)
|
||||||
leader_requirements.stubs(:min_posts_read_all_time).returns(500)
|
tl3_requirements.stubs(:min_posts_read_all_time).returns(500)
|
||||||
leader_requirements.stubs(:max_flagged_posts).returns(5)
|
tl3_requirements.stubs(:max_flagged_posts).returns(5)
|
||||||
leader_requirements.stubs(:max_flagged_by_users).returns(5)
|
tl3_requirements.stubs(:max_flagged_by_users).returns(5)
|
||||||
leader_requirements.stubs(:min_likes_given).returns(30)
|
tl3_requirements.stubs(:min_likes_given).returns(30)
|
||||||
leader_requirements.stubs(:min_likes_received).returns(20)
|
tl3_requirements.stubs(:min_likes_received).returns(20)
|
||||||
|
|
||||||
leader_requirements.stubs(:days_visited).returns(50)
|
tl3_requirements.stubs(:days_visited).returns(50)
|
||||||
leader_requirements.stubs(:num_topics_replied_to).returns(10)
|
tl3_requirements.stubs(:num_topics_replied_to).returns(10)
|
||||||
leader_requirements.stubs(:topics_viewed).returns(25)
|
tl3_requirements.stubs(:topics_viewed).returns(25)
|
||||||
leader_requirements.stubs(:posts_read).returns(25)
|
tl3_requirements.stubs(:posts_read).returns(25)
|
||||||
leader_requirements.stubs(:topics_viewed_all_time).returns(200)
|
tl3_requirements.stubs(:topics_viewed_all_time).returns(200)
|
||||||
leader_requirements.stubs(:posts_read_all_time).returns(500)
|
tl3_requirements.stubs(:posts_read_all_time).returns(500)
|
||||||
leader_requirements.stubs(:num_flagged_posts).returns(0)
|
tl3_requirements.stubs(:num_flagged_posts).returns(0)
|
||||||
leader_requirements.stubs(:num_flagged_by_users).returns(0)
|
tl3_requirements.stubs(:num_flagged_by_users).returns(0)
|
||||||
leader_requirements.stubs(:num_likes_given).returns(30)
|
tl3_requirements.stubs(:num_likes_given).returns(30)
|
||||||
leader_requirements.stubs(:num_likes_received).returns(20)
|
tl3_requirements.stubs(:num_likes_received).returns(20)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "are met when all requirements are met" do
|
it "are met when all requirements are met" do
|
||||||
leader_requirements.requirements_met?.should == true
|
tl3_requirements.requirements_met?.should == true
|
||||||
end
|
end
|
||||||
|
|
||||||
it "are not met if too few days visited" do
|
it "are not met if too few days visited" do
|
||||||
leader_requirements.stubs(:days_visited).returns(49)
|
tl3_requirements.stubs(:days_visited).returns(49)
|
||||||
leader_requirements.requirements_met?.should == false
|
tl3_requirements.requirements_met?.should == false
|
||||||
end
|
end
|
||||||
|
|
||||||
it "are not lost if requirements are close" do
|
it "are not lost if requirements are close" do
|
||||||
leader_requirements.stubs(:days_visited).returns(45)
|
tl3_requirements.stubs(:days_visited).returns(45)
|
||||||
leader_requirements.stubs(:num_topics_replied_to).returns(9)
|
tl3_requirements.stubs(:num_topics_replied_to).returns(9)
|
||||||
leader_requirements.stubs(:topics_viewed).returns(23)
|
tl3_requirements.stubs(:topics_viewed).returns(23)
|
||||||
leader_requirements.stubs(:posts_read).returns(23)
|
tl3_requirements.stubs(:posts_read).returns(23)
|
||||||
leader_requirements.stubs(:num_likes_given).returns(29)
|
tl3_requirements.stubs(:num_likes_given).returns(29)
|
||||||
leader_requirements.stubs(:num_likes_received).returns(19)
|
tl3_requirements.stubs(:num_likes_received).returns(19)
|
||||||
leader_requirements.requirements_lost?.should == false
|
tl3_requirements.requirements_lost?.should == false
|
||||||
end
|
end
|
||||||
|
|
||||||
it "are lost if not enough visited" do
|
it "are lost if not enough visited" do
|
||||||
leader_requirements.stubs(:days_visited).returns(44)
|
tl3_requirements.stubs(:days_visited).returns(44)
|
||||||
leader_requirements.requirements_lost?.should == true
|
tl3_requirements.requirements_lost?.should == true
|
||||||
end
|
end
|
||||||
|
|
||||||
it "are lost if not enough topics replied to" do
|
it "are lost if not enough topics replied to" do
|
||||||
leader_requirements.stubs(:num_topics_replied_to).returns(8)
|
tl3_requirements.stubs(:num_topics_replied_to).returns(8)
|
||||||
leader_requirements.requirements_lost?.should == true
|
tl3_requirements.requirements_lost?.should == true
|
||||||
end
|
end
|
||||||
|
|
||||||
it "are lost if not enough topics viewed" do
|
it "are lost if not enough topics viewed" do
|
||||||
leader_requirements.stubs(:topics_viewed).returns(22)
|
tl3_requirements.stubs(:topics_viewed).returns(22)
|
||||||
leader_requirements.requirements_lost?.should == true
|
tl3_requirements.requirements_lost?.should == true
|
||||||
end
|
end
|
||||||
|
|
||||||
it "are lost if not enough posts read" do
|
it "are lost if not enough posts read" do
|
||||||
leader_requirements.stubs(:posts_read).returns(22)
|
tl3_requirements.stubs(:posts_read).returns(22)
|
||||||
leader_requirements.requirements_lost?.should == true
|
tl3_requirements.requirements_lost?.should == true
|
||||||
end
|
end
|
||||||
|
|
||||||
it "are not met if not enough likes given" do
|
it "are not met if not enough likes given" do
|
||||||
leader_requirements.stubs(:num_likes_given).returns(29)
|
tl3_requirements.stubs(:num_likes_given).returns(29)
|
||||||
leader_requirements.requirements_met?.should == false
|
tl3_requirements.requirements_met?.should == false
|
||||||
end
|
end
|
||||||
|
|
||||||
it "are not met if not enough likes received" do
|
it "are not met if not enough likes received" do
|
||||||
leader_requirements.stubs(:num_likes_received).returns(19)
|
tl3_requirements.stubs(:num_likes_received).returns(19)
|
||||||
leader_requirements.requirements_met?.should == false
|
tl3_requirements.requirements_met?.should == false
|
||||||
end
|
end
|
||||||
|
|
||||||
it "are lost if not enough likes given" do
|
it "are lost if not enough likes given" do
|
||||||
leader_requirements.stubs(:num_likes_given).returns(26)
|
tl3_requirements.stubs(:num_likes_given).returns(26)
|
||||||
leader_requirements.requirements_lost?.should == true
|
tl3_requirements.requirements_lost?.should == true
|
||||||
end
|
end
|
||||||
|
|
||||||
it "are lost if not enough likes received" do
|
it "are lost if not enough likes received" do
|
||||||
leader_requirements.stubs(:num_likes_received).returns(17)
|
tl3_requirements.stubs(:num_likes_received).returns(17)
|
||||||
leader_requirements.requirements_lost?.should == true
|
tl3_requirements.requirements_lost?.should == true
|
||||||
end
|
end
|
||||||
|
|
||||||
it "are not met if suspended" do
|
it "are not met if suspended" do
|
||||||
user.stubs(:suspended?).returns(true)
|
user.stubs(:suspended?).returns(true)
|
||||||
leader_requirements.requirements_met?.should == false
|
tl3_requirements.requirements_met?.should == false
|
||||||
end
|
end
|
||||||
|
|
||||||
it "are lost if suspended" do
|
it "are lost if suspended" do
|
||||||
user.stubs(:suspended?).returns(true)
|
user.stubs(:suspended?).returns(true)
|
||||||
leader_requirements.requirements_lost?.should == true
|
tl3_requirements.requirements_lost?.should == true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
@ -92,7 +92,7 @@ describe UserProfile do
|
|||||||
end
|
end
|
||||||
|
|
||||||
it 'removes the link if the user is new' do
|
it 'removes the link if the user is new' do
|
||||||
user.trust_level = TrustLevel.levels[:newuser]
|
user.trust_level = TrustLevel[0]
|
||||||
user_profile.send(:cook)
|
user_profile.send(:cook)
|
||||||
expect(user_profile.bio_excerpt).to match_html("I love http://discourse.org")
|
expect(user_profile.bio_excerpt).to match_html("I love http://discourse.org")
|
||||||
expect(user_profile.bio_processed).to eq("<p>I love http://discourse.org</p>")
|
expect(user_profile.bio_processed).to eq("<p>I love http://discourse.org</p>")
|
||||||
@ -102,22 +102,22 @@ describe UserProfile do
|
|||||||
before { SiteSetting.stubs(:tl3_links_no_follow).returns(false) }
|
before { SiteSetting.stubs(:tl3_links_no_follow).returns(false) }
|
||||||
|
|
||||||
it 'includes the link without nofollow if the user is trust level 3 or higher' do
|
it 'includes the link without nofollow if the user is trust level 3 or higher' do
|
||||||
user.trust_level = TrustLevel.levels[:leader]
|
user.trust_level = TrustLevel[3]
|
||||||
user_profile.send(:cook)
|
user_profile.send(:cook)
|
||||||
expect(user_profile.bio_excerpt).to match_html("I love <a href='http://discourse.org'>http://discourse.org</a>")
|
expect(user_profile.bio_excerpt).to match_html("I love <a href='http://discourse.org'>http://discourse.org</a>")
|
||||||
expect(user_profile.bio_processed).to match_html("<p>I love <a href=\"http://discourse.org\">http://discourse.org</a></p>")
|
expect(user_profile.bio_processed).to match_html("<p>I love <a href=\"http://discourse.org\">http://discourse.org</a></p>")
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'removes nofollow from links in bio when trust level is increased' do
|
it 'removes nofollow from links in bio when trust level is increased' do
|
||||||
created_user.change_trust_level!(:leader)
|
created_user.change_trust_level!(TrustLevel[3])
|
||||||
expect(created_user.user_profile.bio_excerpt).to match_html("I love <a href='http://discourse.org'>http://discourse.org</a>")
|
expect(created_user.user_profile.bio_excerpt).to match_html("I love <a href='http://discourse.org'>http://discourse.org</a>")
|
||||||
expect(created_user.user_profile.bio_processed).to match_html("<p>I love <a href=\"http://discourse.org\">http://discourse.org</a></p>")
|
expect(created_user.user_profile.bio_processed).to match_html("<p>I love <a href=\"http://discourse.org\">http://discourse.org</a></p>")
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'adds nofollow to links in bio when trust level is decreased' do
|
it 'adds nofollow to links in bio when trust level is decreased' do
|
||||||
created_user.trust_level = TrustLevel.levels[:leader]
|
created_user.trust_level = TrustLevel[3]
|
||||||
created_user.save
|
created_user.save
|
||||||
created_user.change_trust_level!(:regular)
|
created_user.change_trust_level!(TrustLevel[2])
|
||||||
expect(created_user.user_profile.bio_excerpt).to match_html("I love <a href='http://discourse.org' rel='nofollow'>http://discourse.org</a>")
|
expect(created_user.user_profile.bio_excerpt).to match_html("I love <a href='http://discourse.org' rel='nofollow'>http://discourse.org</a>")
|
||||||
expect(created_user.user_profile.bio_processed).to match_html("<p>I love <a href=\"http://discourse.org\" rel=\"nofollow\">http://discourse.org</a></p>")
|
expect(created_user.user_profile.bio_processed).to match_html("<p>I love <a href=\"http://discourse.org\" rel=\"nofollow\">http://discourse.org</a></p>")
|
||||||
end
|
end
|
||||||
@ -127,7 +127,7 @@ describe UserProfile do
|
|||||||
before { SiteSetting.stubs(:tl3_links_no_follow).returns(true) }
|
before { SiteSetting.stubs(:tl3_links_no_follow).returns(true) }
|
||||||
|
|
||||||
it 'includes the link with nofollow if the user is trust level 3 or higher' do
|
it 'includes the link with nofollow if the user is trust level 3 or higher' do
|
||||||
user.trust_level = TrustLevel.levels[:leader]
|
user.trust_level = TrustLevel[3]
|
||||||
user_profile.send(:cook)
|
user_profile.send(:cook)
|
||||||
expect(user_profile.bio_excerpt).to match_html("I love <a href='http://discourse.org' rel='nofollow'>http://discourse.org</a>")
|
expect(user_profile.bio_excerpt).to match_html("I love <a href='http://discourse.org' rel='nofollow'>http://discourse.org</a>")
|
||||||
expect(user_profile.bio_processed).to match_html("<p>I love <a href=\"http://discourse.org\" rel=\"nofollow\">http://discourse.org</a></p>")
|
expect(user_profile.bio_processed).to match_html("<p>I love <a href=\"http://discourse.org\" rel=\"nofollow\">http://discourse.org</a></p>")
|
||||||
|
@ -262,11 +262,11 @@ describe User do
|
|||||||
describe "trust levels" do
|
describe "trust levels" do
|
||||||
|
|
||||||
# NOTE be sure to use build to avoid db calls
|
# NOTE be sure to use build to avoid db calls
|
||||||
let(:user) { Fabricate.build(:user, trust_level: TrustLevel.levels[:newuser]) }
|
let(:user) { Fabricate.build(:user, trust_level: TrustLevel[0]) }
|
||||||
|
|
||||||
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[:elder])
|
SiteSetting.default_trust_level = TrustLevel[4]
|
||||||
User.new.trust_level.should == TrustLevel.levels[:elder]
|
User.new.trust_level.should == TrustLevel[4]
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'has_trust_level?' do
|
describe 'has_trust_level?' do
|
||||||
@ -276,22 +276,22 @@ 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?(:newuser).should be_true
|
user.has_trust_level?(TrustLevel[0]).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?(:regular).should be_false
|
user.has_trust_level?(TrustLevel[2]).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[:elder]
|
user.trust_level = TrustLevel[4]
|
||||||
user.has_trust_level?(:newuser).should be_true
|
user.has_trust_level?(TrustLevel[1]).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[0]
|
||||||
user.admin = true
|
user.admin = true
|
||||||
user.has_trust_level?(:elder).should be_true
|
user.has_trust_level?(TrustLevel[1]).should be_true
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
@ -303,7 +303,7 @@ describe User do
|
|||||||
|
|
||||||
it "is a moderator if the user level is moderator" do
|
it "is a moderator if the user level is moderator" do
|
||||||
user.moderator = true
|
user.moderator = true
|
||||||
user.has_trust_level?(:elder).should be_true
|
user.has_trust_level?(TrustLevel[4]).should be_true
|
||||||
end
|
end
|
||||||
|
|
||||||
it "is staff if the user is an admin" do
|
it "is staff if the user is an admin" do
|
||||||
@ -844,7 +844,7 @@ describe User do
|
|||||||
end
|
end
|
||||||
|
|
||||||
describe "posted too much in topic" do
|
describe "posted too much in topic" do
|
||||||
let!(:user) { Fabricate(:user, trust_level: TrustLevel.levels[:newuser]) }
|
let!(:user) { Fabricate(:user, trust_level: TrustLevel[0]) }
|
||||||
let!(:topic) { Fabricate(:post).topic }
|
let!(:topic) { Fabricate(:post).topic }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
@ -877,7 +877,7 @@ describe User do
|
|||||||
|
|
||||||
it "returns false for a user who created the topic" do
|
it "returns false for a user who created the topic" do
|
||||||
topic_user = topic.user
|
topic_user = topic.user
|
||||||
topic_user.trust_level = TrustLevel.levels[:newuser]
|
topic_user.trust_level = TrustLevel[0]
|
||||||
topic.user.posted_too_much_in_topic?(topic.id).should be_false
|
topic.user.posted_too_much_in_topic?(topic.id).should be_false
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@ describe SpamRule::AutoBlock do
|
|||||||
end
|
end
|
||||||
|
|
||||||
describe 'perform' do
|
describe 'perform' do
|
||||||
let(:post) { Fabricate.build(:post, user: Fabricate.build(:user, trust_level: TrustLevel.levels[:newuser])) }
|
let(:post) { Fabricate.build(:post, user: Fabricate.build(:user, trust_level: TrustLevel[0])) }
|
||||||
subject { described_class.new(post.user) }
|
subject { described_class.new(post.user) }
|
||||||
|
|
||||||
it 'takes no action if user should not be blocked' do
|
it 'takes no action if user should not be blocked' do
|
||||||
@ -148,9 +148,9 @@ describe SpamRule::AutoBlock do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
[:basic, :regular, :leader, :elder].each do |trust_level|
|
(1..4).each do |trust_level|
|
||||||
context "user has trust level #{trust_level}" do
|
context "user has trust level #{trust_level}" do
|
||||||
let(:user) { Fabricate(:user, trust_level: TrustLevel.levels[trust_level]) }
|
let(:user) { Fabricate(:user, trust_level: trust_level) }
|
||||||
include_examples "can't be blocked"
|
include_examples "can't be blocked"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -167,7 +167,7 @@ describe SpamRule::AutoBlock do
|
|||||||
end
|
end
|
||||||
|
|
||||||
context 'new user' do
|
context 'new user' do
|
||||||
let(:user) { Fabricate(:user, trust_level: TrustLevel.levels[:newuser]) }
|
let(:user) { Fabricate(:user, trust_level: TrustLevel[0]) }
|
||||||
subject { described_class.new(user) }
|
subject { described_class.new(user) }
|
||||||
|
|
||||||
it 'returns false if there are no spam flags' do
|
it 'returns false if there are no spam flags' do
|
||||||
@ -210,7 +210,7 @@ describe SpamRule::AutoBlock do
|
|||||||
end
|
end
|
||||||
|
|
||||||
context "blocked, but has higher trust level now" do
|
context "blocked, but has higher trust level now" do
|
||||||
let(:user) { Fabricate(:user, blocked: true, trust_level: TrustLevel.levels[:basic]) }
|
let(:user) { Fabricate(:user, blocked: true, trust_level: TrustLevel[1]) }
|
||||||
subject { described_class.new(user) }
|
subject { described_class.new(user) }
|
||||||
|
|
||||||
it 'returns false' do
|
it 'returns false' do
|
||||||
|
@ -169,11 +169,11 @@ describe BadgeGranter do
|
|||||||
end
|
end
|
||||||
|
|
||||||
it "grants and revokes trust level badges" do
|
it "grants and revokes trust level badges" do
|
||||||
user.change_trust_level!(:elder)
|
user.change_trust_level!(TrustLevel[4])
|
||||||
BadgeGranter.process_queue!
|
BadgeGranter.process_queue!
|
||||||
UserBadge.where(user_id: user.id, badge_id: Badge.trust_level_badge_ids).count.should eq(4)
|
UserBadge.where(user_id: user.id, badge_id: Badge.trust_level_badge_ids).count.should eq(4)
|
||||||
|
|
||||||
user.change_trust_level!(:basic)
|
user.change_trust_level!(TrustLevel[1])
|
||||||
BadgeGranter.backfill(Badge.find(1))
|
BadgeGranter.backfill(Badge.find(1))
|
||||||
BadgeGranter.backfill(Badge.find(2))
|
BadgeGranter.backfill(Badge.find(2))
|
||||||
UserBadge.where(user_id: user.id, badge_id: 1).first.should_not be_nil
|
UserBadge.where(user_id: user.id, badge_id: 1).first.should_not be_nil
|
||||||
|
@ -79,26 +79,26 @@ describe SpamRule::FlagSockpuppets do
|
|||||||
end
|
end
|
||||||
|
|
||||||
it 'is true if first post user was created over 24 hours ago and has trust level higher than 0' do
|
it 'is true if first post user was created over 24 hours ago and has trust level higher than 0' do
|
||||||
old_user = Fabricate(:user, ip_address: '182.189.119.174', created_at: 25.hours.ago, trust_level: TrustLevel.levels[:basic])
|
old_user = Fabricate(:user, ip_address: '182.189.119.174', created_at: 25.hours.ago, trust_level: TrustLevel[1])
|
||||||
first_post = Fabricate(:post, user: old_user, topic: Fabricate(:topic, user: old_user))
|
first_post = Fabricate(:post, user: old_user, topic: Fabricate(:topic, user: old_user))
|
||||||
post2 = Fabricate(:post, user: Fabricate(:user, ip_address: old_user.ip_address), topic: first_post.topic)
|
post2 = Fabricate(:post, user: Fabricate(:user, ip_address: old_user.ip_address), topic: first_post.topic)
|
||||||
described_class.new(post2).reply_is_from_sockpuppet?.should eq(true)
|
described_class.new(post2).reply_is_from_sockpuppet?.should eq(true)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'is false if second post user was created over 24 hours ago and has trust level higher than 0' do
|
it 'is false if second post user was created over 24 hours ago and has trust level higher than 0' do
|
||||||
post2 = Fabricate(:post, user: Fabricate(:user, ip_address: user1.ip_address, created_at: 25.hours.ago, trust_level: TrustLevel.levels[:basic]), topic: post1.topic)
|
post2 = Fabricate(:post, user: Fabricate(:user, ip_address: user1.ip_address, created_at: 25.hours.ago, trust_level: TrustLevel[1]), topic: post1.topic)
|
||||||
described_class.new(post2).reply_is_from_sockpuppet?.should eq(false)
|
described_class.new(post2).reply_is_from_sockpuppet?.should eq(false)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'is true if first post user was created less that 24 hours ago and has trust level higher than 0' do
|
it 'is true if first post user was created less that 24 hours ago and has trust level higher than 0' do
|
||||||
new_user = Fabricate(:user, ip_address: '182.189.119.174', created_at: 1.hour.ago, trust_level: TrustLevel.levels[:basic])
|
new_user = Fabricate(:user, ip_address: '182.189.119.174', created_at: 1.hour.ago, trust_level: TrustLevel[1])
|
||||||
first_post = Fabricate(:post, user: new_user, topic: Fabricate(:topic, user: new_user))
|
first_post = Fabricate(:post, user: new_user, topic: Fabricate(:topic, user: new_user))
|
||||||
post2 = Fabricate(:post, user: Fabricate(:user, ip_address: new_user.ip_address), topic: first_post.topic)
|
post2 = Fabricate(:post, user: Fabricate(:user, ip_address: new_user.ip_address), topic: first_post.topic)
|
||||||
described_class.new(post2).reply_is_from_sockpuppet?.should eq(true)
|
described_class.new(post2).reply_is_from_sockpuppet?.should eq(true)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'is true if second user was created less that 24 hours ago and has trust level higher than 0' do
|
it 'is true if second user was created less that 24 hours ago and has trust level higher than 0' do
|
||||||
post2 = Fabricate(:post, user: Fabricate(:user, ip_address: user1.ip_address, created_at: 23.hours.ago, trust_level: TrustLevel.levels[:basic]), topic: post1.topic)
|
post2 = Fabricate(:post, user: Fabricate(:user, ip_address: user1.ip_address, created_at: 23.hours.ago, trust_level: TrustLevel[1]), topic: post1.topic)
|
||||||
described_class.new(post2).reply_is_from_sockpuppet?.should eq(true)
|
described_class.new(post2).reply_is_from_sockpuppet?.should eq(true)
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -126,7 +126,7 @@ describe SpamRule::FlagSockpuppets do
|
|||||||
end
|
end
|
||||||
|
|
||||||
it "doesn't flag the first post if the user is not new" do
|
it "doesn't flag the first post if the user is not new" do
|
||||||
old_user = Fabricate(:user, ip_address: '182.189.119.174', created_at: 25.hours.ago, trust_level: TrustLevel.levels[:basic])
|
old_user = Fabricate(:user, ip_address: '182.189.119.174', created_at: 25.hours.ago, trust_level: TrustLevel[1])
|
||||||
first_post = Fabricate(:post, user: old_user, topic: Fabricate(:topic, user: old_user))
|
first_post = Fabricate(:post, user: old_user, topic: Fabricate(:topic, user: old_user))
|
||||||
post2 = Fabricate(:post, user: Fabricate(:user, ip_address: old_user.ip_address), topic: first_post.topic)
|
post2 = Fabricate(:post, user: Fabricate(:user, ip_address: old_user.ip_address), topic: first_post.topic)
|
||||||
PostAction.expects(:act).with(anything, post2, anything, anything).once
|
PostAction.expects(:act).with(anything, post2, anything, anything).once
|
||||||
|
@ -35,8 +35,8 @@ describe StaffActionLogger do
|
|||||||
|
|
||||||
describe 'log_trust_level_change' do
|
describe 'log_trust_level_change' do
|
||||||
let(:user) { Fabricate(:user) }
|
let(:user) { Fabricate(:user) }
|
||||||
let(:old_trust_level) { TrustLevel.levels[:newuser] }
|
let(:old_trust_level) { TrustLevel[0] }
|
||||||
let(:new_trust_level) { TrustLevel.levels[:basic] }
|
let(:new_trust_level) { TrustLevel[1] }
|
||||||
|
|
||||||
subject(:log_trust_level_change) { described_class.new(admin).log_trust_level_change(user, old_trust_level, new_trust_level) }
|
subject(:log_trust_level_change) { described_class.new(admin).log_trust_level_change(user, old_trust_level, new_trust_level) }
|
||||||
|
|
||||||
@ -51,7 +51,7 @@ describe StaffActionLogger do
|
|||||||
end
|
end
|
||||||
|
|
||||||
it 'raises an error when new trust level is not a Trust Level' do
|
it 'raises an error when new trust level is not a Trust Level' do
|
||||||
max_level = TrustLevel.levels.values.max
|
max_level = TrustLevel.valid_range.max
|
||||||
expect { logger.log_trust_level_change(user, old_trust_level, max_level + 1) }.to raise_error(Discourse::InvalidParameters)
|
expect { logger.log_trust_level_change(user, old_trust_level, max_level + 1) }.to raise_error(Discourse::InvalidParameters)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user