discourse/spec/system/admin_search_spec.rb
Penar Musaraj 8cbc3bcdfc
UX: Better separate login and authentication settings (#33711)
This splits the Login and Authentication admin page into multiple
sections: Settings, social logins, DiscourseConnect, OAuth2.0, OIDC.
Internal ticket `t/161648`

This PR also adds a new extension point for plugins that want to extend
this area of the app.

```
register_site_setting_area("oauth2")
register_admin_config_login_route("oauth2")
```

Adding this to a plugin allows it to extend both the setting areas
(existing functionality) and add a tab to this admin settings screen via
`register_admin_config_login_route`.
2025-10-09 15:29:21 -04:00

115 lines
3.8 KiB
Ruby
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# frozen_string_literal: true
describe "Admin Search", type: :system do
fab!(:current_user, :admin)
let(:search_modal) { PageObjects::Modals::AdminSearch.new }
let(:sidebar) { PageObjects::Components::NavigationMenu::Sidebar.new }
before { sign_in(current_user) }
it "can search for settings, pages, themes, components, and reports" do
Fabricate(:theme, name: "Discourse Invincible Theme")
Fabricate(:theme, name: "Discourse Redacted", component: true)
Theme
.any_instance
.stubs(:internal_translations)
.returns([stub(key: "theme_metadata.description", value: "Some description")])
visit "/admin"
sidebar.click_search_input
search_modal.search("min_topic_title")
expect(search_modal.find_result("setting", 0)).to have_content("Min topic title length")
expect(search_modal.find_result("setting", 0)).to have_content(
I18n.t("site_settings.min_topic_title_length"),
)
search_modal.search("mau")
expect(search_modal.find_result("report", 0)).to have_content(
I18n.t("reports.dau_by_mau.title"),
)
expect(search_modal.find_result("report", 0)).to have_content(
I18n.t("reports.dau_by_mau.description"),
)
search_modal.search("permalinks")
expect(search_modal.find_result("page", 0)).to have_content(
I18n.t("admin_js.admin.config.permalinks.title"),
)
expect(search_modal.find_result("page", 0)).to have_content(
I18n.t("admin_js.admin.config.permalinks.header_description"),
)
search_modal.search("invincible")
expect(search_modal.find_result("theme", 0)).to have_content("Discourse Invincible Theme")
expect(search_modal.find_result("theme", 0)).to have_content("Some description")
search_modal.search("redacted")
expect(search_modal.find_result("component", 0)).to have_content("Discourse Redacted")
expect(search_modal.find_result("component", 0)).to have_content("Some description")
end
it "can search full page" do
visit "/admin"
sidebar.click_search_input
search_modal.search("min_topic_title")
search_modal.input_enter
expect(page).to have_current_path("/admin/search?filter=min_topic_title")
expect(search_modal.find_result("setting", 0)).to have_content("Min topic title length")
expect(search_modal.find_result("setting", 0)).to have_content(
I18n.t("site_settings.min_topic_title_length"),
)
end
it "informs user about no results" do
visit "/admin"
sidebar.click_search_input
search_modal.search("very long search phrase")
expect(search_modal).to have_content(
'We couldnt find anything matching "very long search phrase".',
)
end
it "opens search modal with keyboard shortcut" do
visit "/admin"
send_keys([SystemHelpers::PLATFORM_KEY_MODIFIER, "/"])
expect(search_modal).to be_open
end
it "works with sections which have a redirect instead of explicit /settings route" do
visit "/admin"
sidebar.click_search_input
search_modal.search("tags tag style")
search_modal.find_result("setting", 0).click
expect(page).to have_current_path("/admin/config/content?filter=tag_style")
end
it "works for social logins" do
visit "/admin"
sidebar.click_search_input
search_modal.search("google oauth2 logins")
search_modal.find_result("setting", 0).click
expect(page).to have_current_path(
"/admin/config/login-and-authentication/authenticators?filter=enable_google_oauth2_logins",
)
end
it "works for discourse connect" do
visit "/admin"
sidebar.click_search_input
search_modal.search("enable discourse connect")
search_modal.find_result("setting", 0).click
expect(page).to have_current_path(
"/admin/config/login-and-authentication/discourseconnect?filter=enable_discourse_connect",
)
end
end