Feat Make tag score minimum configurable by admins (#20233)
* feat: add Settings::UserExperience.award_tag_minimum_score * test: write new specs * test: write a new test case
This commit is contained in:
parent
59860df04a
commit
593d95e7a8
4 changed files with 33 additions and 1 deletions
|
|
@ -40,5 +40,6 @@ module Settings
|
|||
setting :tag_feed_minimum_score, type: :integer, default: 0
|
||||
setting :default_locale, type: :string, default: "en"
|
||||
setting :display_in_directory, type: :boolean, default: true
|
||||
setting :award_tag_minimum_score, type: :integer, default: 100
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ module Badges
|
|||
def call
|
||||
Tag.where.not(badge_id: nil).find_each do |tag|
|
||||
past_winner_user_ids = BadgeAchievement.where(badge_id: tag.badge_id).pluck(:user_id)
|
||||
winning_article = Article.where("score > 100")
|
||||
winning_article = Article.where("score > ?", Settings::UserExperience.award_tag_minimum_score)
|
||||
.published
|
||||
.not_authored_by(past_winner_user_ids)
|
||||
.order(score: :desc)
|
||||
|
|
|
|||
|
|
@ -728,6 +728,17 @@ RSpec.describe "/admin/customization/config" do
|
|||
}
|
||||
end.to change(Settings::UserExperience, :display_in_directory).from(default_value).to(false)
|
||||
end
|
||||
|
||||
it "updates the award_tag_minimum_score" do
|
||||
default_value = Settings::UserExperience.get_default(:award_tag_minimum_score)
|
||||
new_award_tag_minimum_score = 200
|
||||
expect do
|
||||
post admin_settings_user_experiences_path, params: {
|
||||
settings_user_experience: { award_tag_minimum_score: new_award_tag_minimum_score }
|
||||
}
|
||||
end.to change(Settings::UserExperience,
|
||||
:award_tag_minimum_score).from(default_value).to(new_award_tag_minimum_score)
|
||||
end
|
||||
end
|
||||
|
||||
describe "Credits" do
|
||||
|
|
|
|||
|
|
@ -61,4 +61,24 @@ RSpec.describe Badges::AwardTag, type: :service do
|
|||
expect(second_user.reload.badge_achievements.size).to eq(1)
|
||||
expect(third_user.reload.badge_achievements.size).to eq(1)
|
||||
end
|
||||
|
||||
context "when award_tag_minimum_score setting is different than default" do
|
||||
it "awards badge if qualifying article by score and tagged appropriately" do
|
||||
allow(Settings::UserExperience).to receive(:award_tag_minimum_score).and_return(200)
|
||||
article.update_columns(cached_tag_list: tag.name, score: 201)
|
||||
described_class.call
|
||||
expect(user.badge_achievements.size).to eq(1)
|
||||
expect(user.badge_achievements.last.badge_id).to eq(badge.id)
|
||||
end
|
||||
end
|
||||
|
||||
context "when award_tag_minimum_score is 100 and the article score is greater than it" do
|
||||
it "awards badge if qualifying article by score and tagged appropriately" do
|
||||
allow(Settings::UserExperience).to receive(:award_tag_minimum_score).and_return(100)
|
||||
article.update_columns(cached_tag_list: tag.name, score: 201)
|
||||
described_class.call
|
||||
expect(user.badge_achievements.size).to eq(1)
|
||||
expect(user.badge_achievements.last.badge_id).to eq(badge.id)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue