extends GutTest ## Tests du validateur de schema generique (scripts/data/schema_validator.gd), ## independants de tout contenu reel de data/. var schema: Dictionary = { "type": "object", "required": ["id", "level"], "additionalProperties": false, "properties": { "id": { "type": "string", "pattern": "^[a-z][a-z0-9_]*$" }, "level": { "type": "string", "enum": ["CE1", "CE2"] }, "difficulty": { "type": "integer", "minimum": 1, "maximum": 3 }, "tags": { "type": "array", "minItems": 1, "items": { "type": "string" } }, }, } func test_valid_object_has_no_errors() -> void: var data := { "id": "ex_01", "level": "CE1", "difficulty": 2, "tags": ["pluriel"] } assert_eq(SchemaValidator.validate(data, schema), []) func test_missing_required_property_is_reported() -> void: var data := { "level": "CE1" } var errors := SchemaValidator.validate(data, schema) assert_eq(errors.size(), 1) assert_string_contains(errors[0], "id") func test_wrong_type_is_reported() -> void: var data := { "id": "ex_01", "level": "CE1", "difficulty": "deux" } var errors := SchemaValidator.validate(data, schema) assert_eq(errors.size(), 1) assert_string_contains(errors[0], "difficulty") func test_enum_violation_is_reported() -> void: var data := { "id": "ex_01", "level": "CM1" } var errors := SchemaValidator.validate(data, schema) assert_eq(errors.size(), 1) assert_string_contains(errors[0], "level") func test_pattern_violation_is_reported() -> void: var data := { "id": "Ex-01", "level": "CE1" } var errors := SchemaValidator.validate(data, schema) assert_eq(errors.size(), 1) assert_string_contains(errors[0], "id") func test_unexpected_property_is_reported_when_additional_forbidden() -> void: var data := { "id": "ex_01", "level": "CE1", "extra": true } var errors := SchemaValidator.validate(data, schema) assert_eq(errors.size(), 1) assert_string_contains(errors[0], "extra") func test_min_items_violation_is_reported() -> void: var data := { "id": "ex_01", "level": "CE1", "tags": [] } var errors := SchemaValidator.validate(data, schema) assert_eq(errors.size(), 1) assert_string_contains(errors[0], "tags") func test_numeric_bounds_are_checked() -> void: var data := { "id": "ex_01", "level": "CE1", "difficulty": 9 } var errors := SchemaValidator.validate(data, schema) assert_eq(errors.size(), 1) assert_string_contains(errors[0], "difficulty")