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"} }