This commit is contained in:
Cayo Puigdefabregas 2022-03-17 11:50:57 +01:00
parent ccc28435db
commit ec99ad22b5
3 changed files with 107 additions and 14 deletions

View file

@ -1,5 +1,7 @@
from inspect import isclass
from typing import Dict, Iterable, Type, Union
from flask.testing import FlaskClient
from flask_wtf.csrf import generate_csrf
from ereuse_utils.test import JSON, Res
from teal.client import Client as TealClient, Query, Status
@ -156,3 +158,61 @@ class UserClient(Client):
response = super().login(self.email, self.password)
self.user = response[0]
return response
class UserClientFlask:
def __init__(self, application,
email: str,
password: str,
response_wrapper=None,
use_cookies=True,
follow_redirects=True):
self.email = email
self.password = password
self.follow_redirects = follow_redirects
self.user = None
self.client = FlaskClient(application, use_cookies=use_cookies)
self.client.get('/login/')
data = {
'email': email,
'password': password,
'csrf_token': generate_csrf(),
}
body, status, headers = self.client.post('/login/', data=data, follow_redirects=True)
self.headers = headers
body = next(body).decode("utf-8")
assert "Unassgined" in body
def get(self,
uri='',
data=None,
follow_redirects=True,
**kw):
body, status, headers = self.client.get(
uri,
data=data,
follow_redirects=follow_redirects,
headers=self.headers
)
body = next(body).decode("utf-8")
return (body, status)
def post(self,
uri='',
data=None,
follow_redirects=True,
**kw):
import pdb; pdb.set_trace()
body, status, headers = self.client.post(
uri,
data=data,
follow_redirects=follow_redirects,
headers=self.headers
)
body = next(body).decode("utf-8")
return (body, status)

View file

@ -13,7 +13,7 @@ from decouple import config
from psycopg2 import IntegrityError
from sqlalchemy.exc import ProgrammingError
from ereuse_devicehub.client import Client, UserClient
from ereuse_devicehub.client import Client, UserClient, UserClientFlask
from ereuse_devicehub.config import DevicehubConfig
from ereuse_devicehub.db import db
from ereuse_devicehub.devicehub import Devicehub
@ -136,6 +136,31 @@ def user2(app: Devicehub) -> UserClient:
return client
@pytest.fixture()
def user3(app: Devicehub) -> UserClientFlask:
"""Gets a client with a logged-in dummy user."""
with app.app_context():
password = 'foo'
user = create_user(password=password)
client = UserClientFlask(
app, user.email, password
)
return client
@pytest.fixture()
def user4(app: Devicehub) -> UserClient:
"""Gets a client with a logged-in dummy user."""
with app.app_context():
password = 'foo'
email = 'foo2@foo.com'
user = create_user(email=email, password=password)
client = UserClientFlask(
app, user.email, password
)
return client
def create_user(email='foo@foo.com', password='foo') -> User:
user = User(email=email, password=password)
user.individuals.add(Person(name='Timmy'))

View file

@ -2,7 +2,7 @@ import pytest
from flask.testing import FlaskClient
from flask_wtf.csrf import generate_csrf
from ereuse_devicehub.client import UserClient
from ereuse_devicehub.client import UserClient, UserClientFlask
from ereuse_devicehub.devicehub import Devicehub
from tests import conftest
@ -35,19 +35,27 @@ def test_login(user: UserClient, app: Devicehub):
@pytest.mark.mvp
@pytest.mark.usefixtures(conftest.app_context.__name__)
def test_inventory(user: UserClient, app: Devicehub):
client = FlaskClient(app, use_cookies=True)
client.get('/login/')
def test_inventory(user3: UserClientFlask):
body, status = user3.get('/inventory/device/')
assert status == '200 OK'
assert "Unassgined" in body
@pytest.mark.mvp
@pytest.mark.usefixtures(conftest.app_context.__name__)
def test_add_lot(user3: UserClientFlask):
body, status = user3.get('/inventory/lot/add/')
assert status == '200 OK'
assert "Add a new lot" in body
data = {
'email': user.email,
'password': 'foo',
'remember': False,
'name': 'lot1',
'csrf_token': generate_csrf(),
}
body, status, headers = client.post('/login/', data=data, follow_redirects=True)
body, status, headers = client.get('/inventory/device/', headers=headers)
body = next(body).decode("utf-8")
assert status == '200 OK'
# import pdb; pdb.set_trace()
assert "Unassgined" in body
body, status = user3.post('/inventory/lot/add/', data=data)
assert status == '200 OK'
assert "lot1" in body