Add CE1 board 3 and CE2 boards 2 and 3 with new backdrops (0.7.0)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
Denis Defolie
2026-10-12 11:15:31 +02:00
parent d0380a76af
commit 06a5e816be
257 changed files with 6786 additions and 42 deletions
+18
View File
@@ -61,3 +61,21 @@ func test_school_levels_helpers() -> void:
assert_eq(SchoolLevels.previous("CM1"), "CE2")
assert_eq(SchoolLevels.previous("n_importe_quoi"), "")
assert_true(SchoolLevels.rank("CM2") > SchoolLevels.rank("CE2"))
func test_correct_answer_position_is_not_always_the_same() -> void:
# Une regle dont la bonne reponse est toujours au meme rang se devine sans
# lire : les QCM d'une regle doivent varier la position de la bonne reponse.
var positions: Dictionary = {}
for rule_id: String in ExerciseEngine._rules:
for exercise: Dictionary in ExerciseEngine._candidates_for(rule_id, "multiple_choice"):
if not positions.has(rule_id):
positions[rule_id] = {}
positions[rule_id][int(exercise["correct_answer"])] = true
assert_gt(positions.size(), 5)
for rule_id: String in positions:
assert_gt(
(positions[rule_id] as Dictionary).size(),
1,
"bonne reponse toujours au meme rang : %s" % rule_id
)
+6 -4
View File
@@ -15,7 +15,7 @@ func test_unknown_rule_returns_empty_dictionary() -> void:
func test_missions_are_loaded_and_sorted() -> void:
var missions := ExerciseEngine.get_missions()
assert_eq(missions.size(), 30)
assert_eq(missions.size(), 57)
var ids: Array = missions.map(func(m: Dictionary) -> String: return m["mission_id"])
assert_eq(ids, ids.duplicate()) # trivialement vrai, documente l'ordre stable
assert_true(ids.has("mission_01_pre_des_mots"))
@@ -24,14 +24,16 @@ func test_missions_are_loaded_and_sorted() -> void:
func test_missions_are_filtered_by_the_level_of_their_rule() -> void:
assert_eq(ExerciseEngine.get_missions_for_level("CE1").size(), 18)
assert_eq(ExerciseEngine.get_missions_for_level("CE2").size(), 12)
assert_eq(ExerciseEngine.get_missions_for_level("CE1").size(), 27)
assert_eq(ExerciseEngine.get_missions_for_level("CE2").size(), 30)
assert_eq(ExerciseEngine.get_missions_for_level("CM1").size(), 0)
func test_regions_are_ordered_and_hold_their_missions() -> void:
var ce1 := ExerciseEngine.get_regions_for_level("CE1")
assert_eq(ce1.size(), 2)
assert_eq(ce1.size(), 3)
assert_eq(ce1[2]["region_id"], "montagne_des_verbes")
assert_eq(ExerciseEngine.get_regions_for_level("CE2").size(), 3)
assert_eq(ce1[0]["region_id"], "foret_des_accords")
assert_eq(ce1[1]["region_id"], "plage_des_sons")
assert_eq(ExerciseEngine.get_missions_for_region("foret_des_accords").size(), 9)
+4
View File
@@ -60,6 +60,10 @@ func test_ce1_profile_can_move_between_its_regions() -> void:
assert_eq(map.get_node("%TitleLabel").text, "La plage des sons")
assert_eq(map.get_node("%MapArea").get_child_count(), 9)
button.pressed.emit()
await wait_process_frames(1)
assert_eq(map.get_node("%TitleLabel").text, "La montagne des verbes")
button.pressed.emit()
await wait_process_frames(1)
assert_eq(map.get_node("%TitleLabel").text, "La forêt des accords")