Fix empty authors preview card serialization (#33151)

This commit is contained in:
Matt Jankowski 2024-12-04 04:05:58 -05:00 committed by GitHub
parent 6fddf1610c
commit e5bea68b20
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 49 additions and 1 deletions

View file

@ -134,7 +134,7 @@ class PreviewCard < ApplicationRecord
end end
def authors def authors
@authors ||= [PreviewCard::Author.new(self)] @authors ||= Array(serialized_authors)
end end
class Author < ActiveModelSerializers::Model class Author < ActiveModelSerializers::Model
@ -169,6 +169,13 @@ class PreviewCard < ApplicationRecord
private private
def serialized_authors
if author_name? || author_url?
PreviewCard::Author
.new(self)
end
end
def extract_dimensions def extract_dimensions
file = image.queued_for_write[:original] file = image.queued_for_write[:original]

View file

@ -0,0 +1,41 @@
# frozen_string_literal: true
require 'rails_helper'
RSpec.describe REST::PreviewCardSerializer do
subject do
serialized_record_json(
preview_card,
described_class
)
end
context 'when preview card does not have author data' do
let(:preview_card) { Fabricate.build :preview_card }
it 'includes empty authors array' do
expect(subject.deep_symbolize_keys)
.to include(
authors: be_an(Array).and(be_empty)
)
end
end
context 'when preview card has author data' do
let(:preview_card) { Fabricate.build :preview_card, author_name: 'Name', author_url: 'https://host.example/123' }
it 'includes populated authors array' do
expect(subject.deep_symbolize_keys)
.to include(
authors: be_an(Array).and(
contain_exactly(
include(
name: 'Name',
url: 'https://host.example/123'
)
)
)
)
end
end
end