diff --git a/app/serializers/rest/collection_serializer.rb b/app/serializers/rest/collection_serializer.rb index 8354699710..98dbabb949 100644 --- a/app/serializers/rest/collection_serializer.rb +++ b/app/serializers/rest/collection_serializer.rb @@ -1,8 +1,10 @@ # frozen_string_literal: true class REST::CollectionSerializer < ActiveModel::Serializer + include RoutingHelper + attributes :id, :uri, :name, :description, :language, :account_id, - :local, :sensitive, :discoverable, :item_count, + :local, :sensitive, :discoverable, :url, :item_count, :created_at, :updated_at belongs_to :tag, serializer: REST::ShallowTagSerializer @@ -17,6 +19,10 @@ class REST::CollectionSerializer < ActiveModel::Serializer ActivityPub::TagManager.instance.uri_for(object) end + def url + object.local? ? account_collection_url(object.account, object) : object.url + end + def description return object.description if object.local? return if object.description_html.nil? @@ -31,4 +37,8 @@ class REST::CollectionSerializer < ActiveModel::Serializer def account_id object.account_id.to_s end + + def tag + object.tag + end end diff --git a/spec/serializers/rest/collection_serializer_spec.rb b/spec/serializers/rest/collection_serializer_spec.rb index ded12f229e..0ff98c4cb1 100644 --- a/spec/serializers/rest/collection_serializer_spec.rb +++ b/spec/serializers/rest/collection_serializer_spec.rb @@ -3,6 +3,8 @@ require 'rails_helper' RSpec.describe REST::CollectionSerializer do + include RoutingHelper + subject do serialized_record_json(collection, described_class, options: { scope: current_user, @@ -37,6 +39,7 @@ RSpec.describe REST::CollectionSerializer do 'local' => true, 'sensitive' => true, 'discoverable' => false, + 'url' => account_collection_url(collection.account, collection), 'tag' => a_hash_including('name' => 'discovery'), 'created_at' => match_api_datetime_format, 'updated_at' => match_api_datetime_format, @@ -46,7 +49,11 @@ RSpec.describe REST::CollectionSerializer do end context 'when the collection is remote' do - let(:collection) { Fabricate(:remote_collection, description_html: '
remote
') } + let(:collection) { Fabricate(:remote_collection, description_html: 'remote
', url: 'https://example.com/c/1') } + + it 'includes the uri' do + expect(subject).to include('url' => 'https://example.com/c/1') + end it 'includes the html description' do expect(subject)