tests: add tests for all queries
This commit is contained in:
@@ -0,0 +1,100 @@
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
from worblehat.models import (
|
||||
Bookcase,
|
||||
BookcaseItem,
|
||||
BookcaseItemBorrowingQueue,
|
||||
BookcaseShelf,
|
||||
MediaType,
|
||||
)
|
||||
from worblehat.queries.borrowing_queue import (
|
||||
is_in_borrowing_queue,
|
||||
list_all_queue_items,
|
||||
list_pending_queue_items_for_item,
|
||||
)
|
||||
|
||||
|
||||
def _make_bookcase_item(
|
||||
sql_session: Session,
|
||||
name: str = "Some Book",
|
||||
isbn: str = "1234567890",
|
||||
) -> BookcaseItem:
|
||||
"""Creates a BookcaseItem along with the MediaType/Bookcase/BookcaseShelf it needs."""
|
||||
media_type = MediaType(name=f"Media type for {name}")
|
||||
bookcase = Bookcase(name=f"Bookcase for {name}")
|
||||
shelf = BookcaseShelf(row=0, column=0, bookcase=bookcase)
|
||||
sql_session.add_all([media_type, bookcase, shelf])
|
||||
sql_session.flush()
|
||||
|
||||
item = BookcaseItem(name, isbn)
|
||||
item.media_type = media_type
|
||||
item.shelf = shelf
|
||||
sql_session.add(item)
|
||||
sql_session.flush()
|
||||
return item
|
||||
|
||||
|
||||
def test_list_all_queue_items_orders_by_entered_queue_time(sql_session: Session) -> None:
|
||||
item = _make_bookcase_item(sql_session)
|
||||
later = BookcaseItemBorrowingQueue("alice", item)
|
||||
later.entered_queue_time = datetime.now() + timedelta(hours=1)
|
||||
sooner = BookcaseItemBorrowingQueue("bob", item)
|
||||
sooner.entered_queue_time = datetime.now()
|
||||
sql_session.add_all([later, sooner])
|
||||
sql_session.flush()
|
||||
|
||||
result = list_all_queue_items(sql_session)
|
||||
|
||||
assert result == [sooner, later]
|
||||
|
||||
|
||||
def test_is_in_borrowing_queue_true_when_present(sql_session: Session) -> None:
|
||||
item = _make_bookcase_item(sql_session)
|
||||
sql_session.add(BookcaseItemBorrowingQueue("alice", item))
|
||||
sql_session.flush()
|
||||
|
||||
assert is_in_borrowing_queue(sql_session, "alice", item) is True
|
||||
|
||||
|
||||
def test_is_in_borrowing_queue_false_for_other_user(sql_session: Session) -> None:
|
||||
item = _make_bookcase_item(sql_session)
|
||||
sql_session.add(BookcaseItemBorrowingQueue("alice", item))
|
||||
sql_session.flush()
|
||||
|
||||
assert is_in_borrowing_queue(sql_session, "bob", item) is False
|
||||
|
||||
|
||||
def test_is_in_borrowing_queue_false_when_empty(sql_session: Session) -> None:
|
||||
item = _make_bookcase_item(sql_session)
|
||||
sql_session.add(item)
|
||||
sql_session.flush()
|
||||
|
||||
assert is_in_borrowing_queue(sql_session, "alice", item) is False
|
||||
|
||||
|
||||
def test_list_pending_queue_items_for_item_excludes_available_items(sql_session: Session) -> None:
|
||||
item = _make_bookcase_item(sql_session)
|
||||
pending = BookcaseItemBorrowingQueue("alice", item)
|
||||
became_available = BookcaseItemBorrowingQueue("bob", item)
|
||||
became_available.item_became_available_time = datetime.now()
|
||||
sql_session.add_all([pending, became_available])
|
||||
sql_session.flush()
|
||||
|
||||
result = list_pending_queue_items_for_item(sql_session, item)
|
||||
|
||||
assert result == [pending]
|
||||
|
||||
|
||||
def test_list_pending_queue_items_for_item_scopes_to_item(sql_session: Session) -> None:
|
||||
item_a = _make_bookcase_item(sql_session, name="Book A", isbn="1111111111")
|
||||
item_b = _make_bookcase_item(sql_session, name="Book B", isbn="2222222222")
|
||||
queue_item_a = BookcaseItemBorrowingQueue("alice", item_a)
|
||||
queue_item_b = BookcaseItemBorrowingQueue("bob", item_b)
|
||||
sql_session.add_all([queue_item_a, queue_item_b])
|
||||
sql_session.flush()
|
||||
|
||||
result = list_pending_queue_items_for_item(sql_session, item_a)
|
||||
|
||||
assert result == [queue_item_a]
|
||||
Reference in New Issue
Block a user