Refactor specs because now recommendations only return results asociated to user interests

This commit is contained in:
taitus
2017-08-03 00:23:06 +02:00
parent 43b636de09
commit edbbe6174b
7 changed files with 56 additions and 42 deletions

View File

@@ -48,13 +48,8 @@ class Debate < ActiveRecord::Base
attr_accessor :link_required attr_accessor :link_required
def self.recommendations(user) def self.recommendations(user)
debates_list = where("author_id != ?", user.id) tagged_with(user.interests, any: true).
debates_list_with_tagged = debates_list.joins(:tags).where('taggings.taggable_type = ?', self.name).where('tags.name IN (?)', user.interests) where("author_id != ?", user.id)
if debates_list_with_tagged.any?
debates_list = debates_list_with_tagged.group('debates.id')
end
debates_list
end end
def searchable_values def searchable_values

View File

@@ -86,7 +86,7 @@ class User < ActiveRecord::Base
end end
def debate_votes(debates) 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 } voted.each_with_object({}) { |v, h| h[v.votable_id] = v.value }
end end

View File

@@ -356,9 +356,9 @@ feature 'Debates' do
background do background do
Setting['feature.user.recommendations'] = true Setting['feature.user.recommendations'] = true
create(:debate, title: 'Best', cached_votes_total: 10) create(:debate, title: 'Best', cached_votes_total: 10, tag_list: "Sport")
create(:debate, title: 'Medium', cached_votes_total: 5) create(:debate, title: 'Medium', cached_votes_total: 5, tag_list: "Sport")
create(:debate, title: 'Worst', cached_votes_total: 1) create(:debate, title: 'Worst', cached_votes_total: 1, tag_list: "Sport")
end end
after do after do
@@ -372,7 +372,9 @@ feature 'Debates' do
end end
scenario 'Debates are ordered by recommendations when there is a user logged', :js do scenario 'Debates are ordered by recommendations when there is a user logged', :js do
proposal = create(:proposal, tag_list: "Sport" )
user = create(:user) user = create(:user)
create(:follow, followable: proposal, user: user)
login_as(user) login_as(user)
visit debates_path visit debates_path

View File

@@ -23,13 +23,18 @@ feature "Home" do
feature "For signed in users" do feature "For signed in users" do
before do before do
login_as(create(:user)) # user = create(:user)
# login_as(user)
end end
feature "Recommended" do feature "Recommended" do
background do background do
Setting['feature.user.recommendations'] = true Setting['feature.user.recommendations'] = true
user = create(:user)
proposal = create(:proposal, tag_list: "Sport" )
create(:follow, followable: proposal, user: user)
login_as(user)
end end
after do after do
@@ -37,19 +42,19 @@ feature "Home" do
end end
scenario 'Display recommended section' do scenario 'Display recommended section' do
debate = create(:debate) debate = create(:debate, tag_list: "Sport")
visit root_path visit root_path
expect(page).to have_content "Recommendations that may interest you" expect(page).to have_content "Recommendations that may interest you"
end end
scenario 'Display recommended section when feature flag recommended is active' do scenario 'Display recommended section when feature flag recommended is active' do
debate = create(:debate) debate = create(:debate, tag_list: "Sport")
visit root_path visit root_path
expect(page).to have_content "Recommendations that may interest you" expect(page).to have_content "Recommendations that may interest you"
end end
scenario 'Not display recommended section when feature flag recommended is not active' do 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 Setting['feature.user.recommendations'] = false
visit root_path visit root_path
@@ -58,7 +63,7 @@ feature "Home" do
end end
scenario 'Display debates' do scenario 'Display debates' do
debate = create(:debate) debate = create(:debate, tag_list: "Sport")
visit root_path visit root_path
@@ -67,13 +72,13 @@ feature "Home" do
end end
scenario 'Display all recommended debates link' do scenario 'Display all recommended debates link' do
debate = create(:debate) debate = create(:debate, tag_list: "Sport")
visit root_path visit root_path
expect(page).to have_link("All recommended debates", href: debates_path(order: "recommendations")) expect(page).to have_link("All recommended debates", href: debates_path(order: "recommendations"))
end end
scenario 'Display proposal' do scenario 'Display proposal' do
proposal = create(:proposal) proposal = create(:proposal, tag_list: "Sport")
visit root_path visit root_path
@@ -82,13 +87,13 @@ feature "Home" do
end end
scenario 'Display all recommended proposals link' do scenario 'Display all recommended proposals link' do
debate = create(:proposal) debate = create(:proposal, tag_list: "Sport")
visit root_path visit root_path
expect(page).to have_link("All recommended proposals", href: proposals_path(order: "recommendations")) expect(page).to have_link("All recommended proposals", href: proposals_path(order: "recommendations"))
end end
scenario 'Display orbit carrousel' do scenario 'Display orbit carrousel' do
debate = create_list(:debate, 3) create_list(:debate, 3, tag_list: "Sport")
visit root_path visit root_path
@@ -98,7 +103,7 @@ feature "Home" do
end end
scenario 'Display recommended show when click on carousel' do scenario 'Display recommended show when click on carousel' do
debate = create(:debate) debate = create(:debate, tag_list: "Sport")
visit root_path visit root_path
click_on debate.title click_on debate.title
@@ -114,14 +119,14 @@ feature "Home" do
feature 'Carousel size' do feature 'Carousel size' do
scenario 'Display debates centered when there are no proposals' do scenario 'Display debates centered when there are no proposals' do
debate = create(:debate) debate = create(:debate, tag_list: "Sport")
visit root_path visit root_path
expect(page).to have_selector('.medium-centered.large-centered') expect(page).to have_selector('.medium-centered.large-centered')
end end
scenario 'Correct display debates and proposals' do scenario 'Correct display debates and proposals' do
proposal = create(:proposal) proposal = create(:proposal, tag_list: "Sport")
debates = create(:debate) debates = create(:debate, tag_list: "Sport")
visit root_path visit root_path

View File

@@ -718,16 +718,18 @@ describe Debate do
let(:user) { create(:user) } let(:user) { create(:user) }
it "Should return up to 4 debates" do it "Should not return any debates when user has not interests" do
create_list(:debate, 4) create(:debate)
expect(Debate.recommendations(user).size).to eq 4 expect(Debate.recommendations(user).size).to eq 0
end end
it "Should return debates ordered by cached_votes_total" do it "Should return debates ordered by cached_votes_total" do
debate1 = create(:debate, cached_votes_total: 1 ) debate1 = create(:debate, cached_votes_total: 1, tag_list: "Sport" )
debate2 = create(:debate, cached_votes_total: 5 ) debate2 = create(:debate, cached_votes_total: 5, tag_list: "Sport" )
debate3 = create(:debate, cached_votes_total: 10 ) 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 result = Debate.recommendations(user).sort_by_recommendations
@@ -749,8 +751,10 @@ describe Debate do
end end
it "Should not return debates when user is the author" do it "Should not return debates when user is the author" do
debate1 = create(:debate, author: user) debate1 = create(:debate, author: user, tag_list: "Sport")
debate2 = create(:debate) debate2 = create(:debate, tag_list: "Sport")
proposal = create(:proposal, tag_list: "Sport" )
create(:follow, followable: proposal, user: user)
result = Debate.recommendations(user) result = Debate.recommendations(user)

View File

@@ -884,16 +884,18 @@ describe Proposal do
let(:user) { create(:user) } let(:user) { create(:user) }
it "Should return up to 4 proposals" do it "Should not return any proposals when user has not interests" do
create_list(:proposal, 4) create(:proposal)
expect(Proposal.recommendations(user).size).to eq 4 expect(Proposal.recommendations(user).size).to eq 0
end end
it "Should return proposals ordered by cached_votes_up" do it "Should return proposals ordered by cached_votes_up" do
proposal1 = create(:proposal, cached_votes_up: 1 ) proposal1 = create(:proposal, cached_votes_up: 1, tag_list: "Sport" )
proposal2 = create(:proposal, cached_votes_up: 5 ) proposal2 = create(:proposal, cached_votes_up: 5, tag_list: "Sport" )
proposal3 = create(:proposal, cached_votes_up: 10 ) 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 result = Proposal.recommendations(user).sort_by_recommendations
@@ -924,8 +926,10 @@ describe Proposal do
end end
it "Should not return proposals when user is the author" do it "Should not return proposals when user is the author" do
proposal1 = create(:proposal, author: user) proposal1 = create(:proposal, author: user, tag_list: "Sport")
proposal2 = create(:proposal) proposal2 = create(:proposal, tag_list: "Sport")
proposal3 = create(:proposal, tag_list: "Sport")
create(:follow, followable: proposal3, user: user)
result = Proposal.recommendations(user) result = Proposal.recommendations(user)

View File

@@ -11,7 +11,9 @@ RSpec.describe "welcome/index" do
image_field: nil, image_field: nil,
image_version: nil, image_version: nil,
image_default: "https://dummyimage.com/600x400/000/fff", 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 within 'li[data-slide="0"] .card' do
expect(page).to have_selector("img") expect(page).to have_selector("img")
@@ -28,7 +30,9 @@ RSpec.describe "welcome/index" do
image_field: nil, image_field: nil,
image_version: nil, image_version: nil,
image_default: 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 within 'li[data-slide="0"] .card' do
expect(page).not_to have_selector("img") expect(page).not_to have_selector("img")