Add feature and model specs.
This commit is contained in:
@@ -314,18 +314,23 @@ class User < ActiveRecord::Base
|
||||
end
|
||||
|
||||
def recommended_debates
|
||||
Debate.tagged_with(interests, any: true).
|
||||
where("author_id != ?", self).
|
||||
order("cached_votes_total DESC").limit(3)
|
||||
debates_list = []
|
||||
|
||||
if interests.any?
|
||||
debates_list = Debate.tagged_with(interests, any: true).where("author_id != ?", self)
|
||||
else
|
||||
debates_list = Debate.where("author_id != ?", self)
|
||||
end
|
||||
|
||||
debates_list.order("cached_votes_total DESC").limit(3)
|
||||
end
|
||||
|
||||
def recommended_proposals
|
||||
already_followed_proposals_ids = Proposal.joins(:follows).where("follows.user_id = ?", id).pluck(:id)
|
||||
proposals_list = []
|
||||
|
||||
if already_followed_proposals_ids.any?
|
||||
proposals_list = Proposal.tagged_with(interests, any: true).
|
||||
where("author_id != ? AND id NOT IN (?)", id, already_followed_proposals_ids)
|
||||
if interests.any?
|
||||
already_followed_proposals_ids = Proposal.joins(:follows).where("follows.user_id = ?", id).pluck(:id)
|
||||
proposals_list = Proposal.tagged_with(interests, any: true).where("author_id != ? AND id NOT IN (?)", id, already_followed_proposals_ids)
|
||||
else
|
||||
proposals_list = Proposal.where("author_id != ?", id)
|
||||
end
|
||||
@@ -334,11 +339,11 @@ class User < ActiveRecord::Base
|
||||
end
|
||||
|
||||
def recommended_budget_investments
|
||||
already_followed_investments_ids = Budget::Investment.joins(:follows).where("follows.user_id = ?", id).pluck(:id)
|
||||
investments_list = []
|
||||
if already_followed_investments_ids.any?
|
||||
investments_list = Budget::Investment.tagged_with(interests, any: true).
|
||||
where("author_id != ? AND id NOT IN (?)", id, already_followed_investments_ids)
|
||||
|
||||
if interests.any?
|
||||
already_followed_investments_ids = Budget::Investment.joins(:follows).where("follows.user_id = ?", id).pluck(:id)
|
||||
investments_list = Budget::Investment.tagged_with(interests, any: true).where("author_id != ? AND id NOT IN (?)", id, already_followed_investments_ids)
|
||||
else
|
||||
investments_list = Budget::Investment.where("author_id != ?", id)
|
||||
end
|
||||
|
||||
@@ -3,20 +3,78 @@ require 'rails_helper'
|
||||
feature "Home" do
|
||||
|
||||
feature "For not logged users" do
|
||||
|
||||
scenario 'Welcome message' do
|
||||
visit root_path
|
||||
|
||||
expect(page).to have_content "Love the city, and it will become a city you love"
|
||||
end
|
||||
|
||||
scenario 'Not display recommended text' do
|
||||
debate = create(:debate)
|
||||
|
||||
visit root_path
|
||||
|
||||
expect(page).not_to have_content "Recommendations that may interest you"
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
feature "For signed in users" do
|
||||
scenario 'Redirect to proposals' do
|
||||
|
||||
before do
|
||||
login_as(create(:user))
|
||||
end
|
||||
|
||||
feature "Recommended" do
|
||||
|
||||
scenario 'Display recommended text' do
|
||||
debate = create(:debate)
|
||||
|
||||
visit root_path
|
||||
|
||||
expect(current_path).to eq proposals_path
|
||||
expect(page).to have_content "Recommendations that may interest you"
|
||||
end
|
||||
|
||||
scenario 'Display debates' do
|
||||
debate = create(:debate)
|
||||
|
||||
visit root_path
|
||||
|
||||
expect(page).to have_content debate.title
|
||||
expect(page).to have_content debate.description
|
||||
end
|
||||
|
||||
scenario 'Display proposal' do
|
||||
proposal = create(:proposal)
|
||||
|
||||
visit root_path
|
||||
|
||||
expect(page).to have_content proposal.title
|
||||
expect(page).to have_content proposal.description
|
||||
end
|
||||
|
||||
scenario 'Display investments' do
|
||||
budget_investment = create(:budget_investment)
|
||||
|
||||
visit root_path
|
||||
|
||||
expect(page).to have_content budget_investment.title
|
||||
expect(page).to have_content budget_investment.description
|
||||
end
|
||||
|
||||
scenario 'Display orbit carrousel' do
|
||||
debate = create_list(:debate, 3)
|
||||
|
||||
visit root_path
|
||||
|
||||
expect(page).to have_selector('li[data-slide="0"]')
|
||||
expect(page).to have_selector('li[data-slide="1"]', visible: false)
|
||||
expect(page).to have_selector('li[data-slide="2"]', visible: false)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
feature 'IE alert' do
|
||||
|
||||
@@ -680,4 +680,160 @@ describe User do
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
describe "#recommended_debates" do
|
||||
|
||||
let(:user) { create(:user) }
|
||||
|
||||
it "Should return up to 3 debates" do
|
||||
create_list(:debate, 4)
|
||||
|
||||
expect(user.recommended_debates.size).to eq 3
|
||||
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 )
|
||||
|
||||
result = user.recommended_debates
|
||||
|
||||
expect(result.first).to eq debate3
|
||||
expect(result.second).to eq debate2
|
||||
expect(result.third).to eq debate1
|
||||
end
|
||||
|
||||
it "Should return debates related with user interests" do
|
||||
debate1 = create(:debate, tag_list: "Sport")
|
||||
debate2 = create(:debate, tag_list: "Politics")
|
||||
proposal1 = create(:proposal, tag_list: "Sport")
|
||||
create(:follow, followable: proposal1, user: user)
|
||||
|
||||
result = user.recommended_debates
|
||||
|
||||
expect(result.size).to eq 1
|
||||
expect(result).to eq [debate1]
|
||||
end
|
||||
|
||||
it "Should not return debates when user is an author" do
|
||||
debate1 = create(:debate, author: user)
|
||||
debate2 = create(:debate)
|
||||
|
||||
result = user.recommended_debates
|
||||
|
||||
expect(result.size).to eq 1
|
||||
expect(result).to eq [debate2]
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
describe "#recommended_proposals" do
|
||||
|
||||
let(:user) { create(:user) }
|
||||
|
||||
it "Should return up to 3 debates" do
|
||||
create_list(:proposal, 4)
|
||||
|
||||
expect(user.recommended_proposals.size).to eq 3
|
||||
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 )
|
||||
|
||||
result = user.recommended_proposals
|
||||
|
||||
expect(result.first).to eq proposal3
|
||||
expect(result.second).to eq proposal2
|
||||
expect(result.third).to eq proposal1
|
||||
end
|
||||
|
||||
it "Should return proposals related with user interests" do
|
||||
proposal1 = create(:proposal, tag_list: "Sport")
|
||||
proposal2 = create(:proposal, tag_list: "Sport")
|
||||
proposal3 = create(:proposal, tag_list: "Politics")
|
||||
create(:follow, followable: proposal1, user: user)
|
||||
|
||||
result = user.recommended_proposals
|
||||
|
||||
expect(result.size).to eq 1
|
||||
expect(result).to eq [proposal2]
|
||||
end
|
||||
|
||||
it "Should not return proposals when user is follower" do
|
||||
proposal1 = create(:proposal, tag_list: "Sport")
|
||||
create(:follow, followable: proposal1, user: user)
|
||||
|
||||
result = user.recommended_proposals
|
||||
|
||||
expect(result.size).to eq 0
|
||||
end
|
||||
|
||||
it "Should not return proposals when user is an author" do
|
||||
proposal1 = create(:proposal, author: user)
|
||||
proposal2 = create(:proposal)
|
||||
|
||||
result = user.recommended_proposals
|
||||
|
||||
expect(result.size).to eq 1
|
||||
expect(result).to eq [proposal2]
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
describe "#recommended_budget_investments" do
|
||||
|
||||
let(:user) { create(:user) }
|
||||
|
||||
it "Should return up to 3 debates" do
|
||||
create_list(:budget_investment, 4)
|
||||
|
||||
expect(user.recommended_budget_investments.size).to eq 3
|
||||
end
|
||||
|
||||
it "Should return budget_investments ordered by cached_votes_up" do
|
||||
budget_investment1 = create(:budget_investment, cached_votes_up: 1 )
|
||||
budget_investment2 = create(:budget_investment, cached_votes_up: 5 )
|
||||
budget_investment3 = create(:budget_investment, cached_votes_up: 10 )
|
||||
|
||||
result = user.recommended_budget_investments
|
||||
|
||||
expect(result.first).to eq budget_investment3
|
||||
expect(result.second).to eq budget_investment2
|
||||
expect(result.third).to eq budget_investment1
|
||||
end
|
||||
|
||||
it "Should return budget_investments related with user interests" do
|
||||
budget_investment1 = create(:budget_investment, tag_list: "Sport")
|
||||
budget_investment2 = create(:budget_investment, tag_list: "Sport")
|
||||
budget_investment3 = create(:budget_investment, tag_list: "Politics")
|
||||
create(:follow, followable: budget_investment1, user: user)
|
||||
|
||||
result = user.recommended_budget_investments
|
||||
|
||||
expect(result.size).to eq 1
|
||||
expect(result).to eq [budget_investment2]
|
||||
end
|
||||
|
||||
it "Should not return budget_investments when user is follower" do
|
||||
budget_investment1 = create(:budget_investment, tag_list: "Sport")
|
||||
create(:follow, followable: budget_investment1, user: user)
|
||||
|
||||
result = user.recommended_budget_investments
|
||||
|
||||
expect(result.size).to eq 0
|
||||
end
|
||||
|
||||
it "Should not return budget_investments when user is an author" do
|
||||
budget_investment1 = create(:budget_investment, author: user)
|
||||
budget_investment2 = create(:budget_investment)
|
||||
|
||||
result = user.recommended_budget_investments
|
||||
|
||||
expect(result.size).to eq 1
|
||||
expect(result).to eq [budget_investment2]
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user