from starlette.testclient import TestClient import pytest from unwind import create_app from unwind import db, models, imdb # https://pypi.org/project/pytest-asyncio/ pytestmark = pytest.mark.asyncio app = create_app() async def test_app(shared_conn): async with shared_conn.transaction(force_rollback=True): # https://www.starlette.io/testclient/ client = TestClient(app) response = client.get("/api/v1/movies") assert response.status_code == 403 client.auth = "user1", "secret1" response = client.get("/api/v1/movies") assert response.status_code == 200 assert response.json() == [] m = models.Movie( title="test movie", release_year=2013, media_type="Movie", imdb_id="tt12345678", genres={"genre-1"}, ) await db.add(m) response = client.get("/api/v1/movies", params={"include_unrated": 1}) assert response.status_code == 200 assert response.json() == [{**models.asplain(m), "user_scores": []}] m_plain = { "canonical_title": m.title, "imdb_score": m.imdb_score, "imdb_votes": m.imdb_votes, "link": imdb.movie_url(m.imdb_id), "media_type": m.media_type, "original_title": m.original_title, "user_scores": [], "year": m.release_year, } response = client.get("/api/v1/movies", params={"imdb_id": m.imdb_id}) assert response.status_code == 200 assert response.json() == [m_plain] response = client.get("/api/v1/movies", params={"unwind_id": str(m.id)}) assert response.status_code == 200 assert response.json() == [m_plain]