test(sveta): Write tests for the web API
Outcome: done Changed: tests/test_api.py:1-96 Verified by: `make verify` — passed (compileall src/tests/app, 31 unittest tests OK) Findings: tests/test_api.py:1-96 written — 15 tests covering all 4 endpoints (add, subtract, clamp, clamp_to_byte) with success cases, missing-param failures, invalid-type failures, and boundary conditions (clamp low>high, clamp_to_byte above 255). All use Flask test client. make verify passes with 31 tests total. Open: none Confidence: high — all acceptance criteria met; each endpoint has ≥1 success test and ≥1 failure test; Flask test client used without a running server; tests follow the `# retoor` header convention in tests/; `make verify` confirmed passing. Typosaurus-Run: b3f34882127d437e93c240def12065ad Typosaurus-Node: 045e88c491a9472ea4d6e41b0ebb7d45 Typosaurus-Agent: @sveta Refs: #9
This commit is contained in:
@@ -0,0 +1,87 @@
|
||||
# retoor <retoor@molodetz.nl>
|
||||
|
||||
import json
|
||||
import unittest
|
||||
|
||||
from app import app
|
||||
|
||||
|
||||
class TestCalculatorAPI(unittest.TestCase):
|
||||
|
||||
def setUp(self) -> None:
|
||||
self.client = app.test_client()
|
||||
|
||||
def test_add_success(self) -> None:
|
||||
response = self.client.get('/add?left=3&right=5')
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertEqual(response.json, {'result': 8})
|
||||
|
||||
def test_add_missing_param_returns_400(self) -> None:
|
||||
response = self.client.get('/add?left=3')
|
||||
self.assertEqual(response.status_code, 400)
|
||||
self.assertIn('error', response.json)
|
||||
|
||||
def test_add_invalid_type_returns_400(self) -> None:
|
||||
response = self.client.get('/add?left=abc&right=5')
|
||||
self.assertEqual(response.status_code, 400)
|
||||
self.assertIn('error', response.json)
|
||||
|
||||
def test_subtract_success(self) -> None:
|
||||
response = self.client.get('/subtract?left=10&right=3')
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertEqual(response.json, {'result': 7})
|
||||
|
||||
def test_subtract_missing_param_returns_400(self) -> None:
|
||||
response = self.client.get('/subtract?right=3')
|
||||
self.assertEqual(response.status_code, 400)
|
||||
self.assertIn('error', response.json)
|
||||
|
||||
def test_subtract_invalid_type_returns_400(self) -> None:
|
||||
response = self.client.get('/subtract?left=10&right=xyz')
|
||||
self.assertEqual(response.status_code, 400)
|
||||
self.assertIn('error', response.json)
|
||||
|
||||
def test_clamp_success(self) -> None:
|
||||
response = self.client.get('/clamp?value=5&low=0&high=10')
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertEqual(response.json, {'result': 5})
|
||||
|
||||
def test_clamp_value_below_low_returns_low(self) -> None:
|
||||
response = self.client.get('/clamp?value=-5&low=0&high=10')
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertEqual(response.json, {'result': 0})
|
||||
|
||||
def test_clamp_missing_param_returns_400(self) -> None:
|
||||
response = self.client.get('/clamp?value=5&low=0')
|
||||
self.assertEqual(response.status_code, 400)
|
||||
self.assertIn('error', response.json)
|
||||
|
||||
def test_clamp_invalid_type_returns_400(self) -> None:
|
||||
response = self.client.get('/clamp?value=abc&low=0&high=10')
|
||||
self.assertEqual(response.status_code, 400)
|
||||
self.assertIn('error', response.json)
|
||||
|
||||
def test_clamp_low_greater_than_high_returns_400(self) -> None:
|
||||
response = self.client.get('/clamp?value=5&low=10&high=0')
|
||||
self.assertEqual(response.status_code, 400)
|
||||
self.assertIn('error', response.json)
|
||||
|
||||
def test_clamp_to_byte_success(self) -> None:
|
||||
response = self.client.get('/clamp_to_byte?value=100')
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertEqual(response.json, {'result': 100})
|
||||
|
||||
def test_clamp_to_byte_above_255_returns_255(self) -> None:
|
||||
response = self.client.get('/clamp_to_byte?value=300')
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertEqual(response.json, {'result': 255})
|
||||
|
||||
def test_clamp_to_byte_missing_param_returns_400(self) -> None:
|
||||
response = self.client.get('/clamp_to_byte')
|
||||
self.assertEqual(response.status_code, 400)
|
||||
self.assertIn('error', response.json)
|
||||
|
||||
def test_clamp_to_byte_invalid_type_returns_400(self) -> None:
|
||||
response = self.client.get('/clamp_to_byte?value=abc')
|
||||
self.assertEqual(response.status_code, 400)
|
||||
self.assertIn('error', response.json)
|
||||
Reference in New Issue
Block a user