fix(dcim): Correct format placeholder in Cluster location validation error (#22725)

Changes 'site' to 'location' in the error message format string to match
the actual parameter name being passed. Adds regression test coverage to
verify the error message displays the correct location name.

Fixes #22717
This commit is contained in:
Martin Hauser 2026-07-21 17:27:54 +02:00 committed by GitHub
parent 87d396bab5
commit f9a90f3cc9
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 45 additions and 1 deletions

View File

@ -946,7 +946,7 @@ class Device(
if self.cluster and self.cluster._location is not None and self.cluster._location != self.location:
raise ValidationError({
'cluster': _("The assigned cluster belongs to a different location ({location})").format(
site=self.cluster._location
location=self.cluster._location
)
})

View File

@ -855,6 +855,50 @@ class DeviceTestCase(TestCase):
cluster=clusters[1]
).full_clean()
@tag('regression') # Ref: #22717
def test_device_mismatched_location_cluster(self):
"""
A cluster scoped to a different location than the device must be rejected
with a field validation error naming that location.
"""
site = Site.objects.create(name='Site 1', slug='site-1')
locations = (
Location(site=site, name='Location A', slug='location-a'),
Location(site=site, name='Location B', slug='location-b'),
)
for location in locations:
location.save()
cluster_type = ClusterType.objects.create(name='Cluster Type 1', slug='cluster-type-1')
cluster = Cluster.objects.create(name='Cluster 1', type=cluster_type, scope=locations[0])
device_type = DeviceType.objects.first()
device_role = DeviceRole.objects.first()
# Device in the cluster's location should pass
Device(
name='device1',
site=site,
location=locations[0],
device_type=device_type,
role=device_role,
cluster=cluster
).full_clean()
# Device in a different location of the same site should fail
with self.assertRaisesMessage(
ValidationError,
'The assigned cluster belongs to a different location (Location A)'
):
Device(
name='device1',
site=site,
location=locations[1],
device_type=device_type,
role=device_role,
cluster=cluster
).full_clean()
class DeviceBayTestCase(TestCase):