Better unicity constraint check on provider creation

This commit is contained in:
Antoine Nguyen
2025-12-02 15:11:44 +01:00
parent d42dac1e78
commit bf1c900ced
2 changed files with 21 additions and 0 deletions
@@ -35,6 +35,7 @@ class EmailProviderDomainSerializer(serializers.ModelSerializer):
id = serializers.IntegerField(required=False)
class Meta:
extra_kwargs = {"name": {"validators": []}}
fields = ("id", "name", "new_domain")
model = models.EmailProviderDomain
@@ -56,6 +57,19 @@ class EmailProviderSerializer(serializers.ModelSerializer):
if domains:
to_create = []
for domain in domains:
if models.EmailProviderDomain.objects.filter(
name=domain["name"]
).exists():
raise serializers.ValidationError(
{
"error": (
_("Migrated domain with name {} already exists").format(
domain["name"]
)
)
}
)
to_create.append(
models.EmailProviderDomain(provider=provider, **domain)
)
+7
View File
@@ -134,6 +134,13 @@ class ViewSetTestCase(DataMixin, ModoAPITestCase):
models.EmailProviderDomain.objects.filter(name="gmail.com").exists()
)
response = self.client.post(url, data, format="json")
self.assertEqual(response.status_code, 400)
self.assertEqual(
response.json()["error"],
"Migrated domain with name gmail.com already exists",
)
def test_update_provider(self):
provider_domain = factories.EmailProviderDomainFactory(name="outlook.com")
url = reverse("v2:emailprovider-detail", args=[provider_domain.provider.pk])