mirror of
https://github.com/discourse/discourse.git
synced 2024-12-02 20:18:35 +08:00
dc996a1e5c
* FIX: Locale mismatch at theme translations picker Before, the theme translations picker value was set to the site's default locale, which mismatches from the user's locale. This commit changes the picker value to the user locale. relates to https://meta.discourse.org/t/locale-mismatch-at-theme-translations/302879 * DEV: Address code review feedback. - https://github.com/discourse/discourse/pull/26687#discussion_r1572516758 - https://github.com/discourse/discourse/pull/26687#discussion_r1572524059
193 lines
7.2 KiB
Ruby
193 lines
7.2 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
describe "Admin Customize Themes", type: :system do
|
|
fab!(:color_scheme)
|
|
fab!(:theme)
|
|
fab!(:admin) { Fabricate(:admin, locale: "en") }
|
|
|
|
let(:admin_customize_themes_page) { PageObjects::Pages::AdminCustomizeThemes.new }
|
|
|
|
before { sign_in(admin) }
|
|
|
|
describe "when visiting the page to customize themes" do
|
|
fab!(:theme_2) { Fabricate(:theme) }
|
|
fab!(:theme_3) { Fabricate(:theme) }
|
|
let(:delete_themes_confirm_modal) { PageObjects::Modals::DeleteThemesConfirm.new }
|
|
|
|
it "should allow admin to bulk delete inactive themes" do
|
|
visit("/admin/customize/themes")
|
|
|
|
expect(admin_customize_themes_page).to have_inactive_themes
|
|
|
|
admin_customize_themes_page.click_select_inactive_mode
|
|
expect(admin_customize_themes_page).to have_inactive_themes_selected(count: 0)
|
|
admin_customize_themes_page.toggle_all_inactive
|
|
expect(admin_customize_themes_page).to have_inactive_themes_selected(count: 3)
|
|
|
|
admin_customize_themes_page.cancel_select_inactive_mode
|
|
expect(admin_customize_themes_page).to have_select_inactive_mode_button
|
|
|
|
admin_customize_themes_page.click_select_inactive_mode
|
|
expect(admin_customize_themes_page).to have_disabled_delete_theme_button
|
|
|
|
admin_customize_themes_page.toggle_all_inactive
|
|
|
|
admin_customize_themes_page.click_delete_themes_button
|
|
|
|
expect(delete_themes_confirm_modal).to have_theme(theme.name)
|
|
expect(delete_themes_confirm_modal).to have_theme(theme_2.name)
|
|
expect(delete_themes_confirm_modal).to have_theme(theme_3.name)
|
|
delete_themes_confirm_modal.confirm
|
|
|
|
expect(admin_customize_themes_page).to have_no_inactive_themes
|
|
end
|
|
|
|
it "selects the themes tab by default" do
|
|
visit("/admin/customize/themes")
|
|
expect(find(".themes-list-header")).to have_css(".themes-tab.active")
|
|
end
|
|
|
|
it "selects the component tab when visiting the theme-components route" do
|
|
visit("/admin/customize/components")
|
|
expect(find(".themes-list-header")).to have_css(".components-tab.active")
|
|
end
|
|
|
|
it "switching between themes and components tabs keeps the search visible only if both tabs have at least 10 items" do
|
|
6.times { Fabricate(:theme) }
|
|
(1..5).each { |number| Fabricate(:theme, component: true, name: "Cool component #{number}") }
|
|
|
|
visit("/admin/customize/themes")
|
|
expect(admin_customize_themes_page).to have_themes(count: 11)
|
|
|
|
admin_customize_themes_page.search("5")
|
|
expect(admin_customize_themes_page).to have_themes(count: 1)
|
|
|
|
admin_customize_themes_page.switch_to_components
|
|
expect(admin_customize_themes_page).to have_no_search
|
|
expect(admin_customize_themes_page).to have_themes(count: 5)
|
|
|
|
(6..11).each { |number| Fabricate(:theme, component: true, name: "Cool component #{number}") }
|
|
|
|
visit("/admin/customize/components")
|
|
expect(admin_customize_themes_page).to have_themes(count: 11)
|
|
|
|
admin_customize_themes_page.search("5")
|
|
expect(admin_customize_themes_page).to have_themes(count: 1)
|
|
|
|
admin_customize_themes_page.switch_to_themes
|
|
expect(admin_customize_themes_page).to have_themes(count: 1)
|
|
end
|
|
end
|
|
|
|
describe "when visiting the page to customize a single theme" do
|
|
it "should allow admin to update the color scheme of the theme" do
|
|
visit("/admin/customize/themes/#{theme.id}")
|
|
|
|
color_scheme_settings = find(".theme-settings__color-scheme")
|
|
|
|
expect(color_scheme_settings).not_to have_css(".submit-edit")
|
|
expect(color_scheme_settings).not_to have_css(".cancel-edit")
|
|
|
|
color_scheme_settings.find(".color-palettes").click
|
|
color_scheme_settings.find(".color-palettes-row[data-value='#{color_scheme.id}']").click
|
|
color_scheme_settings.find(".submit-edit").click
|
|
|
|
expect(color_scheme_settings.find(".setting-value")).to have_content(color_scheme.name)
|
|
expect(color_scheme_settings).not_to have_css(".submit-edit")
|
|
expect(color_scheme_settings).not_to have_css(".cancel-edit")
|
|
end
|
|
end
|
|
|
|
describe "when editing a local theme" do
|
|
it "The saved value is present in the editor" do
|
|
theme.set_field(target: "common", name: "head_tag", value: "console.log('test')", type_id: 0)
|
|
theme.save!
|
|
|
|
visit("/admin/customize/themes/#{theme.id}/common/head_tag/edit")
|
|
|
|
ace_content = find(".ace_content")
|
|
expect(ace_content.text).to eq("console.log('test')")
|
|
end
|
|
end
|
|
|
|
describe "when editing theme translations" do
|
|
it "should allow admin to edit and save the theme translations" do
|
|
theme.set_field(
|
|
target: :translations,
|
|
name: "en",
|
|
value: { en: { group: { hello: "Hello there!" } } }.deep_stringify_keys.to_yaml,
|
|
)
|
|
|
|
theme.save!
|
|
|
|
visit("/admin/customize/themes/#{theme.id}")
|
|
|
|
theme_translations_settings_editor =
|
|
PageObjects::Components::AdminThemeTranslationsSettingsEditor.new
|
|
|
|
theme_translations_settings_editor.fill_in("Hello World")
|
|
theme_translations_settings_editor.save
|
|
|
|
visit("/admin/customize/themes/#{theme.id}")
|
|
|
|
expect(theme_translations_settings_editor.get_input_value).to have_content("Hello World")
|
|
end
|
|
|
|
it "should allow admin to edit and save the theme translations from other languages" do
|
|
theme.set_field(
|
|
target: :translations,
|
|
name: "en",
|
|
value: { en: { group: { hello: "Hello there!" } } }.deep_stringify_keys.to_yaml,
|
|
)
|
|
theme.set_field(
|
|
target: :translations,
|
|
name: "fr",
|
|
value: { fr: { group: { hello: "Bonjour!" } } }.deep_stringify_keys.to_yaml,
|
|
)
|
|
theme.save!
|
|
|
|
visit("/admin/customize/themes/#{theme.id}")
|
|
|
|
theme_translations_settings_editor =
|
|
PageObjects::Components::AdminThemeTranslationsSettingsEditor.new
|
|
expect(theme_translations_settings_editor.get_input_value).to have_content("Hello there!")
|
|
|
|
theme_translations_picker = PageObjects::Components::SelectKit.new(".translation-selector")
|
|
theme_translations_picker.select_row_by_value("fr")
|
|
|
|
expect(theme_translations_settings_editor.get_input_value).to have_content("Bonjour!")
|
|
|
|
theme_translations_settings_editor.fill_in("Hello World in French")
|
|
theme_translations_settings_editor.save
|
|
end
|
|
|
|
it "should match the current user locale translation" do
|
|
SiteSetting.allow_user_locale = true
|
|
SiteSetting.set_locale_from_accept_language_header = true
|
|
SiteSetting.default_locale = "fr"
|
|
|
|
theme.set_field(
|
|
target: :translations,
|
|
name: "en",
|
|
value: { en: { group: { hello: "Hello there!" } } }.deep_stringify_keys.to_yaml,
|
|
)
|
|
theme.set_field(
|
|
target: :translations,
|
|
name: "fr",
|
|
value: { fr: { group: { hello: "Bonjour!" } } }.deep_stringify_keys.to_yaml,
|
|
)
|
|
theme.save!
|
|
|
|
visit("/admin/customize/themes/#{theme.id}")
|
|
|
|
theme_translations_settings_editor =
|
|
PageObjects::Components::AdminThemeTranslationsSettingsEditor.new
|
|
|
|
expect(theme_translations_settings_editor.get_input_value).to have_content("Hello there!")
|
|
|
|
theme_translations_picker = PageObjects::Components::SelectKit.new(".translation-selector")
|
|
expect(theme_translations_picker.component.text).to eq("English (US)")
|
|
end
|
|
end
|
|
end
|