Skip to content

Commit f9cdda7

Browse files
committed
Add test cases for CAMPD endpoint in global routes
1 parent 53b3b25 commit f9cdda7

2 files changed

Lines changed: 67 additions & 0 deletions

File tree

API_DOCUMENTATION.md

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -258,6 +258,36 @@ Mengekspos data mentah dari API CAMPD untuk fasilitas tertentu.
258258
```bash
259259
curl -X GET "http://localhost:5000/global/campd?facility_id=12345"
260260

261+
**2. Buat *Test Case* Baru**
262+
263+
Tambahkan *test case* baru di `tests/test_cevs.py` dan `tests/test_global_routes.py`.
264+
265+
**Di `tests/test_cevs.py`:**
266+
```python
267+
import pytest
268+
from unittest.mock import patch, MagicMock
269+
from api.services.cevs_aggregator import compute_cevs_for_company
270+
271+
# (Test case yang ada tetap di sini)
272+
273+
@patch('api.services.cevs_aggregator.CAMDClient')
274+
def test_compute_cevs_with_campd_data(MockCAMDClient):
275+
"""
276+
Test CEVS computation with mocked CAMPD data.
277+
"""
278+
# Siapkan mock untuk data emisi dan kepatuhan
279+
mock_client = MockCAMDClient.return_value
280+
mock_client.get_emissions_data.return_value = [{'co2Mass': 2000000}]
281+
mock_client.get_compliance_data.return_value = [{'compliantIndicator': False}]
282+
283+
# Panggil fungsi dengan nama perusahaan yang ada di dalam facility_id_map
284+
result = compute_cevs_for_company("Example Power Plant Inc.", "US")
285+
286+
# Periksa apakah skor disesuaikan dengan benar
287+
assert result['cevs_score'] == -50 # -20 untuk emisi, -30 untuk kepatuhan
288+
assert 'campd_emissions' in result['components']
289+
assert 'campd_compliance' in result['components']
290+
261291
#### 8. CEVS Composite Score
262292
**GET** `/global/cevs/<company>`
263293

tests/test_global_routes.py

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import os
88
import pytest
99
from flask import Flask
10+
from unittest.mock import patch
1011
from api.api_server import app as flask_app
1112

1213

@@ -165,3 +166,39 @@ def test_global_edgar_with_window_parameter(self, client, auth_headers):
165166
trend = data["trend"]
166167
assert "pollutant" in trend
167168
assert trend["pollutant"] == "NOx"
169+
170+
# --- Test Case Baru untuk Endpoint CAMPD ---
171+
172+
@patch('api.routes.global_data.CAMDClient')
173+
def test_global_campd_success(self, MockCAMDClient, client, auth_headers):
174+
"""Test /global/campd returns 200 with valid facility_id."""
175+
# Siapkan mock untuk mengembalikan data contoh
176+
mock_instance = MockCAMDClient.return_value
177+
mock_instance.get_emissions_data.return_value = [{"year": 2023, "co2Mass": 5000}]
178+
mock_instance.get_compliance_data.return_value = [{"year": 2023, "compliantIndicator": 1}]
179+
180+
resp = client.get("/global/campd?facility_id=123", headers=auth_headers)
181+
182+
assert resp.status_code == 200
183+
data = resp.get_json()
184+
assert data["status"] == "success"
185+
assert "emissions" in data
186+
assert "compliance" in data
187+
assert data["emissions"][0]["co2Mass"] == 5000
188+
assert data["compliance"][0]["compliantIndicator"] == 1
189+
190+
def test_global_campd_missing_param(self, client, auth_headers):
191+
"""Test /global/campd returns 400 if facility_id is missing."""
192+
resp = client.get("/global/campd", headers=auth_headers)
193+
assert resp.status_code == 400
194+
data = resp.get_json()
195+
assert data["status"] == "error"
196+
assert "facility_id parameter is required" in data["message"]
197+
198+
def test_global_campd_invalid_param(self, client, auth_headers):
199+
"""Test /global/campd returns 400 if facility_id is not a number."""
200+
resp = client.get("/global/campd?facility_id=abc", headers=auth_headers)
201+
assert resp.status_code == 400
202+
data = resp.get_json()
203+
assert data["status"] == "error"
204+
assert "A valid facility_id parameter is required" in data["message"]

0 commit comments

Comments
 (0)