1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
|
import json
import responses
from unittest.mock import patch
from urllib.parse import urlencode
from nuheat import NuHeat, NuHeatThermostat, config
from . import NuTestCase, load_fixture
class TestNuHeat(NuTestCase):
# pylint: disable=protected-access
def test_init_with_session(self):
existing_session_id = "passed-session"
api = NuHeat("test@example.com", "secure-password", existing_session_id)
self.assertEqual(api._session_id, existing_session_id)
api.authenticate()
def test_repr(self):
email = "test@example.com"
api = NuHeat(email, "secure-password")
self.assertEqual(str(api), "<NuHeat username='{}'>".format(email))
@responses.activate
def test_successful_authentication(self):
response_data = load_fixture("auth_success.json")
responses.add(
responses.POST,
config.AUTH_URL,
status=200,
body=json.dumps(response_data),
content_type="application/json"
)
api = NuHeat("test@example.com", "secure-password")
self.assertIsNone(api._session_id)
api.authenticate()
self.assertEqual(api._session_id, response_data.get("SessionId"))
@responses.activate
def test_authentication_error(self):
response_data = load_fixture("auth_error.json")
responses.add(
responses.POST,
config.AUTH_URL,
status=200,
body=json.dumps(response_data),
content_type="application/json"
)
api = NuHeat("test@example.com", "secure-password")
with self.assertRaises(Exception) as _:
api.authenticate()
self.assertIsNone(api._session_id)
def test_authentication_failure(self):
# TODO: 401, expired session
pass
@patch("nuheat.NuHeatThermostat.get_data")
def test_get_thermostat(self, _):
api = NuHeat(None, None)
serial_number = "serial-123"
thermostat = api.get_thermostat(serial_number)
self.assertTrue(isinstance(thermostat, NuHeatThermostat))
@responses.activate
def test_get_request(self):
url = "http://www.example.com/api"
params = dict(test="param")
responses.add(
responses.GET,
url,
status=200,
content_type="application/json"
)
api = NuHeat(None, None)
response = api.request(url, method="GET", params=params)
self.assertEqual(response.status_code, 200)
self.assertUrlsEqual(response.request.url, "{}?{}".format(url, urlencode(params)))
request_headers = response.request.headers
self.assertEqual(request_headers["Origin"], config.REQUEST_HEADERS["Origin"])
self.assertEqual(request_headers["Content-Type"], config.REQUEST_HEADERS["Content-Type"])
@responses.activate
def test_post_request(self):
url = "http://www.example.com/api"
params = dict(test="param")
data = dict(test="data")
responses.add(
responses.POST,
url,
status=200,
content_type="application/json"
)
api = NuHeat(None, None)
response = api.request(url, method="POST", data=data, params=params)
self.assertEqual(response.status_code, 200)
self.assertUrlsEqual(response.request.url, "{}?{}".format(url, urlencode(params)))
self.assertEqual(response.request.body, urlencode(data))
request_headers = response.request.headers
self.assertEqual(request_headers["Origin"], config.REQUEST_HEADERS["Origin"])
self.assertEqual(request_headers["Content-Type"], config.REQUEST_HEADERS["Content-Type"])
|