TT#43813 build: delete all JBI info related to a BuildRelease on delete

Change-Id: I7fda15d6c6038a73fef1a2c4797678af74dd97f6
changes/02/38402/1
Victor Seva 6 years ago
parent 87eff997b0
commit fc6833c876

@ -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,

@ -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,
)

@ -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,)

Loading…
Cancel
Save