discourse/spec/serializers/topic_view_posts_serializer_spec.rb
Sam Saffron f88dced0b7 PERF: optimize lookup of reviewable info in post stream
This previously was a hot path in topic view. Avoids an expensive active
record operation and instead perform SQL directly which is far more
targeted and efficient
2019-06-07 18:12:30 +10:00

53 lines
1.3 KiB
Ruby

# frozen_string_literal: true
require 'rails_helper'
describe TopicViewPostsSerializer do
it 'should return the right attributes' do
user = Fabricate(:user)
post = Fabricate(:post)
topic = post.topic
reviewable = Fabricate(:reviewable_flagged_post, created_by: user, target: post, topic: topic)
ReviewableScore.create!(
reviewable_id: reviewable.id,
user_id: user.id,
reviewable_score_type: 0,
status: ReviewableScore.statuses[:pending]
)
ReviewableScore.create!(
reviewable_id: reviewable.id,
user_id: user.id,
reviewable_score_type: 0,
status: ReviewableScore.statuses[:ignored]
)
topic_view = TopicView.new(topic, user, post_ids: [post.id])
serializer = TopicViewPostsSerializer.new(
topic_view,
scope: Guardian.new(Fabricate(:admin)),
root: false
)
body = JSON.parse(serializer.to_json)
posts = body["post_stream"]["posts"]
expect(posts.count).to eq(1)
expect(posts.first["id"]).to eq(post.id)
expect(posts.first["reviewable_score_count"]).to eq(2)
expect(posts.first["reviewable_score_pending_count"]).to eq(1)
expect(body["post_stream"]["stream"]).to eq(nil)
expect(body["post_stream"]["timeline_lookup"]).to eq(nil)
expect(body["post_stream"]["gaps"]).to eq(nil)
end
end