diff --git a/arkindex/process/serializers/workers.py b/arkindex/process/serializers/workers.py index 24c6bb162acf27713a002442ce0aaddd1e4c6eda..e896adf8c1837f0af4a17f87ae89edda2ae18eda 100644 --- a/arkindex/process/serializers/workers.py +++ b/arkindex/process/serializers/workers.py @@ -88,7 +88,7 @@ class WorkerCreateSerializer(WorkerSerializer): Worker.objects .using("default") .filter( - repository_url=validated_data["repository_url"], + repository_url=validated_data.get("repository_url"), slug=validated_data["slug"], ) .first() diff --git a/arkindex/process/tests/test_workers.py b/arkindex/process/tests/test_workers.py index 96b792003d1b233a5302818fa1dc281d3842a158..923724c89751ad8c18edf03369d699ad45feca7a 100644 --- a/arkindex/process/tests/test_workers.py +++ b/arkindex/process/tests/test_workers.py @@ -544,7 +544,6 @@ class TestWorkersWorkerVersions(FixtureAPITestCase): data={ "name": "Worker post", "slug": self.worker_custom.slug, - "repository_url": "", "type": "new_type" } ) @@ -563,7 +562,7 @@ class TestWorkersWorkerVersions(FixtureAPITestCase): def test_worker_create_task_return_existing_worker(self): """ - Creation with an existing slug returns the existing worker with a HTTP status 200 + Creation with an existing slug and no repo URL returns the existing worker with a HTTP status 200 """ test_worker = Worker.objects.create( name="Prog Knife", @@ -577,7 +576,6 @@ class TestWorkersWorkerVersions(FixtureAPITestCase): "name": "Progressive Knife", "slug": "prog_knife", "type": self.worker_type_dla.slug, - "repository_url": "", }, HTTP_AUTHORIZATION=f"Ponos {self.task.token}", ) @@ -591,6 +589,36 @@ class TestWorkersWorkerVersions(FixtureAPITestCase): self.assertEqual(data["repository_url"], None) self.assertEqual(test_worker.repository_url, None) + def test_worker_create_existing_with_repository_url(self): + """ + Creation with an existing slug and repo URL returns the existing worker with a HTTP status 200 + """ + test_worker = Worker.objects.create( + name="Prog Knife", + slug="prog_knife", + type=self.worker_reco.type, + repository_url="https://gitlab.nerv.co.jp/eva:eva-01", + ) + with self.assertNumQueries(6): + response = self.client.post( + reverse("api:workers-list"), + data={ + "name": "Progressive Knife", + "slug": "prog_knife", + "type": self.worker_type_dla.slug, + "repository_url": "https://gitlab.nerv.co.jp/eva:eva-01", + }, + HTTP_AUTHORIZATION=f"Ponos {self.task.token}", + ) + self.assertEqual(response.status_code, status.HTTP_200_OK) + + data = response.json() + self.assertEqual(data["id"], str(test_worker.id)) + self.assertEqual(data["name"], "Prog Knife") + self.assertEqual(data["slug"], "prog_knife") + self.assertEqual(data["type"], "recognizer") + self.assertEqual(data["repository_url"], "https://gitlab.nerv.co.jp/eva:eva-01") + def test_worker_create_task_new_type(self): """ Ponos task can create a worker with a non pre-existing worker type @@ -605,7 +633,6 @@ class TestWorkersWorkerVersions(FixtureAPITestCase): "name": "Worker post", "slug": "worker_post", "type": "newType", - "repository_url": "", }, HTTP_AUTHORIZATION=f"Ponos {self.task.token}", )