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:
Gabriel Quaresma 2023-11-01 11:48:25 -03:00 committed by GitHub
parent 59860df04a
commit 593d95e7a8
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 33 additions and 1 deletions

View file

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

View file

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

View file

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

View file

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