FIX: Exclude deleted topics and posts as solution in user summary

This commit is contained in:
Nat 2025-04-04 16:18:06 +08:00
parent be5798f6d8
commit 0805610f6c
No known key found for this signature in database
GPG Key ID: 4938B35D927EC773
2 changed files with 33 additions and 3 deletions

View File

@ -5,8 +5,9 @@ module DiscourseSolved::UserSummaryExtension
def solved_count
DiscourseSolved::SolvedTopic
.joins("JOIN posts ON posts.id = discourse_solved_solved_topics.answer_post_id")
.where(posts: { user_id: @user.id })
.joins(answer_post: :user, topic: {})
.where(posts: { user_id: @user.id, deleted_at: nil })
.where(topics: { archetype: Archetype.default, deleted_at: nil })
.count
end
end

View File

@ -1,12 +1,13 @@
# frozen_string_literal: true
describe UserSummary do
fab!(:admin)
describe "solved_count" do
it "indicates the number of times a user's post is a topic's solution" do
topic = Fabricate(:topic)
Fabricate(:post, topic:)
user = Fabricate(:user)
admin = Fabricate(:admin)
post = Fabricate(:post, topic:, user:)
user_summary = UserSummary.new(user, Guardian.new)
@ -20,5 +21,33 @@ describe UserSummary do
expect(user_summary.solved_count).to eq(1)
expect(admin_summary.solved_count).to eq(0)
end
it "excludes deleted topics" do
topic = Fabricate(:topic)
Fabricate(:post, topic:)
user = Fabricate(:user)
post = Fabricate(:post, topic:, user:)
user_summary = UserSummary.new(user, Guardian.new)
DiscourseSolved.accept_answer!(post, admin)
topic.update!(deleted_at: Time.zone.now)
expect(user_summary.solved_count).to eq(0)
end
it "excludes deleted posts" do
topic = Fabricate(:topic)
Fabricate(:post, topic:)
user = Fabricate(:user)
post = Fabricate(:post, topic:, user:)
user_summary = UserSummary.new(user, Guardian.new)
DiscourseSolved.accept_answer!(post, admin)
post.update!(deleted_at: Time.zone.now)
expect(user_summary.solved_count).to eq(0)
end
end
end