In the past, having this kind of expectations after the process running the browser has started has resulted in flaky issues with the database connection. In one case, we're removing the test because there are controller tests covering the same scenario and a system test checking what happens from the user perspective. In the other case, we're replacing the expectations with expectations from the user's point of view.
230 lines
7.6 KiB
Ruby
230 lines
7.6 KiB
Ruby
require "sessions_helper"
|
|
|
|
shared_examples "remotely_translatable" do |factory_name, path_name, path_arguments|
|
|
let(:arguments) do
|
|
path_arguments.transform_values { |path_to_value| resource.send(path_to_value) }
|
|
end
|
|
let(:path) { send(path_name, arguments) }
|
|
let!(:resource) { create(factory_name) }
|
|
|
|
before do
|
|
Setting["feature.remote_translations"] = true
|
|
available_locales_response = %w[de en es fr pt zh-Hans]
|
|
expect(RemoteTranslations::Microsoft::AvailableLocales)
|
|
.to receive(:locales).at_most(4).times
|
|
.and_return(available_locales_response)
|
|
allow(Rails.application.secrets).to receive(:microsoft_api_key).and_return("123")
|
|
end
|
|
|
|
context "Button to request remote translation" do
|
|
scenario "should not be present when current locale translation exists" do
|
|
visit path
|
|
|
|
expect(page).not_to have_button "Translate page"
|
|
end
|
|
|
|
scenario "should be present when current locale translation does not exists" do
|
|
visit path
|
|
|
|
select "Español", from: "Language:"
|
|
|
|
expect(page).to have_button "Traducir página"
|
|
end
|
|
|
|
scenario "should not be present when new current locale translation exists" do
|
|
add_translations(resource, :es)
|
|
visit path
|
|
expect(page).not_to have_button "Translate page"
|
|
|
|
select "Español", from: "Language:"
|
|
|
|
expect(page).to have_select "Idioma:"
|
|
expect(page).not_to have_button "Traducir página"
|
|
end
|
|
|
|
scenario "should not be present when there are no resources to translate", if: index_path?(path_name) do
|
|
resource.destroy!
|
|
visit path
|
|
|
|
select "Español", from: "Language:"
|
|
|
|
expect(page).to have_select "Idioma:"
|
|
expect(page).not_to have_button "Traducir página"
|
|
end
|
|
|
|
describe "with delayed job active", :delay_jobs do
|
|
scenario "should not be present when an equal RemoteTranslation is enqueued" do
|
|
create(:remote_translation, remote_translatable: resource, locale: :es)
|
|
visit path
|
|
|
|
select "Español", from: "Language:"
|
|
|
|
expect(page).to have_content "En un breve periodo de tiempo refrescando la página " \
|
|
"podrá ver todo el contenido en su idioma"
|
|
expect(page).not_to have_button "Traducir página"
|
|
end
|
|
end
|
|
|
|
describe "should ignore missing translations on resource comments",
|
|
if: index_path?(path_name) && commentable?(factory_name) do
|
|
scenario "is not present when a resource translation exists but its comment has not tanslations" do
|
|
add_translations(resource, :es)
|
|
create(:comment, commentable: resource)
|
|
visit path
|
|
expect(page).not_to have_button "Translate page"
|
|
|
|
select "Español", from: "Language:"
|
|
|
|
expect(page).to have_select "Idioma:"
|
|
expect(page).not_to have_button "Traducir página"
|
|
end
|
|
end
|
|
|
|
describe "should evaluate missing translations on resource comments", if: show_path?(path_name) do
|
|
scenario "display when exists resource translations but the comment does not have a translation" do
|
|
add_translations(resource, :es)
|
|
create(:comment, commentable: resource)
|
|
visit path
|
|
expect(page).not_to have_button "Translate page"
|
|
|
|
select "Español", from: "Language:"
|
|
|
|
expect(page).to have_button "Traducir página"
|
|
end
|
|
|
|
scenario "not display when exists resource translations but his comment has tanslations" do
|
|
add_translations(resource, :es)
|
|
create_comment_with_translations(resource, :es)
|
|
visit path
|
|
expect(page).not_to have_button "Translate page"
|
|
|
|
select "Español", from: "Language:"
|
|
|
|
expect(page).to have_select "Idioma:"
|
|
expect(page).not_to have_button "Traducir página"
|
|
end
|
|
end
|
|
|
|
describe "should evaluate missing translations on featured_debates", if: path_name == "debates_path" do
|
|
scenario "display when exists featured_debates without tanslations" do
|
|
add_translations(resource, :es)
|
|
create_featured_debates
|
|
visit path
|
|
expect(page).not_to have_button "Translate page"
|
|
|
|
select "Español", from: "Language:"
|
|
|
|
expect(page).to have_button "Traducir página"
|
|
end
|
|
end
|
|
|
|
describe "should evaluate missing translations on featured_proposals",
|
|
if: path_name == "proposals_path" do
|
|
scenario "display when exists featured_proposals without tanslations" do
|
|
add_translations(resource, :es)
|
|
create_featured_proposals
|
|
visit path
|
|
expect(page).not_to have_button "Translate page"
|
|
|
|
select "Español", from: "Language:"
|
|
|
|
expect(page).to have_button "Traducir página"
|
|
end
|
|
end
|
|
end
|
|
|
|
context "After click remote translations button" do
|
|
describe "with delayed jobs", :delay_jobs do
|
|
scenario "shows informative text when content is enqueued" do
|
|
visit path
|
|
select "Español", from: "Language:"
|
|
|
|
click_button "Traducir página"
|
|
|
|
expect(page).not_to have_button "Traducir página"
|
|
expect(page).to have_content "Se han solicitado correctamente las traducciones."
|
|
expect(page).to have_content "En un breve periodo de tiempo refrescando la página " \
|
|
"podrá ver todo el contenido en su idioma"
|
|
|
|
refresh
|
|
|
|
expect(page).not_to have_content "Se han solicitado correctamente las traducciones."
|
|
expect(page).not_to have_button "Traducir página"
|
|
expect(page).to have_content "En un breve periodo de tiempo refrescando la página " \
|
|
"podrá ver todo el contenido en su idioma"
|
|
end
|
|
end
|
|
|
|
describe "without delayed jobs" do
|
|
scenario "content is immediately translated" do
|
|
response = generate_response(resource)
|
|
expect_any_instance_of(RemoteTranslations::Microsoft::Client).to receive(:call).and_return(response)
|
|
visit path
|
|
select "Español", from: "Language:"
|
|
|
|
expect(page).to have_select "Idioma:"
|
|
expect(page).not_to have_content response.first
|
|
|
|
click_button "Traducir página"
|
|
|
|
expect(page).not_to have_button "Traducir página"
|
|
expect(page).to have_content response.first
|
|
end
|
|
|
|
scenario "request a translation of an already translated text" do
|
|
response = generate_response(resource)
|
|
expect_any_instance_of(RemoteTranslations::Microsoft::Client).to receive(:call).and_return(response)
|
|
|
|
in_browser(:one) do
|
|
visit path
|
|
select "Español", from: "Language:"
|
|
|
|
expect(page).to have_button "Traducir página"
|
|
end
|
|
|
|
in_browser(:two) do
|
|
visit path
|
|
select "Español", from: "Language:"
|
|
click_button "Traducir página"
|
|
|
|
expect(page).to have_content "Se han solicitado correctamente las traducciones"
|
|
end
|
|
|
|
in_browser(:one) do
|
|
click_button "Traducir página"
|
|
|
|
expect(page).not_to have_button "Traducir página"
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
def add_translations(resource, locale)
|
|
new_translation = resource.translations.first.dup
|
|
new_translation.update!(locale: locale)
|
|
resource
|
|
end
|
|
|
|
def create_comment_with_translations(resource, locale)
|
|
comment = create(:comment, commentable: resource)
|
|
add_translations(comment, locale)
|
|
end
|
|
|
|
def index_path?(path)
|
|
["debates_path", "proposals_path", "root_path", "budget_investments_path"].include?(path)
|
|
end
|
|
|
|
def show_path?(path)
|
|
!index_path?(path)
|
|
end
|
|
|
|
def commentable?(factory_name)
|
|
Comment::COMMENTABLE_TYPES.include?(FactoryBot.factories[factory_name].build_class.to_s)
|
|
end
|
|
|
|
def generate_response(resource)
|
|
field_text = Faker::Lorem.characters(number: 10)
|
|
resource.translated_attribute_names.map { field_text }
|
|
end
|