Files
grecia/spec/features/admin/translatable_spec.rb
Javi Martín ac6d50e06b Remove tracker role
The current tracking section had a few issues:

* When browsing as an admin, this section becomes useless since no
investments are shown
* Browsing investments in the admin section, you're suddenly redirected
to the tracking section, making navigation confusing
* One test related to the officing dashboard failed due to these changes
and had been commented
* Several views and controller methods were copied from other sections,
leading to duplication and making the code harder to maintain
* Tracking routes were defined for proposals and legislation processes,
but in the tracking section only investments were shown
* Probably many more things, since these issues were detected after only
an hour reviewing and testing the code

So we're removing this untested section before releasing version 1.1. We
might add it back afterwards.
2019-11-01 20:08:46 +01:00

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) { edit_admin_budget_group_heading_path(*resource_hierarchy_for(translatable)) }
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 edit_admin_budget_budget_investment_milestone_path(*resource_hierarchy_for(translatable))
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