From b1f7c9641fa6f73d897bdcdb39e32d2740a16c69 Mon Sep 17 00:00:00 2001 From: David Roetzel Date: Mon, 11 May 2026 08:08:44 +0200 Subject: [PATCH] Fix updating collection items when position is unknown (#38962) --- .../process_featured_item_service.rb | 4 ++-- .../process_featured_item_service_spec.rb | 18 ++++++++++++++---- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/app/services/activitypub/process_featured_item_service.rb b/app/services/activitypub/process_featured_item_service.rb index a4323b41c6..245133607c 100644 --- a/app/services/activitypub/process_featured_item_service.rb +++ b/app/services/activitypub/process_featured_item_service.rb @@ -16,10 +16,10 @@ class ActivityPub::ProcessFeaturedItemService with_redis_lock("collection_item:#{@item_json['id']}") do @collection_item = existing_item || pre_approved_item || new_item + @collection_item.position = position unless position.nil? @collection_item.update!( uri: @item_json['id'], - object_uri: value_or_id(@item_json['featuredObject']), - position: + object_uri: value_or_id(@item_json['featuredObject']) ) @approval_uri = @item_json['featureAuthorization'] diff --git a/spec/services/activitypub/process_featured_item_service_spec.rb b/spec/services/activitypub/process_featured_item_service_spec.rb index 14147b3784..d21b4ccea5 100644 --- a/spec/services/activitypub/process_featured_item_service_spec.rb +++ b/spec/services/activitypub/process_featured_item_service_spec.rb @@ -72,15 +72,25 @@ RSpec.describe ActivityPub::ProcessFeaturedItemService do end end - context 'when item exists at a different position' do + context 'when item exists' do let!(:collection_item) do Fabricate(:collection_item, collection:, uri: featured_item_json['id'], position: 2) end - it 'updates the position' do - expect { subject.call(collection, object, position:) }.to_not change(collection.collection_items, :count) + context 'when no position is given' do + it 'does not change the position' do + expect { subject.call(collection, object) }.to_not change(collection.collection_items, :count) - expect(collection_item.reload.position).to eq 3 + expect(collection_item.reload.position).to eq 2 + end + end + + context 'when a different position is given' do + it 'updates the position' do + expect { subject.call(collection, object, position:) }.to_not change(collection.collection_items, :count) + + expect(collection_item.reload.position).to eq 3 + end end end