FIX: Some solved topics have no answers

This commit is contained in:
Nat 2025-03-27 00:45:37 +08:00
parent a8a3554cec
commit 59234a64af
No known key found for this signature in database
GPG Key ID: 4938B35D927EC773
2 changed files with 37 additions and 1 deletions

View File

@ -6,7 +6,8 @@ module DiscourseSolved::TopicViewSerializerExtension
prepended { attributes :accepted_answer }
def include_accepted_answer?
SiteSetting.solved_enabled? && object.topic.solved.present?
SiteSetting.solved_enabled? && object.topic.solved.present? &&
object.topic.solved.answer_post.present?
end
def accepted_answer

View File

@ -0,0 +1,35 @@
# frozen_string_literal: true
describe TopicViewSerializer do
fab!(:topic)
fab!(:post1) { Fabricate(:post, topic:) }
fab!(:post2) { Fabricate(:post, topic:) }
fab!(:user)
before { SiteSetting.solved_enabled = true }
describe "#accepted_answer" do
it "returns the accepted answer post when the topic has an accepted answer" do
Fabricate(:solved_topic, topic: topic, answer_post: post2)
serializer = TopicViewSerializer.new(TopicView.new(topic), scope: Guardian.new(user))
serialized = serializer.as_json
expect(serialized[:topic_view][:accepted_answer][:post_number]).to eq(post2.post_number)
end
it "returns nil when the topic does not have an accepted answer" do
unsolved_topic = Fabricate(:topic)
serializer = TopicViewSerializer.new(TopicView.new(unsolved_topic), scope: Guardian.new(user))
serialized = serializer.as_json
expect(serialized[:accepted_answer]).to be_nil
end
it "returns nil when the accepted answer post does not exist" do
weird_topic = Fabricate(:solved_topic)
weird_topic.update!(answer_post_id: 19_238_319)
serializer =
TopicViewSerializer.new(TopicView.new(weird_topic.topic), scope: Guardian.new(user))
serialized = serializer.as_json
expect(serialized[:accepted_answer]).to be_nil
end
end
end