discourse/spec/requests/site_controller_spec.rb
Vinoth Kannan 9dc6325821
DEV: add logo URL and locale details to the Discover stats. (#26320)
We will be collecting the logo URL and the site's default locale values along with existing basic details to display the site on the Discourse Discover listing page. It will be included only if the site is opted-in by enabling the "`include_in_discourse_discover`" site setting.

Also, we no longer going to use `about.json` and `site/statistics.json` endpoints retrieve these data. We will be using only the `site/basic-info.json` endpoint.
2024-04-04 00:22:28 +05:30

105 lines
3.8 KiB
Ruby

# frozen_string_literal: true
RSpec.describe SiteController do
describe "#basic_info" do
it "is visible always even for sites requiring login" do
upload = Fabricate(:upload)
SiteSetting.login_required = true
SiteSetting.title = "Hammer Time"
SiteSetting.site_description = "A time for Hammer"
SiteSetting.logo = upload
SiteSetting.logo_small = upload
SiteSetting.apple_touch_icon = upload
SiteSetting.mobile_logo = upload
SiteSetting.include_in_discourse_discover = true
Theme.clear_default!
get "/site/basic-info.json", headers: { "HTTP_USER_AGENT" => "Discourse Hub" }
json = response.parsed_body
expected_url = UrlHelper.absolute(upload.url)
expect(json["title"]).to eq("Hammer Time")
expect(json["description"]).to eq("A time for Hammer")
expect(json["logo_url"]).to eq(expected_url)
expect(json["apple_touch_icon_url"]).to eq(expected_url)
expect(json["logo_small_url"]).to eq(expected_url)
expect(json["mobile_logo_url"]).to eq(expected_url)
expect(json["header_primary_color"]).to eq("333333")
expect(json["header_background_color"]).to eq("ffffff")
expect(json["login_required"]).to eq(true)
expect(json["discourse_discover_enrolled"]).to eq(true)
end
it "skips `discourse_discover_enrolled` if `include_in_discourse_discover` setting disabled" do
SiteSetting.include_in_discourse_discover = false
get "/site/basic-info.json"
json = response.parsed_body
expect(json.keys).not_to include("discourse_discover_enrolled")
end
end
describe "#statistics" do
it "is visible for sites requiring login" do
SiteSetting.login_required = true
SiteSetting.share_anonymized_statistics = true
get "/site/statistics.json"
json = response.parsed_body
expect(response.status).to eq(200)
expect(json["topics_count"]).to be_present
expect(json["posts_count"]).to be_present
expect(json["users_count"]).to be_present
expect(json["topics_7_days"]).to be_present
expect(json["topics_30_days"]).to be_present
expect(json["posts_7_days"]).to be_present
expect(json["posts_30_days"]).to be_present
expect(json["users_7_days"]).to be_present
expect(json["users_30_days"]).to be_present
expect(json["active_users_7_days"]).to be_present
expect(json["active_users_30_days"]).to be_present
expect(json["likes_count"]).to be_present
expect(json["likes_7_days"]).to be_present
expect(json["likes_30_days"]).to be_present
end
it "is not visible if site setting share_anonymized_statistics is disabled" do
SiteSetting.share_anonymized_statistics = false
get "/site/statistics.json"
expect(response).to redirect_to "/"
end
it "returns exposable stats only" do
Discourse.redis.del(About.stats_cache_key)
SiteSetting.login_required = true
SiteSetting.share_anonymized_statistics = true
plugin = Plugin::Instance.new
plugin.register_stat("private_stat", expose_via_api: false) do
{ :last_day => 1, "7_days" => 2, "30_days" => 3, :count => 4 }
end
plugin.register_stat("exposable_stat", expose_via_api: true) do
{ :last_day => 11, "7_days" => 12, "30_days" => 13, :count => 14 }
end
get "/site/statistics.json"
json = response.parsed_body
expect(json["exposable_stat_last_day"]).to be(11)
expect(json["exposable_stat_7_days"]).to be(12)
expect(json["exposable_stat_30_days"]).to be(13)
expect(json["exposable_stat_count"]).to be(14)
expect(json["private_stat_last_day"]).not_to be_present
expect(json["private_stat_7_days"]).not_to be_present
expect(json["private_stat_30_days"]).not_to be_present
expect(json["private_stat_count"]).not_to be_present
end
end
end