Files
nairobi/spec/features/legislation/processes_spec.rb
Javi Martín 2e6644d513 Fix crash with no translation for default locale
When we were visiting a page showing the content of a record which uses
globalize and our locale was the default one and there was no
translation for the default locale, the application was crashing in some
places because there are no fallbacks for the default locale.

For example, when visiting a legislation process, the line with
`CGI.escape(title)` was crashing because `title` was `nil` for the
default locale.

We've decided to solve this issue by using any available translations as
globalize fallbacks instead of showing a 404 error or a translation
missing error because these solutions would (we thinkg) either require
modifying many places in the application or making the translatable
logic even more complex.

Initially we tried to add this solution to an initializer, but it must
be called after initializing the application so I18n.fallbacks[locale]
gets the value defined in config.i18n.fallbacks.

Also note the line:

fallbacks[locale] = I18n.fallbacks[locale] + I18n.available_locales

Doesn't mention `I18n.default_locale` because the method
`I18n.fallbacks[locale]` automatically adds the default locale.
2018-10-22 16:36:18 +02:00

280 lines
9.8 KiB
Ruby

require 'rails_helper'
feature '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: 'next')
expect(page).to have_text "There aren't planned 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 'Filtering processes' do
create(:legislation_process, title: "Process open")
create(:legislation_process, :next, title: "Process next")
create(:legislation_process, :past, title: "Process past")
visit legislation_processes_path
expect(page).to have_content('Process open')
expect(page).not_to have_content('Process next')
expect(page).not_to have_content('Process past')
visit legislation_processes_path(filter: 'next')
expect(page).not_to have_content('Process open')
expect(page).to have_content('Process next')
expect(page).not_to have_content('Process past')
visit legislation_processes_path(filter: 'past')
expect(page).not_to have_content('Process open')
expect(page).not_to have_content('Process next')
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")
[:next, :past].each do |trait|
create(:legislation_process, trait, title: "#{trait} published")
create(:legislation_process, :not_published, trait, title: "#{trait} not published")
end
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 next filter" do
visit legislation_processes_path(filter: 'next')
expect(page).not_to have_content('not published')
expect(page).to have_content('next published')
login_as(administrator)
visit legislation_processes_path(filter: 'next')
expect(page).not_to have_content('not published')
expect(page).to have_content('next 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
end
context 'process page' do
context "show" do
include_examples "not published permissions", :legislation_process_path
scenario '#show view has document present' do
process = create(:legislation_process)
document = create(:document, documentable: process)
visit legislation_process_path(process)
expect(page).to have_content(document.title)
end
scenario 'show additional info button' do
process = create(:legislation_process, additional_info: "Text for additional info of the process")
visit legislation_process_path(process)
expect(page).to have_content("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).to_not have_content("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.where(locale: :en).first.destroy
visit legislation_process_path(process)
expect(page).to have_content("Français")
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).to_not 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).to_not have_content("Participate in the debate")
expect(page).to_not 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).to_not 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' 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
end
end