require "rails_helper" describe "Budgets wizard, headings step", :admin do let(:budget) { create(:budget, :drafting) } let(:group) { create(:budget_group, budget: budget, name: "Default group") } describe "Index" do scenario "back to a previous step" do visit admin_budgets_wizard_budget_group_headings_path(budget, group) within "#side_menu" do expect(page).to have_css ".is-active", exact_text: "Participatory budgets" end click_link "Go back to groups" expect(page).to have_css "tr", text: "Default group" expect(page).to have_css ".creation-timeline" end scenario "change to another group" do economy = create(:budget_group, budget: budget, name: "Economy") health = create(:budget_group, budget: budget, name: "Health") create(:budget_group, budget: budget, name: "Technology") create(:budget_heading, group: economy, name: "Banking") create(:budget_heading, group: health, name: "Hospitals") visit admin_budgets_wizard_budget_group_headings_path(budget, economy) within(".heading") do expect(page).to have_content "Banking" expect(page).not_to have_content "Hospitals" end expect(page).not_to have_link "Health" click_button "Manage headings from a different group" click_link "Health" within(".heading") do expect(page).to have_content "Hospitals" expect(page).not_to have_content "Banking" end expect(page).to have_css ".creation-timeline" end end describe "New" do scenario "cancel creating a heading" do visit admin_budgets_wizard_budget_group_headings_path(budget, group) expect(page).not_to have_field "Heading name" expect(page).not_to have_button "Cancel" expect(page).to have_content "Continue to phases" click_button "Add new heading" expect(page).to have_field "Heading name" expect(page).not_to have_button "Add new heading" expect(page).not_to have_content "Continue to phases" click_button "Cancel" expect(page).to have_button "Add new heading" expect(page).not_to have_field "Heading name" expect(page).not_to have_button "Cancel" expect(page).to have_content "Continue to phases" end scenario "submit the form with errors" do visit admin_budgets_wizard_budget_group_headings_path(budget, group) click_button "Add new heading" click_button "Create new heading" expect(page).not_to have_content "Heading created successfully!" expect(page).to have_css(".is-invalid-label", text: "Heading name") expect(page).to have_content "can't be blank" expect(page).to have_button "Create new heading" expect(page).to have_button "Cancel" expect(page).not_to have_button "Add new heading" expect(page).not_to have_content "Continue to phases" end end describe "Edit" do scenario "update heading" do create(:budget_heading, group: group, name: "Heading wiht a typo") visit admin_budgets_wizard_budget_group_headings_path(budget, group) expect(page).to have_css ".creation-timeline" within("tr", text: "Heading wiht a typo") { click_link "Edit" } fill_in "Heading name", with: "Heading without typos" click_button "Save heading" expect(page).to have_content "Heading updated successfully" expect(page).to have_css ".creation-timeline" expect(page).to have_css "td", exact_text: "Heading without typos" end scenario "submit the form with errors and then without errors" do heading = create(:budget_heading, group: group, name: "Heading wiht a typo") visit edit_admin_budgets_wizard_budget_group_heading_path(budget, group, heading) fill_in "Heading name", with: "" click_button "Save heading" expect(page).to have_css "#error_explanation" expect(page).to have_css ".creation-timeline" fill_in "Heading name", with: "Heading without typos" click_button "Save heading" expect(page).to have_content "Heading updated successfully" expect(page).to have_css ".creation-timeline" expect(page).to have_css "td", exact_text: "Heading without typos" end scenario "update heading in single heading budget" do visit admin_budgets_wizard_budget_group_headings_path(budget, group, mode: "single") fill_in "Heading name", with: "Heading wiht typo" fill_in "Money amount", with: "300000" click_button "Continue to phases" expect(page).to have_content "Heading created successfully" click_link "Go back to edit heading" expect(page).to have_field "Heading name", with: "Heading wiht typo" fill_in "Heading name", with: "Heading without typos" click_button "Continue to phases" expect(page).to have_content "Heading updated successfully" visit admin_budget_group_headings_path(budget, group) expect(page).to have_content "There is 1 heading" within("tbody tr") { expect(page).to have_content "Heading without typos" } end end describe "Destroy" do scenario "delete a heading without investments" do create(:budget_heading, group: group, name: "Delete me!") visit admin_budgets_wizard_budget_group_headings_path(budget, group) within("tr", text: "Delete me!") { accept_confirm { click_link "Delete" } } expect(page).to have_content "Heading deleted successfully" expect(page).not_to have_content "Delete me!" expect(page).to have_css ".creation-timeline" end scenario "try to delete a heading with investments" do heading = create(:budget_heading, group: group, name: "Don't delete me!") create(:budget_investment, heading: heading) visit admin_budgets_wizard_budget_group_headings_path(budget, group) within("tr", text: "Don't delete me!") { accept_confirm { click_link "Delete" } } expect(page).to have_content "You cannot delete a Heading that has associated investments" expect(page).to have_content "Don't delete me!" expect(page).to have_css ".creation-timeline" end end end