Files
nairobi/spec/system/admin/budget_groups_spec.rb
Javi Martín 16fc9998c4 Use labels in controls to add and select languages
The absence of labels in these controls made them hard to use,
particularly for people who use screen readers.

Note we're removing the "Choose language" prompt, since we always
automatically choose a language and not choosing a language doesn't
really make sense. The only scenario where the prompt was used took
place when all languages had been removed but, in that case, the "Choose
language" prompt was misleading because there were no languages to
choose from.
2024-11-08 14:22:44 +01:00

206 lines
7.0 KiB
Ruby

require "rails_helper"
describe "Admin budget groups", :admin do
let(:budget) { create(:budget, :drafting) }
context "Load" do
let!(:budget) { create(:budget, slug: "budget_slug") }
let!(:group) { create(:budget_group, slug: "group_slug", budget: budget) }
scenario "finds budget and group by slug" do
visit edit_admin_budget_group_path("budget_slug", "group_slug")
expect(page).to have_content(budget.name)
expect(page).to have_field "Group name", with: group.name
end
end
context "List of groups from budget page" do
scenario "Displaying no groups for budget" do
visit admin_budget_path(budget)
within "section", text: "Heading groups" do
expect(page.text).to eq "Heading groups\nAdd group"
end
end
scenario "Displaying groups" do
above = create(:budget_group, budget: budget, name: "Above ground")
below = create(:budget_group, budget: budget, name: "Below ground")
1.times { create(:budget_heading, group: above) }
2.times { create(:budget_heading, group: below) }
visit admin_budget_path(budget)
within "section", text: "Heading groups" do
within "section", text: "Above ground" do
expect(page).to have_css "h4", exact_text: "Above ground"
expect(page).not_to have_content "Maximum number of headings"
end
within "section", text: "Below ground" do
expect(page).to have_css "h4", exact_text: "Below ground"
expect(page).to have_content "Maximum number of headings in which a user can select projects 1"
end
end
end
scenario "Delete a group without headings" do
create(:budget_group, budget: budget, name: "Nowhere")
visit admin_budget_path(budget)
accept_confirm("Are you sure? This action will delete \"Nowhere\" and can't be undone.") do
click_button "Delete Nowhere"
end
expect(page).to have_content "Group deleted successfully"
expect(page).not_to have_content "Nowhere"
end
scenario "Try to delete a group with headings" do
group = create(:budget_group, budget: budget, name: "Everywhere")
create(:budget_heading, group: group, name: "Everything")
visit admin_budget_path(budget)
accept_confirm("Are you sure? This action will delete \"Everywhere\" and can't be undone.") do
click_button "Delete Everywhere"
end
expect(page).to have_content "You cannot delete a Group that has associated headings"
expect(page).to have_content "Everywhere"
end
end
context "New" do
scenario "Create group" do
visit admin_budget_path(budget)
click_link "Add group"
fill_in "Group name", with: "All City"
click_button "Create new group"
expect(page).to have_content "Group created successfully!"
within "section", text: "Heading groups" do
expect(page).to have_css "h4", exact_text: "All City"
end
end
scenario "Group name is mandatory" do
visit new_admin_budget_group_path(budget)
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_content "can't be blank"
end
end
context "Edit" do
scenario "Show group information" do
group = create(:budget_group, budget: budget, name: "Everywhere", max_votable_headings: 2)
2.times { create(:budget_heading, group: group) }
visit admin_budget_path(budget)
click_link "Edit Everywhere"
expect(page).to have_field "Group name", with: "Everywhere"
expect(page).to have_field "Maximum number of headings in which a user can select projects", with: "2"
end
describe "Select for maximum number of headings to select projects" do
scenario "is present if there are several headings in the group" do
group = create(:budget_group, budget: budget)
2.times { create(:budget_heading, group: group) }
visit edit_admin_budget_group_path(budget, group)
expect(page).to have_field "Maximum number of headings in which a user can select projects"
end
scenario "is not present if there's only one heading in the group" do
group = create(:budget_group, budget: budget)
create(:budget_heading, group: group)
visit edit_admin_budget_group_path(budget, group)
expect(page).not_to have_field "Maximum number of headings in which a user can select projects"
end
scenario "is not present if there are no headings in the group" do
group = create(:budget_group, budget: budget)
visit edit_admin_budget_group_path(budget, group)
expect(page).not_to have_field "Maximum number of headings in which a user can select projects"
end
end
scenario "Changing name for current locale will update the slug if budget is in draft phase" do
group = create(:budget_group, budget: budget, name: "Old English Name")
visit edit_admin_budget_group_path(budget, group)
select "Español", from: "Add language"
fill_in "Group name", with: "Spanish name"
click_button "Save group"
expect(page).to have_content "Group updated successfully"
visit budget_group_path(budget, id: "old-english-name")
expect(page).to have_content "Select a heading"
visit edit_admin_budget_group_path(budget, group)
select "English", from: "Current language"
fill_in "Group name", with: "New English Name"
click_button "Save group"
expect(page).to have_content "Group updated successfully"
visit budget_group_path(budget, id: "new-english-name")
expect(page).to have_content "Select a heading"
end
end
context "Update" do
let!(:group) { create(:budget_group, budget: budget, name: "All City") }
scenario "Updates group" do
2.times { create(:budget_heading, group: group) }
visit edit_admin_budget_group_path(budget, group)
expect(page).to have_field "Group name", with: "All City"
fill_in "Group name", with: "Districts"
select "2", from: "Maximum number of headings in which a user can select projects"
click_button "Save group"
expect(page).to have_content "Group updated successfully"
visit edit_admin_budget_group_path(budget, group)
expect(page).to have_field "Group name", with: "Districts"
expect(page).to have_field "Maximum number of headings in which a user can select projects", with: "2"
end
scenario "Group name is already used" do
create(:budget_group, budget: budget, name: "Districts")
visit edit_admin_budget_group_path(budget, group)
expect(page).to have_field "Group name", with: "All City"
fill_in "Group name", with: "Districts"
click_button "Save group"
expect(page).not_to have_content "Group updated successfully"
expect(page).to have_css(".is-invalid-label", text: "Group name")
expect(page).to have_css("small.form-error", text: "has already been taken")
end
end
end