diff --git a/build/models/br.py b/build/models/br.py index a6936d2..05a8175 100644 --- a/build/models/br.py +++ b/build/models/br.py @@ -26,7 +26,7 @@ logger = logging.getLogger(__name__) class BuildReleaseManager(models.Manager): - jbi = JenkinsBuildInfo.objects + _jbi = JenkinsBuildInfo.objects def create_build_release(self, uuid, release): config = ReleaseConfig(release) @@ -39,8 +39,12 @@ class BuildReleaseManager(models.Manager): projects=",".join(config.projects), ) + def jbi(self, release_uuid): + qs = self._jbi.get_queryset() + return qs.filter(param_release_uuid=release_uuid) + def release_jobs(self, release_uuid, flat=True): - qs = self.jbi.get_queryset() + qs = self._jbi.get_queryset() res = qs.filter( jobname__in=settings.RELEASE_JOBS, param_release_uuid=release_uuid, ).distinct() @@ -61,7 +65,7 @@ class BuildReleaseManager(models.Manager): return res def release_jobs_uuids(self, release_uuid, job): - qs = self.jbi.get_queryset() + qs = self._jbi.get_queryset() params = { "param_release_uuid": release_uuid, "jobname": job, diff --git a/build/test/test_rest.py b/build/test/test_rest.py index 9efc79c..79849b0 100644 --- a/build/test/test_rest.py +++ b/build/test/test_rest.py @@ -19,6 +19,7 @@ from rest_framework.test import APITestCase from rest_framework_api_key.helpers import generate_key from rest_framework_api_key.models import APIKey +from build import models from repoapi.test.base import BaseTest @@ -117,3 +118,67 @@ class TestBuildRest(APIAuthenticatedTestCase): ) response = self.client.post(url, data, format="json") self.assertEqual(response.status_code, status.HTTP_201_CREATED) + + +@override_settings(DEBUG=True) +class TestBuildDeleteRest(APIAuthenticatedTestCase): + fixtures = [ + "test_models", + "test_models_jbi", + ] + release = "release-mr8.1" + release_uuid = "dbe569f7-eab6-4532-a6d1-d31fb559649b" + + def test_get_br(self): + br = models.BuildRelease.objects.get(uuid=self.release_uuid) + data = {} + url = reverse("build:detail", args=[br.id]) + response = self.client.get(url, data, format="json") + self.assertEqual(response.status_code, status.HTTP_200_OK) + + def test_delete_br(self): + br = models.BuildRelease.objects.get(uuid=self.release_uuid) + self.assertEqual( + models.JenkinsBuildInfo.objects.filter( + param_release_uuid=self.release_uuid + ).count(), + 4, + ) + url = reverse("build:detail", args=[br.id]) + response = self.client.delete(url, format="json") + self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT) + with self.assertRaises(models.BuildRelease.DoesNotExist): + models.BuildRelease.objects.get(uuid=self.release_uuid) + self.assertEqual( + models.JenkinsBuildInfo.objects.filter( + param_release_uuid=self.release_uuid + ).count(), + 0, + ) + + def test_delete_br_empty(self): + br = models.BuildRelease.objects.get(uuid=self.release_uuid) + self.assertEqual( + models.JenkinsBuildInfo.objects.filter( + param_release_uuid=self.release_uuid + ).count(), + 4, + ) + models.BuildRelease.objects.jbi(self.release_uuid).delete() + self.assertEqual( + models.JenkinsBuildInfo.objects.filter( + param_release_uuid=self.release_uuid + ).count(), + 0, + ) + url = reverse("build:detail", args=[br.id]) + response = self.client.delete(url, format="json") + self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT) + with self.assertRaises(models.BuildRelease.DoesNotExist): + models.BuildRelease.objects.get(uuid=self.release_uuid) + self.assertEqual( + models.JenkinsBuildInfo.objects.filter( + param_release_uuid=self.release_uuid + ).count(), + 0, + ) diff --git a/build/views.py b/build/views.py index bbe6f29..8962272 100644 --- a/build/views.py +++ b/build/views.py @@ -57,6 +57,10 @@ class BuildReleaseDetail(generics.RetrieveDestroyAPIView): queryset = models.BuildRelease.objects.all().order_by("id") serializer_class = serializers.BuildReleaseSerializer + def perform_destroy(self, instance): + models.BuildRelease.objects.jbi(instance.uuid).delete() + instance.delete() + class BuildProject(APIView): permission_classes = (BuildAccess,)