Before, users needed to navigate to the list of groups in order to add, edit or delete a group. Also, they need to navigate to the list of groups first, and then to the list of headings for that group in order to add, edit or delete a heading. Now, it's possible to do all these actions for any group or heading from the participatory budget view to bring simplicity and to reduce the number of clicks from a user perspective. Co-Authored-By: Javi Martín <javim@elretirao.net>
204 lines
6.8 KiB
Ruby
204 lines
6.8 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: "Groups and headings" do
|
|
expect(page.text).to eq "Groups and headings\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: "Groups and headings" 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 { click_button "Delete Nowhere" }
|
|
|
|
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 { click_button "Delete Everywhere" }
|
|
|
|
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: "Groups and headings" 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: :select_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
|