mirror of
https://github.com/discourse/discourse.git
synced 2024-11-29 19:24:13 +08:00
3c4a15a35f
Because the spec is searching for "5" and checking that only one result is returned, we need to control all names generated by theme fabricator.
193 lines
7.3 KiB
Ruby
193 lines
7.3 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
describe "Admin Customize Themes", type: :system do
|
|
fab!(:color_scheme)
|
|
fab!(:theme) { Fabricate(:theme, name: "Cool theme 1") }
|
|
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, name: "Cool theme 2") }
|
|
fab!(:theme_3) { Fabricate(:theme, name: "Cool theme 3") }
|
|
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
|
|
(1..6).each { |number| Fabricate(:theme, component: false, name: "Cool theme #{number}") }
|
|
(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
|