Files
nairobi/spec/system/admin/budgets_wizard/groups_spec.rb
Alberto b304c640e1 Add groups step to budget creation
Note we're keeping this section's original design (which had one button
to add a new group which after being pressed was replaced by a button to
cancel) but we aren't using Foundation's `data-toggle` because there
were a couple of usability and accessibility issues.

First, using `data-toggle` multiple times and applying it to multiple
elements led to the "cancel" button not being available after submitting
a form with errors. Fixing it made the code more complicated.

Second, the "Add new group" button always had the `aria-expanded`
attribute set to "true", so my screen reader was announcing the button
as expanded even when it wasn't. I didn't manage to fix it using
`data-toggle`.

Finally, after pressing either the "Add new group" and "Cancel" buttons,
the keyboard focus was lost since the elements disappeared.

So we're simplifying the HTML and adding some custom JavaScript to be
able to handle the focus and manually setting the `aria-expanded`
attribute.

Co-Authored-By: Javi Martín <javim@elretirao.net>
Co-Authored-By: Julian Herrero <microweb10@gmail.com>
2021-06-08 18:45:13 +02:00

128 lines
4.3 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 ".is-active", 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
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_link "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_link "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