Files
nairobi/spec/system/legislation/processes_spec.rb
Javi Martín 6ea9383743 Allow toggling elements with the keyboard
Using `<a>` tags with no `href` means these elements cannot be activated
by keyboard users, so we're replacing them with buttons.

In the future we probably want to add more consistency so all toggle
buttons use the same code. We might also add styles depending on the
`aria-expanded` property.
2021-03-31 13:38:38 +02:00

471 lines
16 KiB
Ruby

require "rails_helper"
describe "Legislation" do
let!(:administrator) { create(:administrator).user }
shared_examples "not published permissions" do |path|
let(:not_published_process) { create(:legislation_process, :not_published, title: "Process not published") }
let!(:not_permission_message) { "You do not have permission to carry out the action" }
it "is forbidden for a normal user" do
visit send(path, not_published_process)
expect(page).to have_content not_permission_message
expect(page).not_to have_content("Process not published")
end
it "is available for an administrator user" do
login_as(administrator)
visit send(path, not_published_process)
expect(page).to have_content("Process not published")
end
end
context "processes home page" do
scenario "No processes to be listed" do
visit legislation_processes_path
expect(page).to have_text "There aren't open processes"
visit legislation_processes_path(filter: "past")
expect(page).to have_text "There aren't past processes"
end
scenario "Processes can be listed" do
processes = create_list(:legislation_process, 3)
visit legislation_processes_path
processes.each do |process|
expect(page).to have_link(process.title)
end
end
scenario "Processes are sorted by descending start date", :js do
create(:legislation_process, title: "Process 1", start_date: 3.days.ago)
create(:legislation_process, title: "Process 2", start_date: 2.days.ago)
create(:legislation_process, title: "Process 3", start_date: Date.yesterday)
visit legislation_processes_path
expect("Process 3").to appear_before("Process 2")
expect("Process 2").to appear_before("Process 1")
end
scenario "Participation phases are displayed only if there is a phase enabled" do
process = create(:legislation_process, :empty)
process_debate = create(:legislation_process)
visit legislation_process_path(process)
expect(page).not_to have_content("Participation phases")
visit legislation_process_path(process_debate)
expect(page).to have_content("Participation phases")
end
scenario "Participation phases are displayed on current locale" do
process = create(:legislation_process, proposals_phase_start_date: Date.new(2018, 01, 01),
proposals_phase_end_date: Date.new(2018, 12, 01))
visit legislation_process_path(process)
expect(page).to have_content("Participation phases")
expect(page).to have_content("Proposals")
expect(page).to have_content("01 Jan 2018 - 01 Dec 2018")
visit legislation_process_path(process, locale: "es")
expect(page).to have_content("Fases de participación")
expect(page).to have_content("Propuestas")
expect(page).to have_content("01 ene 2018 - 01 dic 2018")
end
scenario "Filtering processes" do
create(:legislation_process, title: "Process open")
create(:legislation_process, :past, title: "Process past")
create(:legislation_process, :in_draft_phase, title: "Process in draft phase")
visit legislation_processes_path
expect(page).to have_content("Process open")
expect(page).not_to have_content("Process past")
expect(page).not_to have_content("Process in draft phase")
visit legislation_processes_path(filter: "past")
expect(page).not_to have_content("Process open")
expect(page).to have_content("Process past")
end
context "not published processes" do
before do
create(:legislation_process, title: "published")
create(:legislation_process, :not_published, title: "not published")
create(:legislation_process, :past, title: "past published")
create(:legislation_process, :not_published, :past, title: "past not published")
end
it "aren't listed" do
visit legislation_processes_path
expect(page).not_to have_content("not published")
expect(page).to have_content("published")
login_as(administrator)
visit legislation_processes_path
expect(page).not_to have_content("not published")
expect(page).to have_content("published")
end
it "aren't listed with past filter" do
visit legislation_processes_path(filter: "past")
expect(page).not_to have_content("not published")
expect(page).to have_content("past published")
login_as(administrator)
visit legislation_processes_path(filter: "past")
expect(page).not_to have_content("not published")
expect(page).to have_content("past published")
end
end
scenario "Show SDG tags when feature is enabled", :js do
Setting["feature.sdg"] = true
Setting["sdg.process.legislation"] = true
create(:legislation_process, sdg_goals: [SDG::Goal[1]],
sdg_targets: [SDG::Target["1.1"]])
visit legislation_processes_path
expect(page).to have_selector "img[alt='1. No Poverty']"
expect(page).to have_content "target 1.1"
end
end
context "process page" do
context "show" do
include_examples "not published permissions", :legislation_process_path
scenario "show view has document present on all phases" do
process = create(:legislation_process)
document = create(:document, documentable: process)
phases = ["Debate", "Proposals", "Comments"]
visit legislation_process_path(process)
phases.each do |phase|
within(".legislation-process-list") do
find("li", text: "#{phase}").click_link
end
expect(page).to have_content(document.title)
end
end
scenario "show draft publication and final result publication dates" do
process = create(:legislation_process, draft_publication_date: Date.new(2019, 01, 10),
result_publication_date: Date.new(2019, 01, 20))
visit legislation_process_path(process)
within("aside") do
expect(page).to have_content("Draft publication")
expect(page).to have_content("10 Jan 2019")
expect(page).to have_content("Final result publication")
expect(page).to have_content("20 Jan 2019")
end
end
scenario "do not show draft publication and final result publication dates if are empty" do
process = create(:legislation_process, :empty)
visit legislation_process_path(process)
within("aside") do
expect(page).not_to have_content("Draft publication")
expect(page).not_to have_content("Final result publication")
end
end
scenario "show additional info button", :js do
process = create(:legislation_process, additional_info: "Text for additional info of the process")
visit legislation_process_path(process)
expect(page).not_to have_content "Text for additional info of the process"
click_button "Additional information"
expect(page).to have_content "Text for additional info of the process"
end
scenario "do not show additional info button if it is empty" do
process = create(:legislation_process)
visit legislation_process_path(process)
expect(page).not_to have_button "Additional information"
end
scenario "Shows another translation when the default locale isn't available" do
process = create(:legislation_process, title_fr: "Français")
process.translations.find_by(locale: :en).destroy!
visit legislation_process_path(process)
expect(page).to have_content("Français")
end
scenario "Shows Create a Proposal button when process is in draft phase" do
process = create(:legislation_process,
:in_draft_phase,
proposals_phase_start_date: Date.tomorrow)
login_as(administrator)
visit legislation_process_proposals_path(process)
click_link "Create a proposal"
expect(page).to have_current_path new_legislation_process_proposal_path(process)
end
scenario "Show SDG tags when feature is enabled", :js do
Setting["feature.sdg"] = true
Setting["sdg.process.legislation"] = true
process = create(:legislation_process, sdg_goals: [SDG::Goal[1]],
sdg_targets: [SDG::Target["1.1"]])
visit legislation_process_path(process)
expect(page).to have_selector "img[alt='1. No Poverty']"
expect(page).to have_content "target 1.1"
end
end
context "homepage" do
scenario "enabled" do
process = create(:legislation_process, homepage_enabled: true,
homepage: "This is the process homepage",
debate_start_date: Date.current + 1.day,
debate_end_date: Date.current + 2.days)
visit legislation_process_path(process)
within(".key-dates") do
expect(page).to have_content("Homepage")
end
expect(page).to have_content("This is the process homepage")
expect(page).not_to have_content("Participate in the debate")
end
scenario "disabled", :with_frozen_time do
process = create(:legislation_process, homepage_enabled: false,
homepage: "This is the process homepage",
debate_start_date: Date.current + 1.day,
debate_end_date: Date.current + 2.days)
visit legislation_process_path(process)
within(".key-dates") do
expect(page).not_to have_content("Homepage")
end
expect(page).to have_content("This phase is not open yet")
expect(page).not_to have_content("This is the process homepage")
end
end
context "debate phase" do
scenario "not open", :with_frozen_time do
process = create(:legislation_process, debate_start_date: Date.current + 1.day, debate_end_date: Date.current + 2.days)
visit legislation_process_path(process)
expect(page).to have_content("This phase is not open yet")
expect(page).not_to have_content("Participate in the debate")
end
scenario "open without questions" do
process = create(:legislation_process, debate_start_date: Date.current - 1.day, debate_end_date: Date.current + 2.days)
visit legislation_process_path(process)
expect(page).not_to have_content("Participate in the debate")
expect(page).not_to have_content("This phase is not open yet")
end
scenario "open with questions" do
process = create(:legislation_process, debate_start_date: Date.current - 1.day, debate_end_date: Date.current + 2.days)
create(:legislation_question, process: process, title: "Question 1")
create(:legislation_question, process: process, title: "Question 2")
visit legislation_process_path(process)
expect(page).to have_content("Question 1")
expect(page).to have_content("Question 2")
expect(page).to have_content("Participate in the debate")
expect(page).not_to have_content("This phase is not open yet")
end
include_examples "not published permissions", :debate_legislation_process_path
end
context "draft publication phase" do
scenario "not open", :with_frozen_time do
process = create(:legislation_process, draft_publication_date: Date.current + 1.day)
visit draft_publication_legislation_process_path(process)
expect(page).to have_content("This phase is not open yet")
end
scenario "open" do
process = create(:legislation_process, draft_publication_date: Date.current)
visit draft_publication_legislation_process_path(process)
expect(page).to have_content("Nothing published yet")
end
include_examples "not published permissions", :draft_publication_legislation_process_path
end
context "allegations phase" do
scenario "not open", :with_frozen_time do
process = create(:legislation_process, allegations_start_date: Date.current + 1.day, allegations_end_date: Date.current + 2.days)
visit allegations_legislation_process_path(process)
expect(page).to have_content("This phase is not open yet")
end
scenario "open" do
process = create(:legislation_process, allegations_start_date: Date.current - 1.day, allegations_end_date: Date.current + 2.days)
visit allegations_legislation_process_path(process)
expect(page).to have_content("Nothing published yet")
end
include_examples "not published permissions", :allegations_legislation_process_path
end
context "final version publication phase" do
scenario "not open", :with_frozen_time do
process = create(:legislation_process, result_publication_date: Date.current + 1.day)
visit result_publication_legislation_process_path(process)
expect(page).to have_content("This phase is not open yet")
end
scenario "open" do
process = create(:legislation_process, result_publication_date: Date.current)
visit result_publication_legislation_process_path(process)
expect(page).to have_content("Nothing published yet")
end
include_examples "not published permissions", :result_publication_legislation_process_path
end
context "proposals phase" do
scenario "not open", :with_frozen_time do
process = create(:legislation_process, :upcoming_proposals_phase)
visit legislation_process_proposals_path(process)
expect(page).to have_content("This phase is not open yet")
end
scenario "open" do
process = create(:legislation_process, :in_proposals_phase)
visit legislation_process_proposals_path(process)
expect(page).to have_content("There are no proposals")
end
scenario "create proposal button redirects to register path if user is not logged in" do
process = create(:legislation_process, :in_proposals_phase)
visit legislation_process_proposals_path(process)
click_link "Create a proposal"
expect(page).to have_current_path new_user_session_path
expect(page).to have_content "You must sign in or register to continue"
end
include_examples "not published permissions", :legislation_process_proposals_path
end
context "Milestones" do
let(:process) { create(:legislation_process, :upcoming_proposals_phase) }
scenario "Without milestones" do
visit legislation_process_path(process)
within(".legislation-process-list") do
expect(page).not_to have_css "li.milestones"
end
end
scenario "With milestones" do
create(:milestone,
milestoneable: process,
description: "Something important happened",
publication_date: Date.new(2018, 3, 22)
)
visit legislation_process_path(process)
within(".legislation-process-list li.milestones") do
click_link "Following 22 Mar 2018"
end
within(".legislation-process-list .is-active") do
expect(page).to have_link "Following 22 Mar 2018"
end
within(".tab-milestones") do
expect(page).to have_content "Something important happened"
end
end
scenario "With main progress bar" do
create(:progress_bar, progressable: process)
visit milestones_legislation_process_path(process)
within(".tab-milestones") do
expect(page).to have_content "Progress"
end
end
scenario "With main and secondary progress bar" do
create(:progress_bar, progressable: process)
create(:progress_bar, :secondary, progressable: process, title: "Build laboratory")
visit milestones_legislation_process_path(process)
within(".tab-milestones") do
expect(page).to have_content "Progress"
expect(page).to have_content "Build laboratory"
end
end
scenario "No main progress bar" do
create(:progress_bar, :secondary, progressable: process, title: "Defeat Evil Lords")
visit milestones_legislation_process_path(process)
within(".tab-milestones") do
expect(page).not_to have_content "Progress"
expect(page).not_to have_content "Defeat Evil Lords"
end
end
end
end
end