diff --git a/arkindex/training/serializers.py b/arkindex/training/serializers.py index 048dcecf633382bdb3ab0bb30417262c531aa300..b7bd7f911074af0ac1ef9d80ec9c0063c88a65cd 100644 --- a/arkindex/training/serializers.py +++ b/arkindex/training/serializers.py @@ -580,7 +580,9 @@ class DatasetSerializer(serializers.ModelSerializer): return set_names def validate_unique_elements(self, unique): - if unique is True and self.instance and ( + # When updating a dataset to switch unique_elements from False to True, + # check that it does not contain duplicates. + if unique is True and self.instance and not self.instance.unique_elements and ( DatasetElement.objects .filter(set__dataset_id=self.instance.pk) .values("element_id") diff --git a/arkindex/training/tests/test_datasets_api.py b/arkindex/training/tests/test_datasets_api.py index 1dc9beda71d926b7e0993f6b97ac8a0f0a9205ea..ce1d83ce0a9e6ca83840bd7e2c6d91815cd3a19d 100644 --- a/arkindex/training/tests/test_datasets_api.py +++ b/arkindex/training/tests/test_datasets_api.py @@ -494,7 +494,7 @@ class TestDatasetsAPI(FixtureAPITestCase): def test_update_name_too_long(self): self.client.force_login(self.user) - with self.assertNumQueries(5): + with self.assertNumQueries(4): response = self.client.put( reverse("api:dataset-update", kwargs={"pk": self.dataset.pk}), data={ @@ -509,7 +509,7 @@ class TestDatasetsAPI(FixtureAPITestCase): def test_update_name_already_exists_in_corpus(self): Dataset.objects.create(name="Another Dataset", description="A set of data", corpus=self.corpus, creator=self.dataset_creator) self.client.force_login(self.user) - with self.assertNumQueries(6): + with self.assertNumQueries(5): response = self.client.put( reverse("api:dataset-update", kwargs={"pk": self.dataset.pk}), data={ @@ -523,7 +523,7 @@ class TestDatasetsAPI(FixtureAPITestCase): def test_update_requires_all_fields(self): self.client.force_login(self.user) - with self.assertNumQueries(5): + with self.assertNumQueries(4): response = self.client.put( reverse("api:dataset-update", kwargs={"pk": self.dataset.pk}), data={"name": "Shin Seiki Evangelion"}, @@ -535,7 +535,7 @@ class TestDatasetsAPI(FixtureAPITestCase): def test_update_sets_forbidden(self): self.client.force_login(self.user) self.assertIsNone(self.dataset.task_id) - with self.assertNumQueries(5): + with self.assertNumQueries(4): response = self.client.put( reverse("api:dataset-update", kwargs={"pk": self.dataset.pk}), data={ @@ -550,7 +550,7 @@ class TestDatasetsAPI(FixtureAPITestCase): def test_update_empty_or_blank_description_or_name(self): self.client.force_login(self.user) - with self.assertNumQueries(5): + with self.assertNumQueries(4): response = self.client.put( reverse("api:dataset-update", kwargs={"pk": self.dataset.pk}), data={ @@ -567,7 +567,7 @@ class TestDatasetsAPI(FixtureAPITestCase): def test_update_all_errors(self): self.client.force_login(self.user) - with self.assertNumQueries(5): + with self.assertNumQueries(4): response = self.client.put( reverse("api:dataset-update", kwargs={"pk": self.dataset.pk}), data={ @@ -620,7 +620,7 @@ class TestDatasetsAPI(FixtureAPITestCase): self.client.force_login(self.user) self.dataset.state = DatasetState.Building self.dataset.save() - with self.assertNumQueries(6): + with self.assertNumQueries(5): response = self.client.put( reverse("api:dataset-update", kwargs={"pk": self.dataset.pk}), data={ @@ -638,7 +638,7 @@ class TestDatasetsAPI(FixtureAPITestCase): def test_update_ponos_task_state_update(self): self.dataset.state = DatasetState.Building self.dataset.save() - with self.assertNumQueries(7): + with self.assertNumQueries(6): response = self.client.put( reverse("api:dataset-update", kwargs={"pk": self.dataset.pk}), HTTP_AUTHORIZATION=f"Ponos {self.task.token}", @@ -721,7 +721,7 @@ class TestDatasetsAPI(FixtureAPITestCase): def test_update_ponos_task_state_requires_dataset_in_process(self): self.process.process_sets.all().delete() - with self.assertNumQueries(6): + with self.assertNumQueries(5): response = self.client.put( reverse("api:dataset-update", kwargs={"pk": self.dataset.pk}), HTTP_AUTHORIZATION=f"Ponos {self.task.token}", @@ -738,7 +738,7 @@ class TestDatasetsAPI(FixtureAPITestCase): }) def test_update_ponos_task_bad_state(self): - with self.assertNumQueries(4): + with self.assertNumQueries(3): response = self.client.put( reverse("api:dataset-update", kwargs={"pk": self.dataset.pk}), HTTP_AUTHORIZATION=f"Ponos {self.task.token}",