Add missing feature and model specs on proposal and debates.
This commit is contained in:
@@ -351,6 +351,45 @@ feature 'Debates' do
|
||||
expect(current_url).to include('order=created_at')
|
||||
expect(current_url).to include('page=1')
|
||||
end
|
||||
|
||||
context 'Recommendations' 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)
|
||||
end
|
||||
|
||||
after do
|
||||
Setting['feature.user.recommendations'] = nil
|
||||
end
|
||||
|
||||
scenario 'Debates can not ordered by recommendations when there is not an user logged', :js do
|
||||
visit debates_path
|
||||
|
||||
expect(page).not_to have_selector('a', text: 'recommendations')
|
||||
end
|
||||
|
||||
scenario 'Debates are ordered by recommendations when there is an user logged', :js do
|
||||
user = create(:user)
|
||||
login_as(user)
|
||||
|
||||
visit debates_path
|
||||
|
||||
click_link 'recommendations'
|
||||
|
||||
expect(page).to have_selector('a.active', text: 'recommendations')
|
||||
|
||||
within '#debates' do
|
||||
expect('Best').to appear_before('Medium')
|
||||
expect('Medium').to appear_before('Worst')
|
||||
end
|
||||
|
||||
expect(current_url).to include('order=recommendations')
|
||||
expect(current_url).to include('page=1')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context "Search" do
|
||||
@@ -759,6 +798,32 @@ feature 'Debates' do
|
||||
end
|
||||
end
|
||||
|
||||
scenario "Reorder by recommendations results maintaing search", :js do
|
||||
Setting['feature.user.recommendations'] = true
|
||||
user = create(:user)
|
||||
login_as(user)
|
||||
debate1 = create(:debate, title: "Show you got", cached_votes_total: 10, tag_list: "Sport")
|
||||
debate2 = create(:debate, title: "Show what you got", cached_votes_total: 1, tag_list: "Sport")
|
||||
debate3 = create(:debate, title: "Do not display with same tag", cached_votes_total: 100, tag_list: "Sport")
|
||||
debate4 = create(:debate, title: "Do not display", cached_votes_total: 1)
|
||||
proposal1 = create(:proposal, tag_list: "Sport")
|
||||
create(:follow, followable: proposal1, user: user)
|
||||
|
||||
visit debates_path
|
||||
fill_in "search", with: "Show you got"
|
||||
click_button "Search"
|
||||
click_link 'recommendations'
|
||||
expect(page).to have_selector("a.active", text: "recommendations")
|
||||
|
||||
within("#debates") do
|
||||
expect(all(".debate")[0].text).to match "Show you got"
|
||||
expect(all(".debate")[1].text).to match "Show what you got"
|
||||
expect(page).to_not have_content "Do not display with same tag"
|
||||
expect(page).to_not have_content "Do not display"
|
||||
end
|
||||
Setting['feature.user.recommendations'] = nil
|
||||
end
|
||||
|
||||
scenario 'After a search do not show featured debates' do
|
||||
featured_debates = create_featured_debates
|
||||
debate = create(:debate, title: "Abcdefghi")
|
||||
|
||||
@@ -70,6 +70,14 @@ feature "Home" do
|
||||
expect(page).to have_content debate.description
|
||||
end
|
||||
|
||||
scenario 'Display all recommended debates link' do
|
||||
debate = create(:debate)
|
||||
|
||||
visit root_path
|
||||
|
||||
expect(page).to have_link("All recommended debates", href: debates_path(order: "recommendations"))
|
||||
end
|
||||
|
||||
scenario 'Display proposal' do
|
||||
proposal = create(:proposal)
|
||||
|
||||
@@ -79,6 +87,14 @@ feature "Home" do
|
||||
expect(page).to have_content proposal.description
|
||||
end
|
||||
|
||||
scenario 'Display all recommended proposals link' do
|
||||
debate = create(:proposal)
|
||||
|
||||
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)
|
||||
|
||||
|
||||
@@ -629,6 +629,45 @@ feature 'Proposals' do
|
||||
expect(current_url).to include('order=created_at')
|
||||
expect(current_url).to include('page=1')
|
||||
end
|
||||
|
||||
context 'Recommendations' do
|
||||
|
||||
background do
|
||||
Setting['feature.user.recommendations'] = true
|
||||
create(:proposal, title: 'Best', cached_votes_up: 10)
|
||||
create(:proposal, title: 'Medium', cached_votes_up: 5)
|
||||
create(:proposal, title: 'Worst', cached_votes_up: 1)
|
||||
end
|
||||
|
||||
after do
|
||||
Setting['feature.user.recommendations'] = nil
|
||||
end
|
||||
|
||||
scenario 'Proposals can not ordered by recommendations when there is not an user logged', :js do
|
||||
visit proposals_path
|
||||
|
||||
expect(page).not_to have_selector('a', text: 'recommendations')
|
||||
end
|
||||
|
||||
scenario 'Proposals are ordered by recommendations when there is an user logged', :js do
|
||||
user = create(:user)
|
||||
login_as(user)
|
||||
|
||||
visit proposals_path
|
||||
|
||||
click_link 'recommendations'
|
||||
|
||||
expect(page).to have_selector('a.active', text: 'recommendations')
|
||||
|
||||
within '#proposals' do
|
||||
expect('Best').to appear_before('Medium')
|
||||
expect('Medium').to appear_before('Worst')
|
||||
end
|
||||
|
||||
expect(current_url).to include('order=recommendations')
|
||||
expect(current_url).to include('page=1')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
feature 'Archived proposals' do
|
||||
@@ -1164,6 +1203,32 @@ feature 'Proposals' do
|
||||
end
|
||||
end
|
||||
|
||||
scenario "Reorder by recommendations results maintaing search", :js do
|
||||
Setting['feature.user.recommendations'] = true
|
||||
user = create(:user)
|
||||
login_as(user)
|
||||
proposal1 = create(:proposal, title: "Show you got", cached_votes_up: 10, tag_list: "Sport")
|
||||
proposal2 = create(:proposal, title: "Show what you got", cached_votes_up: 1, tag_list: "Sport")
|
||||
proposal3 = create(:proposal, title: "Do not display with same tag", cached_votes_up: 100, tag_list: "Sport")
|
||||
proposal4 = create(:proposal, title: "Do not display", cached_votes_up: 1)
|
||||
proposal5 = create(:proposal, tag_list: "Sport")
|
||||
create(:follow, followable: proposal5, user: user)
|
||||
|
||||
visit proposals_path
|
||||
fill_in "search", with: "Show you got"
|
||||
click_button "Search"
|
||||
click_link 'recommendations'
|
||||
expect(page).to have_selector("a.active", text: "recommendations")
|
||||
|
||||
within("#proposals") do
|
||||
expect(all(".proposal")[0].text).to match "Show you got"
|
||||
expect(all(".proposal")[1].text).to match "Show what you got"
|
||||
expect(page).to_not have_content "Do not display with same tag"
|
||||
expect(page).to_not have_content "Do not display"
|
||||
end
|
||||
Setting['feature.user.recommendations'] = nil
|
||||
end
|
||||
|
||||
scenario 'After a search do not show featured proposals' do
|
||||
featured_proposals = create_featured_proposals
|
||||
proposal = create(:proposal, title: "Abcdefghi")
|
||||
|
||||
@@ -714,4 +714,49 @@ describe Debate do
|
||||
end
|
||||
end
|
||||
|
||||
describe "#recommendations" do
|
||||
|
||||
let(:user) { create(:user) }
|
||||
|
||||
it "Should return up to 4 debates" do
|
||||
create_list(:debate, 4)
|
||||
|
||||
expect(Debate.recommendations(user).size).to eq 4
|
||||
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 = Debate.recommendations(user).sort_by_recommendations
|
||||
|
||||
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 = Debate.recommendations(user)
|
||||
|
||||
expect(result.size).to eq 1
|
||||
expect(result).to eq [debate1]
|
||||
end
|
||||
|
||||
it "Should not return debates when user is the author" do
|
||||
debate1 = create(:debate, author: user)
|
||||
debate2 = create(:debate)
|
||||
|
||||
result = Debate.recommendations(user)
|
||||
|
||||
expect(result.size).to eq 1
|
||||
expect(result).to eq [debate2]
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
@@ -879,4 +879,59 @@ describe Proposal do
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
describe "#recommendations" do
|
||||
|
||||
let(:user) { create(:user) }
|
||||
|
||||
it "Should return up to 4 proposals" do
|
||||
create_list(:proposal, 4)
|
||||
|
||||
expect(Proposal.recommendations(user).size).to eq 4
|
||||
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 = Proposal.recommendations(user).sort_by_recommendations
|
||||
|
||||
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 = Proposal.recommendations(user)
|
||||
|
||||
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 = Proposal.recommendations(user)
|
||||
|
||||
expect(result.size).to eq 0
|
||||
end
|
||||
|
||||
it "Should not return proposals when user is the author" do
|
||||
proposal1 = create(:proposal, author: user)
|
||||
proposal2 = create(:proposal)
|
||||
|
||||
result = Proposal.recommendations(user)
|
||||
|
||||
expect(result.size).to eq 1
|
||||
expect(result).to eq [proposal2]
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
@@ -681,105 +681,4 @@ describe User do
|
||||
|
||||
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 the 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 proposals" 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 the 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
|
||||
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user