Files
Iris/__tests__/test_handlers.py

99 lines
3.1 KiB
Python
Raw Permalink Normal View History

import pytest
from asyncio import Future
from unittest import mock
import tornado.testing
import tornado.web
from tornado.httpclient import HTTPResponse
from tornado.escape import json_decode
from mopidy_iris import handlers
from mopidy_iris import core
from mopidy_iris.mem import iris
2020-02-06 10:12:28 +13:00
def async_return_helper(result):
f = Future()
f.set_result(result)
return f
class HttpHandlerTest(tornado.testing.AsyncHTTPTestCase):
@pytest.fixture(autouse=True)
def inject_fixtures(self, caplog):
self._caplog = caplog
2020-02-06 10:12:28 +13:00
def get_app(self):
http_handler = handlers.HttpHandler
# http_handler.handle_result = mock.Mock()
# self.handler_mock = http_handler.handle_result
return tornado.web.Application(
2020-11-30 21:20:51 +13:00
[
(
r"/(.*)",
http_handler,
{
"core": None,
"config": {},
},
)
]
)
def test_get_method(self):
with mock.patch("time.time", return_value=100):
response = self.fetch("/test", method="GET")
assert 200 == response.code
result = json_decode(response.body)
assert "2.0" == result["jsonrpc"]
assert "test" == result["method"]
assert 100 == result["id"]
assert "Running test... please wait" == result["result"]["message"]
def test_get_method_headers(self):
response = self.fetch("/test", method="GET")
assert response.headers["Access-Control-Allow-Origin"] == "*"
assert "Origin" in response.headers["Access-Control-Allow-Headers"]
def test_get_unknown_method_is_error(self):
response = self.fetch("/baz", method="GET")
assert 400 == response.code
error = json_decode(response.body)["error"]
assert "Method baz does not exist" == error["message"]
@mock.patch.object(handlers, "iris")
def test_get_method_called(self, iris_mock):
iris_mock.foo = mock.Mock()
response = self.fetch("/foo", method="GET")
2020-02-06 10:12:28 +13:00
iris_mock.foo.assert_called_once()
assert 200 == response.code
@mock.patch.object(handlers, "iris")
def test_get_method_any_exception_handled(self, iris_mock):
iris_mock.foo = mock.Mock(side_effect=Exception("bar"))
response = self.fetch("/foo", method="GET")
2020-02-06 10:12:28 +13:00
iris_mock.foo.assert_called_once()
assert 200 == response.code
assert "bar" in self._caplog.text
@mock.patch.object(handlers.iris, "do_fetch")
def test_get_method_with_fetch(self, fetch_mock):
2020-02-06 10:12:28 +13:00
iris.config = {"spotify": {"client_id": 123, "client_secret": 456}}
result = mock.Mock(spec=HTTPResponse, body='{"expires_in":88}')
fetch_mock.return_value = async_return_helper(result)
response = self.fetch("/refresh_spotify_token", method="GET")
assert 200 == response.code
assert len(response.body) > 0
result = json_decode(response.body)
assert "refresh_spotify_token" == result["method"]
assert 88 == result["result"]["spotify_token"]["expires_in"]