mirror of
https://gh.wpcy.net/https://github.com/discourse/discourse.git
synced 2026-05-02 10:37:59 +08:00
288 lines
11 KiB
Ruby
288 lines
11 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
describe "Category Localizations", type: :system do
|
|
SWITCHER_SELECTOR = "button[data-identifier='language-switcher']"
|
|
|
|
fab!(:admin)
|
|
fab!(:category) do
|
|
Fabricate(
|
|
:category,
|
|
name: "Feature Requests",
|
|
slug: "feature-requests",
|
|
topic_count: 1234,
|
|
subcategory_list_style: "boxes",
|
|
show_subcategory_list: true,
|
|
)
|
|
end
|
|
let(:category_page) { PageObjects::Pages::Category.new }
|
|
let(:form) { PageObjects::Components::FormKit.new("form") }
|
|
let(:switcher) { PageObjects::Components::DMenu.new(SWITCHER_SELECTOR) }
|
|
|
|
before do
|
|
SiteSetting.content_localization_supported_locales = "es|ja|fr"
|
|
SiteSetting.content_localization_enabled = true
|
|
SiteSetting.allow_user_locale = true
|
|
SiteSetting.set_locale_from_cookie = true
|
|
SiteSetting.desktop_category_page_style = "categories_boxes"
|
|
end
|
|
|
|
def get_category_dropdown(nth)
|
|
selector = ".category-breadcrumb li:nth-child(#{nth}) .category-drop"
|
|
expect(page).to have_css(selector)
|
|
PageObjects::Components::SelectKit.new(selector)
|
|
end
|
|
|
|
context "when content localization setting is disabled" do
|
|
before { SiteSetting.content_localization_enabled = false }
|
|
|
|
it "should not show the localization tab" do
|
|
sign_in(admin)
|
|
|
|
category_page.visit_settings(category)
|
|
expect(category_page).to have_no_setting_tab("localizations")
|
|
end
|
|
end
|
|
|
|
context "when content localization setting is enabled" do
|
|
fab!(:category_localization) { Fabricate(:category_localization, category:, locale: "ja") }
|
|
fab!(:category_localization) do
|
|
Fabricate(
|
|
:category_localization,
|
|
category:,
|
|
locale: "es",
|
|
name: "Solicitudes",
|
|
description: "Discusiones sobre las solicitudes de todos los gatos",
|
|
)
|
|
end
|
|
|
|
before do
|
|
SiteSetting.content_localization_enabled = true
|
|
SiteSetting.content_localization_allowed_groups = Group::AUTO_GROUPS[:everyone]
|
|
|
|
if SiteSetting.client_settings.exclude?(:available_content_localization_locales)
|
|
SiteSetting.client_settings << :available_content_localization_locales
|
|
end
|
|
end
|
|
|
|
describe "Category Settings" do
|
|
before { sign_in(admin) }
|
|
|
|
it "should show the localization tab" do
|
|
category_page.visit_settings(category)
|
|
expect(category_page).to have_setting_tab("localizations")
|
|
end
|
|
|
|
describe "when editing a category with no category localizations" do
|
|
fab!(:mono_category, :category)
|
|
|
|
it "should show info hint to add new localizations" do
|
|
category_page.visit_edit_localizations(mono_category)
|
|
expect(form).to have_an_alert(I18n.t("js.category.localization.hint"))
|
|
end
|
|
|
|
it "should allow you to add new localizations" do
|
|
category_page.visit_edit_localizations(mono_category)
|
|
category_page.find(".edit-category-tab-localizations .add-localization").click
|
|
form.field("localizations.0.locale").select("es")
|
|
form.field("localizations.0.name").fill_in("Solicitud de función")
|
|
form.field("localizations.0.description").fill_in(
|
|
"Solicitar nuevas funcionalidades en esta categoría",
|
|
)
|
|
category_page.find(".edit-category-tab-localizations .add-localization").click
|
|
form.field("localizations.1.locale").select("fr")
|
|
form.field("localizations.1.name").fill_in("Demande de fonctionnalité")
|
|
form.field("localizations.1.description").fill_in(
|
|
"Demander de nouvelles fonctionnalités dans cette catégorie",
|
|
)
|
|
category_page.save_settings
|
|
page.refresh
|
|
|
|
try_until_success do
|
|
expect(CategoryLocalization.where(category_id: mono_category.id).count).to eq(2)
|
|
end
|
|
expect(
|
|
CategoryLocalization.where(category_id: mono_category.id, locale: "es").count,
|
|
).to eq(1)
|
|
expect(
|
|
CategoryLocalization.where(category_id: mono_category.id, locale: "fr").count,
|
|
).to eq(1)
|
|
expect(
|
|
CategoryLocalization.where(category_id: mono_category.id, locale: "es").first.name,
|
|
).to eq("Solicitud de función")
|
|
expect(
|
|
CategoryLocalization.where(category_id: mono_category.id, locale: "fr").first.name,
|
|
).to eq("Demande de fonctionnalité")
|
|
expect(
|
|
CategoryLocalization
|
|
.where(category_id: mono_category.id, locale: "es")
|
|
.first
|
|
.description,
|
|
).to eq("Solicitar nuevas funcionalidades en esta categoría")
|
|
expect(
|
|
CategoryLocalization
|
|
.where(category_id: mono_category.id, locale: "fr")
|
|
.first
|
|
.description,
|
|
).to eq("Demander de nouvelles fonctionnalités dans cette catégorie")
|
|
end
|
|
end
|
|
|
|
describe "when editing a category with localizations" do
|
|
it "allows you to delete localizations" do
|
|
expect(CategoryLocalization.where(category_id: category.id).count).to eq(2)
|
|
category_page.visit_edit_localizations(category)
|
|
|
|
expect(category_page).to have_selector(
|
|
".edit-category-tab-localizations .form-kit__collection .form-kit__row",
|
|
count: 2,
|
|
)
|
|
expect(
|
|
page.all(".form-kit__control-select option.--selected").map(&:text),
|
|
).to contain_exactly("Spanish (Español)", "Japanese (日本語)")
|
|
|
|
page.find(".edit-category-tab-localizations .remove-localization", match: :first).click
|
|
category_page.save_settings
|
|
page.refresh
|
|
|
|
expect(category_page).to_not have_css("#control-localizations-0-locale option.--selected")
|
|
end
|
|
end
|
|
end
|
|
|
|
describe "Navigating categories" do
|
|
let(:sidebar) { PageObjects::Components::NavigationMenu::Sidebar.new }
|
|
let(:topic_list) { PageObjects::Components::TopicList.new }
|
|
let(:category_list) { PageObjects::Components::CategoryList.new }
|
|
|
|
fab!(:cat_topic) { Fabricate(:topic, category:) }
|
|
fab!(:subcat) do
|
|
Fabricate(
|
|
:category,
|
|
name: "Subcategory",
|
|
description: "A",
|
|
parent_category: category,
|
|
).tap do |category|
|
|
Fabricate(
|
|
:category_localization,
|
|
category:,
|
|
locale: "es",
|
|
name: "Subcategoría",
|
|
description: "Una subcategoría de un padre",
|
|
)
|
|
end
|
|
end
|
|
fab!(:subcat_topic) { Fabricate(:topic, category: subcat) }
|
|
|
|
before { SiteSetting.content_localization_language_switcher = "all" }
|
|
|
|
shared_examples_for "navigating the site via various category links" do
|
|
it "keeps the translated category name when navigating sidebar" do
|
|
visit("/")
|
|
switcher.expand
|
|
switcher.option("[data-menu-option-id='es']").click
|
|
|
|
expect(sidebar).to have_section_link("Solicitudes")
|
|
sidebar.click_section_link("Solicitudes")
|
|
|
|
category_dropdown = get_category_dropdown(1)
|
|
expect(category_dropdown).to have_selected_name("Solicitudes")
|
|
expect(category_page.category_box(subcat)).to have_text("Subcategoría")
|
|
expect(category_page.category_box(subcat)).to have_text("Una subcategoría de un padre")
|
|
expect(topic_list.topic(cat_topic)).to have_text("Solicitudes")
|
|
expect(topic_list.topic(subcat_topic)).to have_text("Subcategoría")
|
|
|
|
category_page.category_box(subcat).click
|
|
|
|
parent_category_dropdown = get_category_dropdown(1)
|
|
sub_category_dropdown = get_category_dropdown(2)
|
|
expect(parent_category_dropdown).to have_selected_name("Solicitudes")
|
|
expect(sub_category_dropdown).to have_selected_name("Subcategoría")
|
|
end
|
|
|
|
it "keeps the translated category name when navigating topic filters" do
|
|
visit("/categories")
|
|
switcher.expand
|
|
switcher.option("[data-menu-option-id='es']").click
|
|
|
|
expect(category_list.category_box(category)).to have_text("Solicitudes")
|
|
|
|
category_list.category_box(category).click
|
|
category_dropdown = get_category_dropdown("1")
|
|
|
|
expect(category_dropdown).to have_selected_name("Solicitudes")
|
|
expect(sidebar).to have_section_link("Solicitudes")
|
|
expect(category_page.category_box(subcat)).to have_text("Subcategoría")
|
|
|
|
sidebar.click_topics_button
|
|
|
|
expect(topic_list.topic(cat_topic)).to have_text("Solicitudes")
|
|
end
|
|
|
|
it "keeps the translated category name when navigating category dropdown" do
|
|
visit("/latest")
|
|
switcher.expand
|
|
switcher.option("[data-menu-option-id='es']").click
|
|
|
|
category_dropdown = get_category_dropdown("1")
|
|
|
|
expect(category_dropdown.component).to have_text(
|
|
I18n.t("js.categories.categories_label", locale: "es"),
|
|
)
|
|
category_dropdown.component.click
|
|
expect(category_dropdown.component).to have_css(".is-expanded")
|
|
expect(category_dropdown.component.find(".select-kit-body")).to have_css(
|
|
".select-kit-collection",
|
|
)
|
|
expect(page.find(".select-kit-collection div[data-name='Solicitudes']")).to have_text(
|
|
"Solicitudes",
|
|
)
|
|
end
|
|
end
|
|
|
|
describe "for anonymous users" do
|
|
it_behaves_like "navigating the site via various category links"
|
|
end
|
|
|
|
describe "logged in users" do
|
|
shared_examples_for "editing category settings" do
|
|
# TODO: Fix this test as it doesn't actually work.
|
|
# The assertion to check the category name input runs immediately after clicking the language option leading
|
|
# to a false positive.
|
|
xit "shows the original category name in the category edit page" do
|
|
sign_in(admin)
|
|
category_page.visit_general(category)
|
|
|
|
switcher.expand
|
|
switcher.option("[data-menu-option-id='es']").click
|
|
|
|
expect(find(".edit-category-tab-general input.category-name").value).to eq(
|
|
category.name,
|
|
)
|
|
end
|
|
end
|
|
|
|
describe "lazy loaded categories" do
|
|
before do
|
|
SiteSetting.lazy_load_categories_groups = "#{Group::AUTO_GROUPS[:everyone]}"
|
|
sign_in(admin)
|
|
end
|
|
|
|
it_behaves_like "navigating the site via various category links"
|
|
|
|
it_behaves_like "editing category settings"
|
|
end
|
|
|
|
describe "no lazy loaded categories" do
|
|
before do
|
|
SiteSetting.lazy_load_categories_groups = ""
|
|
sign_in(admin)
|
|
end
|
|
|
|
it_behaves_like "navigating the site via various category links"
|
|
|
|
it_behaves_like "editing category settings"
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|