From 3f0947462d3860ba383873d1ffb193c04cb4f9a6 Mon Sep 17 00:00:00 2001 From: Jordan Larson Date: Mon, 24 Nov 2025 16:23:53 -0500 Subject: [PATCH] api test added w/ output screenshot --- backend/tests/test_api.py | 28 ++++++++++++++++++++++++++++ backend/tests/test_output.png | Bin 0 -> 16513 bytes 2 files changed, 28 insertions(+) create mode 100644 backend/tests/test_output.png diff --git a/backend/tests/test_api.py b/backend/tests/test_api.py index e69de29..162cb31 100644 --- a/backend/tests/test_api.py +++ b/backend/tests/test_api.py @@ -0,0 +1,28 @@ +import pytest +import requests + +API_URL = "http://13.221.193.197:8000" + +@pytest.fixture +def test_health_check(): + response = requests.get(f"{API_URL}/health") + assert response.status_code == 200 + assert response.json() == {"status": "ok"} + +def test_get_random(): + response = requests.get(f"{API_URL}/random") + assert response.status_code == 200 + assert response.json() is not None + +def test_predict(): + data = { + "items": ["The Great Gatsby", "1984", "To Kill a Mockingbird"], + "userid": "1234567890" + } + response = requests.post(f"{API_URL}/predict", json=data) + assert response.status_code == 200 + assert response.json() is not None + assert len(response.json()["recs"]) == 10 + +if __name__ == "__main__": + pytest.main() \ No newline at end of file diff --git a/backend/tests/test_output.png b/backend/tests/test_output.png new file mode 100644 index 0000000000000000000000000000000000000000..40eb27c3026a36e7f82d0f1a943ff6b4e05ef8e0 GIT binary patch literal 16513 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 literal 0 HcmV?d00001