76 lines
2.8 KiB
Python
76 lines
2.8 KiB
Python
import unittest
|
|
|
|
from math_problems_structure.grade_1 import sum_with_image_reference
|
|
|
|
|
|
class SumWithImageReferenceTest(unittest.TestCase):
|
|
def setUp(self) -> None:
|
|
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:
|
|
problem = sum_with_image_reference(
|
|
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,
|
|
)
|
|
|
|
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_raises_when_total_is_outside_option_range(self) -> None:
|
|
with self.assertRaisesRegex(
|
|
ValueError,
|
|
"option quantity range must include the correct total",
|
|
):
|
|
sum_with_image_reference(
|
|
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,
|
|
)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|