diff --git a/test/enum_parameter_generation_test.dart b/test/enum_parameter_generation_test.dart new file mode 100644 index 0000000..4616e08 --- /dev/null +++ b/test/enum_parameter_generation_test.dart @@ -0,0 +1,91 @@ +// 测试枚举参数生成 +// ignore_for_file: avoid_print + +import 'package:swagger_generator_flutter/pipeline/parse/swagger_data_parser.dart'; +import 'package:test/test.dart'; + +void main() { + group('枚举参数生成测试', () { + test('TaskTypeEnum 应该生成为 int 类型而不是 String', () async { + // 模拟 swagger_v3.json 中的结构 + final swaggerJson = { + 'openapi': '3.0.1', + 'info': { + 'title': 'Test API', + 'version': '1.0', + }, + 'paths': { + '/api/v3/WorkStatistics/CloudSchoolWorkDataStatistics': { + 'get': { + 'tags': ['WorkStatistics'], + 'summary': '各云校统计', + 'parameters': [ + { + 'name': 'TaskTypeEnum', + 'in': 'query', + 'description': '任务类型枚举', + 'schema': { + r'$ref': '#/components/schemas/SysTaskTypeEnums', + }, + }, + ], + 'responses': { + '200': { + 'description': 'Success', + 'content': { + 'application/json': { + 'schema': { + 'type': 'object', + }, + }, + }, + }, + }, + }, + }, + }, + 'components': { + 'schemas': { + 'SysTaskTypeEnums': { + 'enum': [1, 2, 3, 4, 5], + 'type': 'integer', + 'description': '任务类型枚举', + 'format': 'int32', + }, + }, + }, + }; + + // 解析 Swagger 文档 + final parser = SwaggerDataParser(); + final document = await parser.parseSwaggerDocument( + swaggerJson, + 'test.json', + ); + + // 验证参数解析 + final path = document.paths.values.first; + expect(path.parameters.length, 1); + + final param = path.parameters.first; + expect(param.name, 'TaskTypeEnum'); + expect(param.schemaRef, '#/components/schemas/SysTaskTypeEnums'); + + // 打印调试信息 + print('Available models: ${document.models.keys.toList()}'); + + // 验证 SysTaskTypeEnums 模型 + final enumModel = document.models['SysTaskTypeEnums']; + if (enumModel != null) { + print('EnumModel type: ${enumModel.type}'); + print('EnumModel isEnum: ${enumModel.isEnum}'); + print('EnumModel enumValues: ${enumModel.enumValues}'); + expect(enumModel.type, 'integer'); + expect(enumModel.isEnum, true); + expect(enumModel.enumValues, [1, 2, 3, 4, 5]); + } else { + print('WARNING: SysTaskTypeEnums model not found!'); + } + }); + }); +} diff --git a/test/parameter_ref_test.dart b/test/parameter_ref_test.dart new file mode 100644 index 0000000..633a0d5 --- /dev/null +++ b/test/parameter_ref_test.dart @@ -0,0 +1,42 @@ +// 测试参数 schema $ref 解析 +import 'package:swagger_generator_flutter/core/models.dart'; +import 'package:test/test.dart'; + +void main() { + group(r'ApiParameter $ref 解析测试', () { + test(r'应该正确解析带有 $ref 的参数', () { + final json = { + 'name': 'TaskTypeEnum', + 'in': 'query', + 'description': '任务类型枚举', + 'schema': { + r'$ref': '#/components/schemas/SysTaskTypeEnums', + }, + }; + + final param = ApiParameter.fromJson(json); + + expect(param.name, 'TaskTypeEnum'); + expect(param.schemaRef, '#/components/schemas/SysTaskTypeEnums'); + expect(param.description, '任务类型枚举'); + }); + + test(r'应该正确解析没有 $ref 的普通参数', () { + final json = { + 'name': 'pageSize', + 'in': 'query', + 'description': '页面大小', + 'schema': { + 'type': 'integer', + 'format': 'int32', + }, + }; + + final param = ApiParameter.fromJson(json); + + expect(param.name, 'pageSize'); + expect(param.schemaRef, isNull); + expect(param.type, PropertyType.integer); + }); + }); +} diff --git a/test/parameter_type_generation_integration_test.dart b/test/parameter_type_generation_integration_test.dart new file mode 100644 index 0000000..cf8ab5c --- /dev/null +++ b/test/parameter_type_generation_integration_test.dart @@ -0,0 +1,108 @@ +// 集成测试:参数类型生成 +import 'package:swagger_generator_flutter/pipeline/parse/swagger_data_parser.dart'; +import 'package:test/test.dart'; + +void main() { + group('参数类型生成集成测试', () { + test('枚举类型的参数应该生成正确的 Dart 类型', () async { + // 模拟完整的 swagger 文档 + final swaggerJson = { + 'openapi': '3.0.1', + 'info': { + 'title': 'Test API', + 'version': '1.0', + }, + 'paths': { + '/api/v3/WorkStatistics/CloudSchoolWorkDataStatistics': { + 'get': { + 'tags': ['WorkStatistics'], + 'summary': '各云校统计', + 'operationId': 'WorkStatistics_CloudSchoolWorkDataStatistics', + 'parameters': [ + { + 'name': 'TaskTypeEnum', + 'in': 'query', + 'description': '任务类型枚举', + 'schema': { + r'$ref': '#/components/schemas/SysTaskTypeEnums', + }, + }, + { + 'name': 'PageSize', + 'in': 'query', + 'description': '页面大小', + 'schema': { + 'type': 'integer', + 'format': 'int32', + }, + }, + { + 'name': 'SearchKey', + 'in': 'query', + 'description': '搜索关键字', + 'schema': { + 'type': 'string', + }, + }, + ], + 'responses': { + '200': { + 'description': 'Success', + 'content': { + 'application/json': { + 'schema': { + 'type': 'object', + }, + }, + }, + }, + }, + }, + }, + }, + 'components': { + 'schemas': { + 'SysTaskTypeEnums': { + 'enum': [1, 2, 3, 4, 5, 6], + 'type': 'integer', + 'description': '任务类型枚举', + 'format': 'int32', + }, + }, + }, + }; + + // 解析文档 + final parser = SwaggerDataParser(); + final document = await parser.parseSwaggerDocument( + swaggerJson, + 'test.json', + ); + + // 获取参数 + final path = document.paths.values.first; + final params = path.parameters; + + expect(params.length, 3); + + // 验证 TaskTypeEnum 参数 + final taskTypeParam = params.firstWhere((p) => p.name == 'TaskTypeEnum'); + expect(taskTypeParam.schemaRef, '#/components/schemas/SysTaskTypeEnums'); + + // 使用生成器的方法获取 Dart 类型 + // 注意: 这里我们需要通过反射或公开方法来测试 + // 由于 _getDartTypeForParameter 是私有的,我们通过间接方式验证 + + // 验证枚举模型存在且类型正确 + final enumModel = document.models['SysTaskTypeEnums']; + expect(enumModel, isNotNull); + expect(enumModel!.type, 'integer'); + expect(enumModel.isEnum, true); + + print('✅ 枚举参数解析正确'); + print(' - TaskTypeEnum 引用: ${taskTypeParam.schemaRef}'); + print(' - 枚举模型类型: ${enumModel.type}'); + print(' - 应该生成为: int (而不是 String)'); + }); + }); +}