munch-ease-backend/tests/test_shopping_api.py

62 lines
2.1 KiB
Python
Raw Permalink Normal View History

import importlib
import unittest
from fastapi.testclient import TestClient
from db import connect, create
import main
import tests.test_data as test_data
def reload_test_data():
global test_data
test_data = importlib.reload(test_data)
class TestShoppingAPI(unittest.IsolatedAsyncioTestCase):
async def asyncSetUp(self):
self.conn = await connect(":memory:")
await create(self.conn)
await test_data.create_test_data(self.conn)
reload_test_data()
async def override_get_db():
try:
yield self.conn
finally:
pass
main.app.dependency_overrides[main.get_db] = override_get_db
self.client = TestClient(main.app)
return await super().asyncSetUp()
async def asyncTearDown(self) -> None:
await self.conn.close()
main.app.dependency_overrides.clear()
return await super().asyncTearDown()
def test_purchase_unauthorized_without_cookie(self):
# Do NOT override cookie_person; no cookie provided => 401
body = {"storeName": "woolworths", "items": []}
resp = self.client.post("/api/v1/shopping", json=body)
assert resp.status_code == 401
assert "application/problem+json" in resp.headers.get("content-type", "")
prob = resp.json()
assert prob.get("status") == 401
assert prob.get("title")
def test_purchase_validation_error_returns_problem(self):
# Override cookie_person to simulate authenticated user
async def override_cookie_person():
return test_data.Persons.jacob
main.app.dependency_overrides[main.cookie_person] = override_cookie_person
# Empty items triggers domain validation error => 400 with Problem Details
body = {"storeName": "woolworths", "items": []}
resp = self.client.post("/api/v1/shopping", json=body)
assert resp.status_code == 400
assert "application/problem+json" in resp.headers.get("content-type", "")
prob = resp.json()
assert prob.get("status") == 400
assert "items" in prob.get("title", "").lower() or prob.get("title")