Explicit validation of custom field name unique constraint

This commit is contained in:
shamoon 2024-02-03 09:10:08 -08:00
parent 6cf732e6ec
commit 0403c89e11
2 changed files with 34 additions and 0 deletions

View File

@ -441,6 +441,17 @@ class CustomFieldSerializer(serializers.ModelSerializer):
"data_type",
]
def validate(self, attrs):
# see https://github.com/encode/django-rest-framework/issues/7173
name = attrs["name"] if "name" in attrs else self.instance.name
if ("name" in attrs) and self.Meta.model.objects.filter(
name=name,
).exists():
raise serializers.ValidationError(
{"error": "Object violates name unique constraint"},
)
return super().validate(attrs)
class ReadWriteSerializerMethodField(serializers.SerializerMethodField):
"""

View File

@ -53,6 +53,29 @@ class TestCustomField(DirectoriesMixin, APITestCase):
self.assertEqual(data["name"], name)
self.assertEqual(data["data_type"], field_type)
def test_create_custom_field_nonunique_name(self):
"""
GIVEN:
- Custom field exists
WHEN:
- API request to create custom field with the same name
THEN:
- HTTP 400 is returned
"""
CustomField.objects.create(
name="Test Custom Field",
data_type=CustomField.FieldDataType.STRING,
)
resp = self.client.post(
self.ENDPOINT,
data={
"data_type": "string",
"name": "Test Custom Field",
},
)
self.assertEqual(resp.status_code, status.HTTP_400_BAD_REQUEST)
def test_create_custom_field_instance(self):
"""
GIVEN: