docbrown/spec/services/users/suggest_recent_spec.rb

49 lines
1.7 KiB
Ruby

require "rails_helper"
RSpec.describe Users::SuggestRecent, type: :service do
let(:user) { create(:user) }
let(:suggester) { described_class.new(user) }
it "does not include calling user" do
create_list(:user, 3)
expect(suggester.suggest).not_to include(user)
end
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(["html"])
suggested_users = suggester.suggest
expect(suggested_users.size).to eq(1)
expect(suggested_users.map(&:id)).to include(article.user_id)
end
it "does not return recent producer if suspended" 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(["html"])
article.user.add_role(:suspended)
suggested_users = suggester.suggest
expect(suggested_users.size).to eq(0)
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