Skip to content

Commit d07c3d1

Browse files
author
Ofego Edafe
committed
MAPI-81 code correctly refactored
1 parent 0ce918e commit d07c3d1

File tree

4 files changed

+132
-147
lines changed

4 files changed

+132
-147
lines changed

tests/auth_manager_test.py

Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
# -*- coding: utf-8 -*-
2+
3+
"""
4+
message_media_messages
5+
6+
This file was automatically generated for MessageMedia by APIMATIC v2.0 ( https://apimatic.io ).
7+
"""
8+
9+
import hashlib
10+
import unittest
11+
from datetime import datetime
12+
from time import mktime
13+
from wsgiref.handlers import format_date_time
14+
from tests.test_util import TestUtility
15+
from message_media_messages.http.auth.auth_manager import AuthManager
16+
from message_media_messages.configuration import Configuration
17+
from message_media_messages.api_helper import APIHelper
18+
from message_media_messages.models.send_messages_request import SendMessagesRequest
19+
from message_media_messages.models.message import Message
20+
from message_media_messages.models.format_enum import FormatEnum
21+
import urllib3
22+
23+
24+
class AuthManagerTests(unittest.TestCase):
25+
26+
body = SendMessagesRequest()
27+
body.messages = []
28+
body.messages.append(Message())
29+
body.messages[0].content = 'My tests message'
30+
body.messages[0].destination_number = '{}'
31+
body.messages[0].format = FormatEnum.SMS
32+
33+
_url_path = '/v1/messages'
34+
_query_builder = Configuration.base_uri
35+
_query_builder += _url_path
36+
_query_url = APIHelper.clean_url(_query_builder)
37+
38+
_headers = {
39+
'accept': 'application/json',
40+
'Content-Type': 'application/json; charset=utf-8',
41+
}
42+
43+
m = hashlib.md5()
44+
m.update(bytes(APIHelper.json_serialize(body), 'utf-8'))
45+
content_hash = m.hexdigest()
46+
47+
now = datetime.now()
48+
stamp = mktime(now.timetuple())
49+
date_header = format_date_time(stamp)
50+
51+
content_signature = "x-Content-MD5: {}\n".format(content_hash)
52+
get_content_signature = ""
53+
54+
def test_post_request_authorization_header_values_are_appropriate(self):
55+
date_header, expected_algorithm, expected_username, http, query_url, request_header = self.header_setup()
56+
body = APIHelper.json_serialize(self.body)
57+
content_signature = self.content_signature
58+
expected_header = ' headers="date x-Content-MD5 request-line"'
59+
expected_signature = TestUtility.create_signature(date_header, content_signature, query_url, 'POST', True)
60+
61+
_request = http.request(
62+
'POST',
63+
query_url,
64+
body=body,
65+
headers=request_header
66+
)
67+
68+
AuthManager.apply_hmac_auth(_request, query_url, body)
69+
username, algorithm, header, signature = _request.getheader('Authorization').split(',')
70+
71+
self.assert_cases(algorithm, expected_algorithm, expected_header, expected_signature, expected_username,
72+
header, signature, username)
73+
74+
def test_md5_content_hash_equivalent_to_body(self):
75+
http = urllib3.PoolManager()
76+
body = APIHelper.json_serialize(self.body)
77+
md5 = self.content_hash
78+
query_url = self._query_url
79+
request_header = self._headers
80+
81+
_request = http.request(
82+
'POST',
83+
query_url,
84+
body=body,
85+
headers=request_header
86+
)
87+
88+
AuthManager.apply_hmac_auth(_request, query_url, body)
89+
requestMD5 = _request.getheader('x-Content-MD5')
90+
assert md5 == requestMD5
91+
92+
def test_get_request_authorization_header_values_are_appropriate(self):
93+
date_header, expected_algorithm, expected_username, http, query_url, request_header = self.header_setup()
94+
content_signature = ""
95+
expected_header = ' headers="date request-line"'
96+
expected_signature = TestUtility.create_signature(date_header, content_signature, query_url, 'GET', True)
97+
98+
_request = http.request(
99+
'GET',
100+
query_url,
101+
headers=request_header
102+
)
103+
104+
AuthManager.apply_hmac_auth(_request, query_url)
105+
username, algorithm, header, signature = _request.getheader('Authorization').split(',')
106+
107+
self.assert_cases(algorithm, expected_algorithm, expected_header, expected_signature, expected_username,
108+
header, signature, username)
109+
110+
def header_setup(self):
111+
http = urllib3.PoolManager()
112+
date_header = self.date_header
113+
request_header = self._headers
114+
query_url = self._query_url
115+
expected_username = 'hmac username="{}"'
116+
expected_algorithm = ' algorithm="hmac-sha1"'
117+
return date_header, expected_algorithm, expected_username, http, query_url, request_header
118+
119+
def assert_cases(self, algorithm, expected_algorithm, expected_header, expected_signature, expected_username,
120+
header, signature, username):
121+
with self.subTest():
122+
self.assertEqual(expected_username, username)
123+
self.assertEqual(expected_header, header)
124+
self.assertEqual(expected_algorithm, algorithm)
125+
self.assertEqual(expected_signature, signature)

tests/authorization_test.py

Lines changed: 0 additions & 137 deletions
This file was deleted.

tests/messages_test.py renamed to tests/messages_controller_test.py

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,7 @@
1212
from message_media_messages.message_media_messages_client import MessageMediaMessagesClient
1313

1414

15-
16-
class TestMessages(unittest.TestCase):
15+
class MessagesControllerTest(unittest.TestCase):
1716

1817
# Testing successful message to MM endpoint
1918
def test_successful_message_to_endpoint(self):
@@ -24,13 +23,12 @@ def test_successful_message_to_endpoint(self):
2423
messages_controller = client.messages
2524

2625
result = messages_controller.send_messages(body)
27-
2826
self.assertIsNotNone(result)
2927

3028
# Testing unsupported request raises exception
3129
def test_unsuccessful_request_raises_exception(self):
32-
auth_user_name = 'Rubbish'
33-
auth_password = 'Random'
30+
auth_user_name = '{}'
31+
auth_password = '{}'
3432
use_hmac_authentication = True
3533
body = TestUtility.create_body()
3634

@@ -43,8 +41,8 @@ def test_unsuccessful_request_raises_exception(self):
4341
self.assertIsNotNone(raised_exception)
4442

4543
# Testing get message endpoint
46-
def test_get_message_endpoint(self):
47-
actual_id = 'Enter Your Id'
44+
def test_successful_get_message_to_endpoint(self):
45+
actual_id = '{}'
4846
use_hmac_authentication = True
4947

5048
client = MessageMediaMessagesClient(use_hmac_authentication)

tests/test_util.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
import hashlib
1010
import hmac
1111

12-
from message_media_messages.api_helper import APIHelper
1312
from message_media_messages.configuration import Configuration
1413
from message_media_messages.models.format_enum import FormatEnum
1514
from message_media_messages.models.message import Message
@@ -21,7 +20,7 @@ class TestUtility(object):
2120
@staticmethod
2221
def create_signature(date, content_signature, url, request_type, wrapper=None):
2322
signature = ' signature="'
24-
signing_string = "date: {}\n{}{} {} HTTP/1.1" \
23+
signing_string = "date: {}\n{}{} {} HTTP/1.1"\
2524
.format(date, content_signature, request_type, url)
2625

2726
hashed = hmac.new(Configuration.hmac_auth_password.encode("utf-8"),
@@ -38,7 +37,7 @@ def create_body():
3837
body.messages = []
3938
body.messages.append(Message())
4039
body.messages[0].content = 'My tests message'
41-
body.messages[0].destination_number = '+61452549798'
40+
body.messages[0].destination_number = '{}'
4241
body.messages[0].format = FormatEnum.SMS
4342

4443
return body

0 commit comments

Comments
 (0)