Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion tests/conftest.py
Original file line number Diff line number Diff line change
@@ -1,2 +1,5 @@
def pytest_addoption(parser) -> None: # type: ignore[no-untyped-def]
import pytest


def pytest_addoption(parser: pytest.Parser) -> None:
parser.addoption('--postgres-version', action='store', default='latest')
125 changes: 125 additions & 0 deletions tests/v1/test_unit/test_enums_and_exceptions.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
from uuid import uuid4

import pytest

from notora.v1.enums.base import OrderByDirections
from notora.v1.exceptions.common import AlreadyExistsError, FKNotFoundError, NotFoundError

_ENTITY_ID_INT = 42


def test_order_by_directions_asc_value() -> None:
assert OrderByDirections.ASC.value == 'asc'


def test_order_by_directions_desc_value() -> None:
assert OrderByDirections.DESC.value == 'desc'


def test_order_by_directions_is_str_enum() -> None:
assert isinstance(OrderByDirections.ASC, str)
assert isinstance(OrderByDirections.DESC, str)


def test_order_by_directions_can_be_used_as_string() -> None:
assert f'{OrderByDirections.ASC}' == 'asc'
assert f'{OrderByDirections.DESC}' == 'desc'


def test_fk_not_found_error_stores_fk_name() -> None:
err = FKNotFoundError('msg', fk_name='user_id_fkey', table_name='post')
assert err.fk_name == 'user_id_fkey'


def test_fk_not_found_error_stores_table_name() -> None:
err = FKNotFoundError('msg', fk_name='user_id_fkey', table_name='post')
assert err.table_name == 'post'


def test_fk_not_found_error_message_is_accessible() -> None:
err = FKNotFoundError('Related object not found.', fk_name='fk', table_name='tbl')
assert str(err) == 'Related object not found.'


def test_fk_not_found_error_is_exception() -> None:
err = FKNotFoundError('msg', fk_name='fk', table_name='tbl')
assert isinstance(err, Exception)


def test_fk_not_found_error_can_be_raised_and_caught() -> None:
msg = 'err'
with pytest.raises(FKNotFoundError) as exc_info:
raise FKNotFoundError(msg, fk_name='fk', table_name='tbl')
assert exc_info.value.fk_name == 'fk'


def test_already_exists_error_default_message() -> None:
err = AlreadyExistsError()
assert str(err) == 'Entity already exists.'


def test_already_exists_error_custom_message() -> None:
err = AlreadyExistsError('Custom message.')
assert str(err) == 'Custom message.'


def test_already_exists_error_constraint_name_stored() -> None:
err = AlreadyExistsError(constraint_name='users_email_key')
assert err.constraint_name == 'users_email_key'


def test_already_exists_error_constraint_name_none_by_default() -> None:
err = AlreadyExistsError()
assert err.constraint_name is None


def test_already_exists_error_message_and_constraint_together() -> None:
err = AlreadyExistsError('Dup', constraint_name='my_constraint')
assert str(err) == 'Dup'
assert err.constraint_name == 'my_constraint'


def test_already_exists_error_is_exception() -> None:
assert isinstance(AlreadyExistsError(), Exception)


def test_already_exists_error_can_be_raised_and_caught() -> None:
msg = 'dup'
with pytest.raises(AlreadyExistsError):
raise AlreadyExistsError(msg)


def test_not_found_error_entity_id_none_by_default() -> None:
err: NotFoundError[None] = NotFoundError('not found')
assert err.entity_id is None


def test_not_found_error_entity_id_stored() -> None:
err = NotFoundError('not found', entity_id=_ENTITY_ID_INT)
assert err.entity_id == _ENTITY_ID_INT


def test_not_found_error_entity_id_uuid() -> None:
uid = uuid4()
err = NotFoundError('not found', entity_id=uid)
assert err.entity_id == uid


def test_not_found_error_message_preserved() -> None:
err: NotFoundError[None] = NotFoundError('Resource not found.')
assert str(err) == 'Resource not found.'


def test_not_found_error_is_exception() -> None:
assert isinstance(NotFoundError('x'), Exception)


def test_not_found_error_can_be_raised_and_caught() -> None:
msg = 'missing'
with pytest.raises(NotFoundError):
raise NotFoundError(msg)


def test_not_found_error_no_positional_args() -> None:
err: NotFoundError[None] = NotFoundError()
assert err.entity_id is None
Loading