From bf28ac13f834da7e532dc81dcf4c73bec6b1409a Mon Sep 17 00:00:00 2001 From: Hrugved Date: Thu, 3 Sep 2026 23:22:59 +0530 Subject: [PATCH 1/3] test: add API tests for alerts endpoint --- tests/test_api_server.py | 47 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/tests/test_api_server.py b/tests/test_api_server.py index dd1b703a..8900962c 100644 --- a/tests/test_api_server.py +++ b/tests/test_api_server.py @@ -499,3 +499,50 @@ async def test_health_does_not_require_auth(self, app): async with app.test_client() as client: resp = await client.get("/api/v1/health") assert resp.status_code == 200 + + +class TestAlerts: + async def test_alerts_returns_list(self, app, headers, monkeypatch): + import desktop.api_server as api + + class FakeAlert: + def to_dict(self): + return {"id": "1", "message": "Test alert"} + + class FakeProactive: + async def get_alerts(self): + return [FakeAlert()] + + monkeypatch.setattr(api, "get_proactive", lambda: FakeProactive()) + + async with app.test_client() as client: + resp = await client.get("/api/v1/alerts", headers=headers) + data = await resp.get_json() + + assert resp.status_code == 200 + assert isinstance(data["alerts"], list) + assert len(data["alerts"]) == 1 + assert data["count"] == 1 + + async def test_alerts_requires_auth(self, app): + async with app.test_client() as client: + resp = await client.get("/api/v1/alerts") + + assert resp.status_code == 401 + + async def test_alerts_empty(self, app, headers, monkeypatch): + import desktop.api_server as api + + class FakeProactive: + async def get_alerts(self): + return [] + + monkeypatch.setattr(api, "get_proactive", lambda: FakeProactive()) + + async with app.test_client() as client: + resp = await client.get("/api/v1/alerts", headers=headers) + data = await resp.get_json() + + assert resp.status_code == 200 + assert data["alerts"] == [] + assert data["count"] == 0 \ No newline at end of file From 954aca11cb07b7dfab898d657402d60cc65e84d5 Mon Sep 17 00:00:00 2001 From: Hrugved Date: Mon, 7 Sep 2026 21:46:02 +0530 Subject: [PATCH 2/3] fix: merge alerts tests into existing TestAlerts class --- tests/test_api_server.py | 90 ++++++++++++++++++++-------------------- 1 file changed, 45 insertions(+), 45 deletions(-) diff --git a/tests/test_api_server.py b/tests/test_api_server.py index 8900962c..a053e9a4 100644 --- a/tests/test_api_server.py +++ b/tests/test_api_server.py @@ -446,7 +446,52 @@ async def test_alerts_list(self, app, headers): assert resp.status_code == 200 assert "alerts" in data +class TestAlerts: + async def test_alerts_returns_list(self, app, headers, monkeypatch): + import desktop.api_server as api + + class FakeAlert: + def to_dict(self): + return {"id": "1", "message": "Test alert"} + + class FakeProactive: + async def get_alerts(self): + return [FakeAlert()] + + monkeypatch.setattr(api, "get_proactive", lambda: FakeProactive()) + + async with app.test_client() as client: + resp = await client.get("/api/v1/alerts", headers=headers) + data = await resp.get_json() + + assert resp.status_code == 200 + assert isinstance(data["alerts"], list) + assert len(data["alerts"]) == 1 + assert data["count"] == 1 + async def test_alerts_requires_auth(self, app): + async with app.test_client() as client: + resp = await client.get("/api/v1/alerts") + + assert resp.status_code == 401 + + async def test_alerts_empty(self, app, headers, monkeypatch): + import desktop.api_server as api + + class FakeProactive: + async def get_alerts(self): + return [] + + monkeypatch.setattr(api, "get_proactive", lambda: FakeProactive()) + + async with app.test_client() as client: + resp = await client.get("/api/v1/alerts", headers=headers) + data = await resp.get_json() + + assert resp.status_code == 200 + assert data["alerts"] == [] + assert data["count"] == 0 + class TestVision: async def test_vision_analyze_no_image(self, app, headers): async with app.test_client() as client: @@ -501,48 +546,3 @@ async def test_health_does_not_require_auth(self, app): assert resp.status_code == 200 -class TestAlerts: - async def test_alerts_returns_list(self, app, headers, monkeypatch): - import desktop.api_server as api - - class FakeAlert: - def to_dict(self): - return {"id": "1", "message": "Test alert"} - - class FakeProactive: - async def get_alerts(self): - return [FakeAlert()] - - monkeypatch.setattr(api, "get_proactive", lambda: FakeProactive()) - - async with app.test_client() as client: - resp = await client.get("/api/v1/alerts", headers=headers) - data = await resp.get_json() - - assert resp.status_code == 200 - assert isinstance(data["alerts"], list) - assert len(data["alerts"]) == 1 - assert data["count"] == 1 - - async def test_alerts_requires_auth(self, app): - async with app.test_client() as client: - resp = await client.get("/api/v1/alerts") - - assert resp.status_code == 401 - - async def test_alerts_empty(self, app, headers, monkeypatch): - import desktop.api_server as api - - class FakeProactive: - async def get_alerts(self): - return [] - - monkeypatch.setattr(api, "get_proactive", lambda: FakeProactive()) - - async with app.test_client() as client: - resp = await client.get("/api/v1/alerts", headers=headers) - data = await resp.get_json() - - assert resp.status_code == 200 - assert data["alerts"] == [] - assert data["count"] == 0 \ No newline at end of file From b0ea4853170df160847d2438721e58eaa8ee458b Mon Sep 17 00:00:00 2001 From: Hrugved Date: Wed, 9 Sep 2026 19:32:59 +0530 Subject: [PATCH 3/3] fix: resolve alerts test CI issues --- tests/test_api_server.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tests/test_api_server.py b/tests/test_api_server.py index a053e9a4..935ad58d 100644 --- a/tests/test_api_server.py +++ b/tests/test_api_server.py @@ -446,7 +446,6 @@ async def test_alerts_list(self, app, headers): assert resp.status_code == 200 assert "alerts" in data -class TestAlerts: async def test_alerts_returns_list(self, app, headers, monkeypatch): import desktop.api_server as api @@ -491,7 +490,7 @@ async def get_alerts(self): assert resp.status_code == 200 assert data["alerts"] == [] assert data["count"] == 0 - + class TestVision: async def test_vision_analyze_no_image(self, app, headers): async with app.test_client() as client: