moira-client
133 строки · 4.0 Кб
1import unittest2try:3from unittest.mock import patch4except ImportError:5from mock import patch6
7import requests8from moira_client.client import Client9from moira_client.client import InvalidJSONError10
11TEST_API_URL = 'http://test/api/url'12TEST_HEADERS = {13'X-Webauth-User': 'login',14'Content-Type': 'application/json',15'User-Agent': 'Python Moira Client'16}17
18
19class FakeResponse:20
21@property22def content(self):23return 'not json'24
25def raise_for_status(self):26pass27
28def json(self):29raise ValueError('invalid json')30
31
32class ClientTest(unittest.TestCase):33
34def test_get(self):35
36def get(url, params, **kwargs):37pass38
39with patch.object(requests, 'get', side_effects=get) as mock_get:40test_path = 'test_path'41
42client = Client(TEST_API_URL, TEST_HEADERS)43client.get(test_path)44
45self.assertTrue(mock_get.called)46expected_url_call = TEST_API_URL + '/' + test_path47mock_get.assert_called_with(expected_url_call, headers=TEST_HEADERS, auth=None)48
49def test_put(self):50
51def put(url, data, **kwargs):52pass53
54with patch.object(requests, 'put', side_effects=put) as mock_put:55test_path = 'test_path'56test_data = {'test': 'test'}57
58client = Client(TEST_API_URL, TEST_HEADERS)59client.put(test_path, data=test_data)60
61self.assertTrue(mock_put.called)62expected_url_call = TEST_API_URL + '/' + test_path63mock_put.assert_called_with(expected_url_call, data=test_data, headers=TEST_HEADERS, auth=None)64
65def test_delete(self):66
67def delete(url, **kwargs):68pass69
70with patch.object(requests, 'delete', side_effects=delete) as mock_delete:71test_path = 'test_path'72
73client = Client(TEST_API_URL, TEST_HEADERS)74client.delete(test_path)75
76self.assertTrue(mock_delete.called)77expected_url_call = TEST_API_URL + '/' + test_path78mock_delete.assert_called_with(expected_url_call, headers=TEST_HEADERS, auth=None)79
80def test_get_invalid_response(self):81
82def get(url, params, **kwargs):83return FakeResponse()84
85response = FakeResponse()86
87with patch.object(requests, 'get', side_effects=get, return_value=response) as mock_get:88test_path = 'test_path'89
90client = Client(TEST_API_URL, TEST_HEADERS)91with self.assertRaises(InvalidJSONError):92client.get(test_path)93
94self.assertTrue(mock_get.called)95expected_url_call = TEST_API_URL + '/' + test_path96mock_get.assert_called_with(expected_url_call, headers=TEST_HEADERS, auth=None)97
98def test_put_invalid_response(self):99test_data = {'test': 'test'}100
101def put(url, data, **kwargs):102return FakeResponse()103
104response = FakeResponse()105
106with patch.object(requests, 'put', side_effects=put, return_value=response) as mock_put:107test_path = 'test_path'108
109client = Client(TEST_API_URL, TEST_HEADERS)110with self.assertRaises(InvalidJSONError):111client.put(test_path, data=test_data)112
113self.assertTrue(mock_put.called)114expected_url_call = TEST_API_URL + '/' + test_path115mock_put.assert_called_with(expected_url_call, data=test_data, headers=TEST_HEADERS, auth=None)116
117def test_delete_invalid_response(self):118
119def delete(url, **kwargs):120return FakeResponse()121
122response = FakeResponse()123
124with patch.object(requests, 'delete', side_effects=delete, return_value=response) as mock_delete:125test_path = 'test_path'126
127client = Client(TEST_API_URL, TEST_HEADERS)128with self.assertRaises(InvalidJSONError):129client.delete(test_path)130
131self.assertTrue(mock_delete.called)132expected_url_call = TEST_API_URL + '/' + test_path133mock_delete.assert_called_with(expected_url_call, headers=TEST_HEADERS, auth=None)134