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
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>" |
|
)
|
|
|