diff --git a/modoboa/imap_migration/api/v2/serializers.py b/modoboa/imap_migration/api/v2/serializers.py index 0af2ae3df..213898637 100644 --- a/modoboa/imap_migration/api/v2/serializers.py +++ b/modoboa/imap_migration/api/v2/serializers.py @@ -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) ) diff --git a/modoboa/imap_migration/tests.py b/modoboa/imap_migration/tests.py index a972f2927..0841a091b 100644 --- a/modoboa/imap_migration/tests.py +++ b/modoboa/imap_migration/tests.py @@ -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])