From 11803e3d047a3195b893b8a845d7d69f273ec57c Mon Sep 17 00:00:00 2001 From: David Roetzel Date: Thu, 7 May 2026 12:08:50 +0200 Subject: [PATCH] Relax uniqueness constraint to allow `nil` (#38934) --- app/models/collection_item.rb | 2 +- spec/models/collection_item_spec.rb | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/app/models/collection_item.rb b/app/models/collection_item.rb index b7b82a29c4..7ecb28ddb8 100644 --- a/app/models/collection_item.rb +++ b/app/models/collection_item.rb @@ -30,7 +30,7 @@ class CollectionItem < ApplicationRecord delegate :local?, :remote?, to: :collection - validates :account_id, uniqueness: { scope: :collection_id } + validates :account_id, uniqueness: { scope: :collection_id, allow_nil: true } validates :position, numericality: { only_integer: true, greater_than: 0 } validates :activity_uri, presence: true, if: :local_item_with_remote_account? validates :approval_uri, presence: true, unless: -> { local? || account&.local? || !accepted? } diff --git a/spec/models/collection_item_spec.rb b/spec/models/collection_item_spec.rb index 89ef2bc534..0c927e368f 100644 --- a/spec/models/collection_item_spec.rb +++ b/spec/models/collection_item_spec.rb @@ -41,6 +41,19 @@ RSpec.describe CollectionItem do subject { Fabricate.build(:unverified_remote_collection_item) } it { is_expected.to validate_presence_of(:object_uri) } + + context 'when another item without account exists' do + subject { Fabricate.build(:unverified_remote_collection_item, collection:) } + + let(:collection) { Fabricate(:remote_collection) } + + before do + Fabricate(:unverified_remote_collection_item, collection:) + collection.reload + end + + it { is_expected.to be_valid } + end end end