import pytest def test_orderitem_init(): from ordr3.models import OrderItem order = OrderItem(*list("ABCDEFGHIJKLMN")) assert order.id == "A" assert order.cas_description == "B" assert order.catalog_nr == "C" assert order.vendor == "D" assert order.category == "E" assert order.package_size == "F" assert order.unit_price == "G" assert order.amount == "H" assert order.currency == "I" assert order.account == "J" assert order.comment == "K" assert order.created_on == "L" assert order.created_by == "M" assert order.status == "N" def test_orderitem_repr(): from ordr3.models import OrderItem order = OrderItem(*list("ABCDEFGHIJK")) assert repr(order) == "" def test_orderitem_total_price(): from ordr3.models import OrderItem order = OrderItem(*list("ABCDEF"), 3, 4) assert order.total_price == 12 def test_orderitem_add_to_log_empty_log(): from ordr3.models import LogEntry, OrderItem order = OrderItem(*list("ABCDEFGHIJK")) log_entry = LogEntry(order, "critical", "me", "yesterday") order.add_to_log(log_entry) assert order.created_on == log_entry.date assert order.created_by == log_entry.by assert order.status == log_entry.status def test_orderitem_add_to_log_non_empty_log(): from ordr3.models import LogEntry, OrderItem order = OrderItem(*list("ABCDEFGHIJK")) log_entry_1 = LogEntry(order, "critical", "me", "yesterday") log_entry_2 = LogEntry(order, "normal", "you", "today") order.add_to_log(log_entry_1) order.add_to_log(log_entry_2) assert order.created_on == log_entry_1.date assert order.created_by == log_entry_1.by assert order.status == log_entry_2.status @pytest.mark.parametrize( "status,expected", [ ("OPEN", False), ("APPROVAL", True), ("ORDERED", True), ("COMPLETED", True), ("HOLD", False), ], ) def test_orderitem_in_process(status, expected): from ordr3.models import OrderItem, OrderStatus order = OrderItem(*list("ABCDEFGHIJK")) order.status = OrderStatus[status] assert order.in_process == expected def test_LogEntry_init(): from ordr3.models import LogEntry log_entry = LogEntry(1, "critical", "me", "yesterday") assert log_entry.order_id == 1 assert log_entry.status == "critical" assert log_entry.by == "me" assert log_entry.date == "yesterday" def test_LogEntry_repr(): from ordr3.models import LogEntry log_entry = LogEntry(1, "critical", "me", "yesterday") result = repr(log_entry) assert result == "" def test_vendor_init(): from ordr3.models import Vendor vendor = Vendor("A", "B") assert vendor.term == "A" assert vendor.name == "B" def test_vendor_repr(): from ordr3.models import Vendor vendor = Vendor("A", "B") assert repr(vendor) == "" def test_user_init(): from ordr3.models import User user = User(*list("ABCDEFG")) assert user.id == "A" assert user.username == "B" assert user.first_name == "C" assert user.last_name == "D" assert user.email == "E" assert user.password == "F" # noqa: S105 assert user.role == "G" def test_user_principal(): from ordr3.models import User user = User(*list("ABCDEFG")) assert user.principal == "user:B" @pytest.mark.parametrize( "role_str,roles", [ ("NEW", ["role:new"]), ("USER", ["role:user"]), ("PURCHASER", ["role:user", "role:purchaser"]), ("ADMIN", ["role:user", "role:purchaser", "role:admin"]), ("INACTIVE", ["role:inactive"]), ], ) def test_user_principals(role_str, roles): from ordr3.models import User, UserRole user = User(*list("ABCDEF"), UserRole[role_str]) assert user.principals == ["user:B"] + roles @pytest.mark.parametrize( "role_str,expected", [ ("NEW", False), ("USER", True), ("PURCHASER", True), ("ADMIN", True), ("INACTIVE", False), ], ) def test_user_is_active(role_str, expected): from ordr3.models import User, UserRole user = User(*list("ABCDEF"), UserRole[role_str]) assert user.is_active == expected def test_user_repr(): from ordr3.models import User user = User(*list("ABCDEFG")) assert repr(user) == "" def test_user_role_rincipal(): from ordr3.models import UserRole assert UserRole.INACTIVE.principal == "role:inactive" def test_password_reset_token_init(): from ordr3.models import PasswordResetToken token = PasswordResetToken(*list("ABC")) assert token.token == "A" # noqa: S105 assert token.user_id == "B" assert token.valid_until == "C" def test_password_reset_token_init_auto_validity(): from datetime import datetime, timedelta from ordr3.models import PasswordResetToken token = PasswordResetToken(*list("AB")) assert token.token == "A" # noqa: S105 assert token.user_id == "B" assert token.valid_until - datetime.utcnow() <= timedelta(hours=1) def test_password_reset_token_is_valid_ok(): from ordr3.models import PasswordResetToken token = PasswordResetToken(*list("ABC")) assert not token.is_valid def test_password_reset_token_is_valid_not_ok(): from datetime import datetime, timedelta from ordr3.models import PasswordResetToken invalid_time = datetime.utcnow() - timedelta(hours=1) token = PasswordResetToken(*list("AB"), invalid_time) assert not token.is_valid def test_password_reset_token_is_valid_invalid_time_format(): from ordr3.models import PasswordResetToken token = PasswordResetToken(*list("ABC")) assert not token.is_valid def test_password_reset_token_repr(): from datetime import datetime from ordr3.models import PasswordResetToken valid_until = datetime(2020, 4, 2, 10, 11, 12) token = PasswordResetToken(*list("AB"), valid_until) result = repr(token) assert result == ( "" )