test_root_entity.py 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. from datetime import datetime, timezone
  2. from unittest import mock
  3. import pytest
  4. from clean_python import RootEntity
  5. SOME_DATETIME = datetime(2023, 1, 1, tzinfo=timezone.utc)
  6. class User(RootEntity):
  7. name: str
  8. @pytest.fixture
  9. def user():
  10. return User(
  11. id=4,
  12. name="jan",
  13. created_at=datetime(2010, 1, 1, tzinfo=timezone.utc),
  14. updated_at=datetime(2020, 1, 1, tzinfo=timezone.utc),
  15. )
  16. @pytest.fixture
  17. def patched_now():
  18. with mock.patch("clean_python.base.domain.root_entity.now", return_value=SOME_DATETIME):
  19. yield
  20. def test_create(patched_now):
  21. obj = User.create(name="piet")
  22. assert obj.id is None
  23. assert obj.name == "piet"
  24. assert obj.created_at == SOME_DATETIME
  25. assert obj.updated_at == SOME_DATETIME
  26. def test_create_with_id():
  27. obj = User.create(id=42, name="piet")
  28. assert obj.id == 42
  29. def test_update(user, patched_now):
  30. actual = user.update(name="piet")
  31. assert actual is not user
  32. assert actual.name == "piet"
  33. assert actual.updated_at == SOME_DATETIME
  34. assert actual.created_at == datetime(2010, 1, 1, tzinfo=timezone.utc)
  35. def test_update_including_id(user):
  36. actual = user.update(id=4, name="piet")
  37. assert actual is not user
  38. assert actual.name == "piet"
  39. @pytest.mark.parametrize("new_id", [None, 42, "foo"])
  40. def test_update_with_wrong_id(user, new_id):
  41. with pytest.raises(ValueError):
  42. user.update(id=new_id, name="piet")
  43. @pytest.mark.parametrize("new_id", [None, 42])
  44. def test_update_give_id(new_id):
  45. user_without_id = User.create(name="jan")
  46. actual = user_without_id.update(id=new_id, name="piet")
  47. assert actual.id == new_id