Skip to content

Commit a5f53dd

Browse files
committed
Fix ignored unique constraint error name
Also add tests to ensure that `ignored_unique_constraint_violation_errors` is set correctly.
1 parent f75acb0 commit a5f53dd

File tree

5 files changed

+29
-1
lines changed

5 files changed

+29
-1
lines changed

app/models/runtime/security_group.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ class SecurityGroup < Sequel::Model
1212

1313
serialize_attributes :json, :rules
1414

15-
many_to_many :spaces, ignored_unique_constraint_violation_errors: %w[ignored_unique_constraint_violation_errors]
15+
many_to_many :spaces, ignored_unique_constraint_violation_errors: %w[security_groups_spaces_ids]
1616
many_to_many :staging_spaces,
1717
class: 'VCAP::CloudController::Space',
1818
join_table: 'staging_security_groups_spaces',

spec/unit/models/runtime/domain_spec.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,12 @@ module VCAP::CloudController
3636
expect(domain.shared_organizations).to include(org)
3737
end
3838

39+
it 'ignores unique constraint violation errors in the many_to_many relationship definition' do
40+
index_name = :orgs_pd_ids
41+
expect(DbConfig.new.connection.indexes(:organizations_private_domains)).to include(index_name)
42+
expect(Domain.association_reflection(:shared_organizations)[:ignored_unique_constraint_violation_errors]).to include(index_name.to_s)
43+
end
44+
3945
context 'when the domain is a shared domain' do
4046
it 'fails validation' do
4147
domain = Domain.make(owning_organization_id: nil)

spec/unit/models/runtime/route_spec.rb

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,11 @@ module VCAP::CloudController
113113
it { is_expected.to have_associated :space, associated_instance: ->(route) { Space.make(organization: route.domain.owning_organization) } }
114114
it { is_expected.to have_associated :route_mappings, associated_instance: ->(route) { RouteMappingModel.make(app: AppModel.make(space: route.space), route: route) } }
115115

116+
it 'ignores unique constraint violation errors in the many_to_many relationship definition' do
117+
index_name = DbConfig.new.connection.adapter_scheme == :postgres ? :route_target_space_pk : :'route_shares.PRIMARY'
118+
expect(Route.association_reflection(:shared_spaces)[:ignored_unique_constraint_violation_errors]).to include(index_name.to_s)
119+
end
120+
116121
describe 'apps association' do
117122
let(:space) { Space.make }
118123
let(:process) { ProcessModelFactory.make(space:) }

spec/unit/models/runtime/security_group_spec.rb

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -421,6 +421,12 @@ def build_all_rule(attrs={})
421421

422422
expect { security_group.destroy }.not_to raise_error
423423
end
424+
425+
it 'ignores unique constraint violation errors in the many_to_many relationship definition' do
426+
index_name = :security_groups_spaces_ids
427+
expect(DbConfig.new.connection.indexes(:security_groups_spaces)).to include(index_name)
428+
expect(SecurityGroup.association_reflection(:spaces)[:ignored_unique_constraint_violation_errors]).to include(index_name.to_s)
429+
end
424430
end
425431

426432
describe 'staging_spaces' do
@@ -432,6 +438,12 @@ def build_all_rule(attrs={})
432438

433439
expect { security_group.destroy }.not_to raise_error
434440
end
441+
442+
it 'ignores unique constraint violation errors in the many_to_many relationship definition' do
443+
index_name = :staging_security_groups_spaces_ids
444+
expect(DbConfig.new.connection.indexes(:staging_security_groups_spaces)).to include(index_name)
445+
expect(SecurityGroup.association_reflection(:staging_spaces)[:ignored_unique_constraint_violation_errors]).to include(index_name.to_s)
446+
end
435447
end
436448
end
437449

spec/unit/models/services/service_instance_spec.rb

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,11 @@ module VCAP::CloudController
149149
UserProvidedServiceInstance.make(name: 'shared-service', space: space)
150150
end.to raise_error(Sequel::ValidationFailed, /name unique/)
151151
end
152+
153+
it 'ignores unique constraint violation errors in the many_to_many relationship definition' do
154+
index_name = DbConfig.new.connection.adapter_scheme == :postgres ? :service_instance_target_space_pk : :'service_instance_shares.PRIMARY'
155+
expect(ManagedServiceInstance.association_reflection(:shared_spaces)[:ignored_unique_constraint_violation_errors]).to include(index_name.to_s)
156+
end
152157
end
153158
end
154159
end

0 commit comments

Comments
 (0)