Add Terminate Single NsdManagementSubscription API 03/82003/1
authorSirisha Gopigiri <sirisha.gopigiri@verizon.com>
Tue, 12 Mar 2019 06:32:51 +0000 (12:02 +0530)
committerSirisha Gopigiri <sirisha.gopigiri@verizon.com>
Tue, 12 Mar 2019 06:36:36 +0000 (12:06 +0530)
Add SOL 005 Terminate Single NsdManagementSubscription API

Change-Id: I403723fc0b59c2c080a5250d1e076bd6ab7d4547
Issue-ID: VFC-1219
Signed-off-by: Sirisha Gopigiri <sirisha.gopigiri@verizon.com>
catalog/packages/biz/nsdm_subscription.py
catalog/packages/tests/test_nsdm_subscription.py
catalog/packages/views/nsdm_subscription_views.py

index a94717a..ec30507 100644 (file)
@@ -57,6 +57,17 @@ class NsdmSubscription:
         logger.debug("Subscription found... ")
         return self.fill_resp_data(subscription[0])
 
+    def delete_single_subscription(self, subscription_id):
+        logger.debug("Start Delete Subscription... ")
+        subscription = \
+            NsdmSubscriptionModel.objects.filter(
+                subscriptionid=subscription_id)
+        if not subscription.exists():
+            raise ResourceNotFoundException(
+                "Subscription(%s) doesn't exists" % subscription_id)
+        subscription.delete()
+        logger.debug("Deleted Subscription... ")
+
     def query_multi_subscriptions(self, query_params):
         self.params = query_params
         query_data = {}
index 104ec76..d2db19c 100644 (file)
@@ -484,3 +484,44 @@ class TestNsdmSubscription(TestCase):
                                    format='json')
         self.assertEqual(response.status_code,
                          status.HTTP_500_INTERNAL_SERVER_ERROR)
+
+    def test_ndsm_delete_subscription(self):
+        NsdmSubscriptionModel(subscriptionid=self.subscription_id,
+                              callback_uri="http://callbackuri.com",
+                              auth_info={},
+                              notificationTypes=json.dumps(
+                                  ["NsdOnBoardingNotification"]),
+                              nsdId=[], nsdVersion=[],
+                              nsdInfoId=[], nsdDesigner=[],
+                              nsdName=[], nsdInvariantId=[],
+                              vnfPkgIds=[], pnfdInfoIds=[],
+                              nestedNsdInfoIds=[], nsdOnboardingState=[],
+                              nsdOperationalState=[], nsdUsageState=[],
+                              pnfdId=[], pnfdVersion=[], pnfdProvider=[],
+                              pnfdName=[], pnfdInvariantId=[],
+                              pnfdOnboardingState=[], pnfdUsageState=[],
+                              links=json.dumps(self.links)).save()
+        response = self.client.delete('/api/nsd/v1/'
+                                      'subscriptions/' + self.subscription_id,
+                                      format='json')
+        self.assertEqual(status.HTTP_204_NO_CONTENT, response.status_code)
+
+    def test_ndsm_delete_subscription_failure(self):
+        response = self.client.delete('/api/nsd/v1/'
+                                      'subscriptions/' + self.subscription_id,
+                                      format='json')
+        self.assertEqual(status.HTTP_404_NOT_FOUND, response.status_code)
+
+    def test_nsdm_delete_subscription_failure_bad_request(self):
+        response = self.client.delete("/api/nsd/v1/subscriptions/123",
+                                      format='json')
+        self.assertEqual(status.HTTP_400_BAD_REQUEST, response.status_code)
+
+    @mock.patch.object(NsdmSubscription, 'delete_single_subscription')
+    def test_nsdmsubscription_delete_when_catch_exception(self, mock_create):
+        mock_create.side_effect = TypeError("Unicode type")
+        response = self.client.delete('/api/nsd/v1/'
+                                      'subscriptions/' + self.subscription_id,
+                                      format='json')
+        self.assertEqual(response.status_code,
+                         status.HTTP_500_INTERNAL_SERVER_ERROR)
index 32da865..ed1cbd9 100644 (file)
@@ -171,7 +171,18 @@ def nsd_subscription_rc(request):
         status.HTTP_500_INTERNAL_SERVER_ERROR: ProblemDetailsSerializer()
     }
 )
-@api_view(http_method_names=['GET'])
+@swagger_auto_schema(
+    method='DELETE',
+    operation_description="Delete subscription for Nsd Management",
+    request_body=no_body,
+    responses={
+        status.HTTP_204_NO_CONTENT: 'No_Content',
+        status.HTTP_400_BAD_REQUEST: ProblemDetailsSerializer(),
+        status.HTTP_404_NOT_FOUND: ProblemDetailsSerializer(),
+        status.HTTP_500_INTERNAL_SERVER_ERROR: ProblemDetailsSerializer()
+    }
+)
+@api_view(http_method_names=['GET', 'DELETE'])
 def nsd_subscription_rd(request, **kwargs):
     subscription_id = kwargs.get("subscriptionId")
     if request.method == 'GET':
@@ -211,3 +222,38 @@ def nsd_subscription_rd(request, **kwargs):
                     % subscription_id)
             return Response(data=problem_details_serializer.data,
                             status=status.HTTP_500_INTERNAL_SERVER_ERROR)
+    elif request.method == 'DELETE':
+        try:
+            title = 'Delete Subscription Failed!'
+            validate_data({'subscription_id': subscription_id},
+                          NsdmSubscriptionIdSerializer)
+            subscription_data = NsdmSubscription().\
+                delete_single_subscription(subscription_id)
+            return Response(status=status.HTTP_204_NO_CONTENT)
+        except NsdmBadRequestException as e:
+            logger.error(e.message)
+            problem_details_serializer = \
+                get_problem_details_serializer(title,
+                                               status.HTTP_400_BAD_REQUEST,
+                                               e.message)
+            return Response(data=problem_details_serializer.data,
+                            status=status.HTTP_400_BAD_REQUEST)
+        except ResourceNotFoundException as e:
+            logger.error(e.message)
+            problem_details_serializer = \
+                get_problem_details_serializer(title,
+                                               status.HTTP_404_NOT_FOUND,
+                                               e.message)
+            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(
+                    title,
+                    status.HTTP_500_INTERNAL_SERVER_ERROR,
+                    "Delete of subscription(%s) Failed"
+                    % subscription_id)
+            return Response(data=problem_details_serializer.data,
+                            status=status.HTTP_500_INTERNAL_SERVER_ERROR)