This way it's more clear what the user experience is during the process. Note this did not result in flaky tests, since the tests continue by clicking links, that are only present after the request has finished. However, we're adding expectations so we don't have to think whether the tests could be flaky and because this way we're also testing the user experience; it would be strange for a user if they were redirected to a page without a flash message.
151 lines
5.0 KiB
Ruby
151 lines
5.0 KiB
Ruby
require "rails_helper"
|
|
|
|
describe "Budgets wizard, groups step", :admin do
|
|
let(:budget) { create(:budget, :drafting) }
|
|
|
|
describe "New" do
|
|
scenario "create group" do
|
|
visit admin_budgets_wizard_budget_groups_path(budget)
|
|
|
|
within "#side_menu" do
|
|
expect(page).to have_css "[aria-current]", exact_text: "Participatory budgets"
|
|
end
|
|
|
|
expect(page).to have_content "Continue to headings"
|
|
expect(page).not_to have_link "Continue to headings"
|
|
|
|
click_button "Add new group"
|
|
|
|
fill_in "Group name", with: "All City"
|
|
|
|
click_button "Create new group"
|
|
|
|
expect(page).to have_content "Group created successfully!"
|
|
expect(page).to have_content "All City"
|
|
expect(page).to have_button "Add new group"
|
|
expect(page).to have_link "Continue to headings"
|
|
end
|
|
|
|
scenario "cancel creating a group" do
|
|
visit admin_budgets_wizard_budget_groups_path(budget)
|
|
|
|
expect(page).not_to have_field "Group name"
|
|
expect(page).not_to have_button "Cancel"
|
|
expect(page).to have_content "Continue to headings"
|
|
|
|
click_button "Add new group"
|
|
|
|
expect(page).to have_field "Group name"
|
|
expect(page).not_to have_button "Add new group"
|
|
expect(page).not_to have_content "Continue to headings"
|
|
|
|
click_button "Cancel"
|
|
|
|
expect(page).to have_button "Add new group"
|
|
expect(page).not_to have_field "Group name"
|
|
expect(page).not_to have_button "Cancel"
|
|
expect(page).to have_content "Continue to headings"
|
|
end
|
|
|
|
scenario "submit the form with errors" do
|
|
visit admin_budgets_wizard_budget_groups_path(budget)
|
|
click_button "Add new group"
|
|
|
|
click_button "Create new group"
|
|
|
|
expect(page).not_to have_content "Group created successfully!"
|
|
expect(page).to have_css ".is-invalid-label", text: "Group name"
|
|
expect(page).to have_css ".creation-timeline"
|
|
expect(page).to have_content "can't be blank"
|
|
expect(page).to have_button "Create new group"
|
|
expect(page).to have_button "Cancel"
|
|
expect(page).not_to have_button "Add new group"
|
|
expect(page).not_to have_content "Continue to headings"
|
|
end
|
|
end
|
|
|
|
describe "Edit" do
|
|
scenario "update group" do
|
|
create(:budget_group, budget: budget, name: "Group wiht a typo")
|
|
|
|
visit admin_budgets_wizard_budget_groups_path(budget)
|
|
|
|
expect(page).to have_css ".creation-timeline"
|
|
|
|
within("tr", text: "Group wiht a typo") { click_link "Edit" }
|
|
fill_in "Group name", with: "Group without typos"
|
|
click_button "Save group"
|
|
|
|
expect(page).to have_content "Group updated successfully"
|
|
expect(page).to have_css ".creation-timeline"
|
|
expect(page).to have_css "td", exact_text: "Group without typos"
|
|
end
|
|
|
|
scenario "submit the form with errors and then without errors" do
|
|
group = create(:budget_group, budget: budget, name: "Group wiht a typo")
|
|
|
|
visit edit_admin_budgets_wizard_budget_group_path(budget, group)
|
|
fill_in "Group name", with: ""
|
|
click_button "Save group"
|
|
|
|
expect(page).to have_css "#error_explanation"
|
|
|
|
fill_in "Group name", with: "Group without typos"
|
|
click_button "Save group"
|
|
|
|
expect(page).to have_content "Group updated successfully"
|
|
expect(page).to have_css ".creation-timeline"
|
|
expect(page).to have_css "td", exact_text: "Group without typos"
|
|
end
|
|
|
|
scenario "update group in single heading budget" do
|
|
visit admin_budgets_wizard_budget_groups_path(budget, mode: "single")
|
|
fill_in "Group name", with: "Group wiht typo"
|
|
click_button "Continue to headings"
|
|
|
|
expect(page).to have_content "Group created successfully"
|
|
|
|
click_link "Go back to edit group"
|
|
|
|
expect(page).to have_field "Group name", with: "Group wiht typo"
|
|
|
|
fill_in "Group name", with: "Group without typos"
|
|
click_button "Continue to headings"
|
|
|
|
expect(page).to have_content "Group updated successfully"
|
|
|
|
visit admin_budget_path(budget)
|
|
|
|
within "section", text: "Heading groups" do
|
|
expect(page).to have_css "h4", exact_text: "Group without typos"
|
|
end
|
|
end
|
|
end
|
|
|
|
describe "Destroy" do
|
|
scenario "delete a group without headings" do
|
|
create(:budget_group, budget: budget, name: "Delete me!")
|
|
|
|
visit admin_budgets_wizard_budget_groups_path(budget)
|
|
within("tr", text: "Delete me!") { accept_confirm { click_button "Delete" } }
|
|
|
|
expect(page).to have_content "Group deleted successfully"
|
|
expect(page).not_to have_content "Delete me!"
|
|
expect(page).to have_css ".creation-timeline"
|
|
end
|
|
|
|
scenario "try to delete a group with headings" do
|
|
group = create(:budget_group, budget: budget, name: "Don't delete me!")
|
|
create(:budget_heading, group: group)
|
|
|
|
visit admin_budgets_wizard_budget_groups_path(budget)
|
|
|
|
within("tr", text: "Don't delete me!") { accept_confirm { click_button "Delete" } }
|
|
|
|
expect(page).to have_content "You cannot delete a Group that has associated headings"
|
|
expect(page).to have_content "Don't delete me!"
|
|
expect(page).to have_css ".creation-timeline"
|
|
end
|
|
end
|
|
end
|