test: 添加参数类型生成相关测试

 新增测试
- enum_parameter_generation_test.dart: 枚举参数生成测试
- parameter_ref_test.dart: 参数 schema $ref 解析测试
- parameter_type_generation_integration_test.dart: 参数类型生成集成测试

这些测试确保枚举类型参数能正确生成 Dart 类型
This commit is contained in:
Max 2025-12-03 17:25:51 +08:00
parent 2838f00795
commit dd9b74f19b
3 changed files with 241 additions and 0 deletions

View File

@ -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!');
}
});
});
}

View File

@ -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);
});
});
}

View File

@ -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)');
});
});
}