From 08c88d85c9c2364a0a6c157e95fdbfa96452c636 Mon Sep 17 00:00:00 2001 From: aa243527 Date: Sat, 8 Mar 2025 10:09:47 +0100 Subject: [PATCH 1/2] feat: adding pytest dependency --- backend/Dockerfile | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/backend/Dockerfile b/backend/Dockerfile index 21b9213..af4eb8b 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -10,11 +10,14 @@ RUN apt-get update && apt-get install -y docker.io # Copier les fichiers nécessaires COPY requirements.txt . -# Installer les dépendances +# Installer les dépendances et ajouter pytest RUN pip install --no-cache-dir -r requirements.txt +RUN pip install --no-cache-dir pytest -# Copier le reste du code -COPY . . +# Copier le reste du code (y compris les tests) +COPY . /app + +RUN ls -l /app # Exposer le port sur lequel Flask écoute EXPOSE 5000 -- GitLab From 519f4dcf99406f922dde1c0afe0d06e56b4d4c45 Mon Sep 17 00:00:00 2001 From: aa243527 Date: Sat, 8 Mar 2025 10:11:05 +0100 Subject: [PATCH 2/2] feat: implementing unit tests --- backend/test_app.py | 78 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 backend/test_app.py diff --git a/backend/test_app.py b/backend/test_app.py new file mode 100644 index 0000000..a5ba063 --- /dev/null +++ b/backend/test_app.py @@ -0,0 +1,78 @@ +import pytest +import json +from unittest.mock import patch, MagicMock +from app import app + +@pytest.fixture +def client(): + app.config["TESTING"] = True + with app.test_client() as client: + yield client + +def test_health(client): + response = client.get("/health") + assert response.status_code == 200 + assert response.json == {"status": "ok"} + +@patch("app.redis_client.get") +def test_get_request_count(mock_redis_get, client): + mock_redis_get.return_value = "5" + response = client.get("/request_count") + assert response.status_code == 200 + assert response.json == {"status": "success", "data": {"request_received_count": 5}, "errors": None} + +@patch("app.redis_client.exists") +@patch("app.redis_client.get") +def test_bruteforce_cached(mock_redis_get, mock_redis_exists, client): + mock_redis_exists.return_value = True + mock_redis_get.return_value = "password123" + data = json.dumps({"hash": "5f4dcc3b5aa765d61d8327deb882cf99"}) + response = client.post("/bruteforce", data=data, content_type="application/json") + + assert response.status_code == 200 + assert response.json == { + "status": "success", + "data": {"hash": "5f4dcc3b5aa765d61d8327deb882cf99", "original": "password123"}, + "errors": None + } + +@patch("app.redis_client.keys") +@patch("app.redis_client.get") +def test_get_resolved_hashes(mock_redis_get, mock_redis_keys, client): + mock_redis_keys.return_value = ["hash1", "hash2"] + mock_redis_get.side_effect = lambda key: f"original_{key}" + + response = client.get("/resolved") + + assert response.status_code == 200 + assert response.json == { + "status": "success", + "data": {"hash1": "original_hash1", "hash2": "original_hash2"}, + "errors": None + } + +@patch("app.redis_client.exists") +@patch("app.redis_client.get") +def test_get_resolved_hash(mock_redis_get, mock_redis_exists, client): + mock_redis_exists.return_value = True + mock_redis_get.return_value = "password123" + response = client.get("/resolved/5f4dcc3b5aa765d61d8327deb882cf99") + + assert response.status_code == 200 + assert response.json == { + "status": "success", + "data": {"hash": "5f4dcc3b5aa765d61d8327deb882cf99", "original": "password123"}, + "errors": None + } + +@patch("app.redis_client.exists") +def test_get_resolved_hash_not_found(mock_redis_exists, client): + mock_redis_exists.return_value = False + response = client.get("/resolved/nonexistent_hash") + + assert response.status_code == 404 + assert response.json == { + "status": "fail", + "data": None, + "errors": {"message": "No resolved entry found for hash: nonexistent_hash"} + } -- GitLab