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.
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) { 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
|