""" YAML Loader metadata 验证测试 """ import pytest from loaders.yaml_loader import validate_metadata, YAMLError class TestValidateMetadata: """validate_metadata 函数测试类""" def test_valid_metadata_16_9(self): """测试有效的 16:9 metadata""" metadata = { "size": "16:9", "description": "测试文档" } # 应该不抛出异常 validate_metadata(metadata, "test.yaml", context="文档") def test_valid_metadata_4_3(self): """测试有效的 4:3 metadata""" metadata = { "size": "4:3", "version": "1.0", "author": "测试作者" } # 应该不抛出异常 validate_metadata(metadata, "test.yaml", context="模板库") def test_metadata_missing_size(self): """测试 metadata 缺少 size 字段""" metadata = { "description": "测试文档" } with pytest.raises(YAMLError, match="metadata 缺少必填字段 'size'"): validate_metadata(metadata, "test.yaml", context="文档") def test_metadata_invalid_size(self): """测试 metadata size 值无效""" metadata = { "size": "21:9" } with pytest.raises(YAMLError, match="metadata.size 必须是 '16:9' 或 '4:3'"): validate_metadata(metadata, "test.yaml", context="文档") def test_metadata_not_dict(self): """测试 metadata 不是字典""" metadata = "invalid" with pytest.raises(YAMLError, match="metadata 必须是字典对象"): validate_metadata(metadata, "test.yaml", context="文档") def test_metadata_with_optional_fields(self): """测试 metadata 包含可选字段""" metadata = { "size": "16:9", "version": "1.0", "author": "作者", "description": "描述", "fonts": {}, "fonts_default": "@body" } # 应该不抛出异常 validate_metadata(metadata, "test.yaml", context="文档")