fix bug for ETSI Catalog Manager needs to raise 303 exception for the same callback_u...
[modeling/etsicatalog.git] / catalog / packages / tests / test_nsdm_subscription.py
index 98ad9c1..4e14ca1 100644 (file)
@@ -19,21 +19,21 @@ import os
 from django.test import TestCase
 from rest_framework.test import APIClient
 from rest_framework import status
+from requests.auth import HTTPBasicAuth
 
 from catalog.packages.biz.nsdm_subscription import NsdmSubscription
 from catalog.pub.database.models import NsdmSubscriptionModel
-from catalog.packages.biz.notificationsutil import NotificationsUtil, prepare_nsd_notification, prepare_pnfd_notification
+from catalog.packages.biz.notificationsutil import NsdNotifications, PnfNotifications
 from catalog.packages import const
 from catalog.pub.config import config as pub_config
 import catalog.pub.utils.timeutil
 from catalog.packages.tests.const import nsd_data
 from catalog.pub.database.models import NSPackageModel, VnfPackageModel, PnfPackageModel
-from catalog.pub.config.config import CATALOG_ROOT_PATH
+from catalog.pub.config.config import CATALOG_ROOT_PATH, MSB_SERVICE_IP, MSB_SERVICE_PORT
 from catalog.pub.utils import toscaparser
 
 
 class TestNsdmSubscription(TestCase):
-
     def setUp(self):
         self.client = APIClient()
         NsdmSubscriptionModel.objects.all().delete()
@@ -148,7 +148,7 @@ class TestNsdmSubscription(TestCase):
                          response.data["callbackUri"])
 
     @mock.patch("requests.get")
-    def test_nsdm_duplicate_subscription(self, mock_requests):
+    def test_nsdm_duplicate_filter_or_callbackuri_subscription(self, mock_requests):
         mock_requests.return_value.status_code = 204
         mock_requests.get.return_value.status_code = 204
         response = self.client.post("/api/nsd/v1/subscriptions",
@@ -156,15 +156,33 @@ class TestNsdmSubscription(TestCase):
         self.assertEqual(201, response.status_code)
         self.assertEqual(self.subscription["callbackUri"],
                          response.data["callbackUri"])
-        expected_data = {
-            'status': 303,
-            'detail': 'Already Subscription exists with'
-                      ' the same callbackUri and filter'
-        }
+        newsub1 = self.subscription
+        newsub1["callbackUri"] = "http://newcallbackuri.com"
+        response = self.client.post("/api/nsd/v1/subscriptions",
+                                    data=newsub1, format='json')
+        self.assertEqual(201, response.status_code)
+        newsub2 = self.subscription
+        newsub2["filter"]["nsdName"] = ["aaa"]
+        response = self.client.post("/api/nsd/v1/subscriptions",
+                                    data=newsub2, format='json')
+        self.assertEqual(201, response.status_code)
+
+    @mock.patch("requests.get")
+    def test_nsdm_duplicate_callbackuri_filter_subscription(self, mock_requests):
+        mock_requests.return_value.status_code = 204
+        mock_requests.get.return_value.status_code = 204
+        response = self.client.post("/api/nsd/v1/subscriptions",
+                                    data=self.subscription, format='json')
+        self.assertEqual(201, response.status_code)
+        self.assertEqual(self.subscription["callbackUri"],
+                         response.data["callbackUri"])
+        subscriptionid = response.data["id"]
         response = self.client.post("/api/nsd/v1/subscriptions",
                                     data=self.subscription, format='json')
         self.assertEqual(303, response.status_code)
-        self.assertEqual(expected_data, response.data)
+        redirect_addr = "https://%s:%s/%s" % (MSB_SERVICE_IP, MSB_SERVICE_PORT,
+                                              os.path.join(const.NSDM_SUBSCRIPTION_ROOT_URI, subscriptionid))
+        self.assertEqual(redirect_addr, response["Location"])
 
     @mock.patch("requests.get")
     def test_nsdm_bad_request(self, mock_requests):
@@ -465,7 +483,7 @@ class TestNsdmSubscription(TestCase):
         expected_data = {
             "status": 404,
             "detail": "Subscription(" + self.subscription_id + ") "
-            "doesn't exists"
+                                                               "doesn't exist"
         }
         response = self.client.get('/api/nsd/v1/'
                                    'subscriptions/' + self.subscription_id,
@@ -476,7 +494,7 @@ class TestNsdmSubscription(TestCase):
     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)
+        self.assertEqual(status.HTTP_404_NOT_FOUND, response.status_code)
 
     @mock.patch.object(NsdmSubscription, 'query_single_subscription')
     def test_nsdmsubscription_getsingle_when_catch_exception(
@@ -518,7 +536,7 @@ class TestNsdmSubscription(TestCase):
     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)
+        self.assertEqual(status.HTTP_404_NOT_FOUND, response.status_code)
 
     @mock.patch.object(NsdmSubscription, 'delete_single_subscription')
     def test_nsdmsubscription_delete_when_catch_exception(self, mock_create):
@@ -607,8 +625,6 @@ class TestNsdmSubscription(TestCase):
             'timeStamp': "nowtime()",
             'nsdInfoId': "d0ea5ec3-0b98-438a-9bea-488230cff174",
             'nsdId': "b632bddc-bccd-4180-bd8d-4e8a9578eff7",
-            'onboardingFailureDetails': None,
-            'nsdOperationalState': None,
             "subscriptionId": "1111",
             '_links': {
                 'subscription': {
@@ -624,7 +640,12 @@ class TestNsdmSubscription(TestCase):
                 }
             }
         }
-        mock_requests_post.assert_called_with(expect_callbackuri, data=expect_notification, headers={'Connection': 'close'})
+        mock_requests_post.assert_called_with(expect_callbackuri, data=expect_notification,
+                                              auth=HTTPBasicAuth("username", "password"),
+                                              headers={'Connection': 'close',
+                                                       'content-type': 'application/json',
+                                                       'accept': 'application/json'},
+                                              verify=False)
 
 
 class NotificationTest(TestCase):
@@ -647,14 +668,11 @@ class NotificationTest(TestCase):
     def test_nsdpkg_notify(self, mock_nowtime, mock_uuid, mock_requests_post):
         mock_nowtime.return_value = "nowtime()"
         mock_uuid.return_value = "1111"
-        notification_content = prepare_nsd_notification("nsdinfoid1", "nsdid1",
-                                                        const.NSD_NOTIFICATION_TYPE.NSD_ONBOARDING_FAILURE,
-                                                        "NSD(nsdid1) already exists.", operational_state=None)
-        filters = {
-            'nsdInfoId': 'nsdInfoId',
-            'nsdId': 'nsdId',
-        }
-        NotificationsUtil().send_notification(notification_content, filters, False)
+        notify = NsdNotifications(const.NSD_NOTIFICATION_TYPE.NSD_ONBOARDING_FAILURE,
+                                  nsd_info_id="nsdinfoid1",
+                                  nsd_id="nsdid1",
+                                  failure_details="NSD(nsdid1) already exists.", operational_state=None)
+        notify.send_notification()
         expect_callbackuri = "http://127.0.0.1/self"
         expect_notification = {
             'id': "1111",
@@ -663,7 +681,6 @@ class NotificationTest(TestCase):
             'nsdInfoId': "nsdinfoid1",
             'nsdId': "nsdid1",
             'onboardingFailureDetails': "NSD(nsdid1) already exists.",
-            'nsdOperationalState': None,
             "subscriptionId": "1",
             '_links': {
                 'subscription': {
@@ -679,7 +696,13 @@ class NotificationTest(TestCase):
                 }
             }
         }
-        mock_requests_post.assert_called_with(expect_callbackuri, data=expect_notification, headers={'Connection': 'close'})
+        mock_requests_post.assert_called_with(expect_callbackuri,
+                                              data=expect_notification,
+                                              headers={'Connection': 'close',
+                                                       'content-type': 'application/json',
+                                                       'accept': 'application/json'},
+                                              verify=False
+                                              )
 
     @mock.patch("requests.post")
     @mock.patch("uuid.uuid4")
@@ -687,13 +710,11 @@ class NotificationTest(TestCase):
     def test_pnfpkg_notify(self, mock_nowtime, mock_uuid, mock_requests_post):
         mock_nowtime.return_value = "nowtime()"
         mock_uuid.return_value = "1111"
-        notification_content = prepare_pnfd_notification("pnfdInfoIds1", 'pnfdId1',
-                                                         const.NSD_NOTIFICATION_TYPE.PNFD_ONBOARDING)
-        filters = {
-            'pnfdId': 'pnfdId',
-            'pnfdInfoIds': 'pnfdInfoIds',
-        }
-        NotificationsUtil().send_notification(notification_content, filters, False)
+        notify = PnfNotifications(const.NSD_NOTIFICATION_TYPE.PNFD_ONBOARDING,
+                                  pnfd_info_id="pnfdInfoIds1",
+                                  pnfd_id='pnfdId1',
+                                  failure_details=None)
+        notify.send_notification()
         expect_callbackuri = "http://127.0.0.1/self"
         expect_notification = {
             'id': "1111",
@@ -701,7 +722,6 @@ class NotificationTest(TestCase):
             'timeStamp': "nowtime()",
             'pnfdInfoIds': "pnfdInfoIds1",
             'pnfdId': "pnfdId1",
-            'onboardingFailureDetails': None,
             "subscriptionId": "1",
             '_links': {
                 'subscription': {
@@ -718,4 +738,7 @@ class NotificationTest(TestCase):
             }
         }
         mock_requests_post.assert_called_with(expect_callbackuri, data=expect_notification,
-                                              headers={'Connection': 'close'})
+                                              headers={'Connection': 'close',
+                                                       'content-type': 'application/json',
+                                                       'accept': 'application/json'},
+                                              verify=False)