from tests.conftest import ADMIN def test_home(seeded): r = seeded.get("/") assert r.status_code == 200 assert "text/html" in r.headers["content-type"] assert "script-src 'none'" in r.headers["content-security-policy"] assert ">3Characters" in r.text def test_characters_list_and_filters(seeded): r = seeded.get("/characters?gender=Female") assert "Summer Smith" in r.text assert "Rick Sanchez" not in r.text assert "Aucun résultat" in seeded.get("/characters?name=zzz").text def test_detail_pages_link_objects(seeded): rick = seeded.get("/characters/1").text assert 'href="/locations/3"' in rick assert 'href="/episodes/2"' in rick citadel = seeded.get("/locations/3").text assert "Morty Smith" in citadel pilot = seeded.get("/episodes/1").text assert "Rick Sanchez" in pilot and "Morty Smith" in pilot def test_pagination_links(client): for i in range(1, 26): client.post("/api/location", json={"name": f"Planet {i}"}) page1 = client.get("/locations?name=planet").text assert "page=2" in page1 and "Page 1 / 2" in page1 def test_html_404_but_json_for_api(seeded): r = seeded.get("/characters/999") assert r.status_code == 404 and "There is nothing here" in r.text assert seeded.get("/nowhere").headers["content-type"].startswith("text/html") assert seeded.get("/api/nowhere").json() == {"error": "There is nothing here"} def test_user_content_is_escaped(seeded): seeded.post( "/api/character", json={"id": 50, "name": "", "status": "Alive", "gender": "Male"}, ) page = seeded.get("/characters/50").text assert "" not in page assert "<script>" in page assert seeded.delete("/api/character/50", headers=ADMIN).status_code == 204