Fix bug for status code when subscription post request body invalid what client inputs.
[vfc/gvnfm/vnflcm.git] / lcm / lcm / nf / tests / test_subscribe_notification.py
1 # Copyright (C) 2018 Verizon. All Rights Reserved
2 #
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
6 #
7 #         http://www.apache.org/licenses/LICENSE-2.0
8 #
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.
14
15 import mock
16 from django.test import TestCase
17 from rest_framework.test import APIClient
18 import uuid
19
20
21 class TestSubscription(TestCase):
22     def setUp(self):
23         self.client = APIClient()
24
25     def tearDown(self):
26         pass
27
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://aurl.com"
34         }
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/vnflcm/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"])
42
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",
49             "authentication": {
50                 "authType": ["BASIC"],
51                 "paramsBasic": {
52                     "username": "username",
53                     "password": "password"
54                 }
55             },
56             "filter": {
57                 "notificationTypes": ["VnfLcmOperationOccurrenceNotification"],
58                 "operationTypes": [
59                     "INSTANTIATE"
60                 ],
61                 "operationStates": [
62                     "STARTING"
63                 ],
64             }
65         }
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/vnflcm/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"])
73
74     @mock.patch("requests.get")
75     def test_invalid_auth_subscription(self, mock_requests):
76         dummy_subscription = {
77             "callbackUri": "http://aurl.com",
78             "authentication": {
79                 "authType": ["OAUTH2_CLIENT_CREDENTIALS"],
80                 "paramsBasic": {
81                     "username": "username",
82                     "password": "password"
83                 }
84             },
85             "filter": {
86                 "notificationTypes": ["VnfLcmOperationOccurrenceNotification"],
87                 "operationTypes": [
88                     "INSTANTIATE"
89                 ],
90                 "operationStates": [
91                     "STARTING"
92                 ],
93             }
94         }
95         mock_requests.return_value.status_code = 204
96         mock_requests.get.return_value.status_code = 204
97         expected_data = {
98             'detail': 'Auth type should be BASIC',
99             'status': 500
100         }
101         response = self.client.post("/api/vnflcm/v1/subscriptions", data=dummy_subscription, format='json')
102         self.assertEqual(500, response.status_code)
103         self.assertEqual(expected_data, response.data)
104
105     @mock.patch("requests.get")
106     def test_invalid_notification_type(self, mock_requests):
107         dummy_subscription = {
108             "callbackUri": "http://aurl.com",
109             "filter": {
110                 "notificationTypes": ["VnfIdentifierDeletionNotification"],
111                 "operationTypes": [
112                     "INSTANTIATE"
113                 ],
114                 "operationStates": [
115                     "STARTING"
116                 ],
117             }
118         }
119         mock_requests.return_value.status_code = 204
120         mock_requests.get.return_value.status_code = 204
121         expected_data = {
122             'detail': 'If you are setting operationTypes,then ' +
123             'notificationTypes must be VnfLcmOperationOccurrenceNotification',
124             'status': 500
125         }
126         response = self.client.post("/api/vnflcm/v1/subscriptions", data=dummy_subscription, format='json')
127         self.assertEqual(500, response.status_code)
128         self.assertEqual(expected_data, response.data)
129
130     @mock.patch("requests.get")
131     @mock.patch.object(uuid, 'uuid4')
132     def test_duplicate_subscription(self, mock_uuid4, mock_requests):
133         temp_uuid = str(uuid.uuid4())
134         dummy_subscription = {
135             "callbackUri": "http://aurl.com",
136             "filter": {
137                 "notificationTypes": ["VnfLcmOperationOccurrenceNotification"],
138                 "operationTypes": [
139                     "INSTANTIATE"
140                 ],
141                 "operationStates": [
142                     "STARTING"
143                 ]
144             }
145         }
146         mock_requests.return_value.status_code = 204
147         mock_requests.get.return_value.status_code = 204
148         mock_uuid4.return_value = temp_uuid
149         response = self.client.post("/api/vnflcm/v1/subscriptions", data=dummy_subscription, format='json')
150         self.assertEqual(201, response.status_code)
151         self.assertEqual(dummy_subscription["callbackUri"], response.data["callbackUri"])
152         self.assertEqual(temp_uuid, response.data["id"])
153         response = self.client.post("/api/vnflcm/v1/subscriptions", data=dummy_subscription, format='json')
154         self.assertEqual(303, response.status_code)
155
156     @mock.patch("requests.get")
157     @mock.patch.object(uuid, 'uuid4')
158     def test_badreq_subscription(self, mock_uuid4, mock_requests):
159         temp_uuid = str(uuid.uuid4())
160         miss_callbackUri_subscription = {
161             "filter": {
162                 "notificationTypes": ["VnfLcmOperationOccurrenceNotification"],
163                 "operationTypes": [
164                     "INSTANTIATE"
165                 ],
166                 "operationStates": [
167                     "STARTING"
168                 ]
169             }
170         }
171         mock_requests.return_value.status_code = 204
172         mock_requests.get.return_value.status_code = 204
173         mock_uuid4.return_value = temp_uuid
174         response = self.client.post("/api/vnflcm/v1/subscriptions", data=miss_callbackUri_subscription, format='json')
175         self.assertEqual(400, response.status_code)
176         self.assertEqual({'callbackUri': ['This field is required.']}, response.data['detail'])
177         # self.assertEqual(temp_uuid, response.data["id"])
178         # response = self.client.post("/api/vnflcm/v1/subscriptions", data=dummy_subscription, format='json')
179         # self.assertEqual(303, response.status_code)