545 lines
16 KiB
Ruby
545 lines
16 KiB
Ruby
require 'rails_helper'
|
|
|
|
feature 'Users' do
|
|
|
|
feature 'Show (public page)' do
|
|
|
|
background do
|
|
@user = create(:user)
|
|
1.times {create(:debate, author: @user)}
|
|
2.times {create(:proposal, author: @user)}
|
|
3.times {create(:budget_investment, author: @user)}
|
|
4.times {create(:comment, user: @user)}
|
|
|
|
visit user_path(@user)
|
|
end
|
|
|
|
scenario 'shows user public activity' do
|
|
expect(page).to have_content('1 Debate')
|
|
expect(page).to have_content('2 Proposals')
|
|
expect(page).to have_content('3 Investments')
|
|
expect(page).to have_content('4 Comments')
|
|
end
|
|
|
|
scenario 'shows only items where user has activity' do
|
|
@user.proposals.destroy_all
|
|
|
|
expect(page).to_not have_content('0 Proposals')
|
|
expect(page).to have_content('1 Debate')
|
|
expect(page).to have_content('3 Investments')
|
|
expect(page).to have_content('4 Comments')
|
|
end
|
|
|
|
scenario 'default filter is proposals' do
|
|
@user.proposals.each do |proposal|
|
|
expect(page).to have_content(proposal.title)
|
|
end
|
|
|
|
@user.debates.each do |debate|
|
|
expect(page).to_not have_content(debate.title)
|
|
end
|
|
|
|
@user.comments.each do |comment|
|
|
expect(page).to_not have_content(comment.body)
|
|
end
|
|
end
|
|
|
|
scenario 'shows debates by default if user has no proposals' do
|
|
@user.proposals.destroy_all
|
|
visit user_path(@user)
|
|
|
|
expect(page).to have_content(@user.debates.first.title)
|
|
end
|
|
|
|
scenario 'shows investments by default if user has no proposals nor debates' do
|
|
@user.proposals.destroy_all
|
|
@user.debates.destroy_all
|
|
visit user_path(@user)
|
|
|
|
expect(page).to have_content(@user.budget_investments.first.title)
|
|
end
|
|
|
|
scenario 'shows comments by default if user has no proposals nor debates nor investments' do
|
|
@user.proposals.destroy_all
|
|
@user.debates.destroy_all
|
|
@user.budget_investments.destroy_all
|
|
visit user_path(@user)
|
|
|
|
@user.comments.each do |comment|
|
|
expect(page).to have_content(comment.body)
|
|
end
|
|
end
|
|
|
|
scenario 'filters' do
|
|
click_link '1 Debate'
|
|
|
|
@user.debates.each do |debate|
|
|
expect(page).to have_content(debate.title)
|
|
end
|
|
|
|
@user.proposals.each do |proposal|
|
|
expect(page).to_not have_content(proposal.title)
|
|
end
|
|
|
|
@user.comments.each do |comment|
|
|
expect(page).to_not have_content(comment.body)
|
|
end
|
|
|
|
click_link '4 Comments'
|
|
|
|
@user.comments.each do |comment|
|
|
expect(page).to have_content(comment.body)
|
|
end
|
|
|
|
@user.proposals.each do |proposal|
|
|
expect(page).to_not have_content(proposal.title)
|
|
end
|
|
|
|
@user.debates.each do |debate|
|
|
expect(page).to_not have_content(debate.title)
|
|
end
|
|
|
|
click_link '2 Proposals'
|
|
|
|
@user.proposals.each do |proposal|
|
|
expect(page).to have_content(proposal.title)
|
|
end
|
|
|
|
@user.comments.each do |comment|
|
|
expect(page).to_not have_content(comment.body)
|
|
end
|
|
|
|
@user.debates.each do |debate|
|
|
expect(page).to_not have_content(debate.title)
|
|
end
|
|
end
|
|
|
|
end
|
|
|
|
feature 'Public activity' do
|
|
background do
|
|
@user = create(:user)
|
|
end
|
|
|
|
scenario 'visible by default' do
|
|
visit user_path(@user)
|
|
|
|
expect(page).to have_content(@user.username)
|
|
expect(page).to_not have_content('activity list private')
|
|
end
|
|
|
|
scenario 'user can hide public page' do
|
|
login_as(@user)
|
|
visit account_path
|
|
|
|
uncheck 'account_public_activity'
|
|
click_button 'Save changes'
|
|
|
|
logout
|
|
|
|
visit user_path(@user)
|
|
expect(page).to have_content('activity list private')
|
|
end
|
|
|
|
scenario 'is always visible for the owner' do
|
|
login_as(@user)
|
|
visit account_path
|
|
|
|
uncheck 'account_public_activity'
|
|
click_button 'Save changes'
|
|
|
|
visit user_path(@user)
|
|
expect(page).to_not have_content('activity list private')
|
|
end
|
|
|
|
scenario 'is always visible for admins' do
|
|
login_as(@user)
|
|
visit account_path
|
|
|
|
uncheck 'account_public_activity'
|
|
click_button 'Save changes'
|
|
|
|
logout
|
|
|
|
login_as(create(:administrator).user)
|
|
visit user_path(@user)
|
|
expect(page).to_not have_content('activity list private')
|
|
end
|
|
|
|
scenario 'is always visible for moderators' do
|
|
login_as(@user)
|
|
visit account_path
|
|
|
|
uncheck 'account_public_activity'
|
|
click_button 'Save changes'
|
|
|
|
logout
|
|
|
|
login_as(create(:moderator).user)
|
|
visit user_path(@user)
|
|
expect(page).to_not have_content('activity list private')
|
|
end
|
|
|
|
feature 'User email' do
|
|
|
|
background do
|
|
@user = create(:user)
|
|
end
|
|
|
|
scenario 'is not shown if no user logged in' do
|
|
visit user_path(@user)
|
|
expect(page).to_not have_content(@user.email)
|
|
end
|
|
|
|
scenario 'is not shown if logged in user is a regular user' do
|
|
login_as(create(:user))
|
|
visit user_path(@user)
|
|
expect(page).to_not have_content(@user.email)
|
|
end
|
|
|
|
scenario 'is not shown if logged in user is moderator' do
|
|
login_as(create(:moderator).user)
|
|
visit user_path(@user)
|
|
expect(page).to_not have_content(@user.email)
|
|
end
|
|
|
|
scenario 'is shown if logged in user is admin' do
|
|
login_as(create(:administrator).user)
|
|
visit user_path(@user)
|
|
expect(page).to have_content(@user.email)
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
feature 'Public interests' do
|
|
background do
|
|
@user = create(:user)
|
|
end
|
|
|
|
scenario 'Display interests' do
|
|
proposal = create(:proposal, tag_list: "Sport")
|
|
create(:follow, :followed_proposal, followable: proposal, user: @user)
|
|
|
|
login_as(@user)
|
|
visit account_path
|
|
|
|
check 'account_public_interests'
|
|
click_button 'Save changes'
|
|
|
|
logout
|
|
|
|
visit user_path(@user)
|
|
expect(page).to have_content("Sport")
|
|
end
|
|
|
|
scenario 'Not display interests when proposal has been destroyed' do
|
|
proposal = create(:proposal, tag_list: "Sport")
|
|
create(:follow, :followed_proposal, followable: proposal, user: @user)
|
|
proposal.destroy
|
|
|
|
login_as(@user)
|
|
visit account_path
|
|
|
|
check 'account_public_interests'
|
|
click_button 'Save changes'
|
|
|
|
logout
|
|
|
|
visit user_path(@user)
|
|
expect(page).not_to have_content("Sport")
|
|
end
|
|
|
|
scenario 'No visible by default' do
|
|
visit user_path(@user)
|
|
|
|
expect(page).to have_content(@user.username)
|
|
expect(page).not_to have_css('#public_interests')
|
|
end
|
|
|
|
scenario 'User can display public page' do
|
|
login_as(@user)
|
|
visit account_path
|
|
|
|
check 'account_public_interests'
|
|
click_button 'Save changes'
|
|
|
|
logout
|
|
|
|
visit user_path(@user)
|
|
expect(page).to have_css('#public_interests')
|
|
end
|
|
|
|
scenario 'Is always visible for the owner' do
|
|
login_as(@user)
|
|
visit account_path
|
|
|
|
uncheck 'account_public_interests'
|
|
click_button 'Save changes'
|
|
|
|
visit user_path(@user)
|
|
expect(page).to have_css('#public_interests')
|
|
end
|
|
|
|
scenario 'Is always visible for admins' do
|
|
login_as(@user)
|
|
visit account_path
|
|
|
|
uncheck 'account_public_interests'
|
|
click_button 'Save changes'
|
|
|
|
logout
|
|
|
|
login_as(create(:administrator).user)
|
|
visit user_path(@user)
|
|
expect(page).to have_css('#public_interests')
|
|
end
|
|
|
|
scenario 'Is always visible for moderators' do
|
|
login_as(@user)
|
|
visit account_path
|
|
|
|
uncheck 'account_public_interests'
|
|
click_button 'Save changes'
|
|
|
|
logout
|
|
|
|
login_as(create(:moderator).user)
|
|
visit user_path(@user)
|
|
expect(page).to have_css('#public_interests')
|
|
end
|
|
|
|
scenario 'Should display generic interests title' do
|
|
@user.update(public_interests: true)
|
|
visit user_path(@user)
|
|
|
|
expect(page).to have_content("List of interests (tags of elements this user follows)")
|
|
end
|
|
|
|
scenario 'Should display custom interests title when user is visiting own user page' do
|
|
@user.update(public_interests: true)
|
|
login_as(@user)
|
|
visit user_path(@user)
|
|
|
|
expect(page).to have_content("List of interests (tags of elements you follow)")
|
|
end
|
|
|
|
scenario 'Should display generic empty interests list message when visited user has not interests defined' do
|
|
@user.update(public_interests: true)
|
|
visit user_path(@user)
|
|
|
|
expect(page).to have_content("This user does not follow any elements yet.")
|
|
end
|
|
|
|
scenario 'Should display custom empty interests list message when user has not interests defined and user is visiting own user page' do
|
|
@user.update(public_interests: true)
|
|
login_as(@user)
|
|
visit user_path(@user)
|
|
|
|
expect(page).to have_content("You do not follow any elements yet.")
|
|
end
|
|
end
|
|
|
|
feature 'Special comments' do
|
|
|
|
scenario 'comments posted as moderator are not visible in user activity' do
|
|
moderator = create(:administrator).user
|
|
comment = create(:comment, user: moderator)
|
|
moderator_comment = create(:comment, user: moderator, moderator_id: moderator.id)
|
|
|
|
visit user_path(moderator)
|
|
expect(page).to have_content("1 Comment")
|
|
expect(page).to have_content(comment.body)
|
|
expect(page).to_not have_content(moderator_comment.body)
|
|
end
|
|
|
|
scenario 'comments posted as admin are not visible in user activity' do
|
|
admin = create(:administrator).user
|
|
comment = create(:comment, user: admin)
|
|
admin_comment = create(:comment, user: admin, administrator_id: admin.id)
|
|
|
|
visit user_path(admin)
|
|
expect(page).to have_content(comment.body)
|
|
expect(page).to_not have_content(admin_comment.body)
|
|
end
|
|
|
|
scenario 'shows only comments from active features' do
|
|
user = create(:user)
|
|
1.times {create(:comment, user: user, commentable: create(:debate))}
|
|
2.times {create(:comment, user: user, commentable: create(:budget_investment))}
|
|
4.times {create(:comment, user: user, commentable: create(:proposal))}
|
|
|
|
visit user_path(user)
|
|
expect(page).to have_content('7 Comments')
|
|
|
|
Setting['feature.debates'] = nil
|
|
visit user_path(user)
|
|
expect(page).to have_content('6 Comments')
|
|
|
|
Setting['feature.budgets'] = nil
|
|
visit user_path(user)
|
|
expect(page).to have_content('4 Comments')
|
|
|
|
Setting['feature.debates'] = true
|
|
Setting['feature.budgets'] = true
|
|
end
|
|
end
|
|
|
|
feature 'Following (public page)' do
|
|
|
|
before do
|
|
@user = create(:user)
|
|
end
|
|
|
|
scenario 'Not display following tab when user is not following any followable' do
|
|
visit user_path(@user)
|
|
|
|
expect(page).not_to have_content('0 Following')
|
|
end
|
|
|
|
scenario 'Active following tab by default when follows filters selected', :js do
|
|
proposal = create(:proposal, author: @user)
|
|
create(:follow, followable: proposal, user: @user)
|
|
|
|
visit user_path(@user, filter: "follows")
|
|
|
|
expect(page).to have_selector(".activity li.active", text: "1 Following")
|
|
end
|
|
|
|
describe 'Proposals' do
|
|
|
|
scenario 'Display following tab when user is following one proposal at least' do
|
|
proposal = create(:proposal)
|
|
create(:follow, followable: proposal, user: @user)
|
|
|
|
visit user_path(@user)
|
|
|
|
expect(page).to have_content('1 Following')
|
|
end
|
|
|
|
scenario 'Display accordion proposal tab when user is following one proposal at least' do
|
|
proposal = create(:proposal)
|
|
create(:follow, followable: proposal, user: @user)
|
|
|
|
visit user_path(@user, filter: "follows")
|
|
|
|
expect(page).to have_link('Citizen proposals', href: "#")
|
|
end
|
|
|
|
scenario 'Not display accordion proposal tab when user is not following any proposal' do
|
|
visit user_path(@user, filter: "follows")
|
|
|
|
expect(page).not_to have_link('Citizen proposals', href: "#")
|
|
end
|
|
|
|
scenario 'Display proposal with action buttons inside accordion proposal tab when current user is proposal author', :js do
|
|
proposal = create(:proposal, author: @user)
|
|
create(:follow, followable: proposal, user: @user)
|
|
login_as @user
|
|
|
|
visit user_path(@user, filter: "follows")
|
|
click_link 'Citizen proposals'
|
|
|
|
expect(page).to have_content proposal.title
|
|
expect(page).to have_link "Send notification"
|
|
expect(page).to have_link "Retire"
|
|
end
|
|
|
|
scenario 'Display proposal with action buttons inside accordion proposal tab when there is no logged user', :js do
|
|
proposal = create(:proposal, author: @user)
|
|
create(:follow, followable: proposal, user: @user)
|
|
|
|
visit user_path(@user, filter: "follows")
|
|
click_link 'Citizen proposals'
|
|
|
|
expect(page).to have_content proposal.title
|
|
expect(page).not_to have_link "Send notification"
|
|
expect(page).not_to have_link "Retire"
|
|
end
|
|
|
|
scenario 'Display proposal without action buttons inside accordion proposal tab when current user is not proposal author', :js do
|
|
proposal = create(:proposal)
|
|
create(:follow, followable: proposal, user: @user)
|
|
login_as @user
|
|
|
|
visit user_path(@user, filter: "follows")
|
|
click_link 'Citizen proposals'
|
|
|
|
expect(page).to have_content proposal.title
|
|
expect(page).not_to have_link "Send notification"
|
|
expect(page).not_to have_link "Retire"
|
|
end
|
|
|
|
end
|
|
|
|
describe 'Budget Investments' do
|
|
|
|
scenario 'Display following tab when user is following one budget investment at least' do
|
|
budget_investment = create(:budget_investment)
|
|
create(:follow, followable: budget_investment, user: @user)
|
|
|
|
visit user_path(@user)
|
|
|
|
expect(page).to have_content('1 Following')
|
|
end
|
|
|
|
scenario 'Display accordion budget investment tab when user is following one budget investment at least' do
|
|
budget_investment = create(:budget_investment)
|
|
create(:follow, followable: budget_investment, user: @user)
|
|
|
|
visit user_path(@user, filter: "follow")
|
|
|
|
expect(page).to have_link('Investments', href: "#")
|
|
end
|
|
|
|
scenario 'Not display accordion budget investment tab when user is not following any budget investment' do
|
|
visit user_path(@user, filter: "follow")
|
|
|
|
expect(page).not_to have_link('Investments', href: "#")
|
|
end
|
|
|
|
scenario 'Display budget investment with action buttons inside accordion budget investment tab when current user is a verified user and author', :js do
|
|
user = create(:user, :level_two)
|
|
budget_investment = create(:budget_investment, author: user)
|
|
create(:follow, followable: budget_investment, user: user)
|
|
login_as user
|
|
|
|
visit user_path(user, filter: "follows")
|
|
click_link 'Investments'
|
|
|
|
expect(page).to have_link budget_investment.title
|
|
expect(page).to have_link "Delete"
|
|
end
|
|
|
|
scenario 'Display budget investment with action buttons inside accordion budget investment tab when there is no logged user', :js do
|
|
user = create(:user, :level_two)
|
|
budget_investment = create(:budget_investment, author: user)
|
|
create(:follow, followable: budget_investment, user: user)
|
|
|
|
visit user_path(user, filter: "follows")
|
|
click_link 'Investments'
|
|
|
|
expect(page).to have_link budget_investment.title
|
|
expect(page).not_to have_link "Delete"
|
|
end
|
|
|
|
scenario 'Display budget investment without action buttons inside accordion budget investment tab when current user is not budget investment author', :js do
|
|
user = create(:user, :level_two)
|
|
budget_investment = create(:budget_investment)
|
|
create(:follow, followable: budget_investment, user: user)
|
|
login_as user
|
|
|
|
visit user_path(user, filter: "follows")
|
|
click_link 'Investments'
|
|
|
|
expect(page).to have_link budget_investment.title
|
|
expect(page).not_to have_link "Delete"
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|