Simplify creating follows in specs
While in theory we wouldn't need to use the `transient` nor the `after(:create)` because there's already a `has_many :through` association with followers, Factory Bot / ActiveRecord don't automatically associate the followable, resulting in an invalid record exception.
This commit is contained in:
@@ -184,10 +184,14 @@ FactoryBot.define do
|
|||||||
after(:create) { |investment| create(:image, imageable: investment) }
|
after(:create) { |investment| create(:image, imageable: investment) }
|
||||||
end
|
end
|
||||||
|
|
||||||
transient { voters { [] } }
|
transient do
|
||||||
|
voters { [] }
|
||||||
|
followers { [] }
|
||||||
|
end
|
||||||
|
|
||||||
after(:create) do |investment, evaluator|
|
after(:create) do |investment, evaluator|
|
||||||
evaluator.voters.each { |voter| create(:vote, votable: investment, voter: voter) }
|
evaluator.voters.each { |voter| create(:vote, votable: investment, voter: voter) }
|
||||||
|
evaluator.followers.each { |follower| create(:follow, followable: investment, user: follower) }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -78,10 +78,14 @@ FactoryBot.define do
|
|||||||
after(:create) { |proposal| create(:image, imageable: proposal) }
|
after(:create) { |proposal| create(:image, imageable: proposal) }
|
||||||
end
|
end
|
||||||
|
|
||||||
transient { voters { [] } }
|
transient do
|
||||||
|
voters { [] }
|
||||||
|
followers { [] }
|
||||||
|
end
|
||||||
|
|
||||||
after(:create) do |proposal, evaluator|
|
after(:create) do |proposal, evaluator|
|
||||||
evaluator.voters.each { |voter| create(:vote, votable: proposal, voter: voter) }
|
evaluator.voters.each { |voter| create(:vote, votable: proposal, voter: voter) }
|
||||||
|
evaluator.followers.each { |follower| create(:follow, followable: proposal, user: follower) }
|
||||||
end
|
end
|
||||||
|
|
||||||
factory :retired_proposal, traits: [:retired]
|
factory :retired_proposal, traits: [:retired]
|
||||||
|
|||||||
@@ -64,10 +64,14 @@ FactoryBot.define do
|
|||||||
after(:create) { |user| create(:comment, author: user) }
|
after(:create) { |user| create(:comment, author: user) }
|
||||||
end
|
end
|
||||||
|
|
||||||
transient { votables { [] } }
|
transient do
|
||||||
|
votables { [] }
|
||||||
|
followables { [] }
|
||||||
|
end
|
||||||
|
|
||||||
after(:create) do |user, evaluator|
|
after(:create) do |user, evaluator|
|
||||||
evaluator.votables.each { |votable| create(:vote, votable: votable, voter: user) }
|
evaluator.votables.each { |votable| create(:vote, votable: votable, voter: user) }
|
||||||
|
evaluator.followables.each { |followable| create(:follow, followable: followable, user: user) }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -160,9 +160,8 @@ describe "Homepage" do
|
|||||||
end
|
end
|
||||||
|
|
||||||
scenario "Recomendations" do
|
scenario "Recomendations" do
|
||||||
proposal1 = create(:proposal, tag_list: "Sport")
|
create(:proposal, tag_list: "Sport", followers: [user])
|
||||||
proposal2 = create(:proposal, tag_list: "Sport")
|
create(:proposal, tag_list: "Sport")
|
||||||
create(:follow, followable: proposal1, user: user)
|
|
||||||
|
|
||||||
visit admin_homepage_path
|
visit admin_homepage_path
|
||||||
within("#setting_#{user_recommendations.id}") do
|
within("#setting_#{user_recommendations.id}") do
|
||||||
|
|||||||
@@ -322,9 +322,8 @@ describe "System Emails" do
|
|||||||
proposal_notification = create(:proposal_notification, proposal: proposal,
|
proposal_notification = create(:proposal_notification, proposal: proposal,
|
||||||
title: "Proposal A Title",
|
title: "Proposal A Title",
|
||||||
body: "Proposal A Notification Body")
|
body: "Proposal A Notification Body")
|
||||||
voter = create(:user, :level_two)
|
voter = create(:user, :level_two, followables: [proposal])
|
||||||
create(:notification, notifiable: proposal_notification, user: voter, emailed_at: nil)
|
create(:notification, notifiable: proposal_notification, user: voter, emailed_at: nil)
|
||||||
create(:follow, user: voter, followable: proposal)
|
|
||||||
|
|
||||||
visit admin_system_emails_path
|
visit admin_system_emails_path
|
||||||
|
|
||||||
|
|||||||
@@ -450,9 +450,8 @@ describe "Debates" do
|
|||||||
end
|
end
|
||||||
|
|
||||||
scenario "are shown on index header when account setting is enabled" do
|
scenario "are shown on index header when account setting is enabled" do
|
||||||
user = create(:user)
|
|
||||||
proposal = create(:proposal, tag_list: "Sport")
|
proposal = create(:proposal, tag_list: "Sport")
|
||||||
create(:follow, followable: proposal, user: user)
|
user = create(:user, followables: [proposal])
|
||||||
|
|
||||||
login_as(user)
|
login_as(user)
|
||||||
visit debates_path
|
visit debates_path
|
||||||
@@ -465,9 +464,8 @@ describe "Debates" do
|
|||||||
end
|
end
|
||||||
|
|
||||||
scenario "should display text when there are no results" do
|
scenario "should display text when there are no results" do
|
||||||
user = create(:user)
|
|
||||||
proposal = create(:proposal, tag_list: "Distinct_to_sport")
|
proposal = create(:proposal, tag_list: "Distinct_to_sport")
|
||||||
create(:follow, followable: proposal, user: user)
|
user = create(:user, followables: [proposal])
|
||||||
|
|
||||||
login_as(user)
|
login_as(user)
|
||||||
visit debates_path
|
visit debates_path
|
||||||
@@ -489,9 +487,8 @@ describe "Debates" do
|
|||||||
end
|
end
|
||||||
|
|
||||||
scenario "can be sorted when there's a logged user" do
|
scenario "can be sorted when there's a logged user" do
|
||||||
user = create(:user)
|
|
||||||
proposal = create(:proposal, tag_list: "Sport")
|
proposal = create(:proposal, tag_list: "Sport")
|
||||||
create(:follow, followable: proposal, user: user)
|
user = create(:user, followables: [proposal])
|
||||||
|
|
||||||
login_as(user)
|
login_as(user)
|
||||||
visit debates_path
|
visit debates_path
|
||||||
@@ -510,9 +507,8 @@ describe "Debates" do
|
|||||||
end
|
end
|
||||||
|
|
||||||
scenario "are not shown if account setting is disabled" do
|
scenario "are not shown if account setting is disabled" do
|
||||||
user = create(:user, recommended_debates: false)
|
|
||||||
proposal = create(:proposal, tag_list: "Sport")
|
proposal = create(:proposal, tag_list: "Sport")
|
||||||
create(:follow, followable: proposal, user: user)
|
user = create(:user, recommended_debates: false, followables: [proposal])
|
||||||
|
|
||||||
login_as(user)
|
login_as(user)
|
||||||
visit debates_path
|
visit debates_path
|
||||||
@@ -522,9 +518,8 @@ describe "Debates" do
|
|||||||
end
|
end
|
||||||
|
|
||||||
scenario "are automatically disabled when dismissed from index", :js do
|
scenario "are automatically disabled when dismissed from index", :js do
|
||||||
user = create(:user)
|
|
||||||
proposal = create(:proposal, tag_list: "Sport")
|
proposal = create(:proposal, tag_list: "Sport")
|
||||||
create(:follow, followable: proposal, user: user)
|
user = create(:user, followables: [proposal])
|
||||||
|
|
||||||
login_as(user)
|
login_as(user)
|
||||||
visit debates_path
|
visit debates_path
|
||||||
@@ -959,14 +954,13 @@ describe "Debates" do
|
|||||||
end
|
end
|
||||||
|
|
||||||
scenario "Reorder by recommendations results maintaing search" do
|
scenario "Reorder by recommendations results maintaing search" do
|
||||||
user = create(:user, recommended_debates: true)
|
proposal = create(:proposal, tag_list: "Sport")
|
||||||
|
user = create(:user, recommended_debates: true, followables: [proposal])
|
||||||
|
|
||||||
debate1 = create(:debate, title: "Show you got", cached_votes_total: 10, tag_list: "Sport")
|
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")
|
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")
|
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)
|
debate4 = create(:debate, title: "Do not display", cached_votes_total: 1)
|
||||||
proposal1 = create(:proposal, tag_list: "Sport")
|
|
||||||
create(:follow, followable: proposal1, user: user)
|
|
||||||
|
|
||||||
login_as(user)
|
login_as(user)
|
||||||
visit debates_path
|
visit debates_path
|
||||||
|
|||||||
@@ -25,9 +25,8 @@ describe "Home" do
|
|||||||
describe "Recommended" do
|
describe "Recommended" do
|
||||||
|
|
||||||
before do
|
before do
|
||||||
user = create(:user)
|
|
||||||
proposal = create(:proposal, tag_list: "Sport")
|
proposal = create(:proposal, tag_list: "Sport")
|
||||||
create(:follow, followable: proposal, user: user)
|
user = create(:user, followables: [proposal])
|
||||||
login_as(user)
|
login_as(user)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -38,22 +38,18 @@ describe "Proposal Notifications" do
|
|||||||
|
|
||||||
scenario "Send a notification (Follower)" do
|
scenario "Send a notification (Follower)" do
|
||||||
proposal = create(:proposal)
|
proposal = create(:proposal)
|
||||||
user_follower = create(:user)
|
|
||||||
create(:follow, :followed_proposal, user: user_follower, followable: proposal)
|
|
||||||
|
|
||||||
|
create(:user, :level_two, followables: [proposal])
|
||||||
create_proposal_notification(proposal)
|
create_proposal_notification(proposal)
|
||||||
|
|
||||||
expect(Notification.count).to eq(1)
|
expect(Notification.count).to eq(1)
|
||||||
end
|
end
|
||||||
|
|
||||||
scenario "Send a notification (Follower and Voter)" do
|
scenario "Send a notification (Follower and Voter)" do
|
||||||
user_voter_follower = create(:user)
|
proposal = create(:proposal)
|
||||||
proposal = create(:proposal, voters: [user_voter_follower])
|
|
||||||
|
|
||||||
create(:follow, :followed_proposal, user: user_voter_follower, followable: proposal)
|
create(:user, followables: [proposal], votables: [proposal])
|
||||||
|
create(:user, followables: [proposal])
|
||||||
user_follower = create(:user)
|
|
||||||
create(:follow, :followed_proposal, user: user_follower, followable: proposal)
|
|
||||||
|
|
||||||
create_proposal_notification(proposal)
|
create_proposal_notification(proposal)
|
||||||
|
|
||||||
@@ -146,10 +142,9 @@ describe "Proposal Notifications" do
|
|||||||
|
|
||||||
scenario "Message about receivers (Same Followers and Voters)" do
|
scenario "Message about receivers (Same Followers and Voters)" do
|
||||||
author = create(:user)
|
author = create(:user)
|
||||||
user_voter_follower = create(:user)
|
voter_follower = create(:user)
|
||||||
proposal = create(:proposal, author: author, voters: [user_voter_follower])
|
|
||||||
|
|
||||||
create(:follow, :followed_proposal, user: user_voter_follower, followable: proposal)
|
proposal = create(:proposal, author: author, voters: [voter_follower], followers: [voter_follower])
|
||||||
|
|
||||||
login_as(author)
|
login_as(author)
|
||||||
visit new_proposal_notification_path(proposal_id: proposal.id)
|
visit new_proposal_notification_path(proposal_id: proposal.id)
|
||||||
@@ -254,15 +249,11 @@ describe "Proposal Notifications" do
|
|||||||
|
|
||||||
scenario "Followers should receive a notification", :js do
|
scenario "Followers should receive a notification", :js do
|
||||||
author = create(:user)
|
author = create(:user)
|
||||||
|
|
||||||
user1 = create(:user)
|
|
||||||
user2 = create(:user)
|
|
||||||
user3 = create(:user)
|
|
||||||
|
|
||||||
proposal = create(:proposal, author: author)
|
proposal = create(:proposal, author: author)
|
||||||
|
|
||||||
create(:follow, :followed_proposal, user: user1, followable: proposal)
|
user1 = create(:user, followables: [proposal])
|
||||||
create(:follow, :followed_proposal, user: user2, followable: proposal)
|
user2 = create(:user, followables: [proposal])
|
||||||
|
user3 = create(:user)
|
||||||
|
|
||||||
login_as author.reload
|
login_as author.reload
|
||||||
visit root_path
|
visit root_path
|
||||||
@@ -358,11 +349,8 @@ describe "Proposal Notifications" do
|
|||||||
|
|
||||||
scenario "for the same proposal", :js do
|
scenario "for the same proposal", :js do
|
||||||
author = create(:user)
|
author = create(:user)
|
||||||
user = create(:user)
|
|
||||||
|
|
||||||
proposal = create(:proposal, author: author)
|
proposal = create(:proposal, author: author)
|
||||||
|
user = create(:user, followables: [proposal])
|
||||||
create(:follow, :followed_proposal, user: user, followable: proposal)
|
|
||||||
|
|
||||||
login_as author.reload
|
login_as author.reload
|
||||||
|
|
||||||
|
|||||||
@@ -749,9 +749,8 @@ describe "Proposals" do
|
|||||||
end
|
end
|
||||||
|
|
||||||
scenario "are shown on index header when account setting is enabled" do
|
scenario "are shown on index header when account setting is enabled" do
|
||||||
user = create(:user)
|
|
||||||
proposal = create(:proposal, tag_list: "Sport")
|
proposal = create(:proposal, tag_list: "Sport")
|
||||||
create(:follow, followable: proposal, user: user)
|
user = create(:user, followables: [proposal])
|
||||||
|
|
||||||
login_as(user)
|
login_as(user)
|
||||||
visit proposals_path
|
visit proposals_path
|
||||||
@@ -764,9 +763,8 @@ describe "Proposals" do
|
|||||||
end
|
end
|
||||||
|
|
||||||
scenario "should display text when there are no results" do
|
scenario "should display text when there are no results" do
|
||||||
user = create(:user)
|
|
||||||
proposal = create(:proposal, tag_list: "Distinct_to_sport")
|
proposal = create(:proposal, tag_list: "Distinct_to_sport")
|
||||||
create(:follow, followable: proposal, user: user)
|
user = create(:user, followables: [proposal])
|
||||||
|
|
||||||
login_as(user)
|
login_as(user)
|
||||||
visit proposals_path
|
visit proposals_path
|
||||||
@@ -788,9 +786,8 @@ describe "Proposals" do
|
|||||||
end
|
end
|
||||||
|
|
||||||
scenario "can be sorted when there's a logged user" do
|
scenario "can be sorted when there's a logged user" do
|
||||||
user = create(:user)
|
|
||||||
proposal = create(:proposal, tag_list: "Sport")
|
proposal = create(:proposal, tag_list: "Sport")
|
||||||
create(:follow, followable: proposal, user: user)
|
user = create(:user, followables: [proposal])
|
||||||
|
|
||||||
login_as(user)
|
login_as(user)
|
||||||
visit proposals_path
|
visit proposals_path
|
||||||
@@ -809,9 +806,8 @@ describe "Proposals" do
|
|||||||
end
|
end
|
||||||
|
|
||||||
scenario "are not shown if account setting is disabled" do
|
scenario "are not shown if account setting is disabled" do
|
||||||
user = create(:user, recommended_proposals: false)
|
|
||||||
proposal = create(:proposal, tag_list: "Sport")
|
proposal = create(:proposal, tag_list: "Sport")
|
||||||
create(:follow, followable: proposal, user: user)
|
user = create(:user, recommended_proposals: false, followables: [proposal])
|
||||||
|
|
||||||
login_as(user)
|
login_as(user)
|
||||||
visit proposals_path
|
visit proposals_path
|
||||||
@@ -821,9 +817,8 @@ describe "Proposals" do
|
|||||||
end
|
end
|
||||||
|
|
||||||
scenario "are automatically disabled when dismissed from index", :js do
|
scenario "are automatically disabled when dismissed from index", :js do
|
||||||
user = create(:user)
|
|
||||||
proposal = create(:proposal, tag_list: "Sport")
|
proposal = create(:proposal, tag_list: "Sport")
|
||||||
create(:follow, followable: proposal, user: user)
|
user = create(:user, followables: [proposal])
|
||||||
|
|
||||||
login_as(user)
|
login_as(user)
|
||||||
visit proposals_path
|
visit proposals_path
|
||||||
@@ -996,10 +991,10 @@ describe "Proposals" do
|
|||||||
end
|
end
|
||||||
|
|
||||||
scenario "do not show recommented proposal in selected proposals list" do
|
scenario "do not show recommented proposal in selected proposals list" do
|
||||||
create(:proposal, title: "Recommended", tag_list: "Economy")
|
|
||||||
|
|
||||||
user = create(:user)
|
user = create(:user)
|
||||||
create(:follow, followable: create(:proposal, tag_list: "Economy"), user: user)
|
|
||||||
|
create(:proposal, tag_list: "Economy", followers: [user])
|
||||||
|
create(:proposal, title: "Recommended", tag_list: "Economy")
|
||||||
|
|
||||||
login_as(user)
|
login_as(user)
|
||||||
visit proposals_path
|
visit proposals_path
|
||||||
@@ -1480,12 +1475,11 @@ describe "Proposals" do
|
|||||||
scenario "Reorder by recommendations results maintaing search" do
|
scenario "Reorder by recommendations results maintaing search" do
|
||||||
user = create(:user, recommended_proposals: true)
|
user = create(:user, recommended_proposals: true)
|
||||||
|
|
||||||
proposal1 = create(:proposal, title: "Show you got", cached_votes_up: 10, tag_list: "Sport")
|
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")
|
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")
|
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)
|
create(:proposal, title: "Do not display", cached_votes_up: 1)
|
||||||
proposal5 = create(:proposal, tag_list: "Sport")
|
create(:proposal, tag_list: "Sport", followers: [user])
|
||||||
create(:follow, followable: proposal5, user: user)
|
|
||||||
|
|
||||||
login_as(user)
|
login_as(user)
|
||||||
visit proposals_path
|
visit proposals_path
|
||||||
|
|||||||
@@ -239,8 +239,7 @@ describe "Users" do
|
|||||||
end
|
end
|
||||||
|
|
||||||
scenario "Display interests" do
|
scenario "Display interests" do
|
||||||
proposal = create(:proposal, tag_list: "Sport")
|
create(:proposal, tag_list: "Sport", followers: [@user])
|
||||||
create(:follow, :followed_proposal, followable: proposal, user: @user)
|
|
||||||
|
|
||||||
login_as(@user)
|
login_as(@user)
|
||||||
visit account_path
|
visit account_path
|
||||||
@@ -255,8 +254,7 @@ describe "Users" do
|
|||||||
end
|
end
|
||||||
|
|
||||||
scenario "Not display interests when proposal has been destroyed" do
|
scenario "Not display interests when proposal has been destroyed" do
|
||||||
proposal = create(:proposal, tag_list: "Sport")
|
proposal = create(:proposal, tag_list: "Sport", followers: [@user])
|
||||||
create(:follow, :followed_proposal, followable: proposal, user: @user)
|
|
||||||
proposal.destroy
|
proposal.destroy
|
||||||
|
|
||||||
login_as(@user)
|
login_as(@user)
|
||||||
@@ -279,8 +277,7 @@ describe "Users" do
|
|||||||
end
|
end
|
||||||
|
|
||||||
scenario "User can display public page" do
|
scenario "User can display public page" do
|
||||||
proposal = create(:proposal, tag_list: "Sport")
|
create(:proposal, tag_list: "Sport", followers: [@user])
|
||||||
create(:follow, :followed_proposal, followable: proposal, user: @user)
|
|
||||||
|
|
||||||
login_as(@user)
|
login_as(@user)
|
||||||
visit account_path
|
visit account_path
|
||||||
@@ -296,8 +293,7 @@ describe "Users" do
|
|||||||
end
|
end
|
||||||
|
|
||||||
scenario "Is always visible for the owner" do
|
scenario "Is always visible for the owner" do
|
||||||
proposal = create(:proposal, tag_list: "Sport")
|
create(:proposal, tag_list: "Sport", followers: [@user])
|
||||||
create(:follow, :followed_proposal, followable: proposal, user: @user)
|
|
||||||
|
|
||||||
login_as(@user)
|
login_as(@user)
|
||||||
visit account_path
|
visit account_path
|
||||||
@@ -310,8 +306,7 @@ describe "Users" do
|
|||||||
end
|
end
|
||||||
|
|
||||||
scenario "Is always visible for admins" do
|
scenario "Is always visible for admins" do
|
||||||
proposal = create(:proposal, tag_list: "Sport")
|
create(:proposal, tag_list: "Sport", followers: [@user])
|
||||||
create(:follow, :followed_proposal, followable: proposal, user: @user)
|
|
||||||
|
|
||||||
login_as(@user)
|
login_as(@user)
|
||||||
visit account_path
|
visit account_path
|
||||||
@@ -327,8 +322,7 @@ describe "Users" do
|
|||||||
end
|
end
|
||||||
|
|
||||||
scenario "Is always visible for moderators" do
|
scenario "Is always visible for moderators" do
|
||||||
proposal = create(:proposal, tag_list: "Sport")
|
create(:proposal, tag_list: "Sport", followers: [@user])
|
||||||
create(:follow, :followed_proposal, followable: proposal, user: @user)
|
|
||||||
|
|
||||||
login_as(@user)
|
login_as(@user)
|
||||||
visit account_path
|
visit account_path
|
||||||
@@ -344,8 +338,7 @@ describe "Users" do
|
|||||||
end
|
end
|
||||||
|
|
||||||
scenario "Should display generic interests title" do
|
scenario "Should display generic interests title" do
|
||||||
proposal = create(:proposal, tag_list: "Sport")
|
create(:proposal, tag_list: "Sport", followers: [@user])
|
||||||
create(:follow, :followed_proposal, followable: proposal, user: @user)
|
|
||||||
|
|
||||||
@user.update(public_interests: true)
|
@user.update(public_interests: true)
|
||||||
visit user_path(@user, filter: "follows", page: "1")
|
visit user_path(@user, filter: "follows", page: "1")
|
||||||
@@ -354,8 +347,7 @@ describe "Users" do
|
|||||||
end
|
end
|
||||||
|
|
||||||
scenario "Should display custom interests title when user is visiting own user page" do
|
scenario "Should display custom interests title when user is visiting own user page" do
|
||||||
proposal = create(:proposal, tag_list: "Sport")
|
create(:proposal, tag_list: "Sport", followers: [@user])
|
||||||
create(:follow, :followed_proposal, followable: proposal, user: @user)
|
|
||||||
|
|
||||||
@user.update(public_interests: true)
|
@user.update(public_interests: true)
|
||||||
login_as(@user)
|
login_as(@user)
|
||||||
@@ -431,8 +423,7 @@ describe "Users" do
|
|||||||
end
|
end
|
||||||
|
|
||||||
scenario "Active following tab by default when follows filters selected", :js do
|
scenario "Active following tab by default when follows filters selected", :js do
|
||||||
proposal = create(:proposal, author: @user)
|
create(:proposal, author: @user, followers: [@user])
|
||||||
create(:follow, followable: proposal, user: @user)
|
|
||||||
|
|
||||||
visit user_path(@user, filter: "follows")
|
visit user_path(@user, filter: "follows")
|
||||||
|
|
||||||
@@ -440,13 +431,9 @@ describe "Users" do
|
|||||||
end
|
end
|
||||||
|
|
||||||
scenario "Gracefully handle followables that have been hidden" do
|
scenario "Gracefully handle followables that have been hidden" do
|
||||||
active_proposal = create(:proposal)
|
create(:proposal, followers: [@user])
|
||||||
hidden_proposal = create(:proposal)
|
create(:proposal, followers: [@user]) { |proposal| proposal.hide }
|
||||||
|
|
||||||
create(:follow, followable: active_proposal, user: @user)
|
|
||||||
create(:follow, followable: hidden_proposal, user: @user)
|
|
||||||
|
|
||||||
hidden_proposal.hide
|
|
||||||
visit user_path(@user)
|
visit user_path(@user)
|
||||||
|
|
||||||
expect(page).to have_content("1 Following")
|
expect(page).to have_content("1 Following")
|
||||||
@@ -455,8 +442,7 @@ describe "Users" do
|
|||||||
describe "Proposals" do
|
describe "Proposals" do
|
||||||
|
|
||||||
scenario "Display following tab when user is following one proposal at least" do
|
scenario "Display following tab when user is following one proposal at least" do
|
||||||
proposal = create(:proposal)
|
create(:proposal, followers: [@user])
|
||||||
create(:follow, followable: proposal, user: @user)
|
|
||||||
|
|
||||||
visit user_path(@user)
|
visit user_path(@user)
|
||||||
|
|
||||||
@@ -464,8 +450,7 @@ describe "Users" do
|
|||||||
end
|
end
|
||||||
|
|
||||||
scenario "Display proposal tab when user is following one proposal at least" do
|
scenario "Display proposal tab when user is following one proposal at least" do
|
||||||
proposal = create(:proposal)
|
create(:proposal, followers: [@user])
|
||||||
create(:follow, followable: proposal, user: @user)
|
|
||||||
|
|
||||||
visit user_path(@user, filter: "follows")
|
visit user_path(@user, filter: "follows")
|
||||||
|
|
||||||
@@ -479,8 +464,8 @@ describe "Users" do
|
|||||||
end
|
end
|
||||||
|
|
||||||
scenario "Display proposals with link to proposal" do
|
scenario "Display proposals with link to proposal" do
|
||||||
proposal = create(:proposal, author: @user)
|
proposal = create(:proposal, author: @user, followers: [@user])
|
||||||
create(:follow, followable: proposal, user: @user)
|
|
||||||
login_as @user
|
login_as @user
|
||||||
|
|
||||||
visit user_path(@user, filter: "follows")
|
visit user_path(@user, filter: "follows")
|
||||||
@@ -514,8 +499,7 @@ describe "Users" do
|
|||||||
describe "Budget Investments" do
|
describe "Budget Investments" do
|
||||||
|
|
||||||
scenario "Display following tab when user is following one budget investment at least" do
|
scenario "Display following tab when user is following one budget investment at least" do
|
||||||
budget_investment = create(:budget_investment)
|
create(:budget_investment, followers: [@user])
|
||||||
create(:follow, followable: budget_investment, user: @user)
|
|
||||||
|
|
||||||
visit user_path(@user)
|
visit user_path(@user)
|
||||||
|
|
||||||
@@ -523,8 +507,7 @@ describe "Users" do
|
|||||||
end
|
end
|
||||||
|
|
||||||
scenario "Display budget investment tab when user is following one budget investment at least" do
|
scenario "Display budget investment tab when user is following one budget investment at least" do
|
||||||
budget_investment = create(:budget_investment)
|
create(:budget_investment, followers: [@user])
|
||||||
create(:follow, followable: budget_investment, user: @user)
|
|
||||||
|
|
||||||
visit user_path(@user, filter: "follows")
|
visit user_path(@user, filter: "follows")
|
||||||
|
|
||||||
@@ -539,8 +522,7 @@ describe "Users" do
|
|||||||
|
|
||||||
scenario "Display budget investment with link to budget investment" do
|
scenario "Display budget investment with link to budget investment" do
|
||||||
user = create(:user, :level_two)
|
user = create(:user, :level_two)
|
||||||
budget_investment = create(:budget_investment, author: user)
|
budget_investment = create(:budget_investment, author: user, followers: [user])
|
||||||
create(:follow, followable: budget_investment, user: user)
|
|
||||||
|
|
||||||
visit user_path(user, filter: "follows")
|
visit user_path(user, filter: "follows")
|
||||||
click_link "Investments"
|
click_link "Investments"
|
||||||
|
|||||||
@@ -749,11 +749,11 @@ describe Debate do
|
|||||||
end
|
end
|
||||||
|
|
||||||
it "returns debates related to the user's interests ordered by cached_votes_total" do
|
it "returns debates related to the user's interests ordered by cached_votes_total" do
|
||||||
|
create(:proposal, tag_list: "Sport", followers: [user])
|
||||||
|
|
||||||
debate1 = create(:debate, cached_votes_total: 1, tag_list: "Sport")
|
debate1 = create(:debate, cached_votes_total: 1, tag_list: "Sport")
|
||||||
debate2 = create(:debate, cached_votes_total: 5, tag_list: "Sport")
|
debate2 = create(:debate, cached_votes_total: 5, tag_list: "Sport")
|
||||||
debate3 = create(:debate, cached_votes_total: 10, 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)
|
|
||||||
|
|
||||||
results = Debate.recommendations(user).sort_by_recommendations
|
results = Debate.recommendations(user).sort_by_recommendations
|
||||||
|
|
||||||
@@ -761,9 +761,8 @@ describe Debate do
|
|||||||
end
|
end
|
||||||
|
|
||||||
it "does not return debates unrelated to user interests" do
|
it "does not return debates unrelated to user interests" do
|
||||||
proposal1 = create(:proposal, tag_list: "Sport")
|
create(:proposal, tag_list: "Sport", followers: [user])
|
||||||
create(:follow, followable: proposal1, user: user)
|
create(:debate, tag_list: "Politics")
|
||||||
debate2 = create(:debate, tag_list: "Politics")
|
|
||||||
|
|
||||||
results = Debate.recommendations(user)
|
results = Debate.recommendations(user)
|
||||||
|
|
||||||
@@ -771,9 +770,8 @@ describe Debate do
|
|||||||
end
|
end
|
||||||
|
|
||||||
it "does not return debates when user is the author" do
|
it "does not return debates when user is the author" do
|
||||||
proposal = create(:proposal, tag_list: "Sport")
|
create(:proposal, tag_list: "Sport", followers: [user])
|
||||||
create(:follow, followable: proposal, user: user)
|
create(:debate, author: user, tag_list: "Sport")
|
||||||
debate1 = create(:debate, author: user, tag_list: "Sport")
|
|
||||||
|
|
||||||
results = Debate.recommendations(user)
|
results = Debate.recommendations(user)
|
||||||
|
|
||||||
|
|||||||
@@ -914,27 +914,24 @@ describe Proposal do
|
|||||||
it "returns voters and followers" do
|
it "returns voters and followers" do
|
||||||
proposal = create(:proposal)
|
proposal = create(:proposal)
|
||||||
voter = create(:user, :level_two, votables: [proposal])
|
voter = create(:user, :level_two, votables: [proposal])
|
||||||
follower = create(:user, :level_two)
|
follower = create(:user, :level_two, followables: [proposal])
|
||||||
follow = create(:follow, user: follower, followable: proposal)
|
|
||||||
|
|
||||||
expect(proposal.users_to_notify).to eq([voter, follower])
|
expect(proposal.users_to_notify).to eq([voter, follower])
|
||||||
end
|
end
|
||||||
|
|
||||||
it "returns voters and followers discarding duplicates" do
|
it "returns voters and followers discarding duplicates" do
|
||||||
proposal = create(:proposal)
|
proposal = create(:proposal)
|
||||||
voter_and_follower = create(:user, :level_two, votables: [proposal])
|
voter_and_follower = create(:user, :level_two, votables: [proposal], followables: [proposal])
|
||||||
follow = create(:follow, user: voter_and_follower, followable: proposal)
|
|
||||||
|
|
||||||
expect(proposal.users_to_notify).to eq([voter_and_follower])
|
expect(proposal.users_to_notify).to eq([voter_and_follower])
|
||||||
end
|
end
|
||||||
|
|
||||||
it "returns voters and followers except the proposal author" do
|
it "returns voters and followers except the proposal author" do
|
||||||
author = create(:user, :level_two)
|
author = create(:user, :level_two)
|
||||||
proposal = create(:proposal, author: author, voters: [author])
|
voter_and_follower = create(:user, :level_two)
|
||||||
voter_and_follower = create(:user, :level_two, votables: [proposal])
|
proposal = create(:proposal, author: author,
|
||||||
|
voters: [author, voter_and_follower],
|
||||||
create(:follow, user: author, followable: proposal)
|
followers: [author, voter_and_follower])
|
||||||
create(:follow, user: voter_and_follower, followable: proposal)
|
|
||||||
|
|
||||||
expect(proposal.users_to_notify).to eq([voter_and_follower])
|
expect(proposal.users_to_notify).to eq([voter_and_follower])
|
||||||
end
|
end
|
||||||
@@ -952,11 +949,11 @@ describe Proposal do
|
|||||||
end
|
end
|
||||||
|
|
||||||
it "returns proposals related to the user's interests ordered by cached_votes_up" do
|
it "returns proposals related to the user's interests ordered by cached_votes_up" do
|
||||||
|
create(:proposal, tag_list: "Sport", followers: [user])
|
||||||
|
|
||||||
proposal1 = create(:proposal, cached_votes_up: 1, tag_list: "Sport")
|
proposal1 = create(:proposal, cached_votes_up: 1, tag_list: "Sport")
|
||||||
proposal2 = create(:proposal, cached_votes_up: 5, tag_list: "Sport")
|
proposal2 = create(:proposal, cached_votes_up: 5, tag_list: "Sport")
|
||||||
proposal3 = create(:proposal, cached_votes_up: 10, 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)
|
|
||||||
|
|
||||||
results = Proposal.recommendations(user).sort_by_recommendations
|
results = Proposal.recommendations(user).sort_by_recommendations
|
||||||
|
|
||||||
@@ -964,9 +961,8 @@ describe Proposal do
|
|||||||
end
|
end
|
||||||
|
|
||||||
it "does not return proposals unrelated to user interests" do
|
it "does not return proposals unrelated to user interests" do
|
||||||
proposal1 = create(:proposal, tag_list: "Sport")
|
create(:proposal, tag_list: "Sport", followers: [user])
|
||||||
proposal2 = create(:proposal, tag_list: "Politics")
|
create(:proposal, tag_list: "Politics")
|
||||||
create(:follow, followable: proposal1, user: user)
|
|
||||||
|
|
||||||
results = Proposal.recommendations(user)
|
results = Proposal.recommendations(user)
|
||||||
|
|
||||||
@@ -974,8 +970,7 @@ describe Proposal do
|
|||||||
end
|
end
|
||||||
|
|
||||||
it "does not return proposals when user is follower" do
|
it "does not return proposals when user is follower" do
|
||||||
proposal1 = create(:proposal, tag_list: "Sport")
|
create(:proposal, tag_list: "Sport", followers: [user])
|
||||||
create(:follow, followable: proposal1, user: user)
|
|
||||||
|
|
||||||
results = Proposal.recommendations(user)
|
results = Proposal.recommendations(user)
|
||||||
|
|
||||||
@@ -983,9 +978,8 @@ describe Proposal do
|
|||||||
end
|
end
|
||||||
|
|
||||||
it "does not return proposals when user is the author" do
|
it "does not return proposals when user is the author" do
|
||||||
proposal1 = create(:proposal, tag_list: "Sport")
|
create(:proposal, tag_list: "Sport", followers: [user])
|
||||||
proposal2 = create(:proposal, author: user, tag_list: "Sport")
|
create(:proposal, author: user, tag_list: "Sport")
|
||||||
create(:follow, followable: proposal1, user: user)
|
|
||||||
|
|
||||||
results = Proposal.recommendations(user)
|
results = Proposal.recommendations(user)
|
||||||
|
|
||||||
@@ -993,9 +987,8 @@ describe Proposal do
|
|||||||
end
|
end
|
||||||
|
|
||||||
it "does not return archived proposals" do
|
it "does not return archived proposals" do
|
||||||
proposal1 = create(:proposal, tag_list: "Sport")
|
create(:proposal, tag_list: "Sport", followers: [user])
|
||||||
archived_proposal = create(:proposal, :archived, tag_list: "Sport")
|
create(:proposal, :archived, tag_list: "Sport")
|
||||||
create(:follow, followable: proposal1, user: user)
|
|
||||||
|
|
||||||
results = Proposal.recommendations(user)
|
results = Proposal.recommendations(user)
|
||||||
|
|
||||||
@@ -1003,9 +996,8 @@ describe Proposal do
|
|||||||
end
|
end
|
||||||
|
|
||||||
it "does not return already supported proposals" do
|
it "does not return already supported proposals" do
|
||||||
proposal1 = create(:proposal, tag_list: "Health", voters: [user])
|
create(:proposal, tag_list: "Health", followers: [user])
|
||||||
proposal2 = create(:proposal, tag_list: "Health")
|
create(:proposal, tag_list: "Health", voters: [user])
|
||||||
create(:follow, followable: proposal2, user: user)
|
|
||||||
|
|
||||||
results = Proposal.recommendations(user)
|
results = Proposal.recommendations(user)
|
||||||
|
|
||||||
|
|||||||
@@ -690,15 +690,13 @@ describe User do
|
|||||||
let(:user) { create(:user) }
|
let(:user) { create(:user) }
|
||||||
|
|
||||||
it "returns followed object tags" do
|
it "returns followed object tags" do
|
||||||
proposal = create(:proposal, tag_list: "Sport")
|
create(:proposal, tag_list: "Sport", followers: [user])
|
||||||
create(:follow, followable: proposal, user: user)
|
|
||||||
|
|
||||||
expect(user.interests).to eq ["Sport"]
|
expect(user.interests).to eq ["Sport"]
|
||||||
end
|
end
|
||||||
|
|
||||||
it "deals gracefully with hidden proposals" do
|
it "deals gracefully with hidden proposals" do
|
||||||
proposal = create(:proposal, tag_list: "Sport")
|
proposal = create(:proposal, tag_list: "Sport", followers: [user])
|
||||||
create(:follow, followable: proposal, user: user)
|
|
||||||
|
|
||||||
proposal.hide
|
proposal.hide
|
||||||
|
|
||||||
@@ -706,13 +704,9 @@ describe User do
|
|||||||
end
|
end
|
||||||
|
|
||||||
it "discards followed objects duplicated tags" do
|
it "discards followed objects duplicated tags" do
|
||||||
proposal1 = create(:proposal, tag_list: "Sport")
|
create(:proposal, tag_list: "Sport", followers: [user])
|
||||||
proposal2 = create(:proposal, tag_list: "Sport")
|
create(:proposal, tag_list: "Sport", followers: [user])
|
||||||
budget_investment = create(:budget_investment, tag_list: "Sport")
|
create(:budget_investment, tag_list: "Sport", followers: [user])
|
||||||
|
|
||||||
create(:follow, followable: proposal1, user: user)
|
|
||||||
create(:follow, followable: proposal2, user: user)
|
|
||||||
create(:follow, followable: budget_investment, user: user)
|
|
||||||
|
|
||||||
expect(user.interests).to eq ["Sport"]
|
expect(user.interests).to eq ["Sport"]
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -67,8 +67,7 @@ shared_examples "followable" do |followable_class_name, followable_path, followa
|
|||||||
end
|
end
|
||||||
|
|
||||||
scenario "Display unfollow button when user already following" do
|
scenario "Display unfollow button when user already following" do
|
||||||
user = create(:user)
|
user = create(:user, followables: [followable])
|
||||||
follow = create(:follow, user: user, followable: followable)
|
|
||||||
login_as(user)
|
login_as(user)
|
||||||
|
|
||||||
visit send(followable_path, arguments)
|
visit send(followable_path, arguments)
|
||||||
@@ -77,8 +76,7 @@ shared_examples "followable" do |followable_class_name, followable_path, followa
|
|||||||
end
|
end
|
||||||
|
|
||||||
scenario "Updates follow button & show destroy notice after unfollow button is clicked", :js do
|
scenario "Updates follow button & show destroy notice after unfollow button is clicked", :js do
|
||||||
user = create(:user)
|
user = create(:user, followables: [followable])
|
||||||
follow = create(:follow, user: user, followable: followable)
|
|
||||||
login_as(user)
|
login_as(user)
|
||||||
|
|
||||||
visit send(followable_path, arguments)
|
visit send(followable_path, arguments)
|
||||||
@@ -91,8 +89,7 @@ shared_examples "followable" do |followable_class_name, followable_path, followa
|
|||||||
end
|
end
|
||||||
|
|
||||||
scenario "Should display destroy follower notice after user clicks on unfollow button", :js do
|
scenario "Should display destroy follower notice after user clicks on unfollow button", :js do
|
||||||
user = create(:user)
|
user = create(:user, followables: [followable])
|
||||||
follow = create(:follow, user: user, followable: followable)
|
|
||||||
login_as(user)
|
login_as(user)
|
||||||
destroy_notice_message = t("shared.followable.#{followable_class_name}.destroy.notice_html")
|
destroy_notice_message = t("shared.followable.#{followable_class_name}.destroy.notice_html")
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user