diff --git a/app/index.html b/app/index.html new file mode 100644 index 0000000..552818d --- /dev/null +++ b/app/index.html @@ -0,0 +1,69 @@ + + + + + + +Calculator + + +

Calculator

+ +
+Add / Subtract + + + + +
+ +
+Clamp + + + + +
+ +
+Clamp to Byte + + +
+ +

+ + + + diff --git a/tests/test_api.py b/tests/test_api.py new file mode 100644 index 0000000..b1502cd --- /dev/null +++ b/tests/test_api.py @@ -0,0 +1,87 @@ +# 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)