Skip to content
Snippets Groups Projects

Create RecommendedWorkerVersionRetrieve endpoint

Merged ml bonhomme requested to merge wv-rec into release-1.7.2
Files
3
from unittest.mock import call, patch
from django.urls import reverse
from rest_framework import status
from arkindex.process.models import FeatureUsage, Worker, WorkerVersionState
from arkindex.project.tests import FixtureAPITestCase
from arkindex.users.models import Role
class TestRecommendedWorkerVersion(FixtureAPITestCase):
@classmethod
def setUpTestData(cls):
super().setUpTestData()
cls.worker_reco = Worker.objects.get(slug="reco")
cls.version_1 = cls.worker_reco.versions.get()
cls.main_branch_version = cls.worker_reco.versions.create(
configuration={},
branch="main",
revision_url="https://gitlab.com/NERV/eva/commit/12",
state=WorkerVersionState.Available,
docker_image_iid="registry.somewhere.com/something:latest"
)
cls.other_branch_version = cls.worker_reco.versions.create(
configuration={},
branch="eva-00",
revision_url="https://gitlab.com/NERV/eva/commit/00002",
tag="0.3.0rc-2",
state=WorkerVersionState.Available,
docker_image_iid="registry.somewhere.com/something:latest"
)
cls.tagged_version_1 = cls.worker_reco.versions.create(
configuration={},
revision_url="https://gitlab.com/NERV/eva/commit/1234",
tag="0.2.8",
state=WorkerVersionState.Available,
docker_image_iid="registry.somewhere.com/something:latest"
)
cls.tagged_version_2 = cls.worker_reco.versions.create(
configuration={},
revision_url="https://gitlab.com/NERV/eva/commit/5678",
tag="0.1.4",
state=WorkerVersionState.Available,
docker_image_iid="registry.somewhere.com/something:latest"
)
def test_requires_login(self):
with self.assertNumQueries(0):
response = self.client.get(reverse("api:recommended-worker-version", kwargs={"pk": str(self.worker_reco.id)}))
self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
@patch("arkindex.users.utils.get_max_level", return_value=Role.Guest.value)
def test_requires_contributor(self, max_level_mock):
self.client.force_login(self.user)
with self.assertNumQueries(3):
response = self.client.get(reverse("api:recommended-worker-version", kwargs={"pk": str(self.worker_reco.id)}))
self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
self.assertDictEqual(response.json(), {
"detail": "You do not have an execution access to this worker.",
})
self.assertEqual(max_level_mock.call_count, 1)
self.assertEqual(max_level_mock.call_args_list, [
call(self.user, self.worker_reco)
])
def test_main_branch_version(self):
self.client.force_login(self.user)
with self.assertNumQueries(5):
response = self.client.get(reverse("api:recommended-worker-version", kwargs={"pk": str(self.worker_reco.id)}))
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertDictEqual(response.json(), {
"id": str(self.main_branch_version.id),
"configuration": {},
"docker_image_iid": self.main_branch_version.docker_image_iid,
"state": "available",
"gpu_usage": FeatureUsage.Disabled.value,
"model_usage": FeatureUsage.Disabled.value,
"worker": {
"id": str(self.worker_reco.id),
"name": self.worker_reco.name,
"type": self.worker_reco.type.slug,
"slug": self.worker_reco.slug,
"description": self.worker_reco.description,
"archived": bool(self.worker_reco.archived),
"repository_url": self.worker_reco.repository_url,
},
"version": None,
"tag": None,
"branch": "main",
"revision_url": "https://gitlab.com/NERV/eva/commit/12",
"created": self.main_branch_version.created.isoformat().replace("+00:00", "Z"),
})
def test_tagged_version(self):
self.main_branch_version.delete()
self.client.force_login(self.user)
with self.assertNumQueries(5):
response = self.client.get(reverse("api:recommended-worker-version", kwargs={"pk": str(self.worker_reco.id)}))
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertDictEqual(response.json(), {
"id": str(self.other_branch_version.id),
"configuration": {},
"docker_image_iid": self.other_branch_version.docker_image_iid,
"state": "available",
"gpu_usage": FeatureUsage.Disabled.value,
"model_usage": FeatureUsage.Disabled.value,
"worker": {
"id": str(self.worker_reco.id),
"name": self.worker_reco.name,
"type": self.worker_reco.type.slug,
"slug": self.worker_reco.slug,
"description": self.worker_reco.description,
"archived": bool(self.worker_reco.archived),
"repository_url": self.worker_reco.repository_url,
},
"version": None,
"tag": "0.3.0rc-2",
"branch": "eva-00",
"revision_url": "https://gitlab.com/NERV/eva/commit/00002",
"created": self.other_branch_version.created.isoformat().replace("+00:00", "Z"),
})
def test_tagged_version_rc(self):
"""
The version with the main tag is returned when release candidate versions (or anything with a tag
that looks like x.x.x-something) also exist
"""
self.main_branch_version.delete()
self.tagged_version_1.tag = "0.3.0"
self.tagged_version_1.save()
self.client.force_login(self.user)
with self.assertNumQueries(5):
response = self.client.get(reverse("api:recommended-worker-version", kwargs={"pk": str(self.worker_reco.id)}))
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertDictEqual(response.json(), {
"id": str(self.tagged_version_1.id),
"configuration": {},
"docker_image_iid": self.tagged_version_1.docker_image_iid,
"state": "available",
"gpu_usage": FeatureUsage.Disabled.value,
"model_usage": FeatureUsage.Disabled.value,
"worker": {
"id": str(self.worker_reco.id),
"name": self.worker_reco.name,
"type": self.worker_reco.type.slug,
"slug": self.worker_reco.slug,
"description": self.worker_reco.description,
"archived": bool(self.worker_reco.archived),
"repository_url": self.worker_reco.repository_url,
},
"version": None,
"tag": "0.3.0",
"branch": None,
"revision_url": "https://gitlab.com/NERV/eva/commit/1234",
"created": self.tagged_version_1.created.isoformat().replace("+00:00", "Z"),
})
Loading