|
# retoor <retoor@molodetz.nl>
|
|
|
|
import unittest
|
|
|
|
from fastapi.testclient import TestClient
|
|
|
|
from typosaurus_sandbox.app import App
|
|
|
|
client = TestClient(App)
|
|
|
|
|
|
class TestHealthEndpoint(unittest.TestCase):
|
|
|
|
def test_health_returns_ok(self) -> None:
|
|
response = client.get("/health")
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertEqual(response.json(), {"status": "ok"})
|
|
|
|
|
|
class TestCalculatorAddEndpoint(unittest.TestCase):
|
|
|
|
def test_add_positive_integers(self) -> None:
|
|
response = client.post("/api/v1/calculator/add", json={"left": 3, "right": 5})
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertEqual(response.json(), {"result": 8})
|
|
|
|
def test_add_negative_integers(self) -> None:
|
|
response = client.post("/api/v1/calculator/add", json={"left": -3, "right": -5})
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertEqual(response.json(), {"result": -8})
|
|
|
|
def test_add_invalid_input_returns_422(self) -> None:
|
|
response = client.post("/api/v1/calculator/add", json={"left": "abc", "right": 5})
|
|
self.assertEqual(response.status_code, 422)
|
|
|
|
def test_add_missing_field_returns_422(self) -> None:
|
|
response = client.post("/api/v1/calculator/add", json={"left": 3})
|
|
self.assertEqual(response.status_code, 422)
|
|
|
|
|
|
class TestCalculatorSubtractEndpoint(unittest.TestCase):
|
|
|
|
def test_subtract_positive(self) -> None:
|
|
response = client.post("/api/v1/calculator/subtract", json={"left": 10, "right": 3})
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertEqual(response.json(), {"result": 7})
|
|
|
|
def test_subtract_negative_result(self) -> None:
|
|
response = client.post("/api/v1/calculator/subtract", json={"left": 3, "right": 10})
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertEqual(response.json(), {"result": -7})
|
|
|
|
def test_subtract_invalid_input_returns_422(self) -> None:
|
|
response = client.post("/api/v1/calculator/subtract", json={"left": 10, "right": None})
|
|
self.assertEqual(response.status_code, 422)
|
|
|
|
def test_subtract_missing_left_returns_422(self) -> None:
|
|
response = client.post("/api/v1/calculator/subtract", json={"right": 3})
|
|
self.assertEqual(response.status_code, 422)
|
|
|
|
def test_subtract_missing_right_returns_422(self) -> None:
|
|
response = client.post("/api/v1/calculator/subtract", json={"left": 10})
|
|
self.assertEqual(response.status_code, 422)
|
|
|
|
|
|
class TestCalculatorClampEndpoint(unittest.TestCase):
|
|
|
|
def test_clamp_value_below_low(self) -> None:
|
|
response = client.post("/api/v1/calculator/clamp", json={"value": -5, "low": 0, "high": 10})
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertEqual(response.json(), {"result": 0})
|
|
|
|
def test_clamp_value_above_high(self) -> None:
|
|
response = client.post("/api/v1/calculator/clamp", json={"value": 15, "low": 0, "high": 10})
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertEqual(response.json(), {"result": 10})
|
|
|
|
def test_clamp_value_in_range(self) -> None:
|
|
response = client.post("/api/v1/calculator/clamp", json={"value": 5, "low": 0, "high": 10})
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertEqual(response.json(), {"result": 5.0})
|
|
|
|
def test_clamp_invalid_input_returns_422(self) -> None:
|
|
response = client.post("/api/v1/calculator/clamp", json={"value": "x", "low": 0, "high": 10})
|
|
self.assertEqual(response.status_code, 422)
|
|
|
|
def test_clamp_low_greater_than_high_returns_422(self) -> None:
|
|
response = client.post("/api/v1/calculator/clamp", json={"value": 5, "low": 10, "high": 0})
|
|
self.assertEqual(response.status_code, 422)
|
|
|
|
def test_clamp_missing_low_returns_422(self) -> None:
|
|
response = client.post("/api/v1/calculator/clamp", json={"value": 5, "high": 10})
|
|
self.assertEqual(response.status_code, 422)
|
|
|
|
def test_clamp_missing_high_returns_422(self) -> None:
|
|
response = client.post("/api/v1/calculator/clamp", json={"value": 5, "low": 0})
|
|
self.assertEqual(response.status_code, 422)
|
|
|
|
|
|
class TestCalculatorClampToByteEndpoint(unittest.TestCase):
|
|
|
|
def test_clamp_to_byte_within_range(self) -> None:
|
|
response = client.post("/api/v1/calculator/clamp-to-byte", json={"value": 128})
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertEqual(response.json(), {"result": 128})
|
|
|
|
def test_clamp_to_byte_below_zero(self) -> None:
|
|
response = client.post("/api/v1/calculator/clamp-to-byte", json={"value": -10})
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertEqual(response.json(), {"result": 0})
|
|
|
|
def test_clamp_to_byte_above_255(self) -> None:
|
|
response = client.post("/api/v1/calculator/clamp-to-byte", json={"value": 300})
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertEqual(response.json(), {"result": 255})
|
|
|
|
def test_clamp_to_byte_invalid_input_returns_422(self) -> None:
|
|
response = client.post("/api/v1/calculator/clamp-to-byte", json={"value": "abc"})
|
|
self.assertEqual(response.status_code, 422)
|
|
|