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(file_fixture("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_css "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" expect(page).to have_content "Process updated successfully" 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" expect(page).to have_content "Process updated successfully" 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_content "Process updated successfully." 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 "do not show SDG columns if disabled" do process = create(:legislation_process, title: "Legislation process with SDG related content") process.sdg_goals = [SDG::Goal[1], SDG::Goal[17]] Setting["feature.sdg"] = false visit admin_legislation_processes_path expect(page).not_to have_content "Goals" expect(page).not_to have_content "Targets" within "tr", text: "Legislation process with SDG related content" do expect(page).not_to have_content "1, 17" end 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" expect(page).to have_content "Process created successfully" 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" expect(page).to have_content "Process updated successfully" 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