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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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