forked from mastodon/mastodon
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Fix validation error in SynchronizeFeaturedTagsCollectionWorker (mast…
…odon#20018) * Fix followers count not being updated when migrating follows Fixes mastodon#19900 * Fix validation error in SynchronizeFeaturedTagsCollectionWorker Also saves remote user's chosen case for hashtags * Limit remote featured tags before validation
- Loading branch information
1 parent
3114c82
commit bbf7449
Showing
3 changed files
with
106 additions
and
13 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
95 changes: 95 additions & 0 deletions
95
spec/services/activitypub/fetch_featured_tags_collection_service_spec.rb
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,95 @@ | ||
require 'rails_helper' | ||
|
||
RSpec.describe ActivityPub::FetchFeaturedTagsCollectionService, type: :service do | ||
let(:collection_url) { 'https://example.com/account/tags' } | ||
let(:actor) { Fabricate(:account, domain: 'example.com', uri: 'https://example.com/account') } | ||
|
||
let(:items) do | ||
[ | ||
{ type: 'Hashtag', href: 'https://example.com/account/tagged/foo', name: 'Foo' }, | ||
{ type: 'Hashtag', href: 'https://example.com/account/tagged/bar', name: 'bar' }, | ||
{ type: 'Hashtag', href: 'https://example.com/account/tagged/baz', name: 'baZ' }, | ||
] | ||
end | ||
|
||
let(:payload) do | ||
{ | ||
'@context': 'https://www.w3.org/ns/activitystreams', | ||
type: 'Collection', | ||
id: collection_url, | ||
items: items, | ||
}.with_indifferent_access | ||
end | ||
|
||
subject { described_class.new } | ||
|
||
shared_examples 'sets featured tags' do | ||
before do | ||
subject.call(actor, collection_url) | ||
end | ||
|
||
it 'sets expected tags as pinned tags' do | ||
expect(actor.featured_tags.map(&:display_name)).to match_array ['Foo', 'bar', 'baZ'] | ||
end | ||
end | ||
|
||
describe '#call' do | ||
context 'when the endpoint is a Collection' do | ||
before do | ||
stub_request(:get, collection_url).to_return(status: 200, body: Oj.dump(payload)) | ||
end | ||
|
||
it_behaves_like 'sets featured tags' | ||
end | ||
|
||
context 'when the account already has featured tags' do | ||
before do | ||
stub_request(:get, collection_url).to_return(status: 200, body: Oj.dump(payload)) | ||
|
||
actor.featured_tags.create!(name: 'FoO') | ||
actor.featured_tags.create!(name: 'baz') | ||
actor.featured_tags.create!(name: 'oh').update(name: nil) | ||
end | ||
|
||
it_behaves_like 'sets featured tags' | ||
end | ||
|
||
context 'when the endpoint is an OrderedCollection' do | ||
let(:payload) do | ||
{ | ||
'@context': 'https://www.w3.org/ns/activitystreams', | ||
type: 'OrderedCollection', | ||
id: collection_url, | ||
orderedItems: items, | ||
}.with_indifferent_access | ||
end | ||
|
||
before do | ||
stub_request(:get, collection_url).to_return(status: 200, body: Oj.dump(payload)) | ||
end | ||
|
||
it_behaves_like 'sets featured tags' | ||
end | ||
|
||
context 'when the endpoint is a paginated Collection' do | ||
let(:payload) do | ||
{ | ||
'@context': 'https://www.w3.org/ns/activitystreams', | ||
type: 'Collection', | ||
id: collection_url, | ||
first: { | ||
type: 'CollectionPage', | ||
partOf: collection_url, | ||
items: items, | ||
} | ||
}.with_indifferent_access | ||
end | ||
|
||
before do | ||
stub_request(:get, collection_url).to_return(status: 200, body: Oj.dump(payload)) | ||
end | ||
|
||
it_behaves_like 'sets featured tags' | ||
end | ||
end | ||
end |