From d5a530a30d570a97b3431405f09830ba25b8e111 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Katariina=20J=C3=A4rvenm=C3=A4ki?= Date: Mon, 2 Mar 2026 10:45:06 +0200 Subject: [PATCH] Added URL stats retrieval with tests --- app/main.py | 21 ++++++++++++++++++++- app/test_main.py | 10 +++++++++- 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/app/main.py b/app/main.py index f7a96db..6ba6cb4 100644 --- a/app/main.py +++ b/app/main.py @@ -103,4 +103,23 @@ def redirect_to_url(short_code: str): conn.commit() conn.close() - return RedirectResponse(url=original_url) \ No newline at end of file + return RedirectResponse(url=original_url) + +@app.get("/stats/{short_code}") +def get_url_stats(short_code: str): + logger.info(f"Stats request received for short_code: {short_code}") + conn = get_db_connection() + url_data = conn.execute("SELECT original_url, clicks FROM urls WHERE short_code = ?", (short_code,)).fetchone() + + if url_data is None: + logger.warning(f"Stats not found for {short_code}.") + conn.close() + raise HTTPException(status_code=404, detail="URL stats not found") + + original_url, clicks = url_data + + conn.close() + + logger.info(f"Returning stats for {original_url}. Total clicks: {clicks}") + + return {"original_url": original_url, "clicks": clicks} \ No newline at end of file diff --git a/app/test_main.py b/app/test_main.py index 637d1ca..d92b7e1 100644 --- a/app/test_main.py +++ b/app/test_main.py @@ -4,10 +4,18 @@ import os sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) -from app.main import app +from app.main import settings +import tempfile +import pytest client = TestClient(app) +@pytest.fixture(autouse=True) +def use_temp_db(): + with tempfile.NamedTemporaryFile() as tmp: + settings.database_url = tmp.name + yield + def test_home(): response = client.get("/") assert response.status_code == 200