Files
nairobi/spec/system/admin/geozones_spec.rb
Matheus Miranda de13e789dd Add polygon geographies to Budgets' map
Note that in the budgets wizard test we now create district with no
associated geozone, so the text "all city" will appear in the districts
table too, meaning we can't use `within "section", text: "All city" do`
anymore since it would result in an ambiguous match.

Co-Authored-By: Julian Herrero <microweb10@gmail.com>
Co-Authored-By: Javi Martín <javim@elretirao.net>
2023-05-31 16:56:15 +02:00

146 lines
4.2 KiB
Ruby

require "rails_helper"
describe "Admin geozones", :admin do
scenario "Show list of geozones" do
chamberi = create(:geozone, name: "Chamberí")
retiro = create(:geozone, name: "Retiro")
visit admin_geozones_path
expect(page).to have_content(chamberi.name)
expect(page).to have_content(retiro.name)
end
scenario "Create new geozone" do
visit admin_root_path
within("#side_menu") do
click_link "Settings"
click_link "Manage geozones"
end
click_link "Create geozone"
fill_in "geozone_name", with: "Fancy District"
fill_in "geozone_external_code", with: 123
fill_in "geozone_census_code", with: 44
click_button "Save changes"
expect(page).to have_content "Geozone created successfully"
expect(page).to have_content "Fancy District"
visit admin_geozones_path
expect(page).to have_content "Fancy District"
end
scenario "Edit geozone with no associated elements" do
geozone = create(:geozone, name: "Edit me!", census_code: "012")
visit admin_geozones_path
within("#geozone_#{geozone.id}") { click_link "Edit" }
fill_in "geozone_name", with: "New geozone name"
fill_in "geozone_census_code", with: "333"
click_button "Save changes"
expect(page).to have_content "Geozone updated successfully"
within("#geozone_#{geozone.id}") do
expect(page).to have_content "New geozone name"
expect(page).to have_content "333"
end
end
scenario "Edit geozone with associated elements" do
geozone = create(:geozone, name: "Edit me!")
create(:proposal, title: "Proposal with geozone", geozone: geozone)
visit admin_geozones_path
within("#geozone_#{geozone.id}") { click_link "Edit" }
fill_in "geozone_name", with: "New geozone name"
click_button "Save changes"
expect(page).to have_content "Geozone updated successfully"
within("#geozone_#{geozone.id}") do
expect(page).to have_content "New geozone name"
end
end
scenario "Delete geozone with no associated elements" do
geozone = create(:geozone, name: "Delete me!")
visit admin_geozones_path
within("#geozone_#{geozone.id}") do
accept_confirm("Are you sure? This action will delete \"Delete me!\" and can't be undone.") do
click_button "Delete"
end
end
expect(page).to have_content "Geozone successfully deleted"
expect(page).not_to have_content("Delete me!")
end
scenario "Delete geozone with associated element" do
geozone = create(:geozone, name: "Delete me!")
create(:proposal, geozone: geozone)
visit admin_geozones_path
within("#geozone_#{geozone.id}") do
accept_confirm("Are you sure? This action will delete \"Delete me!\" and can't be undone.") do
click_button "Delete"
end
end
expect(page).to have_content "This geozone can't be deleted since there are elements attached to it"
within("#geozone_#{geozone.id}") do
expect(page).to have_content "Delete me!"
end
end
scenario "Show polygons when a heading is associated with a geozone" do
Setting["feature.map"] = true
geojson = '{ "geometry": { "type": "Polygon", "coordinates": [[-0.1,51.5],[-0.2,51.4],[-0.3,51.6]] } }'
geozone = create(:geozone, name: "Polygon me!")
budget = create(:budget)
group = create(:budget_group, budget: budget)
heading = create(:budget_heading, name: "Area 51", group: group)
visit edit_admin_geozone_path(geozone)
fill_in "GeoJSON data (optional)", with: geojson
fill_in "Color (optional)", with: "#f5c211"
click_button "Save changes"
expect(page).to have_content "Geozone updated successfully"
visit edit_admin_budget_group_heading_path(budget, group, heading)
select "Polygon me!", from: "Scope of operation"
click_button "Save heading"
expect(page).to have_content "Heading updated successfully"
visit budget_path(budget)
expect(page).to have_css ".map-polygon[fill='#f5c211']"
within(".map-location") { expect(page).not_to have_link "Area 51" }
find(".map-polygon").click
within ".map-location" do
expect(page).to have_link "Area 51", href: budget_investments_path(budget, heading_id: heading.id)
end
end
end