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.
 
 
 
 
 
 

257 lines
6.1 KiB

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) == "<ordr3.models.OrderItem id=A>"
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 == "<ordr3.models.LogEntry(1, critical, me, yesterday)>"
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) == "<ordr3.models.Vendor term=A name=B>"
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) == "<ordr3.models.User id=A, username=B>"
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 == (
"<ordr3.models.PasswordResetToken token=A, user_id=B, "
"valid_until=2020-04-02 10:11:12>"
)