1
0
mirror of synced 2026-08-06 02:56:55 +00:00
Files
Martin Brennan 26a77d4c69 DEV: Adding specs and refactors (#21)
Add specs for the following reports:

* Reading time
* Activity calendar
* Best posts
* Best topics
* Top words
* Most viewed tags
* Most viewed categories

Did some minor UI and ruby refactors for related components.

Also made a minor change to the Activity calendar, to show a title based
on the number of posts or if the user was active on hover.

Still missing specs for:

* Reactions
* FBFF

And the newly added reports that don't yet have UI components.
2025-12-01 10:08:30 +10:00

67 lines
2.3 KiB
Ruby

# frozen_string_literal: true
RSpec.describe DiscourseRewind::Action::BestPosts do
fab!(:date) { Date.new(2021).all_year }
fab!(:user)
fab!(:post_1) { Fabricate(:post, created_at: random_datetime, user: user, post_number: 3) }
fab!(:post_2) { Fabricate(:post, created_at: random_datetime, user: user, post_number: 2) }
fab!(:post_3) { Fabricate(:post, created_at: random_datetime, user: user, post_number: 10) }
fab!(:post_4) { Fabricate(:post, created_at: random_datetime, user: user, post_number: 6) }
fab!(:post_5) { Fabricate(:post, created_at: random_datetime, user: user, post_number: 1) }
describe ".call" do
it "returns top 3 posts ordered by like count" do
post_4.update!(like_count: 15)
post_3.update!(like_count: 13)
post_1.update!(like_count: 11)
post_2.update!(like_count: 9)
post_5.update!(like_count: 7)
expect(call_report[:data]).to eq(
[
{
post_number: post_4.post_number,
topic_id: post_4.topic_id,
like_count: post_4.like_count,
reply_count: post_4.reply_count,
excerpt:
post_4.excerpt(200, { strip_links: true, remap_emoji: true, keep_images: true }),
},
{
post_number: post_3.post_number,
topic_id: post_3.topic_id,
like_count: post_3.like_count,
reply_count: post_3.reply_count,
excerpt:
post_3.excerpt(200, { strip_links: true, remap_emoji: true, keep_images: true }),
},
{
post_number: post_1.post_number,
topic_id: post_1.topic_id,
like_count: post_1.like_count,
reply_count: post_1.reply_count,
excerpt:
post_1.excerpt(200, { strip_links: true, remap_emoji: true, keep_images: true }),
},
],
)
end
context "when a post is deleted" do
before { post_1.trash!(Discourse.system_user) }
it "is not included" do
expect(call_report[:data].map { |d| d[:post_number] }).not_to include(post_1.post_number)
end
end
context "when a post is made by another user" do
before { post_1.update!(user: Fabricate(:user)) }
it "is not included" do
expect(call_report[:data].map { |d| d[:post_number] }).not_to include(post_1.post_number)
end
end
end
end