unwind/tests/test_web.py

53 lines
1.7 KiB
Python

import pytest
from starlette.testclient import TestClient
from unwind import create_app, db, imdb, models
app = create_app()
@pytest.mark.asyncio
async def test_app(shared_conn: db.Database):
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]