52 lines
1.8 KiB
Python
52 lines
1.8 KiB
Python
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 ">3</div>Characters" 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": "<script>alert(1)</script>", "status": "Alive", "gender": "Male"},
|
|
)
|
|
page = seeded.get("/characters/50").text
|
|
assert "<script>alert(1)</script>" not in page
|
|
assert "<script>" in page
|
|
assert seeded.delete("/api/character/50", headers=ADMIN).status_code == 204
|