1 # Copyright (c) 2019, CMCC Technologies Co., Ltd.
3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at
7 # http://www.apache.org/licenses/LICENSE-2.0
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 # See the License for the specific language governing permissions and
13 # limitations under the License.
16 from django.test import TestCase
17 from rest_framework.test import APIClient
21 class TestSubscription(TestCase):
23 self.client = APIClient()
28 @mock.patch("requests.get")
29 @mock.patch.object(uuid, 'uuid4')
30 def test_subscribe_notification_simple(self, mock_uuid4, mock_requests):
31 temp_uuid = "99442b18-a5c7-11e8-998c-bf1755941f13"
32 dummy_subscription = {
33 "callbackUri": "http://test.com"
35 mock_requests.return_value.status_code = 204
36 mock_requests.get.status_code = 204
37 mock_uuid4.return_value = temp_uuid
38 response = self.client.post("/api/nslcm/v1/subscriptions", data=dummy_subscription, format='json')
39 self.assertEqual(201, response.status_code)
40 self.assertEqual(dummy_subscription["callbackUri"], response.data["callbackUri"])
41 self.assertEqual(temp_uuid, response.data["id"])
43 @mock.patch("requests.get")
44 @mock.patch.object(uuid, 'uuid4')
45 def test_subscribe_notification(self, mock_uuid4, mock_requests):
46 temp_uuid = "99442b18-a5c7-11e8-998c-bf1755941f13"
47 dummy_subscription = {
48 "callbackUri": "http://aurl.com",
50 "authType": ["BASIC"],
52 "username": "username",
53 "password": "password"
57 "notificationTypes": ["NsLcmOperationOccurrenceNotification"],
66 mock_requests.return_value.status_code = 204
67 mock_requests.get.return_value.status_code = 204
68 mock_uuid4.return_value = temp_uuid
69 response = self.client.post("/api/nslcm/v1/subscriptions", data=dummy_subscription, format='json')
70 self.assertEqual(201, response.status_code)
71 self.assertEqual(dummy_subscription["callbackUri"], response.data["callbackUri"])
72 self.assertEqual(temp_uuid, response.data["id"])
74 @mock.patch("requests.get")
75 def test_invalid_auth_subscription(self, mock_requests):
76 dummy_subscription = {
77 "callbackUri": "http://aurl.com",
79 "authType": ["OAUTH2_CLIENT_CREDENTIALS"],
81 "username": "username",
82 "password": "password"
86 "notificationTypes": ["NsLcmOperationOccurrenceNotification"],
95 mock_requests.return_value.status_code = 204
96 mock_requests.get.return_value.status_code = 204
100 'detail': 'Auth type should be BASIC'
102 response = self.client.post("/api/nslcm/v1/subscriptions", data=dummy_subscription, format='json')
103 self.assertEqual(500, response.status_code)
104 self.assertEqual(expected_data, response.data)
106 @mock.patch("requests.get")
107 def test_invalid_notification_type(self, mock_requests):
108 dummy_subscription = {
109 "callbackUri": "http://aurl.com",
111 "notificationTypes": ["NsIdentifierDeletionNotification"],
120 mock_requests.return_value.status_code = 204
121 mock_requests.get.return_value.status_code = 204
124 'detail': 'If you are setting operationTypes,then notificationTypes must be '
125 'NsLcmOperationOccurrenceNotification'
127 response = self.client.post("/api/nslcm/v1/subscriptions", data=dummy_subscription, format='json')
128 self.assertEqual(500, response.status_code)
129 self.assertEqual(expected_data, response.data)
131 @mock.patch("requests.get")
132 @mock.patch.object(uuid, 'uuid4')
133 def test_duplicate_subscription(self, mock_uuid4, mock_requests):
134 temp_uuid = str(uuid.uuid4())
135 dummy_subscription = {
136 "callbackUri": "http://aurl.com",
138 "notificationTypes": ["NsLcmOperationOccurrenceNotification"],
147 mock_requests.return_value.status_code = 204
148 mock_requests.get.return_value.status_code = 204
149 mock_uuid4.return_value = temp_uuid
150 response = self.client.post("/api/nslcm/v1/subscriptions", data=dummy_subscription, format='json')
151 self.assertEqual(201, response.status_code)
152 self.assertEqual(dummy_subscription["callbackUri"], response.data["callbackUri"])
153 self.assertEqual(temp_uuid, response.data["id"])
154 response = self.client.post("/api/nslcm/v1/subscriptions", data=dummy_subscription, format='json')
155 self.assertEqual(303, response.status_code)
158 'detail': 'Already Subscription exists with the same callbackUri and filter'
160 self.assertEqual(expected_data, response.data)