2
2
mirror of https://github.com/mastodon/mastodon synced 2025-04-12 00:56:38 +02:00

Add QuoteSerializer

This commit is contained in:
Claire 2025-01-20 16:06:48 +01:00
parent 5daa4eedf8
commit 6909c6bc9a
5 changed files with 83 additions and 0 deletions

View File

@ -0,0 +1,11 @@
# frozen_string_literal: true
class REST::QuoteSerializer < ActiveModel::Serializer
attributes :state
has_one :quoted_status, serializer: REST::ShallowStatusSerializer
def quoted_status
object.quoted_status if object.accepted?
end
end

View File

@ -0,0 +1,9 @@
# frozen_string_literal: true
class REST::ShallowQuoteSerializer < ActiveModel::Serializer
attributes :state, :quoted_status_id
def quoted_status_id
object.quoted_status&.id&.to_s if object.accepted?
end
end

View File

@ -0,0 +1,8 @@
# frozen_string_literal: true
class REST::ShallowStatusSerializer < REST::StatusSerializer
# It looks like defining one `has_one` requires redefining all of them
has_one :quote, key: :quote, serializer: REST::ShallowQuoteSerializer
has_one :preview_card, key: :card, serializer: REST::PreviewCardSerializer
has_one :preloadable_poll, key: :poll, serializer: REST::PollSerializer
end

View File

@ -29,6 +29,7 @@ class REST::StatusSerializer < ActiveModel::Serializer
has_many :tags
has_many :emojis, serializer: REST::CustomEmojiSerializer
has_one :quote, key: :quote, serializer: REST::QuoteSerializer
has_one :preview_card, key: :card, serializer: REST::PreviewCardSerializer
has_one :preloadable_poll, key: :poll, serializer: REST::PollSerializer

View File

@ -0,0 +1,54 @@
# frozen_string_literal: true
require 'rails_helper'
RSpec.describe REST::QuoteSerializer do
subject do
serialized_record_json(
quote,
described_class,
options: {
scope: current_user,
scope_name: :current_user,
}
)
end
let(:current_user) { Fabricate(:user) }
let(:quote) { Fabricate(:quote) }
context 'with a pending quote' do
it 'returns expected values' do
expect(subject.deep_symbolize_keys)
.to include(
quoted_status: nil,
state: 'pending'
)
end
end
context 'with an accepted quote' do
let(:quote) { Fabricate(:quote, state: :accepted) }
it 'returns expected values' do
expect(subject.deep_symbolize_keys)
.to include(
quoted_status: be_a(Hash),
state: 'accepted'
)
end
end
context 'with a recursive accepted quote' do
let(:status) { Fabricate(:status) }
let(:quote) { Fabricate(:quote, status: status, quoted_status: status, state: :accepted) }
it 'returns expected values' do
expect(subject.deep_symbolize_keys)
.to include(
quoted_status: be_a(Hash),
state: 'accepted'
)
end
end
end