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 OrderItem, OrderCategory, 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 OrderItem, OrderCategory, OrderStatus, LogEntry 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