feat: add sum with image reference problem

This commit is contained in:
AlanSilvaaa
2026-05-26 11:56:41 -04:00
parent 29754b4782
commit c2613cb35e
6 changed files with 289 additions and 0 deletions

View File

@@ -0,0 +1,88 @@
import unittest
from fastapi.testclient import TestClient
from app.main import create_app
class SumWithImageReferenceEndpointTest(unittest.TestCase):
def setUp(self) -> None:
self.client = TestClient(create_app())
self.first_picture = {
"id": "red-flower",
"name": "Red flower",
"image_path": "/images/red-flower.png",
}
self.second_picture = {
"id": "white-flower",
"name": "White flower",
"image_path": "/images/white-flower.png",
}
def test_creates_problem_with_one_correct_option(self) -> None:
response = self.client.post(
"/math/grade_1/sum_with_image_reference",
json={
"first_quantity": 5,
"second_quantity": 4,
"first_description": "flores rojas",
"second_description": "flores blancas",
"common_object": "flores",
"first_picture": self.first_picture,
"second_picture": self.second_picture,
"option_count": 3,
"seed": 1,
},
)
self.assertEqual(response.status_code, 200)
problem = response.json()
correct_options = [option for option in problem["options"] if option["is_correct"]]
self.assertEqual(
problem["question"],
"Hay 5 flores rojas y 4 flores blancas, ¿cuántas flores hay en total?",
)
self.assertEqual(problem["instructions"], "Escoge la imagen en la próxima página.")
self.assertEqual(problem["total"], 9)
self.assertEqual(len(problem["options"]), 3)
self.assertEqual(len(correct_options), 1)
self.assertEqual(correct_options[0]["quantity"], 9)
self.assertEqual(correct_options[0]["first_group"]["quantity"], 5)
self.assertEqual(correct_options[0]["second_group"]["quantity"], 4)
for option in problem["options"]:
first_group = option["first_group"]
second_group = option["second_group"]
self.assertEqual(option["quantity"], first_group["quantity"] + second_group["quantity"])
self.assertEqual(first_group["description"], "flores rojas")
self.assertEqual(second_group["description"], "flores blancas")
self.assertEqual(first_group["picture"], self.first_picture)
self.assertEqual(second_group["picture"], self.second_picture)
def test_returns_bad_request_when_total_is_outside_option_range(self) -> None:
response = self.client.post(
"/math/grade_1/sum_with_image_reference",
json={
"first_quantity": 5,
"second_quantity": 4,
"first_description": "flores rojas",
"second_description": "flores blancas",
"common_object": "flores",
"first_picture": self.first_picture,
"second_picture": self.second_picture,
"min_option_quantity": 1,
"max_option_quantity": 8,
},
)
self.assertEqual(response.status_code, 400)
self.assertEqual(
response.json(),
{"detail": "option quantity range must include the correct total"},
)
if __name__ == "__main__":
unittest.main()