212 lines
7.3 KiB
Ruby
212 lines
7.3 KiB
Ruby
require 'rails_helper'
|
|
|
|
feature 'Spending proposals' do
|
|
|
|
let(:author) { create(:user, :level_two, username: 'Isabel') }
|
|
|
|
scenario 'Index' do
|
|
spending_proposals = [create(:spending_proposal), create(:spending_proposal), create(:spending_proposal, feasible: true)]
|
|
unfeasible_spending_proposal = create(:spending_proposal, feasible: false)
|
|
|
|
visit spending_proposals_path
|
|
|
|
expect(page).to have_selector('#investment-projects .investment-project', count: 3)
|
|
spending_proposals.each do |spending_proposal|
|
|
within('#investment-projects') do
|
|
expect(page).to have_content spending_proposal.title
|
|
expect(page).to have_css("a[href='#{spending_proposal_path(spending_proposal)}']", text: spending_proposal.title)
|
|
expect(page).to_not have_content(unfeasible_spending_proposal.title)
|
|
end
|
|
end
|
|
end
|
|
|
|
context("Search") do
|
|
scenario 'Search by text' do
|
|
spending_proposal1 = create(:spending_proposal, title: "Get Schwifty")
|
|
spending_proposal2 = create(:spending_proposal, title: "Schwifty Hello")
|
|
spending_proposal3 = create(:spending_proposal, title: "Do not show me")
|
|
|
|
visit spending_proposals_path
|
|
|
|
within(".expanded #search_form") do
|
|
fill_in "search", with: "Schwifty"
|
|
click_button "Search"
|
|
end
|
|
|
|
within("#investment-projects") do
|
|
expect(page).to have_css('.investment-project', count: 2)
|
|
|
|
expect(page).to have_content(spending_proposal1.title)
|
|
expect(page).to have_content(spending_proposal2.title)
|
|
expect(page).to_not have_content(spending_proposal3.title)
|
|
end
|
|
end
|
|
end
|
|
|
|
context("Filters") do
|
|
scenario 'by geozone' do
|
|
geozone1 = create(:geozone)
|
|
spending_proposal1 = create(:spending_proposal, geozone: geozone1)
|
|
spending_proposal2 = create(:spending_proposal, geozone: create(:geozone))
|
|
spending_proposal3 = create(:spending_proposal, geozone: geozone1)
|
|
spending_proposal4 = create(:spending_proposal)
|
|
|
|
visit spending_proposals_path
|
|
|
|
within(".geozone") do
|
|
click_link geozone1.name
|
|
end
|
|
|
|
within("#investment-projects") do
|
|
expect(page).to have_css('.investment-project', count: 2)
|
|
|
|
expect(page).to have_content(spending_proposal1.title)
|
|
expect(page).to have_content(spending_proposal3.title)
|
|
expect(page).to_not have_content(spending_proposal2.title)
|
|
expect(page).to_not have_content(spending_proposal4.title)
|
|
end
|
|
end
|
|
|
|
scenario 'by unfeasibility' do
|
|
geozone1 = create(:geozone)
|
|
spending_proposal1 = create(:spending_proposal, feasible: false)
|
|
spending_proposal2 = create(:spending_proposal, feasible: true)
|
|
spending_proposal3 = create(:spending_proposal)
|
|
|
|
visit spending_proposals_path
|
|
|
|
within("#sidebar") do
|
|
click_link "Unfeasible"
|
|
end
|
|
|
|
within("#investment-projects") do
|
|
expect(page).to have_css('.investment-project', count: 1)
|
|
|
|
expect(page).to have_content(spending_proposal1.title)
|
|
expect(page).to_not have_content(spending_proposal2.title)
|
|
expect(page).to_not have_content(spending_proposal3.title)
|
|
end
|
|
end
|
|
end
|
|
|
|
scenario 'Create' do
|
|
login_as(author)
|
|
|
|
visit new_spending_proposal_path
|
|
fill_in 'spending_proposal_title', with: 'Build a skyscraper'
|
|
fill_in 'spending_proposal_description', with: 'I want to live in a high tower over the clouds'
|
|
fill_in 'spending_proposal_external_url', with: 'http://http://skyscraperpage.com/'
|
|
fill_in 'spending_proposal_association_name', with: 'People of the neighbourhood'
|
|
fill_in 'spending_proposal_captcha', with: correct_captcha_text
|
|
select 'All city', from: 'spending_proposal_geozone_id'
|
|
check 'spending_proposal_terms_of_service'
|
|
|
|
click_button 'Create'
|
|
|
|
expect(page).to have_content 'Spending proposal created successfully'
|
|
expect(page).to have_content('Build a skyscraper')
|
|
expect(page).to have_content('I want to live in a high tower over the clouds')
|
|
expect(page).to have_content('Isabel')
|
|
expect(page).to have_content('People of the neighbourhood')
|
|
expect(page).to have_content('All city')
|
|
end
|
|
|
|
scenario 'Create notice' do
|
|
login_as(author)
|
|
|
|
visit new_spending_proposal_path
|
|
fill_in 'spending_proposal_title', with: 'Build a skyscraper'
|
|
fill_in 'spending_proposal_description', with: 'I want to live in a high tower over the clouds'
|
|
fill_in 'spending_proposal_external_url', with: 'http://http://skyscraperpage.com/'
|
|
fill_in 'spending_proposal_association_name', with: 'People of the neighbourhood'
|
|
fill_in 'spending_proposal_captcha', with: correct_captcha_text
|
|
select 'All city', from: 'spending_proposal_geozone_id'
|
|
check 'spending_proposal_terms_of_service'
|
|
|
|
click_button 'Create'
|
|
|
|
expect(page).to have_content 'Spending proposal created successfully'
|
|
expect(page).to have_content 'You can access it from My activity'
|
|
|
|
within "#notice" do
|
|
click_link 'My activity'
|
|
end
|
|
|
|
expect(current_url).to eq(user_url(author, filter: :spending_proposals))
|
|
expect(page).to have_content "1 Spending proposal"
|
|
expect(page).to have_content "Build a skyscraper"
|
|
end
|
|
|
|
scenario 'Captcha is required for proposal creation' do
|
|
login_as(author)
|
|
|
|
visit new_spending_proposal_path
|
|
fill_in 'spending_proposal_title', with: 'Build a skyscraper'
|
|
fill_in 'spending_proposal_description', with: 'I want to live in a high tower over the clouds'
|
|
fill_in 'spending_proposal_external_url', with: 'http://http://skyscraperpage.com/'
|
|
fill_in 'spending_proposal_captcha', with: 'wrongText'
|
|
check 'spending_proposal_terms_of_service'
|
|
|
|
click_button 'Create'
|
|
|
|
expect(page).to_not have_content 'Spending proposal created successfully'
|
|
expect(page).to have_content '1 error'
|
|
|
|
fill_in 'spending_proposal_captcha', with: correct_captcha_text
|
|
click_button 'Create'
|
|
|
|
expect(page).to have_content 'Spending proposal created successfully'
|
|
end
|
|
|
|
scenario 'Errors on create' do
|
|
login_as(author)
|
|
|
|
visit new_spending_proposal_path
|
|
click_button 'Create'
|
|
expect(page).to have_content error_message
|
|
end
|
|
|
|
scenario "Show" do
|
|
user = create(:user)
|
|
login_as(user)
|
|
|
|
spending_proposal = create(:spending_proposal,
|
|
geozone: create(:geozone),
|
|
association_name: 'People of the neighbourhood')
|
|
|
|
visit spending_proposal_path(spending_proposal)
|
|
|
|
expect(page).to have_content(spending_proposal.title)
|
|
expect(page).to have_content(spending_proposal.description)
|
|
expect(page).to have_content(spending_proposal.author.name)
|
|
expect(page).to have_content(spending_proposal.association_name)
|
|
expect(page).to have_content(spending_proposal.geozone.name)
|
|
within("#spending_proposal_code") do
|
|
expect(page).to have_content(spending_proposal.id)
|
|
end
|
|
end
|
|
|
|
context "Destroy" do
|
|
|
|
scenario "Admin can destroy owned spending proposals" do
|
|
admin = create(:administrator)
|
|
user = create(:user, :level_two)
|
|
spending_proposal = create(:spending_proposal, author: user)
|
|
|
|
login_as(admin.user)
|
|
|
|
visit user_path(user)
|
|
within("#spending_proposal_#{spending_proposal.id}") do
|
|
click_link "Delete"
|
|
end
|
|
|
|
expect(page).to have_content("Spending proposal deleted succesfully.")
|
|
|
|
visit user_path(user)
|
|
expect(page).not_to have_css("spending_proposal_list")
|
|
end
|
|
|
|
end
|
|
|
|
end
|