diff --git a/config/initializers/014-track-setting-changes.rb b/config/initializers/014-track-setting-changes.rb index b3eb29f350d76..f1fca0df97f30 100644 --- a/config/initializers/014-track-setting-changes.rb +++ b/config/initializers/014-track-setting-changes.rb @@ -87,4 +87,16 @@ end Theme.expire_site_cache! if name == :default_theme_id + + if name == :content_localization_enabled && new_value == true + %i[post_menu post_menu_hidden_items].each do |setting_name| + current_items = SiteSetting.get(setting_name).split("|") + if current_items.exclude?("addTranslation") + edit_index = current_items.index("edit") + insert_position = edit_index ? edit_index + 1 : 0 + current_items.insert(insert_position, "addTranslation") + SiteSetting.set(setting_name, current_items.join("|")) + end + end + end end diff --git a/spec/initializers/content_localization_setting_spec.rb b/spec/initializers/content_localization_setting_spec.rb new file mode 100644 index 0000000000000..869cc5b158bca --- /dev/null +++ b/spec/initializers/content_localization_setting_spec.rb @@ -0,0 +1,81 @@ +# frozen_string_literal: true + +describe "Content localization site setting changes" do + describe "when content_localization_enabled is enabled" do + it "adds addTranslation button to post_menu after edit button" do + original_menu = "read|like|edit|reply" + SiteSetting.post_menu = original_menu + + SiteSetting.content_localization_enabled = true + + expect(SiteSetting.post_menu).to eq("read|like|edit|addTranslation|reply") + end + + it "adds addTranslation as first button when edit button does not exist" do + original_menu = "read|like|reply" + SiteSetting.post_menu = original_menu + + SiteSetting.content_localization_enabled = true + + expect(SiteSetting.post_menu).to eq("addTranslation|read|like|reply") + end + + it "does not add addTranslation if it already exists in post_menu" do + original_menu = "read|like|edit|addTranslation|reply" + SiteSetting.post_menu = original_menu + + SiteSetting.content_localization_enabled = true + + expect(SiteSetting.post_menu).to eq("read|like|edit|addTranslation|reply") + end + + it "does not modify post_menu when setting is disabled" do + original_menu = "read|like|edit|reply" + SiteSetting.post_menu = original_menu + + SiteSetting.content_localization_enabled = false + + expect(SiteSetting.post_menu).to eq("read|like|edit|reply") + end + + it "adds addTranslation button to post_menu_hidden_items after edit button" do + original_hidden_items = "flag|bookmark|edit|delete|admin" + SiteSetting.post_menu_hidden_items = original_hidden_items + + SiteSetting.content_localization_enabled = true + + expect(SiteSetting.post_menu_hidden_items).to eq( + "flag|bookmark|edit|addTranslation|delete|admin", + ) + end + + it "adds addTranslation to post_menu_hidden_items as first button when edit button does not exist" do + original_hidden_items = "flag|bookmark|delete|admin" + SiteSetting.post_menu_hidden_items = original_hidden_items + + SiteSetting.content_localization_enabled = true + + expect(SiteSetting.post_menu_hidden_items).to eq("addTranslation|flag|bookmark|delete|admin") + end + + it "does not add addTranslation if it already exists in post_menu_hidden_items" do + original_hidden_items = "flag|bookmark|edit|addTranslation|delete|admin" + SiteSetting.post_menu_hidden_items = original_hidden_items + + SiteSetting.content_localization_enabled = true + + expect(SiteSetting.post_menu_hidden_items).to eq( + "flag|bookmark|edit|addTranslation|delete|admin", + ) + end + + it "does not modify post_menu_hidden_items when setting is disabled" do + original_hidden_items = "flag|bookmark|edit|delete|admin" + SiteSetting.post_menu_hidden_items = original_hidden_items + + SiteSetting.content_localization_enabled = false + + expect(SiteSetting.post_menu_hidden_items).to eq("flag|bookmark|edit|delete|admin") + end + end +end diff --git a/spec/system/post_translation_spec.rb b/spec/system/post_translation_spec.rb index 7a143643a85cf..dc6e32a2db21c 100644 --- a/spec/system/post_translation_spec.rb +++ b/spec/system/post_translation_spec.rb @@ -19,9 +19,10 @@ before do SiteSetting.default_locale = "en" SiteSetting.content_localization_supported_locales = "fr|es|pt_BR" - SiteSetting.content_localization_enabled = true SiteSetting.post_menu = "read|like|copyLink|flag|edit|bookmark|delete|admin|reply|addTranslation" + SiteSetting.post_menu_hidden_items = "flag|bookmark|edit|addTranslation|delete|admin" + SiteSetting.content_localization_enabled = true sign_in(admin) end @@ -30,7 +31,9 @@ post.update!(locale: "en") topic_page.visit_topic(topic) - find("#post_1 .post-action-menu-edit-translations-trigger").click + + topic_page.click_post_action_button(post, :show_more) + topic_page.click_post_action_button(post, :add_translation) find(".update-translations-menu__add .post-action-menu__add-translation").click translation_selector.expand expect(all(".translation-selector-dropdown .select-kit-collection li").count).to eq(3) @@ -42,7 +45,8 @@ it "allows a user to translate a post" do topic_page.visit_topic(topic) - find("#post_1 .post-action-menu-edit-translations-trigger").click + topic_page.click_post_action_button(post, :show_more) + topic_page.click_post_action_button(post, :add_translation) find(".update-translations-menu__add .post-action-menu__add-translation").click expect(composer).to be_opened translation_selector.expand @@ -68,7 +72,8 @@ it "allows a user to add a new translation" do topic_page.visit_topic(topic) - find("#post_1 .post-action-menu-edit-translations-trigger").click + topic_page.click_post_action_button(post, :show_more) + topic_page.click_post_action_button(post, :add_translation) find(".update-translations-menu__add .post-action-menu__add-translation").click expect(composer).to be_opened translation_selector.expand @@ -87,7 +92,8 @@ it "allows a user to see locales translated" do topic_page.visit_topic(topic) - find("#post_#{post.post_number} .post-action-menu-edit-translations-trigger").click + topic_page.click_post_action_button(post, :show_more) + topic_page.click_post_action_button(post, :add_translation) view_translation_button = find(".post-action-menu__view-translation") expect(view_translation_button).to be_visible expect(view_translation_button).to have_text( @@ -101,7 +107,8 @@ it "allows a user to edit a translation" do topic_page.visit_topic(topic) - find("#post_#{post.post_number} .post-action-menu-edit-translations-trigger").click + topic_page.click_post_action_button(post, :show_more) + topic_page.click_post_action_button(post, :add_translation) find(".post-action-menu__view-translation").click find(".post-translations-modal__edit-action .btn").click expect(composer).to be_opened @@ -122,7 +129,9 @@ topic_page.visit_topic(topic) expect(PostLocalization.exists?(post_id: post.id, locale: "fr")).to be true - find("#post_#{post.post_number} .post-action-menu-edit-translations-trigger").click + topic_page.click_post_action_button(post, :show_more) + topic_page.click_post_action_button(post, :add_translation) + find(".update-translations-menu__add .post-action-menu__add-translation").click find(".post-action-menu__view-translation").click find(".post-translations-modal__delete-action .btn").click expect(confirmation_dialog).to be_open @@ -135,7 +144,8 @@ discard_modal = PageObjects::Modals::DiscardDraft.new topic_page.visit_topic(topic) - find("#post_#{post.post_number} .post-action-menu-edit-translations-trigger").click + topic_page.click_post_action_button(post, :show_more) + topic_page.click_post_action_button(post, :add_translation) find(".update-translations-menu__add .post-action-menu__add-translation").click expect(composer).to be_opened @@ -155,7 +165,8 @@ discard_modal = PageObjects::Modals::DiscardDraft.new topic_page.visit_topic(topic) - find("#post_#{post.post_number} .post-action-menu-edit-translations-trigger").click + topic_page.click_post_action_button(post, :show_more) + topic_page.click_post_action_button(post, :add_translation) find(".update-translations-menu__add .post-action-menu__add-translation").click expect(composer).to be_opened @@ -218,7 +229,8 @@ it "shows raw markdown toggle only on Original tab" do topic_page.visit_topic(topic) - find("#post_#{markdown_post.post_number} .post-action-menu-edit-translations-trigger").click + topic_page.click_post_action_button(post, :show_more) + topic_page.click_post_action_button(post, :add_translation) find(".update-translations-menu__add .post-action-menu__add-translation").click expect(composer).to be_opened @@ -232,7 +244,8 @@ it "displays rendered HTML by default" do topic_page.visit_topic(topic) - find("#post_#{markdown_post.post_number} .post-action-menu-edit-translations-trigger").click + topic_page.click_post_action_button(post, :show_more) + topic_page.click_post_action_button(post, :add_translation) find(".update-translations-menu__add .post-action-menu__add-translation").click expect(composer).to be_opened @@ -243,7 +256,8 @@ it "displays raw markdown when toggle is enabled" do topic_page.visit_topic(topic) - find("#post_#{markdown_post.post_number} .post-action-menu-edit-translations-trigger").click + topic_page.click_post_action_button(markdown_post.post_number, :show_more) + topic_page.click_post_action_button(markdown_post.post_number, :add_translation) find(".update-translations-menu__add .post-action-menu__add-translation").click expect(composer).to be_opened @@ -259,7 +273,8 @@ it "resets raw markdown view when switching tabs" do topic_page.visit_topic(topic) - find("#post_#{markdown_post.post_number} .post-action-menu-edit-translations-trigger").click + topic_page.click_post_action_button(post, :show_more) + topic_page.click_post_action_button(post, :add_translation) find(".update-translations-menu__add .post-action-menu__add-translation").click expect(composer).to be_opened @@ -277,7 +292,8 @@ it "maintains raw markdown state while on Original tab" do topic_page.visit_topic(topic) - find("#post_#{markdown_post.post_number} .post-action-menu-edit-translations-trigger").click + topic_page.click_post_action_button(post, :show_more) + topic_page.click_post_action_button(post, :add_translation) find(".update-translations-menu__add .post-action-menu__add-translation").click expect(composer).to be_opened