|
|
|
@ -10,6 +10,7 @@ class FakeOrderRepository(AbstractOrderRepository):
@@ -10,6 +10,7 @@ class FakeOrderRepository(AbstractOrderRepository):
|
|
|
|
|
|
|
|
|
|
def __init__(self, session): |
|
|
|
|
self._orders = set() |
|
|
|
|
self._users = set() |
|
|
|
|
|
|
|
|
|
def add_order(self, order): |
|
|
|
|
""" add an order to the datastore """ |
|
|
|
@ -22,6 +23,38 @@ class FakeOrderRepository(AbstractOrderRepository):
@@ -22,6 +23,38 @@ class FakeOrderRepository(AbstractOrderRepository):
|
|
|
|
|
def list_orders(self): |
|
|
|
|
return sorted(self._orders, reverse=True, key=lambda x: x.created_on) |
|
|
|
|
|
|
|
|
|
def add_user(self, user): |
|
|
|
|
""" add a user to the datastore """ |
|
|
|
|
self._users.add(user) |
|
|
|
|
|
|
|
|
|
def get_user(self, reference): |
|
|
|
|
""" retrieve a user from the datastore """ |
|
|
|
|
return next(o for o in self._users if o.id == reference) |
|
|
|
|
|
|
|
|
|
def get_user_by_username(self, reference): |
|
|
|
|
""" retrieve a user from the datastore by username """ |
|
|
|
|
return next(o for o in self._users if o.username == reference) |
|
|
|
|
|
|
|
|
|
def get_user_by_email(self, reference): |
|
|
|
|
""" retrieve a user from the datastore by email """ |
|
|
|
|
return next(o for o in self._users if o.email == reference) |
|
|
|
|
|
|
|
|
|
def list_users(self): |
|
|
|
|
return sorted(self._users, key=lambda x: x.username) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class FakePasslibContext: |
|
|
|
|
def __init__(self, needs_update): |
|
|
|
|
self.needs_update = needs_update |
|
|
|
|
|
|
|
|
|
def verify_and_update(self, password, hash): |
|
|
|
|
if password != hash: |
|
|
|
|
return False, None |
|
|
|
|
if self.needs_update: |
|
|
|
|
return True, password[::-1] |
|
|
|
|
else: |
|
|
|
|
return True, None |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@pytest.fixture |
|
|
|
|
def prefilled_repo(): |
|
|
|
@ -97,3 +130,35 @@ def test_create_log_entry(prefilled_repo):
@@ -97,3 +130,35 @@ def test_create_log_entry(prefilled_repo):
|
|
|
|
|
assert order.status == log_entry.status |
|
|
|
|
assert order.created_by == log_entry.by |
|
|
|
|
assert order.created_on == log_entry.date |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@pytest.mark.parametrize( |
|
|
|
|
"update,new_hash", [(False, "1234"), (True, "4321"),], # noqa: E231 |
|
|
|
|
) |
|
|
|
|
def test_verify_username_and_password_valid(update, new_hash): |
|
|
|
|
from ordr3.models import User, UserRole |
|
|
|
|
from ordr3.services import verify_credentials |
|
|
|
|
|
|
|
|
|
user = User(2, "Me", "Jane", "Doe", "jane.doe", "1234", UserRole.USER) |
|
|
|
|
repo = FakeOrderRepository(None) |
|
|
|
|
repo.add_user(user) |
|
|
|
|
pass_ctx = FakePasslibContext(update) |
|
|
|
|
|
|
|
|
|
user = verify_credentials(repo, pass_ctx, user.username, user.password) |
|
|
|
|
assert user is not None |
|
|
|
|
assert user.password == new_hash |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@pytest.mark.parametrize( |
|
|
|
|
"name,pwd", [("You", "1234"), ("Me", "abcd"),], # noqa: E231 |
|
|
|
|
) |
|
|
|
|
def test_verify_username_and_password_invalid(name, pwd): |
|
|
|
|
from ordr3.models import User, UserRole |
|
|
|
|
from ordr3.services import verify_credentials |
|
|
|
|
|
|
|
|
|
user = User(2, "Me", "Jane", "Doe", "jane.doe", "1234", UserRole.USER) |
|
|
|
|
repo = FakeOrderRepository(None) |
|
|
|
|
repo.add_user(user) |
|
|
|
|
pass_ctx = FakePasslibContext(False) |
|
|
|
|
|
|
|
|
|
assert verify_credentials(repo, pass_ctx, name, pwd) is None |
|
|
|
|