The absence of labels in these controls made them hard to use, particularly for people who use screen readers. Note we're removing the "Choose language" prompt, since we always automatically choose a language and not choosing a language doesn't really make sense. The only scenario where the prompt was used took place when all languages had been removed but, in that case, the "Choose language" prompt was misleading because there were no languages to choose from.
257 lines
7.9 KiB
Ruby
257 lines
7.9 KiB
Ruby
require "rails_helper"
|
|
|
|
describe "Public area translatable records" do
|
|
let(:user) { create(:user, :in_census) }
|
|
|
|
before do
|
|
Setting["feature.translation_interface"] = true
|
|
login_as(user)
|
|
end
|
|
|
|
context "New records" do
|
|
scenario "Add only single translation at once" do
|
|
visit new_debate_path
|
|
|
|
fill_in_new_debate_title with: "Who won the debate?"
|
|
fill_in_ckeditor "Initial debate text", with: "And who will win this debate?"
|
|
check "debate_terms_of_service"
|
|
click_button "Start a debate"
|
|
|
|
expect(page).to have_content "Debate created successfully"
|
|
end
|
|
|
|
scenario "Add single translation maintains introduced field values" do
|
|
visit new_proposal_path
|
|
|
|
fill_in_new_proposal_title with: "Olympic Games in Melbourne"
|
|
fill_in "Proposal summary", with: "Full proposal for our candidature"
|
|
fill_in_ckeditor "Proposal text", with: "2032 will make Australia famous again"
|
|
check "proposal_terms_of_service"
|
|
click_button "Create proposal"
|
|
|
|
expect(page).to have_content "Proposal created successfully"
|
|
expect(page).to have_content "Olympic Games in Melbourne"
|
|
expect(page).to have_content "Full proposal for our candidature"
|
|
expect(page).to have_content "2032 will make Australia famous again"
|
|
end
|
|
|
|
scenario "Add multiple translations at once" do
|
|
budget = create(:budget_heading, name: "Everywhere").group.budget
|
|
|
|
visit new_budget_investment_path(budget)
|
|
|
|
fill_in_new_investment_title with: "My awesome project"
|
|
fill_in_ckeditor "Description", with: "Everything is awesome!"
|
|
|
|
select "Français", from: "Add language"
|
|
fill_in_new_investment_title with: "Titre en Français"
|
|
fill_in_ckeditor "Description", with: "Contenu en Français"
|
|
|
|
check "budget_investment_terms_of_service"
|
|
click_button "Create Investment"
|
|
|
|
expect(page).to have_content "Budget Investment created successfully"
|
|
end
|
|
|
|
scenario "Add only single translation at once not having the current locale" do
|
|
visit new_proposal_path
|
|
click_link "Remove language"
|
|
select "Français", from: "Add language"
|
|
|
|
fill_in_new_proposal_title with: "Titre en Français"
|
|
fill_in "Proposal summary", with: "Résumé en Français"
|
|
check "proposal_terms_of_service"
|
|
click_button "Create proposal"
|
|
|
|
expect(page).to have_content "Proposal created successfully"
|
|
end
|
|
|
|
scenario "Add a translation for a locale with non-underscored name" do
|
|
budget = create(:budget_heading, name: "Everywhere").group.budget
|
|
|
|
visit new_budget_investment_path(budget)
|
|
click_link "Remove language"
|
|
select "Português brasileiro", from: "Add language"
|
|
fill_in_new_investment_title with: "Titre en Français"
|
|
fill_in_ckeditor "Description", with: "Contenu en Français"
|
|
|
|
check "budget_investment_terms_of_service"
|
|
click_button "Create Investment"
|
|
|
|
expect(page).to have_content "Budget Investment created successfully"
|
|
end
|
|
|
|
scenario "Add an invalid translation" do
|
|
visit new_debate_path
|
|
|
|
check "debate_terms_of_service"
|
|
click_button "Start a debate"
|
|
|
|
expect(page).to have_css "#error_explanation"
|
|
expect(page).to have_field "Debate title", with: "", class: "is-invalid-input"
|
|
end
|
|
|
|
scenario "Shows errors when submiting without any active translations" do
|
|
budget = create(:budget_heading, name: "Everywhere").group.budget
|
|
|
|
visit new_budget_investment_path(budget)
|
|
click_link "Remove language"
|
|
|
|
check "budget_investment_terms_of_service"
|
|
click_button "Create Investment"
|
|
|
|
expect(page).to have_css "#error_explanation"
|
|
expect(page).to have_field "Title", with: ""
|
|
end
|
|
end
|
|
|
|
context "Globalize javascript interface" do
|
|
scenario "Highlight current locale" do
|
|
visit new_debate_path
|
|
|
|
expect_to_have_language_selected "English"
|
|
end
|
|
|
|
scenario "Highlight new locale added" do
|
|
visit new_proposal_path
|
|
|
|
select "Español", from: "Language:"
|
|
|
|
expect_to_have_language_selected "Español"
|
|
end
|
|
|
|
scenario "Select a locale and add it to the form" do
|
|
visit new_budget_investment_path(create(:budget))
|
|
|
|
select "Français", from: "Add language"
|
|
|
|
expect(page).to have_field "Title", with: ""
|
|
end
|
|
|
|
scenario "Remove a translation" do
|
|
visit new_budget_investment_path(create(:budget))
|
|
|
|
expect(find("#select_language").value).to eq "en"
|
|
click_link "Remove language"
|
|
|
|
expect_not_to_have_language("English")
|
|
end
|
|
|
|
context "Languages in use" do
|
|
scenario "Show default description" do
|
|
visit new_debate_path
|
|
|
|
expect(page).to have_content "1 language in use"
|
|
end
|
|
|
|
scenario "Increase description count after add new language" do
|
|
visit new_proposal_path
|
|
|
|
select "Español", from: "Add language"
|
|
|
|
expect(page).to have_content "2 languages in use"
|
|
end
|
|
|
|
scenario "Decrease description count after remove a language" do
|
|
visit new_proposal_path
|
|
|
|
click_link "Remove language"
|
|
|
|
expect(page).to have_content "0 languages in use"
|
|
end
|
|
end
|
|
|
|
context "When translation interface feature setting" do
|
|
scenario "Is enabled translation interface should be rendered" do
|
|
visit new_budget_investment_path(create(:budget))
|
|
|
|
expect(page).to have_css ".globalize-languages"
|
|
end
|
|
|
|
scenario "Is disabled translation interface should not be rendered" do
|
|
Setting["feature.translation_interface"] = nil
|
|
|
|
visit new_debate_path
|
|
|
|
expect(page).not_to have_css ".globalize-languages"
|
|
end
|
|
end
|
|
end
|
|
|
|
context "Existing records" do
|
|
before { translatable.update(attributes.merge(author: user)) }
|
|
|
|
let(:attributes) do
|
|
translatable.translated_attribute_names.product(%i[en es]).to_h do |field, locale|
|
|
[:"#{field}_#{locale}", text_for(field, locale)]
|
|
end
|
|
end
|
|
|
|
context "Update a translation" do
|
|
context "With valid data" do
|
|
let(:translatable) { create(:debate) }
|
|
let(:path) { edit_debate_path(translatable) }
|
|
|
|
scenario "Changes the existing translation" do
|
|
visit path
|
|
|
|
select "Español", from: "Current language"
|
|
|
|
fill_in "Debate title", with: "Título corregido"
|
|
fill_in_ckeditor "Initial debate text", with: "Texto corregido"
|
|
|
|
click_button "Save changes"
|
|
|
|
visit path
|
|
|
|
expect(page).to have_field "Debate title", with: "Title in English"
|
|
|
|
select "Español", from: "Language:"
|
|
|
|
expect(page).to have_field "Título del debate", with: "Título corregido"
|
|
expect(page).to have_ckeditor "Texto inicial del debate", with: "Texto corregido"
|
|
end
|
|
end
|
|
|
|
context "Update a translation with invalid data" do
|
|
let(:translatable) { create(:proposal) }
|
|
|
|
scenario "Show validation errors" do
|
|
visit edit_proposal_path(translatable)
|
|
select "Español", from: "Current language"
|
|
|
|
expect(page).to have_field "Proposal title", with: "Título en español"
|
|
|
|
fill_in "Proposal title", with: ""
|
|
click_button "Save changes"
|
|
|
|
expect(page).to have_css "#error_explanation"
|
|
|
|
select "Español", from: "Current language"
|
|
|
|
expect(page).to have_field "Proposal title", with: "", class: "is-invalid-input"
|
|
end
|
|
end
|
|
end
|
|
|
|
context "Globalize javascript interface" do
|
|
let(:translatable) { create(:debate) }
|
|
let(:path) { edit_debate_path(translatable) }
|
|
|
|
scenario "Is rendered with translation interface feature enabled" do
|
|
visit path
|
|
|
|
expect(page).to have_css ".globalize-languages"
|
|
end
|
|
|
|
scenario "Is not rendered with translation interface feature disabled" do
|
|
Setting["feature.translation_interface"] = nil
|
|
|
|
visit path
|
|
|
|
expect(page).not_to have_css ".globalize-languages"
|
|
end
|
|
end
|
|
end
|
|
end
|