When configuring phases in a process, we were validating the start date or the end date is present, the other date is present too. However, in other parts of the application we were checking whether a phase is enabled and then assumed its dates were present if the phase was enabled. However, we weren't validating this behavior, so it was possible to enable a phase and leaving its dates blank, causing the application to crash. So, as suggested by Alberto, we're changing the validation rule so phase dates are mandatory when a phase is enabled. With this rule, the old validation rules are not necessary. I've considered leaving them in order to avoid database inconsistencies. However, I realized records having a disabled phase with its start and end dates have always been valid. This means applications checking for the presence of these dates instead of checking whether the phase is enabled have never worked properly. We don't have to change the logic anywhere else because as mentioned we were already checking phases are enabled before using their dates.
406 lines
14 KiB
Ruby
406 lines
14 KiB
Ruby
require "rails_helper"
|
|
|
|
describe "Admin collaborative legislation", :admin do
|
|
it_behaves_like "admin_milestoneable",
|
|
:legislation_process,
|
|
"admin_legislation_process_milestones_path"
|
|
|
|
context "Index" do
|
|
scenario "Displaying collaborative legislation" do
|
|
process_1 = create(:legislation_process, title: "Process open")
|
|
process_2 = create(:legislation_process, title: "Process for the future",
|
|
start_date: Date.current + 5.days)
|
|
process_3 = create(:legislation_process, title: "Process closed",
|
|
start_date: Date.current - 10.days,
|
|
end_date: Date.current - 6.days)
|
|
|
|
visit admin_legislation_processes_path(filter: "active")
|
|
|
|
expect(page).to have_content(process_1.title)
|
|
expect(page).to have_content(process_2.title)
|
|
expect(page).not_to have_content(process_3.title)
|
|
|
|
visit admin_legislation_processes_path(filter: "all")
|
|
|
|
expect(page).to have_content(process_1.title)
|
|
expect(page).to have_content(process_2.title)
|
|
expect(page).to have_content(process_3.title)
|
|
end
|
|
|
|
scenario "Processes are sorted by descending start date" do
|
|
process_1 = create(:legislation_process, title: "Process 1", start_date: Date.yesterday)
|
|
process_2 = create(:legislation_process, title: "Process 2", start_date: Date.current)
|
|
process_3 = create(:legislation_process, title: "Process 3", start_date: Date.tomorrow)
|
|
|
|
visit admin_legislation_processes_path(filter: "all")
|
|
|
|
expect(page).to have_content process_1.start_date
|
|
expect(page).to have_content process_2.start_date
|
|
expect(page).to have_content process_3.start_date
|
|
|
|
expect(page).to have_content process_1.end_date
|
|
expect(page).to have_content process_2.end_date
|
|
expect(page).to have_content process_3.end_date
|
|
|
|
expect(process_3.title).to appear_before(process_2.title)
|
|
expect(process_2.title).to appear_before(process_1.title)
|
|
end
|
|
end
|
|
|
|
context "Create" do
|
|
scenario "Valid legislation process" do
|
|
visit admin_root_path
|
|
|
|
within("#side_menu") do
|
|
click_link "Collaborative Legislation"
|
|
end
|
|
|
|
expect(page).not_to have_content "An example legislation process"
|
|
|
|
click_link "New process"
|
|
|
|
fill_in "Process Title", with: "An example legislation process"
|
|
fill_in "Summary", with: "Summary of the process"
|
|
fill_in "Description", with: "Describing the process"
|
|
|
|
base_date = Date.current
|
|
|
|
within_fieldset text: "Draft phase" do
|
|
check "Enabled"
|
|
fill_in "Start", with: base_date - 3.days
|
|
fill_in "End", with: base_date - 1.day
|
|
end
|
|
|
|
within_fieldset "Process" do
|
|
fill_in "Start", with: base_date
|
|
fill_in "End", with: base_date + 5.days
|
|
end
|
|
|
|
within_fieldset "Debate phase" do
|
|
check "Enabled"
|
|
fill_in "Start", with: base_date
|
|
fill_in "End", with: base_date + 2.days
|
|
end
|
|
|
|
within_fieldset "Comments phase" do
|
|
check "Enabled"
|
|
fill_in "Start", with: base_date + 3.days
|
|
fill_in "End", with: base_date + 5.days
|
|
end
|
|
|
|
check "legislation_process[draft_publication_enabled]"
|
|
fill_in "Draft publication date", with: base_date + 3.days
|
|
|
|
check "legislation_process[result_publication_enabled]"
|
|
fill_in "Final result publication date", with: base_date + 7.days
|
|
|
|
click_button "Create process"
|
|
|
|
expect(page).to have_content "An example legislation process"
|
|
expect(page).to have_content "Process created successfully"
|
|
|
|
click_link "Click to visit"
|
|
|
|
expect(page).to have_content "An example legislation process"
|
|
expect(page).not_to have_content "Summary of the process"
|
|
expect(page).to have_content "Describing the process"
|
|
|
|
within(".legislation-process-list") do
|
|
expect(page).to have_link text: "Debate"
|
|
expect(page).to have_link text: "Comments"
|
|
end
|
|
|
|
visit legislation_processes_path
|
|
|
|
expect(page).to have_content "An example legislation process"
|
|
expect(page).to have_content "Summary of the process"
|
|
expect(page).not_to have_content "Describing the process"
|
|
end
|
|
|
|
scenario "Legislation process in draft phase" do
|
|
visit admin_root_path
|
|
|
|
within("#side_menu") do
|
|
click_link "Collaborative Legislation"
|
|
end
|
|
|
|
expect(page).not_to have_content "An example legislation process"
|
|
|
|
click_link "New process"
|
|
|
|
fill_in "Process Title", with: "An example legislation process in draft phase"
|
|
fill_in "Summary", with: "Summary of the process"
|
|
fill_in "Description", with: "Describing the process"
|
|
|
|
base_date = Date.current - 2.days
|
|
|
|
within_fieldset text: "Draft phase" do
|
|
check "Enabled"
|
|
fill_in "Start", with: base_date
|
|
fill_in "End", with: base_date + 3.days
|
|
end
|
|
|
|
within_fieldset "Process" do
|
|
fill_in "Start", with: base_date
|
|
fill_in "End", with: base_date + 5.days
|
|
end
|
|
|
|
click_button "Create process"
|
|
|
|
expect(page).to have_content "An example legislation process in draft phase"
|
|
expect(page).to have_content "Process created successfully"
|
|
|
|
click_link "Click to visit"
|
|
|
|
expect(page).to have_content "An example legislation process in draft phase"
|
|
expect(page).not_to have_content "Summary of the process"
|
|
expect(page).to have_content "Describing the process"
|
|
|
|
visit legislation_processes_path
|
|
|
|
expect(page).not_to have_content "An example legislation process in draft phase"
|
|
expect(page).not_to have_content "Summary of the process"
|
|
expect(page).not_to have_content "Describing the process"
|
|
end
|
|
|
|
scenario "Create a legislation process with an image" do
|
|
visit new_admin_legislation_process_path
|
|
fill_in "Process Title", with: "An example legislation process"
|
|
fill_in "Summary", with: "Summary of the process"
|
|
|
|
base_date = Date.current
|
|
|
|
within_fieldset "Process" do
|
|
fill_in "Start", with: base_date
|
|
fill_in "End", with: base_date + 5.days
|
|
end
|
|
|
|
imageable_attach_new_file(create(:image), Rails.root.join("spec/fixtures/files/clippy.jpg"))
|
|
|
|
click_button "Create process"
|
|
|
|
expect(page).to have_content "An example legislation process"
|
|
expect(page).to have_content "Process created successfully"
|
|
|
|
click_link "Click to visit"
|
|
|
|
expect(page).to have_content "An example legislation process"
|
|
expect(page).not_to have_content "Summary of the process"
|
|
expect(page).to have_css("img[alt='An example legislation process']")
|
|
end
|
|
|
|
scenario "Default colors are present" do
|
|
visit new_admin_legislation_process_path
|
|
|
|
expect(find("#legislation_process_background_color").value).to eq "#e7f2fc"
|
|
expect(find("#legislation_process_font_color").value).to eq "#222222"
|
|
end
|
|
end
|
|
|
|
context "Update" do
|
|
let!(:process) do
|
|
create(:legislation_process,
|
|
title: "An example legislation process",
|
|
summary: "Summarizing the process",
|
|
description: "Description of the process")
|
|
end
|
|
|
|
scenario "Remove summary text" do
|
|
visit admin_root_path
|
|
|
|
within("#side_menu") do
|
|
click_link "Collaborative Legislation"
|
|
end
|
|
|
|
within("tr", text: "An example legislation process") { click_link "Edit" }
|
|
|
|
expect(page).to have_selector("h2", text: "An example legislation process")
|
|
expect(find("#legislation_process_debate_phase_enabled")).to be_checked
|
|
expect(find("#legislation_process_published")).to be_checked
|
|
|
|
fill_in "Summary", with: ""
|
|
click_button "Save changes"
|
|
|
|
expect(page).to have_content "Process updated successfully"
|
|
|
|
visit legislation_processes_path
|
|
expect(page).not_to have_content "Summarizing the process"
|
|
expect(page).to have_content "Description of the process"
|
|
end
|
|
|
|
scenario "Deactivate draft publication" do
|
|
visit admin_root_path
|
|
|
|
within("#side_menu") do
|
|
click_link "Collaborative Legislation"
|
|
end
|
|
|
|
within("tr", text: "An example legislation process") { click_link "Edit" }
|
|
|
|
expect(find("#legislation_process_draft_publication_enabled")).to be_checked
|
|
|
|
uncheck "legislation_process_draft_publication_enabled"
|
|
click_button "Save changes"
|
|
|
|
expect(page).to have_content "Process updated successfully"
|
|
expect(find("#debate_start_date").value).not_to be_blank
|
|
expect(find("#debate_end_date").value).not_to be_blank
|
|
|
|
click_link "Click to visit"
|
|
|
|
expect(page).not_to have_content "Draft publication"
|
|
end
|
|
|
|
scenario "Enabling/disabling a phase enables/disables its date fields" do
|
|
process.update!(published: false)
|
|
|
|
visit edit_admin_legislation_process_path(process)
|
|
|
|
expect(page).to have_field "start_date", disabled: true
|
|
expect(page).to have_field "end_date", disabled: true
|
|
|
|
check "legislation_process[published]"
|
|
fill_in "start_date", with: "07/07/2007"
|
|
fill_in "end_date", with: "08/08/2008"
|
|
uncheck "legislation_process[published]"
|
|
|
|
expect(page).to have_field "start_date", disabled: true
|
|
expect(page).to have_field "end_date", disabled: true
|
|
|
|
check "legislation_process[published]"
|
|
|
|
expect(page).to have_field "start_date", disabled: false, with: "2007-07-07"
|
|
expect(page).to have_field "end_date", disabled: false, with: "2008-08-08"
|
|
end
|
|
|
|
scenario "Enabling/disabling a phase does not enable/disable another phase date fields" do
|
|
process.update!(draft_phase_enabled: false, draft_publication_enabled: false)
|
|
|
|
visit edit_admin_legislation_process_path(process)
|
|
|
|
expect(page).to have_field "draft_start_date", disabled: true
|
|
expect(page).to have_field "draft_end_date", disabled: true
|
|
expect(page).to have_field "draft_publication_date", disabled: true
|
|
|
|
check "legislation_process[draft_phase_enabled]"
|
|
|
|
expect(page).to have_field "draft_start_date", disabled: false
|
|
expect(page).to have_field "draft_end_date", disabled: false
|
|
expect(page).to have_field "draft_publication_date", disabled: true
|
|
end
|
|
|
|
scenario "Enabling comments phase with blank dates" do
|
|
visit edit_admin_legislation_process_path(process)
|
|
|
|
within_fieldset "Comments phase" do
|
|
check "Enabled"
|
|
fill_in "Start", with: ""
|
|
fill_in "End", with: ""
|
|
end
|
|
|
|
click_button "Save changes"
|
|
|
|
expect(page).to have_content "errors prevented this process from being saved"
|
|
|
|
within_fieldset "Comments phase" do
|
|
expect(page).to have_content "can't be blank"
|
|
end
|
|
end
|
|
|
|
scenario "Change proposal categories" do
|
|
visit edit_admin_legislation_process_path(process)
|
|
within(".admin-content") { click_link "Proposals" }
|
|
|
|
fill_in "Categories", with: "recycling,bicycles,pollution"
|
|
click_button "Save changes"
|
|
|
|
visit admin_legislation_process_proposals_path(process)
|
|
|
|
expect(page).to have_field("Categories", with: "bicycles, pollution, recycling")
|
|
|
|
within(".admin-content") { click_link "Information" }
|
|
fill_in "Summary", with: "Summarizing the process"
|
|
click_button "Save changes"
|
|
|
|
visit admin_legislation_process_proposals_path(process)
|
|
|
|
expect(page).to have_field("Categories", with: "bicycles, pollution, recycling")
|
|
end
|
|
|
|
scenario "Edit milestones summary" do
|
|
visit admin_legislation_process_milestones_path(process)
|
|
|
|
expect(page).not_to have_link "Remove language"
|
|
expect(page).not_to have_field "translation_locale"
|
|
|
|
fill_in_ckeditor "Summary", with: "There is still a long journey ahead of us"
|
|
|
|
click_button "Update Process"
|
|
|
|
expect(page).to have_current_path admin_legislation_process_milestones_path(process)
|
|
|
|
visit milestones_legislation_process_path(process)
|
|
|
|
expect(page).to have_content "There is still a long journey ahead of us"
|
|
end
|
|
end
|
|
|
|
context "Special interface translation behaviour" do
|
|
let!(:process) { create(:legislation_process) }
|
|
|
|
before { Setting["feature.translation_interface"] = true }
|
|
|
|
scenario "Cant manage translations on homepage form" do
|
|
visit edit_admin_legislation_process_homepage_path(process)
|
|
|
|
expect(page).not_to have_css "#add_language"
|
|
expect(page).not_to have_link "Remove language"
|
|
end
|
|
|
|
scenario "Cant manage translations on milestones summary form" do
|
|
visit admin_legislation_process_milestones_path(process)
|
|
|
|
expect(page).not_to have_css "#add_language"
|
|
expect(page).not_to have_link "Remove language"
|
|
end
|
|
end
|
|
|
|
context "SDG related list" do
|
|
before do
|
|
Setting["feature.sdg"] = true
|
|
Setting["sdg.process.legislation"] = true
|
|
end
|
|
|
|
scenario "create Collaborative Legislation with sdg related list" do
|
|
visit new_admin_legislation_process_path
|
|
fill_in "Process Title", with: "Legislation process with SDG related content"
|
|
within_fieldset "Process" do
|
|
fill_in "Start", with: 2.days.ago
|
|
fill_in "End", with: 1.day.from_now
|
|
end
|
|
|
|
click_sdg_goal(17)
|
|
click_button "Create process"
|
|
visit admin_legislation_processes_path
|
|
|
|
within("tr", text: "Legislation process with SDG related content") do
|
|
expect(page).to have_css "td", exact_text: "17"
|
|
end
|
|
end
|
|
|
|
scenario "edit Collaborative Legislation with sdg related list" do
|
|
process = create(:legislation_process, title: "Legislation process with SDG related content")
|
|
process.sdg_goals = [SDG::Goal[1], SDG::Goal[17]]
|
|
visit edit_admin_legislation_process_path(process)
|
|
|
|
remove_sdg_goal_or_target_tag(1)
|
|
click_button "Save changes"
|
|
visit admin_legislation_processes_path
|
|
|
|
within("tr", text: "Legislation process with SDG related content") do
|
|
expect(page).to have_css "td", exact_text: "17"
|
|
end
|
|
end
|
|
end
|
|
end
|