Our custom ordering system
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

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