mirror of
https://gh.wpcy.net/https://github.com/discourse/discourse.git
synced 2026-04-30 21:10:03 +08:00
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`.
115 lines
3.8 KiB
Ruby
115 lines
3.8 KiB
Ruby
# 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 couldn’t 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
|