discourse/spec/requests/site_controller_spec.rb
Vinoth Kannan b3238bfc34
FEATURE: call hub API to update Discourse discover enrollment. (#25634)
Now forums can enroll their sites to be showcased in the Discourse [Discover](https://discourse.org/discover) directory. Once they enable the site setting `include_in_discourse_discover` to enroll their forum the `CallDiscourseHub` job will ping the `api.discourse.org/api/discover/enroll` endpoint. Then the Discourse Hub will fetch the basic details from the forum and add it to the review queue. If the site is approved then the forum details will be displayed in the `/discover` page.
2024-02-23 11:42:28 +05:30

115 lines
4.0 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"
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 "returns Discourse Discover stats" do
SiteSetting.include_in_discourse_discover = true
About.refresh_stats
get "/site/statistics.json"
json = response.parsed_body
expect(json["discourse_discover_enrolled"]).to be_truthy
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