[device_traker/upc] New UPC connect box platform (#5100)

This commit is contained in:
Pascal Vizeli 2017-01-09 17:08:37 +01:00 committed by Johann Kellerman
parent 3ed7c1c6ad
commit bb02fc707c
4 changed files with 467 additions and 7 deletions

View file

@ -14,6 +14,7 @@ class AiohttpClientMocker:
def __init__(self):
"""Initialize the request mocker."""
self._mocks = []
self._cookies = {}
self.mock_calls = []
def request(self, method, url, *,
@ -25,7 +26,8 @@ class AiohttpClientMocker:
json=None,
params=None,
headers=None,
exc=None):
exc=None,
cookies=None):
"""Mock a request."""
if json:
text = _json.dumps(json)
@ -35,11 +37,11 @@ class AiohttpClientMocker:
content = b''
if params:
url = str(yarl.URL(url).with_query(params))
self.exc = exc
if cookies:
self._cookies.update(cookies)
self._mocks.append(AiohttpClientMockResponse(
method, url, status, content))
method, url, status, content, exc))
def get(self, *args, **kwargs):
"""Register a mock get request."""
@ -66,6 +68,16 @@ class AiohttpClientMocker:
"""Number of requests made."""
return len(self.mock_calls)
def filter_cookies(self, host):
"""Return hosts cookies."""
return self._cookies
def clear_requests(self):
"""Reset mock calls."""
self._mocks.clear()
self._cookies.clear()
self.mock_calls.clear()
@asyncio.coroutine
def match_request(self, method, url, *, data=None, auth=None, params=None,
headers=None): # pylint: disable=unused-variable
@ -74,8 +86,8 @@ class AiohttpClientMocker:
if response.match_request(method, url, params):
self.mock_calls.append((method, url, data))
if self.exc:
raise self.exc
if response.exc:
raise response.exc
return response
assert False, "No mock registered for {} {} {}".format(method.upper(),
@ -85,7 +97,7 @@ class AiohttpClientMocker:
class AiohttpClientMockResponse:
"""Mock Aiohttp client response."""
def __init__(self, method, url, status, response):
def __init__(self, method, url, status, response, exc=None):
"""Initialize a fake response."""
self.method = method
self._url = url
@ -93,6 +105,7 @@ class AiohttpClientMockResponse:
else urlparse(url.lower()))
self.status = status
self.response = response
self.exc = exc
def match_request(self, method, url, params=None):
"""Test if response answers request."""
@ -155,4 +168,6 @@ def mock_aiohttp_client():
setattr(instance, method,
functools.partial(mocker.match_request, method))
instance.cookie_jar.filter_cookies = mocker.filter_cookies
yield mocker