Refactor specs because now recommendations only return results asociated to user interests
This commit is contained in:
@@ -48,13 +48,8 @@ class Debate < ActiveRecord::Base
|
||||
attr_accessor :link_required
|
||||
|
||||
def self.recommendations(user)
|
||||
debates_list = where("author_id != ?", user.id)
|
||||
debates_list_with_tagged = debates_list.joins(:tags).where('taggings.taggable_type = ?', self.name).where('tags.name IN (?)', user.interests)
|
||||
if debates_list_with_tagged.any?
|
||||
debates_list = debates_list_with_tagged.group('debates.id')
|
||||
end
|
||||
|
||||
debates_list
|
||||
tagged_with(user.interests, any: true).
|
||||
where("author_id != ?", user.id)
|
||||
end
|
||||
|
||||
def searchable_values
|
||||
|
||||
@@ -86,7 +86,7 @@ class User < ActiveRecord::Base
|
||||
end
|
||||
|
||||
def debate_votes(debates)
|
||||
voted = votes.for_debates(debates)
|
||||
voted = votes.for_debates(Array(debates).map(&:id))
|
||||
voted.each_with_object({}) { |v, h| h[v.votable_id] = v.value }
|
||||
end
|
||||
|
||||
|
||||
@@ -356,9 +356,9 @@ feature 'Debates' do
|
||||
|
||||
background do
|
||||
Setting['feature.user.recommendations'] = true
|
||||
create(:debate, title: 'Best', cached_votes_total: 10)
|
||||
create(:debate, title: 'Medium', cached_votes_total: 5)
|
||||
create(:debate, title: 'Worst', cached_votes_total: 1)
|
||||
create(:debate, title: 'Best', cached_votes_total: 10, tag_list: "Sport")
|
||||
create(:debate, title: 'Medium', cached_votes_total: 5, tag_list: "Sport")
|
||||
create(:debate, title: 'Worst', cached_votes_total: 1, tag_list: "Sport")
|
||||
end
|
||||
|
||||
after do
|
||||
@@ -372,7 +372,9 @@ feature 'Debates' do
|
||||
end
|
||||
|
||||
scenario 'Debates are ordered by recommendations when there is a user logged', :js do
|
||||
proposal = create(:proposal, tag_list: "Sport" )
|
||||
user = create(:user)
|
||||
create(:follow, followable: proposal, user: user)
|
||||
login_as(user)
|
||||
|
||||
visit debates_path
|
||||
|
||||
@@ -23,13 +23,18 @@ feature "Home" do
|
||||
feature "For signed in users" do
|
||||
|
||||
before do
|
||||
login_as(create(:user))
|
||||
# user = create(:user)
|
||||
# login_as(user)
|
||||
end
|
||||
|
||||
feature "Recommended" do
|
||||
|
||||
background do
|
||||
Setting['feature.user.recommendations'] = true
|
||||
user = create(:user)
|
||||
proposal = create(:proposal, tag_list: "Sport" )
|
||||
create(:follow, followable: proposal, user: user)
|
||||
login_as(user)
|
||||
end
|
||||
|
||||
after do
|
||||
@@ -37,19 +42,19 @@ feature "Home" do
|
||||
end
|
||||
|
||||
scenario 'Display recommended section' do
|
||||
debate = create(:debate)
|
||||
debate = create(:debate, tag_list: "Sport")
|
||||
visit root_path
|
||||
expect(page).to have_content "Recommendations that may interest you"
|
||||
end
|
||||
|
||||
scenario 'Display recommended section when feature flag recommended is active' do
|
||||
debate = create(:debate)
|
||||
debate = create(:debate, tag_list: "Sport")
|
||||
visit root_path
|
||||
expect(page).to have_content "Recommendations that may interest you"
|
||||
end
|
||||
|
||||
scenario 'Not display recommended section when feature flag recommended is not active' do
|
||||
debate = create(:debate)
|
||||
debate = create(:debate, tag_list: "Sport")
|
||||
Setting['feature.user.recommendations'] = false
|
||||
|
||||
visit root_path
|
||||
@@ -58,7 +63,7 @@ feature "Home" do
|
||||
end
|
||||
|
||||
scenario 'Display debates' do
|
||||
debate = create(:debate)
|
||||
debate = create(:debate, tag_list: "Sport")
|
||||
|
||||
visit root_path
|
||||
|
||||
@@ -67,13 +72,13 @@ feature "Home" do
|
||||
end
|
||||
|
||||
scenario 'Display all recommended debates link' do
|
||||
debate = create(:debate)
|
||||
debate = create(:debate, tag_list: "Sport")
|
||||
visit root_path
|
||||
expect(page).to have_link("All recommended debates", href: debates_path(order: "recommendations"))
|
||||
end
|
||||
|
||||
scenario 'Display proposal' do
|
||||
proposal = create(:proposal)
|
||||
proposal = create(:proposal, tag_list: "Sport")
|
||||
|
||||
visit root_path
|
||||
|
||||
@@ -82,13 +87,13 @@ feature "Home" do
|
||||
end
|
||||
|
||||
scenario 'Display all recommended proposals link' do
|
||||
debate = create(:proposal)
|
||||
debate = create(:proposal, tag_list: "Sport")
|
||||
visit root_path
|
||||
expect(page).to have_link("All recommended proposals", href: proposals_path(order: "recommendations"))
|
||||
end
|
||||
|
||||
scenario 'Display orbit carrousel' do
|
||||
debate = create_list(:debate, 3)
|
||||
create_list(:debate, 3, tag_list: "Sport")
|
||||
|
||||
visit root_path
|
||||
|
||||
@@ -98,7 +103,7 @@ feature "Home" do
|
||||
end
|
||||
|
||||
scenario 'Display recommended show when click on carousel' do
|
||||
debate = create(:debate)
|
||||
debate = create(:debate, tag_list: "Sport")
|
||||
|
||||
visit root_path
|
||||
click_on debate.title
|
||||
@@ -114,14 +119,14 @@ feature "Home" do
|
||||
feature 'Carousel size' do
|
||||
|
||||
scenario 'Display debates centered when there are no proposals' do
|
||||
debate = create(:debate)
|
||||
debate = create(:debate, tag_list: "Sport")
|
||||
visit root_path
|
||||
expect(page).to have_selector('.medium-centered.large-centered')
|
||||
end
|
||||
|
||||
scenario 'Correct display debates and proposals' do
|
||||
proposal = create(:proposal)
|
||||
debates = create(:debate)
|
||||
proposal = create(:proposal, tag_list: "Sport")
|
||||
debates = create(:debate, tag_list: "Sport")
|
||||
|
||||
visit root_path
|
||||
|
||||
|
||||
@@ -718,16 +718,18 @@ describe Debate do
|
||||
|
||||
let(:user) { create(:user) }
|
||||
|
||||
it "Should return up to 4 debates" do
|
||||
create_list(:debate, 4)
|
||||
it "Should not return any debates when user has not interests" do
|
||||
create(:debate)
|
||||
|
||||
expect(Debate.recommendations(user).size).to eq 4
|
||||
expect(Debate.recommendations(user).size).to eq 0
|
||||
end
|
||||
|
||||
it "Should return debates ordered by cached_votes_total" do
|
||||
debate1 = create(:debate, cached_votes_total: 1 )
|
||||
debate2 = create(:debate, cached_votes_total: 5 )
|
||||
debate3 = create(:debate, cached_votes_total: 10 )
|
||||
debate1 = create(:debate, cached_votes_total: 1, tag_list: "Sport" )
|
||||
debate2 = create(:debate, cached_votes_total: 5, tag_list: "Sport" )
|
||||
debate3 = create(:debate, cached_votes_total: 10, tag_list: "Sport" )
|
||||
proposal = create(:proposal, tag_list: "Sport" )
|
||||
create(:follow, followable: proposal, user: user)
|
||||
|
||||
result = Debate.recommendations(user).sort_by_recommendations
|
||||
|
||||
@@ -749,8 +751,10 @@ describe Debate do
|
||||
end
|
||||
|
||||
it "Should not return debates when user is the author" do
|
||||
debate1 = create(:debate, author: user)
|
||||
debate2 = create(:debate)
|
||||
debate1 = create(:debate, author: user, tag_list: "Sport")
|
||||
debate2 = create(:debate, tag_list: "Sport")
|
||||
proposal = create(:proposal, tag_list: "Sport" )
|
||||
create(:follow, followable: proposal, user: user)
|
||||
|
||||
result = Debate.recommendations(user)
|
||||
|
||||
|
||||
@@ -884,16 +884,18 @@ describe Proposal do
|
||||
|
||||
let(:user) { create(:user) }
|
||||
|
||||
it "Should return up to 4 proposals" do
|
||||
create_list(:proposal, 4)
|
||||
it "Should not return any proposals when user has not interests" do
|
||||
create(:proposal)
|
||||
|
||||
expect(Proposal.recommendations(user).size).to eq 4
|
||||
expect(Proposal.recommendations(user).size).to eq 0
|
||||
end
|
||||
|
||||
it "Should return proposals ordered by cached_votes_up" do
|
||||
proposal1 = create(:proposal, cached_votes_up: 1 )
|
||||
proposal2 = create(:proposal, cached_votes_up: 5 )
|
||||
proposal3 = create(:proposal, cached_votes_up: 10 )
|
||||
proposal1 = create(:proposal, cached_votes_up: 1, tag_list: "Sport" )
|
||||
proposal2 = create(:proposal, cached_votes_up: 5, tag_list: "Sport" )
|
||||
proposal3 = create(:proposal, cached_votes_up: 10, tag_list: "Sport" )
|
||||
proposal4 = create(:proposal, tag_list: "Sport" )
|
||||
create(:follow, followable: proposal4, user: user)
|
||||
|
||||
result = Proposal.recommendations(user).sort_by_recommendations
|
||||
|
||||
@@ -924,8 +926,10 @@ describe Proposal do
|
||||
end
|
||||
|
||||
it "Should not return proposals when user is the author" do
|
||||
proposal1 = create(:proposal, author: user)
|
||||
proposal2 = create(:proposal)
|
||||
proposal1 = create(:proposal, author: user, tag_list: "Sport")
|
||||
proposal2 = create(:proposal, tag_list: "Sport")
|
||||
proposal3 = create(:proposal, tag_list: "Sport")
|
||||
create(:follow, followable: proposal3, user: user)
|
||||
|
||||
result = Proposal.recommendations(user)
|
||||
|
||||
|
||||
@@ -11,7 +11,9 @@ RSpec.describe "welcome/index" do
|
||||
image_field: nil,
|
||||
image_version: nil,
|
||||
image_default: "https://dummyimage.com/600x400/000/fff",
|
||||
carousel_size: "medium-6 large-6 medium-centered large-centered"}
|
||||
carousel_size: "medium-6 large-6 medium-centered large-centered",
|
||||
btn_text_link: t("welcome.recommended.debates.btn_text_link"),
|
||||
btn_path_link: debates_path(order: "recommendations")}
|
||||
|
||||
within 'li[data-slide="0"] .card' do
|
||||
expect(page).to have_selector("img")
|
||||
@@ -28,7 +30,9 @@ RSpec.describe "welcome/index" do
|
||||
image_field: nil,
|
||||
image_version: nil,
|
||||
image_default: nil,
|
||||
carousel_size: "medium-6 large-6 medium-centered large-centered"}
|
||||
carousel_size: "medium-6 large-6 medium-centered large-centered",
|
||||
btn_text_link: t("welcome.recommended.debates.btn_text_link"),
|
||||
btn_path_link: debates_path(order: "recommendations")}
|
||||
|
||||
within 'li[data-slide="0"] .card' do
|
||||
expect(page).not_to have_selector("img")
|
||||
|
||||
Reference in New Issue
Block a user