feat: add substract with image reference

This commit is contained in:
AlanSilvaaa
2026-05-26 14:58:56 -04:00
parent b4950cee35
commit 1681aca057
8 changed files with 234 additions and 0 deletions

View File

@@ -0,0 +1,95 @@
import unittest
from fastapi.testclient import TestClient
from app.main import create_app
class SubtractWithImageReferenceEndpointTest(unittest.TestCase):
def setUp(self) -> None:
self.client = TestClient(create_app())
self.figure = {
"id": "fish",
"name": "Fish",
"image_path": "/images/fish.png",
}
def test_creates_subtraction_problem(self) -> None:
response = self.client.post(
"/math/grade_1/subtract_with_image_reference",
json={
"object_name": "peces",
"initial_quantity": 5,
"removed_quantity": 2,
"actor_name": "Diego",
"figure": self.figure,
},
)
self.assertEqual(response.status_code, 200)
problem = response.json()
self.assertEqual(problem["title"], "¿Cuántos quedan?")
self.assertEqual(
problem["question"],
"Hay 5 peces. Diego sacó 2 peces. ¿Cuántos peces quedan?",
)
self.assertEqual(problem["object_name"], "peces")
self.assertEqual(problem["actor_name"], "Diego")
self.assertEqual(problem["figure"], self.figure)
self.assertEqual(
problem["remaining_group"],
{"label": "quedan", "quantity": 3, "picture": self.figure},
)
self.assertEqual(
problem["subtracted_group"],
{"label": "sacó", "quantity": 2, "picture": self.figure},
)
self.assertEqual(
problem["equation"],
{
"initial_quantity": 5,
"removed_quantity": 2,
"remaining_quantity": 3,
"symbol": "-",
"equals_symbol": "=",
},
)
def test_allows_zero_remaining_figures(self) -> None:
response = self.client.post(
"/math/grade_1/subtract_with_image_reference",
json={
"object_name": "peces",
"initial_quantity": 2,
"removed_quantity": 2,
"figure": self.figure,
},
)
self.assertEqual(response.status_code, 200)
problem = response.json()
self.assertEqual(problem["equation"]["remaining_quantity"], 0)
self.assertEqual(problem["remaining_group"]["quantity"], 0)
self.assertEqual(problem["subtracted_group"]["quantity"], 2)
def test_returns_bad_request_when_removed_quantity_is_too_large(self) -> None:
response = self.client.post(
"/math/grade_1/subtract_with_image_reference",
json={
"object_name": "peces",
"initial_quantity": 2,
"removed_quantity": 5,
"figure": self.figure,
},
)
self.assertEqual(response.status_code, 400)
self.assertEqual(
response.json(),
{"detail": "removed_quantity must be less than or equal to initial_quantity"},
)
if __name__ == "__main__":
unittest.main()