Add VNFPKGM Terminate Subscription API 09/82009/2
authorBharath Thiruveedula <bharath.thiruveedula@verizon.com>
Tue, 12 Mar 2019 08:17:48 +0000 (13:47 +0530)
committerBharath Thiruveedula <bharath.thiruveedula@verizon.com>
Tue, 12 Mar 2019 08:44:55 +0000 (08:44 +0000)
Issue-ID: VFC-1224
Change-Id: I763ae17780aa364610fbdb66e7ed38422f4cf80a
Signed-off-by: Bharath Thiruveedula <bharath.thiruveedula@verizon.com>
catalog/packages/biz/vnf_pkg_subscription.py
catalog/packages/tests/test_vnf_pkg_subscription.py
catalog/packages/views/vnf_package_subscription_views.py

index 9d4acb9..7e72311 100755 (executable)
@@ -167,3 +167,17 @@ class QuerySubscription(object):
             raise SubscriptionDoesNotExistsException("Subscription with ID: %s "
                                                      "does not exists" % subscription_id)
         return subscription[0].toDict()
+
+
+class TerminateSubscription(object):
+
+    def terminate(self, subscription_id):
+        logger.debug("TerminateSubscriptions--delete--biz::> "
+                     "ID: %s" % subscription_id)
+
+        subscription = VnfPkgSubscriptionModel.objects.filter(
+            subscription_id=subscription_id)
+        if not subscription.exists():
+            raise SubscriptionDoesNotExistsException("Subscription with ID: %s "
+                                                     "does not exists" % subscription_id)
+        subscription[0].delete()
index 40eb2af..9a21c1e 100644 (file)
@@ -153,3 +153,25 @@ class TestNfPackageSubscription(TestCase):
         response = self.client.get("/api/vnfpkgm/v1/subscriptions/" + dummy_uuid,
                                    format='json')
         self.assertEqual(404, response.status_code)
+
+    @mock.patch("requests.get")
+    @mock.patch.object(uuid, 'uuid4')
+    def test_delete_subscription_with_id(self, mock_uuid4, mock_requests):
+        temp_uuid = "99442b18-a5c7-11e8-998c-bf1755941f13"
+        dummy_uuid = str(uuid.uuid4())
+        mock_requests.return_value.status_code = 204
+        mock_requests.get.status_code = 204
+        mock_uuid4.return_value = temp_uuid
+        self.client.post("/api/vnfpkgm/v1/subscriptions",
+                         data=self.vnf_subscription_data, format='json')
+        self.client.get("/api/vnfpkgm/v1/subscriptions/" + dummy_uuid,
+                        format='json')
+        response = self.client.delete("/api/vnfpkgm/v1/subscriptions/" + temp_uuid)
+        self.assertEqual(204, response.status_code)
+
+    @mock.patch("requests.get")
+    @mock.patch.object(uuid, 'uuid4')
+    def test_delete_subscription_with_id_not_exists(self, mock_uuid4, mock_requests):
+        dummy_uuid = str(uuid.uuid4())
+        response = self.client.delete("/api/vnfpkgm/v1/subscriptions/" + dummy_uuid)
+        self.assertEqual(404, response.status_code)
index 24bcd4e..70c9abc 100755 (executable)
@@ -24,7 +24,7 @@ from rest_framework.response import Response
 from catalog.packages.serializers.vnf_pkg_subscription import PkgmSubscriptionRequestSerializer, \
     PkgmSubscriptionSerializer, PkgmSubscriptionsSerializer
 from catalog.packages.serializers.response import ProblemDetailsSerializer
-from catalog.packages.biz.vnf_pkg_subscription import CreateSubscription, QuerySubscription
+from catalog.packages.biz.vnf_pkg_subscription import CreateSubscription, QuerySubscription, TerminateSubscription
 from catalog.packages.views.common import validate_data
 from catalog.pub.exceptions import VnfPkgDuplicateSubscriptionException, VnfPkgSubscriptionException, \
     SubscriptionDoesNotExistsException
@@ -134,3 +134,28 @@ class QueryTerminateSubscriptionView(APIView):
             problem_details_serializer = get_problem_details_serializer(status.HTTP_500_INTERNAL_SERVER_ERROR,
                                                                         traceback.format_exc())
             return Response(data=problem_details_serializer.data, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
+
+    @swagger_auto_schema(
+        responses={
+            status.HTTP_204_NO_CONTENT: "",
+            status.HTTP_404_NOT_FOUND: ProblemDetailsSerializer(),
+            status.HTTP_500_INTERNAL_SERVER_ERROR: ProblemDetailsSerializer()
+        }
+    )
+    def delete(self, request, subscriptionId):
+        logger.debug("SubscribeNotification--get::> %s" % subscriptionId)
+        try:
+            TerminateSubscription().terminate(subscriptionId)
+            return Response(status=status.HTTP_204_NO_CONTENT)
+        except SubscriptionDoesNotExistsException as e:
+            logger.error(e.message)
+            logger.error(traceback.format_exc())
+            problem_details_serializer = get_problem_details_serializer(status.HTTP_404_NOT_FOUND,
+                                                                        traceback.format_exc())
+            return Response(data=problem_details_serializer.data, status=status.HTTP_404_NOT_FOUND)
+        except Exception as e:
+            logger.error(e.message)
+            logger.error(traceback.format_exc())
+            problem_details_serializer = get_problem_details_serializer(status.HTTP_500_INTERNAL_SERVER_ERROR,
+                                                                        traceback.format_exc())
+            return Response(data=problem_details_serializer.data, status=status.HTTP_500_INTERNAL_SERVER_ERROR)