540 lines
16 KiB
Ruby
540 lines
16 KiB
Ruby
require "rails_helper"
|
|
|
|
describe "Admin edit translatable records" do
|
|
before do
|
|
translatable.update!(attributes)
|
|
login_as(create(:administrator).user)
|
|
end
|
|
|
|
let(:fields) { translatable.translated_attribute_names }
|
|
|
|
let(:attributes) do
|
|
fields.product(%i[en es]).map do |field, locale|
|
|
[:"#{field}_#{locale}", text_for(field, locale)]
|
|
end.to_h
|
|
end
|
|
|
|
context "Add a translation", :js do
|
|
context "Input fields" do
|
|
let(:translatable) { create(:budget_heading) }
|
|
let(:path) { admin_polymorphic_path(translatable, action: :edit) }
|
|
|
|
scenario "Maintains existing translations" do
|
|
visit path
|
|
|
|
select "Français", from: :add_language
|
|
fill_in "Heading name", with: "Nom en Français"
|
|
click_button "Save heading"
|
|
|
|
visit path
|
|
|
|
expect(page).to have_field "Heading name", with: "Heading name in English"
|
|
|
|
select "Español", from: :select_language
|
|
|
|
expect(page).to have_field "Heading name", with: "Nombre de la partida en español"
|
|
|
|
select "Français", from: :select_language
|
|
|
|
expect(page).to have_field "Heading name", with: "Nom en Français"
|
|
end
|
|
end
|
|
|
|
context "CKEditor fields" do
|
|
let(:translatable) { create(:site_customization_page) }
|
|
let(:path) { edit_admin_site_customization_page_path(translatable) }
|
|
|
|
scenario "Maintains existing translations" do
|
|
visit path
|
|
|
|
select "Français", from: :add_language
|
|
fill_in "Title", with: "Titre en Français"
|
|
fill_in "Subtitle", with: "Sous-titres en Français"
|
|
fill_in_ckeditor "Content", with: "Contenu en Français"
|
|
click_button "Update Custom page"
|
|
|
|
visit path
|
|
|
|
expect(page).to have_ckeditor "Content", with: "Content in English"
|
|
|
|
select "Español", from: :select_language
|
|
|
|
expect(page).to have_ckeditor "Content", with: "Contenido en español"
|
|
|
|
select "Français", from: :select_language
|
|
|
|
expect(page).to have_ckeditor "Content", with: "Contenu en Français"
|
|
end
|
|
end
|
|
|
|
context "Markdownit field" do
|
|
let(:translatable) { create(:legislation_draft_version) }
|
|
let(:path) { edit_admin_legislation_process_draft_version_path(translatable.process, translatable) }
|
|
|
|
scenario "Maintains existing translations" do
|
|
visit path
|
|
|
|
select "Français", from: :add_language
|
|
fill_in "Version title", with: "Titre en Français"
|
|
click_link class: "fullscreen-toggle"
|
|
fill_in "Text", with: "Texte en Français"
|
|
click_link class: "fullscreen-toggle"
|
|
click_button "Save changes"
|
|
|
|
visit path
|
|
click_link class: "fullscreen-toggle"
|
|
|
|
expect(page).to have_field "Text", with: "Text in English"
|
|
|
|
click_link class: "fullscreen-toggle"
|
|
select "Español", from: :select_language
|
|
click_link class: "fullscreen-toggle"
|
|
|
|
expect(page).to have_field "Text", with: "Texto en español"
|
|
|
|
click_link class: "fullscreen-toggle"
|
|
select "Français", from: :select_language
|
|
click_link class: "fullscreen-toggle"
|
|
|
|
expect(page).to have_field "Text", with: "Texte en Français"
|
|
end
|
|
end
|
|
|
|
context "Locale with non-underscored name", :js do
|
|
let(:translatable) { create(:legislation_question) }
|
|
let(:path) { edit_admin_legislation_process_question_path(translatable.process, translatable) }
|
|
|
|
scenario "Adds a translation for that locale" do
|
|
visit path
|
|
|
|
select "Português brasileiro", from: :add_language
|
|
fill_in "Question", with: "Português"
|
|
click_button "Save changes"
|
|
|
|
visit path
|
|
select "Português brasileiro", from: "locale-switcher"
|
|
|
|
expect(page).to have_field "Questão", with: "Português"
|
|
end
|
|
end
|
|
end
|
|
|
|
context "Add an invalid translation", :js do
|
|
let(:translatable) { create(:budget_investment) }
|
|
|
|
context "Input field" do
|
|
let(:translatable) { create(:budget) }
|
|
|
|
scenario "Shows validation erros" do
|
|
visit edit_admin_budget_path(translatable)
|
|
|
|
select "Français", from: :add_language
|
|
fill_in "Name", with: ""
|
|
click_button "Update Budget"
|
|
|
|
expect(page).to have_css "#error_explanation"
|
|
|
|
select "Français", from: :select_language
|
|
|
|
expect(page).to have_field "Name", with: "", class: "is-invalid-input"
|
|
end
|
|
end
|
|
|
|
context "CKEditor field" do
|
|
let(:translatable) { create(:budget_investment) }
|
|
|
|
scenario "Shows validation errors" do
|
|
visit edit_admin_budget_budget_investment_path(translatable.budget, translatable)
|
|
|
|
select "Français", from: :add_language
|
|
fill_in "Title", with: "Titre en Français"
|
|
fill_in_ckeditor "Description", with: ""
|
|
click_button "Update"
|
|
|
|
expect(page).to have_css "#error_explanation"
|
|
|
|
select "Français", from: :select_language
|
|
|
|
expect(page).to have_ckeditor "Description", with: ""
|
|
end
|
|
end
|
|
|
|
context "Markdownit field" do
|
|
let(:translatable) { create(:legislation_draft_version) }
|
|
|
|
scenario "Shows validation errors" do
|
|
visit edit_admin_legislation_process_draft_version_path(translatable.process, translatable)
|
|
|
|
select "Français", from: :add_language
|
|
fill_in "Version title", with: "Titre en Français"
|
|
click_link class: "fullscreen-toggle"
|
|
fill_in "Text", with: ""
|
|
click_link class: "fullscreen-toggle"
|
|
click_button "Save changes"
|
|
|
|
expect(page).to have_css "#error_explanation"
|
|
|
|
select "Français", from: :select_language
|
|
click_link class: "fullscreen-toggle"
|
|
|
|
expect(page).to have_field "Text", with: "", class: "is-invalid-input"
|
|
end
|
|
end
|
|
end
|
|
|
|
context "Update a translation", :js do
|
|
context "Input fields" do
|
|
let(:translatable) { create(:widget_card) }
|
|
let(:path) { edit_admin_widget_card_path(translatable) }
|
|
|
|
scenario "Changes the existing translation" do
|
|
visit path
|
|
|
|
select "Español", from: :select_language
|
|
|
|
within(".translatable-fields") do
|
|
fill_in "Title", with: "Título corregido"
|
|
fill_in "Description", with: "Descripción corregida"
|
|
fill_in "Link text", with: "Texto del enlace corregido"
|
|
fill_in "Label (optional)", with: "Etiqueta corregida"
|
|
end
|
|
|
|
click_button "Save card"
|
|
|
|
visit path
|
|
|
|
expect(page).to have_field "Title", with: "Title in English"
|
|
|
|
select("Español", from: "locale-switcher")
|
|
|
|
expect(page).to have_field "Título", with: "Título corregido"
|
|
expect(page).to have_field "Descripción", with: "Descripción corregida"
|
|
expect(page).to have_field "Texto del enlace", with: "Texto del enlace corregido"
|
|
expect(page).to have_field "Etiqueta (opcional)", with: "Etiqueta corregida"
|
|
end
|
|
end
|
|
|
|
context "CKEditor fields" do
|
|
let(:translatable) { create(:poll_question_answer) }
|
|
let(:path) { edit_admin_answer_path(translatable) }
|
|
|
|
scenario "Changes the existing translation" do
|
|
visit path
|
|
|
|
select "Español", from: :select_language
|
|
|
|
within(".translatable-fields") do
|
|
fill_in "Answer", with: "Respuesta corregida"
|
|
fill_in_ckeditor "Description", with: "Descripción corregida"
|
|
end
|
|
|
|
click_button "Save"
|
|
|
|
visit path
|
|
|
|
expect(page).to have_field "Answer", with: "Answer in English"
|
|
|
|
select("Español", from: "locale-switcher")
|
|
|
|
expect(page).to have_field "Respuesta", with: "Respuesta corregida"
|
|
expect(page).to have_ckeditor "Descripción", with: "Descripción corregida"
|
|
end
|
|
end
|
|
|
|
context "Change value of a translated field to blank", :js do
|
|
let(:translatable) { create(:poll) }
|
|
let(:path) { edit_admin_poll_path(translatable) }
|
|
|
|
scenario "Updates the field to a blank value" do
|
|
visit path
|
|
|
|
expect(page).to have_field "Summary", with: "Summary in English"
|
|
|
|
fill_in "Summary", with: ""
|
|
click_button "Update poll"
|
|
|
|
visit path
|
|
|
|
expect(page).to have_field "Summary", with: ""
|
|
end
|
|
end
|
|
end
|
|
|
|
context "Update a translation with invalid data", :js do
|
|
context "Input fields" do
|
|
let(:translatable) { create(:banner) }
|
|
|
|
scenario "Show validation errors" do
|
|
visit edit_admin_banner_path(translatable)
|
|
select "Español", from: :select_language
|
|
|
|
expect(page).to have_field "Title", with: "Title en español"
|
|
|
|
fill_in "Title", with: ""
|
|
click_button "Save changes"
|
|
|
|
expect(page).to have_css "#error_explanation"
|
|
|
|
select "Español", from: :select_language
|
|
|
|
expect(page).to have_field "Title", with: "", class: "is-invalid-input"
|
|
end
|
|
end
|
|
|
|
context "Markdownit field" do
|
|
let(:translatable) { create(:legislation_draft_version) }
|
|
|
|
scenario "Shows validation errors" do
|
|
visit edit_admin_legislation_process_draft_version_path(translatable.process, translatable)
|
|
|
|
select "Español", from: :select_language
|
|
click_link class: "fullscreen-toggle"
|
|
|
|
expect(page).to have_field "Text", with: "Texto en español"
|
|
|
|
fill_in "Text", with: ""
|
|
click_link class: "fullscreen-toggle"
|
|
click_button "Save changes"
|
|
|
|
expect(page).to have_css "#error_explanation"
|
|
|
|
select "Español", from: :select_language
|
|
click_link class: "fullscreen-toggle"
|
|
|
|
expect(page).to have_field "Text", with: ""
|
|
end
|
|
end
|
|
end
|
|
|
|
context "Update a translation not having the current locale", :js do
|
|
let(:translatable) { create(:legislation_process) }
|
|
|
|
before do
|
|
translatable.translations.destroy_all
|
|
translatable.translations.create!(locale: :fr, title: "Titre en Français")
|
|
end
|
|
|
|
scenario "Does not add a translation for the current locale" do
|
|
visit edit_admin_legislation_process_path(translatable)
|
|
|
|
expect_to_have_language_selected "Français"
|
|
expect_not_to_have_language "English"
|
|
|
|
click_button "Save changes"
|
|
|
|
expect(page).not_to have_css "#error_explanation"
|
|
|
|
visit edit_admin_legislation_process_path(translatable.reload)
|
|
|
|
expect_to_have_language_selected "Français"
|
|
expect_not_to_have_language "English"
|
|
end
|
|
end
|
|
|
|
context "Remove a translation", :js do
|
|
let(:translatable) { create(:budget_group) }
|
|
let(:path) { edit_admin_budget_group_path(translatable.budget, translatable) }
|
|
|
|
scenario "Keeps the other languages" do
|
|
visit path
|
|
|
|
select "Español", from: :select_language
|
|
click_link "Remove language"
|
|
|
|
expect(page).not_to have_select :select_language, with_options: ["Español"]
|
|
|
|
click_button "Save group"
|
|
|
|
visit path
|
|
|
|
expect(page).not_to have_select :select_language, with_options: ["Español"]
|
|
expect(page).to have_select :select_language, with_options: ["English"]
|
|
end
|
|
end
|
|
|
|
context "Remove all translations", :js do
|
|
let(:translatable) { create(:milestone) }
|
|
|
|
scenario "Shows an error message" do
|
|
visit admin_polymorphic_path(translatable, action: :edit)
|
|
|
|
click_link "Remove language"
|
|
click_link "Remove language"
|
|
|
|
click_button "Update milestone"
|
|
|
|
expect(page).to have_content "Is mandatory to provide one translation at least"
|
|
end
|
|
end
|
|
|
|
context "Remove a translation with invalid data", :js do
|
|
let(:translatable) { create(:poll_question) }
|
|
let(:path) { edit_admin_question_path(translatable) }
|
|
|
|
scenario "Doesn't remove the translation" do
|
|
visit path
|
|
|
|
select "Español", from: :select_language
|
|
click_link "Remove language"
|
|
|
|
select "English", from: :select_language
|
|
fill_in "Question", with: ""
|
|
click_button "Save"
|
|
|
|
expect(page).to have_css "#error_explanation"
|
|
expect(page).to have_field "Question", with: "", class: "is-invalid-input"
|
|
expect_to_have_language_selected "English"
|
|
expect_not_to_have_language "Español"
|
|
|
|
visit path
|
|
select "Español", from: :select_language
|
|
|
|
expect(page).to have_field "Question", with: "Pregunta en español"
|
|
end
|
|
end
|
|
|
|
context "Current locale translation does not exist", :js do
|
|
context "For all translatable except ActivePoll and Budget::Phase" do
|
|
let(:translatable) { create(:admin_notification, segment_recipient: "all_users") }
|
|
|
|
scenario "Shows first available fallback" do
|
|
translatable.update!({ title_fr: "Titre en Français", body_fr: "Texte en Français" })
|
|
|
|
visit edit_admin_admin_notification_path(translatable)
|
|
|
|
select "English", from: :select_language
|
|
click_link "Remove language"
|
|
select "Español", from: :select_language
|
|
click_link "Remove language"
|
|
|
|
click_button "Update notification"
|
|
|
|
expect(page).to have_content "Titre en Français"
|
|
end
|
|
end
|
|
|
|
context "For Budget::Phase" do
|
|
let(:translatable) { create(:budget).phases.last }
|
|
|
|
scenario "Shows first available fallback" do
|
|
translatable.update!({ description_fr: "Phase en Français", summary_fr: "Phase résumé" })
|
|
|
|
visit edit_admin_budget_budget_phase_path(translatable.budget, translatable)
|
|
|
|
select "English", from: :select_language
|
|
click_link "Remove language"
|
|
select "Español", from: :select_language
|
|
click_link "Remove language"
|
|
|
|
click_button "Save changes"
|
|
|
|
visit budgets_path
|
|
|
|
expect(page).to have_content "Phase résumé"
|
|
end
|
|
end
|
|
|
|
context "For ActivePoll" do
|
|
let(:translatable) { create(:active_poll) }
|
|
|
|
scenario "Shows first available fallback" do
|
|
translatable.update!({ description_fr: "Sondage en Français" })
|
|
|
|
visit edit_admin_active_polls_path(translatable)
|
|
|
|
select "English", from: :select_language
|
|
click_link "Remove language"
|
|
select "Español", from: :select_language
|
|
click_link "Remove language"
|
|
click_button "Save"
|
|
|
|
visit polls_path
|
|
|
|
expect(page).to have_content "Sondage en Français"
|
|
end
|
|
end
|
|
end
|
|
|
|
context "Globalize javascript interface", :js do
|
|
let(:translatable) { create(:i18n_content) }
|
|
let(:content) { translatable }
|
|
let(:path) { admin_site_customization_information_texts_path }
|
|
|
|
scenario "Select current locale when its translation exists" do
|
|
visit path
|
|
|
|
expect_to_have_language_selected "English"
|
|
|
|
select("Español", from: "locale-switcher")
|
|
|
|
expect_to_have_language_selected "Español"
|
|
end
|
|
|
|
scenario "Select first locale of existing translations when current locale translation does not exists" do
|
|
content.translations.where(locale: :en).destroy_all
|
|
visit path
|
|
|
|
expect_to_have_language_selected "Español"
|
|
end
|
|
|
|
scenario "Show selected locale form" do
|
|
visit path
|
|
|
|
expect(page).to have_field "contents_content_#{content.key}values_value_en", with: "Value in English"
|
|
|
|
select "Español", from: :select_language
|
|
|
|
expect(page).to have_field "contents_content_#{content.key}values_value_es", with: "Value en español"
|
|
end
|
|
|
|
scenario "Select a locale and add it to the form" do
|
|
visit path
|
|
|
|
select "Français", from: :add_language
|
|
|
|
expect_to_have_language_selected "Français"
|
|
expect(page).to have_field "contents_content_#{content.key}values_value_fr"
|
|
end
|
|
|
|
context "Languages in use" do
|
|
scenario "Show default description" do
|
|
visit path
|
|
|
|
expect(page).to have_content "2 languages in use"
|
|
end
|
|
|
|
scenario "Increase description count after add new language" do
|
|
visit path
|
|
|
|
select "Français", from: :add_language
|
|
|
|
expect(page).to have_content "3 languages in use"
|
|
end
|
|
|
|
scenario "Decrease description count after remove a language" do
|
|
visit path
|
|
|
|
click_link "Remove language"
|
|
|
|
expect(page).to have_content "1 language in use"
|
|
end
|
|
end
|
|
|
|
context "When translation interface feature setting" do
|
|
scenario "Is enabled translation interface should be rendered" do
|
|
visit path
|
|
|
|
expect(page).to have_css ".globalize-languages"
|
|
end
|
|
|
|
scenario "Is disabled translation interface should be rendered" do
|
|
Setting["feature.translation_interface"] = nil
|
|
|
|
visit path
|
|
|
|
expect(page).to have_css ".globalize-languages"
|
|
end
|
|
end
|
|
end
|
|
end
|