Refactor:Replace Production Check with Average Metrics (#11096)
This commit is contained in:
parent
025c5213d1
commit
40ecfd6f0f
2 changed files with 38 additions and 10 deletions
|
|
@ -23,7 +23,7 @@ module Suggester
|
|||
def tagged_article_user_ids(num_weeks = 1)
|
||||
Article.published
|
||||
.tagged_with(user.decorate.cached_followed_tag_names.sample(5), any: true)
|
||||
.where("score > ? AND published_at > ?", article_reaction_count, num_weeks.weeks.ago)
|
||||
.where("score >= ? AND published_at >= ?", article_score_average, num_weeks.weeks.ago)
|
||||
.pluck(:user_id)
|
||||
.each_with_object(Hash.new(0)) { |value, counts| counts[value] += 1 }
|
||||
.sort_by { |_key, value| value }
|
||||
|
|
@ -39,7 +39,7 @@ module Suggester
|
|||
|
||||
def recent_top_producers
|
||||
relation = User.where(
|
||||
"articles_count > ? AND comments_count > ?",
|
||||
"articles_count >= ? AND comments_count >= ?",
|
||||
established_user_article_count, established_user_comment_count
|
||||
)
|
||||
relation = relation.select(attributes_to_select) if attributes_to_select
|
||||
|
|
@ -55,15 +55,21 @@ module Suggester
|
|||
end
|
||||
|
||||
def established_user_article_count
|
||||
Rails.env.production? ? 4 : -1
|
||||
Rails.cache.fetch("established_user_article_count", expires_in: 1.day) do
|
||||
User.where("articles_count > 0").average(:articles_count) || User.average(:articles_count)
|
||||
end
|
||||
end
|
||||
|
||||
def established_user_comment_count
|
||||
Rails.env.production? ? 4 : -1
|
||||
Rails.cache.fetch("established_user_comment_count", expires_in: 1.day) do
|
||||
User.where("comments_count > 0").average(:comments_count) || User.average(:comments_count)
|
||||
end
|
||||
end
|
||||
|
||||
def article_reaction_count
|
||||
Rails.env.production? ? 15 : -1
|
||||
def article_score_average
|
||||
Rails.cache.fetch("article_score_average", expires_in: 1.day) do
|
||||
Article.where("score >= 0").average(:score) || Article.average(:score)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -2,14 +2,36 @@ require "rails_helper"
|
|||
|
||||
RSpec.describe Suggester::Users::Recent, type: :service, vcr: {} do
|
||||
let(:user) { create(:user) }
|
||||
let(:suggester) { described_class.new(user) }
|
||||
|
||||
it "does not include calling user" do
|
||||
create_list(:user, 3)
|
||||
expect(described_class.new(user).suggest).not_to include(user)
|
||||
expect(suggester.suggest).not_to include(user)
|
||||
end
|
||||
|
||||
it "returns the same number created" do
|
||||
create_list(:user, 3)
|
||||
expect(described_class.new(user).suggest.size).to eq(3)
|
||||
context "with cached_followed_tags" do
|
||||
it "returns recent producers" do
|
||||
articles = create_list(:article, 3, score: 10)
|
||||
article = articles.last
|
||||
article.update(score: 100)
|
||||
allow(user).to receive(:decorate).and_return(user)
|
||||
allow(user).to receive(:cached_followed_tag_names).and_return(["css"])
|
||||
|
||||
suggested_users = suggester.suggest
|
||||
expect(suggested_users.size).to eq(1)
|
||||
expect(suggested_users.map(&:id)).to include(article.user_id)
|
||||
end
|
||||
end
|
||||
|
||||
context "without cached_followed_tags" do
|
||||
it "returns recent_commenters and recent top producers" do
|
||||
productive_user = create(:user, comments_count: 1, articles_count: 1)
|
||||
unproductive_user = create(:user, comments_count: 0, articles_count: 0)
|
||||
|
||||
suggested_users = suggester.suggest
|
||||
expect(suggested_users.size).to eq(1)
|
||||
expect(suggested_users.map(&:id)).to include(productive_user.id)
|
||||
expect(suggested_users.map(&:id)).not_to include(unproductive_user.id)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue