forked from platypush/platypush
Refactored tests to use pytest with fixtures instead of unittest.TestCase
This commit is contained in:
parent
73e16fa6b1
commit
49ad3261f1
10 changed files with 257 additions and 278 deletions
tests
93
tests/utils.py
Normal file
93
tests/utils.py
Normal file
|
@ -0,0 +1,93 @@
|
|||
import os
|
||||
import requests
|
||||
from typing import Optional
|
||||
|
||||
from platypush.message import Message
|
||||
from platypush.message.response import Response
|
||||
from platypush.utils import set_timeout, clear_timeout
|
||||
|
||||
from . import test_dir
|
||||
|
||||
# Default configuration folder for tests
|
||||
conf_dir = os.path.join(test_dir, 'etc')
|
||||
|
||||
# Default configuration file for tests
|
||||
config_file = os.path.join(conf_dir, 'config_test.yaml')
|
||||
|
||||
# Default request timeout in seconds
|
||||
request_timeout = 10
|
||||
|
||||
# Default test user
|
||||
test_user = 'platypush'
|
||||
|
||||
# Default test password
|
||||
test_pass = 'test'
|
||||
|
||||
# Base URL
|
||||
base_url = 'http://localhost:8123'
|
||||
|
||||
|
||||
def set_base_url(url: str):
|
||||
global base_url
|
||||
base_url = url
|
||||
|
||||
|
||||
class TimeoutException(RuntimeError):
|
||||
"""
|
||||
Exception raised in case of timeout.
|
||||
"""
|
||||
def __init__(self, msg: str = 'Timeout'):
|
||||
self.msg = msg
|
||||
|
||||
|
||||
def send_request(action: str, timeout: Optional[float] = None, args: Optional[dict] = None,
|
||||
parse_json: bool = True, authenticate: bool = True, **kwargs):
|
||||
if not timeout:
|
||||
timeout = request_timeout
|
||||
if not args:
|
||||
args = {}
|
||||
|
||||
auth = (test_user, test_pass) if authenticate else kwargs.pop('auth', ())
|
||||
set_timeout(seconds=timeout, on_timeout=on_timeout('Receiver response timed out'))
|
||||
response = requests.post(
|
||||
'{}/execute'.format(base_url),
|
||||
auth=auth,
|
||||
json={
|
||||
'type': 'request',
|
||||
'action': action,
|
||||
'args': args,
|
||||
}, **kwargs
|
||||
)
|
||||
|
||||
clear_timeout()
|
||||
|
||||
if parse_json:
|
||||
response = parse_response(response)
|
||||
return response
|
||||
|
||||
|
||||
def register_user(username: Optional[str] = None, password: Optional[str] = None):
|
||||
if not username:
|
||||
username = test_user
|
||||
password = test_pass
|
||||
|
||||
set_timeout(seconds=request_timeout, on_timeout=on_timeout('User registration response timed out'))
|
||||
response = requests.post('{base_url}/register?redirect={base_url}/'.format(base_url=base_url), data={
|
||||
'username': username,
|
||||
'password': password,
|
||||
'confirm_password': password,
|
||||
})
|
||||
|
||||
clear_timeout()
|
||||
return response
|
||||
|
||||
|
||||
def on_timeout(msg):
|
||||
def _f(): raise TimeoutException(msg)
|
||||
return _f
|
||||
|
||||
|
||||
def parse_response(response):
|
||||
response = Message.build(response.json())
|
||||
assert isinstance(response, Response), 'Expected Response type, got {}'.format(response.__class__.__name__)
|
||||
return response
|
Loading…
Add table
Add a link
Reference in a new issue