Add Query Single NsdManagementSubscription API 00/82000/3
authorSirisha Gopigiri <sirisha.gopigiri@verizon.com>
Tue, 12 Mar 2019 05:52:16 +0000 (11:22 +0530)
committerSirisha Gopigiri <sirisha.gopigiri@verizon.com>
Tue, 12 Mar 2019 06:28:09 +0000 (11:58 +0530)
Add SOL 005 Query Single NsdManagementSubscription API

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

index 6c5372f..a94717a 100644 (file)
@@ -46,6 +46,17 @@ class NsdmSubscription:
     def __init__(self):
         pass
 
+    def query_single_subscription(self, subscription_id):
+        logger.debug("Start Query Subscription... ")
+        subscription = \
+            NsdmSubscriptionModel.objects.filter(
+                subscriptionid=subscription_id)
+        if not subscription.exists():
+            raise ResourceNotFoundException(
+                "Subscription(%s) doesn't exists" % subscription_id)
+        logger.debug("Subscription found... ")
+        return self.fill_resp_data(subscription[0])
+
     def query_multi_subscriptions(self, query_params):
         self.params = query_params
         query_data = {}
index b31a4b4..104ec76 100644 (file)
@@ -434,3 +434,53 @@ class TestNsdmSubscription(TestCase):
         response = self.client.get('/api/nsd/v1/subscriptions', format='json')
         self.assertEqual(response.status_code,
                          status.HTTP_500_INTERNAL_SERVER_ERROR)
+
+    def test_nsdm_get_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.get('/api/nsd/v1/'
+                                   'subscriptions/' + self.subscription_id,
+                                   format='json')
+        self.assertEqual(status.HTTP_200_OK, response.status_code)
+        self.assertEqual(self.test_subscription, response.data)
+
+    def test_nsdm_get_subscription_failure(self):
+        expected_data = {
+            "title": "Query Subscription Failed!",
+            "status": 404,
+            "detail": "Subscription(" + self.subscription_id + ") "
+            "doesn't exists"
+        }
+        response = self.client.get('/api/nsd/v1/'
+                                   'subscriptions/' + self.subscription_id,
+                                   format='json')
+        self.assertEqual(status.HTTP_404_NOT_FOUND, response.status_code)
+        self.assertEqual(expected_data, response.data)
+
+    def test_nsdm_get_subscription_failure_bad_request(self):
+        response = self.client.get("/api/nsd/v1/subscriptions/123",
+                                   format='json')
+        self.assertEqual(status.HTTP_400_BAD_REQUEST, response.status_code)
+
+    @mock.patch.object(NsdmSubscription, 'query_single_subscription')
+    def test_nsdmsubscription_getsingle_when_catch_exception(
+            self, mock_create):
+        mock_create.side_effect = TypeError("Unicode type")
+        response = self.client.get('/api/nsd/v1/'
+                                   'subscriptions/' + self.subscription_id,
+                                   format='json')
+        self.assertEqual(response.status_code,
+                         status.HTTP_500_INTERNAL_SERVER_ERROR)
index 0add1d5..296f051 100755 (executable)
@@ -37,7 +37,7 @@ urlpatterns = [
     url(r'^api/nsd/v1/ns_descriptors/(?P<nsdInfoId>[0-9a-zA-Z\-\_]+)$', ns_descriptor_views.ns_info_rd, name='ns_info_rd'),
     url(r'^api/nsd/v1/ns_descriptors/(?P<nsdInfoId>[0-9a-zA-Z\-\_]+)/nsd_content$', ns_descriptor_views.nsd_content_ru, name='nsd_content_ru'),
     url(r'^api/nsd/v1/subscriptions$', nsdm_subscription_views.nsd_subscription_rc, name='nsd_subscription_rc'),
-    url(r'^api/nsd/v1/subscriptions/(?P<subscriptionId>[0-9a-zA-Z\-\_]+)$', nsdm_subscription_views.nsd_subscription_rd, name='nsd_subscription_rd'),
+    url(r'^api/nsd/v1/subscriptions/(?P<subscriptionId>[0-9a-zA-Z\-\_]+)$', nsdm_subscription_views.nsd_subscription_rd, name='nsd_subscription_rd'),
 
     #  ETSI SOL005 PNFD
     url(r'^api/nsd/v1/pnf_descriptors$', pnf_descriptor_views.pnf_descriptors_rc, name='pnf_descriptors_rc'),
index 9b4abe5..32da865 100644 (file)
@@ -24,6 +24,7 @@ from catalog.packages.serializers.nsdm_filter_data \
     import NsdmNotificationsFilter
 from catalog.packages.serializers.nsdm_subscription import \
     NsdmSubscriptionsSerializer, \
+    NsdmSubscriptionIdSerializer, \
     NsdmSubscriptionSerializer, \
     NsdmSubscriptionRequestSerializer
 from catalog.packages.serializers.response \
@@ -157,3 +158,56 @@ def nsd_subscription_rc(request):
                     traceback.format_exc())
             return Response(data=problem_details_serializer.data,
                             status=status.HTTP_500_INTERNAL_SERVER_ERROR)
+
+
+@swagger_auto_schema(
+    method='GET',
+    operation_description="Query subscriptions for Nsd Management",
+    request_body=no_body,
+    responses={
+        status.HTTP_200_OK: NsdmSubscriptionSerializer(),
+        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'])
+def nsd_subscription_rd(request, **kwargs):
+    subscription_id = kwargs.get("subscriptionId")
+    if request.method == 'GET':
+        try:
+            title = 'Query Subscription Failed!'
+            validate_data({'subscription_id': subscription_id},
+                          NsdmSubscriptionIdSerializer)
+            subscription_data = \
+                NsdmSubscription().query_single_subscription(subscription_id)
+            subscription = validate_data(subscription_data,
+                                         NsdmSubscriptionSerializer)
+            return Response(data=subscription.data, status=status.HTTP_200_OK)
+        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,
+                    "Query of subscriptioni(%s) Failed"
+                    % subscription_id)
+            return Response(data=problem_details_serializer.data,
+                            status=status.HTTP_500_INTERNAL_SERVER_ERROR)