test_int_api_gateway.py 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. import pytest
  2. from clean_python import ctx
  3. from clean_python import DoesNotExist
  4. from clean_python import Json
  5. from clean_python import Tenant
  6. from clean_python.api_client import ApiGateway
  7. from clean_python.api_client import ApiProvider
  8. class BooksGateway(ApiGateway, path="v1/books/{id}"):
  9. pass
  10. @pytest.fixture
  11. def provider(fastapi_example_app) -> ApiProvider:
  12. ctx.tenant = Tenant(id=2, name="")
  13. yield ApiProvider(fastapi_example_app + "/", lambda a, b: "token")
  14. ctx.tenant = None
  15. @pytest.fixture
  16. def gateway(provider) -> ApiGateway:
  17. return BooksGateway(provider)
  18. @pytest.fixture
  19. async def book(gateway: ApiGateway):
  20. return await gateway.add({"title": "fixture", "author": {"name": "foo"}})
  21. async def test_add(gateway: ApiGateway):
  22. response = await gateway.add({"title": "test_add", "author": {"name": "foo"}})
  23. assert isinstance(response["id"], int)
  24. assert response["title"] == "test_add"
  25. assert response["author"] == {"name": "foo"}
  26. assert response["created_at"] == response["updated_at"]
  27. async def test_get(gateway: ApiGateway, book: Json):
  28. response = await gateway.get(book["id"])
  29. assert response == book
  30. async def test_remove_and_404(gateway: ApiGateway, book: Json):
  31. assert await gateway.remove(book["id"]) is True
  32. assert await gateway.get(book["id"]) is None
  33. assert await gateway.remove(book["id"]) is False
  34. async def test_update(gateway: ApiGateway, book: Json):
  35. response = await gateway.update({"id": book["id"], "title": "test_update"})
  36. assert response["id"] == book["id"]
  37. assert response["title"] == "test_update"
  38. assert response["author"] == {"name": "foo"}
  39. assert response["created_at"] != response["updated_at"]
  40. async def test_update_404(gateway: ApiGateway):
  41. with pytest.raises(DoesNotExist):
  42. await gateway.update({"id": 123456, "title": "test_update_404"})