Add feature and model specs.

This commit is contained in:
taitus
2017-07-22 01:29:05 +02:00
parent 36c76996e3
commit 56511a154a
3 changed files with 234 additions and 15 deletions

View File

@@ -314,18 +314,23 @@ class User < ActiveRecord::Base
end end
def recommended_debates def recommended_debates
Debate.tagged_with(interests, any: true). debates_list = []
where("author_id != ?", self).
order("cached_votes_total DESC").limit(3) 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 end
def recommended_proposals def recommended_proposals
already_followed_proposals_ids = Proposal.joins(:follows).where("follows.user_id = ?", id).pluck(:id)
proposals_list = [] proposals_list = []
if already_followed_proposals_ids.any? if interests.any?
proposals_list = Proposal.tagged_with(interests, any: true). already_followed_proposals_ids = Proposal.joins(:follows).where("follows.user_id = ?", id).pluck(:id)
where("author_id != ? AND id NOT IN (?)", id, already_followed_proposals_ids) proposals_list = Proposal.tagged_with(interests, any: true).where("author_id != ? AND id NOT IN (?)", id, already_followed_proposals_ids)
else else
proposals_list = Proposal.where("author_id != ?", id) proposals_list = Proposal.where("author_id != ?", id)
end end
@@ -334,11 +339,11 @@ class User < ActiveRecord::Base
end end
def recommended_budget_investments def recommended_budget_investments
already_followed_investments_ids = Budget::Investment.joins(:follows).where("follows.user_id = ?", id).pluck(:id)
investments_list = [] investments_list = []
if already_followed_investments_ids.any?
investments_list = Budget::Investment.tagged_with(interests, any: true). if interests.any?
where("author_id != ? AND id NOT IN (?)", id, already_followed_investments_ids) 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 else
investments_list = Budget::Investment.where("author_id != ?", id) investments_list = Budget::Investment.where("author_id != ?", id)
end end

View File

@@ -3,20 +3,78 @@ require 'rails_helper'
feature "Home" do feature "Home" do
feature "For not logged users" do feature "For not logged users" do
scenario 'Welcome message' do scenario 'Welcome message' do
visit root_path visit root_path
expect(page).to have_content "Love the city, and it will become a city you love" expect(page).to have_content "Love the city, and it will become a city you love"
end 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 end
feature "For signed in users" do feature "For signed in users" do
scenario 'Redirect to proposals' do
login_as(create(:user))
visit root_path
expect(current_path).to eq proposals_path before do
login_as(create(:user))
end end
feature "Recommended" do
scenario 'Display recommended text' do
debate = create(:debate)
visit root_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 end
feature 'IE alert' do feature 'IE alert' do

View File

@@ -680,4 +680,160 @@ describe User do
end end
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 end