diff --git a/build/models/br.py b/build/models/br.py index d575370..d3b5182 100644 --- a/build/models/br.py +++ b/build/models/br.py @@ -100,6 +100,10 @@ class BuildRelease(models.Model): def __str__(self): return "%s[%s]" % (self.release, self.uuid) + def refresh_projects(self): + self.projects = ",".join(self.config.projects) + self.save() + @property def projects_list(self): return [x.strip() for x in self.projects.split(",")] diff --git a/build/test/test_rest.py b/build/test/test_rest.py index 79849b0..943bab6 100644 --- a/build/test/test_rest.py +++ b/build/test/test_rest.py @@ -182,3 +182,35 @@ class TestBuildDeleteRest(APIAuthenticatedTestCase): ).count(), 0, ) + + +@override_settings(DEBUG=True) +class TestBuildPatchRest(APIAuthenticatedTestCase): + fixtures = [ + "test_models", + ] + release = "release-mr8.1" + release_uuid = "dbe569f7-eab6-4532-a6d1-d31fb559649b" + + def test_refresh(self): + br = models.BuildRelease.objects.get(uuid=self.release_uuid) + self.assertEqual(br.projects, "kamailio,lua-ngcp-kamailio,ngcp-panel") + data = {"action": "refresh"} + url = reverse("build:detail", args=[br.id]) + response = self.client.patch(url, data, format="json") + self.assertEqual(response.status_code, status.HTTP_200_OK) + br = models.BuildRelease.objects.get(uuid=self.release_uuid) + self.assertNotEqual( + br.projects, "kamailio,lua-ngcp-kamailio,ngcp-panel" + ) + self.assertEqual(len(br.projects_list), 73) + + def test_no_action(self): + br = models.BuildRelease.objects.get(uuid=self.release_uuid) + self.assertEqual(br.projects, "kamailio,lua-ngcp-kamailio,ngcp-panel") + data = {} + url = reverse("build:detail", args=[br.id]) + response = self.client.patch(url, data, format="json") + self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) + br = models.BuildRelease.objects.get(uuid=self.release_uuid) + self.assertEqual(br.projects, "kamailio,lua-ngcp-kamailio,ngcp-panel") diff --git a/build/views.py b/build/views.py index 8962272..7b652a1 100644 --- a/build/views.py +++ b/build/views.py @@ -61,6 +61,15 @@ class BuildReleaseDetail(generics.RetrieveDestroyAPIView): models.BuildRelease.objects.jbi(instance.uuid).delete() instance.delete() + def patch(self, request, *args, **kwargs): + action = request.data.get("action") + if action == "refresh": + instance = self.get_object() + instance.refresh_projects() + serializer = self.get_serializer(instance) + return Response(serializer.data) + return JsonResponse({"error": "Action unknown"}, status=400) + class BuildProject(APIView): permission_classes = (BuildAccess,) diff --git a/release_dashboard/templates/release_dashboard/build_release.html b/release_dashboard/templates/release_dashboard/build_release.html index d7dd5ed..1932861 100644 --- a/release_dashboard/templates/release_dashboard/build_release.html +++ b/release_dashboard/templates/release_dashboard/build_release.html @@ -43,8 +43,12 @@