mirror of
https://github.com/discourse/discourse.git
synced 2024-12-02 22:06:33 +08:00
b3238bfc34
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.
115 lines
4.0 KiB
Ruby
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
|