You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
145 lines
3.8 KiB
145 lines
3.8 KiB
from datetime import datetime |
|
|
|
import pytest |
|
|
|
|
|
@pytest.fixture |
|
def order_sql(): |
|
return """ |
|
INSERT INTO orders ( |
|
id, cas_description, catalog_nr, vendor, category, package_size, |
|
unit_price, currency, amount, account, comment, created_on, |
|
created_by, status |
|
) VALUES ( |
|
1, "Ethanol", "1-23", "VWR", "SOLVENT", "5 l", |
|
20, "EUR", 2, "DFG", "urgent", "2020-02-04 15:14:13.000000", |
|
"me", "OPEN" |
|
), ( |
|
2, "Gloves", "12-3", "Carl Roth", "DISPOSABLE", "100 St.", |
|
40, "USD", 5, "BMBF", "no comment", "2020-02-03 15:14:13.000000", |
|
"you", "APPROVAL" |
|
) |
|
""" |
|
|
|
|
|
def test_order_mapper(session, order_sql): |
|
from ordr3.models import OrderCategory, OrderItem, OrderStatus |
|
|
|
session.execute(order_sql) |
|
expected = [ |
|
OrderItem( |
|
1, |
|
"Ethanol", |
|
"1-23", |
|
"VWR", |
|
OrderCategory.SOLVENT, |
|
"5 l", |
|
20.0, |
|
2, |
|
"EUR", |
|
"DFG", |
|
"urgent", |
|
datetime(2020, 2, 4, 15, 14, 13), |
|
"me", |
|
OrderStatus.OPEN, |
|
), |
|
OrderItem( |
|
2, |
|
"Gloves", |
|
"12-3", |
|
"Carl Roth", |
|
OrderCategory.DISPOSABLE, |
|
"100 St.", |
|
40.0, |
|
5, |
|
"USD", |
|
"BMBF", |
|
"no comment", |
|
datetime(2020, 2, 3, 15, 14, 13), |
|
"you", |
|
OrderStatus.APPROVAL, |
|
), |
|
] |
|
|
|
assert session.query(OrderItem).all() == expected |
|
|
|
|
|
def test_log_mapper(session, order_sql): |
|
from ordr3.models import LogEntry, OrderItem, OrderStatus |
|
|
|
session.execute(order_sql) |
|
session.execute( |
|
""" |
|
INSERT INTO logs |
|
(order_id, status, by, date) |
|
VALUES |
|
(1, "OPEN", "ME", "2020-02-05 15:14:13.000000"), |
|
(1, "COMPLETED", "YOU", "2020-02-07 15:14:13.000000"), |
|
(1, "ORDERED", "ME", "2020-02-06 15:14:13.000000") |
|
""" |
|
) |
|
expected = [ |
|
LogEntry(1, OrderStatus.OPEN, "ME", datetime(2020, 2, 5, 15, 14, 13)), |
|
LogEntry( |
|
1, OrderStatus.COMPLETED, "YOU", datetime(2020, 2, 7, 15, 14, 13) |
|
), |
|
LogEntry( |
|
1, OrderStatus.ORDERED, "ME", datetime(2020, 2, 6, 15, 14, 13) |
|
), |
|
] |
|
|
|
assert session.query(LogEntry).all() == expected |
|
|
|
order = session.query(OrderItem).first() |
|
assert order.log == sorted(expected, key=lambda x: x.date) |
|
|
|
LogEntry = session.query(LogEntry).first() |
|
assert LogEntry.order.id == order.id |
|
|
|
|
|
def test_user_mapper(session): |
|
from ordr3.models import User, UserRole |
|
|
|
session.execute( |
|
""" |
|
INSERT INTO users |
|
(id, username, first_name, last_name, email, password, role) |
|
VALUES |
|
(1, "Me", "Jane", "Doe", "jane.doe", "1234", "USER"), |
|
(2, "You", "Jim", "Smith", "jim.smith", "abcd", "ADMIN") |
|
""" |
|
) |
|
|
|
expected = [ |
|
User(1, "Me", "Jane", "Doe", "jane.doe", "1234", UserRole.USER), |
|
User(2, "You", "Jim", "Smith", "jim.smith", "abcd", UserRole.ADMIN), |
|
] |
|
|
|
assert session.query(User).all() == expected |
|
|
|
|
|
def test_adapter_behaviour(session): |
|
from ordr3.models import LogEntry, OrderCategory, OrderItem, OrderStatus |
|
|
|
order = OrderItem( |
|
None, |
|
"Ethanol", |
|
"1-23", |
|
"VWR", |
|
OrderCategory.SOLVENT, |
|
"5 l", |
|
20.0, |
|
2, |
|
"EUR", |
|
) |
|
session.add(order) |
|
|
|
log_entry = LogEntry(order.id, OrderStatus.OPEN, "ME") |
|
order.add_to_log(log_entry) |
|
|
|
from_db = session.query(OrderItem).first() |
|
|
|
assert len(from_db.log) == 1 |
|
assert from_db.created_by == "ME" |
|
assert from_db.created_on == from_db.log[0].date |
|
assert from_db.status == OrderStatus.OPEN
|
|
|