# retoor 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)