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