import 'dart:io'; import 'package:koi_swagger_parser/koi_swagger_parser.dart'; import 'package:path/path.dart' as p; import 'package:test/test.dart'; void main() { group('default values and optional parameters', () { test('枚举默认值与 query 默认值生成合法 Dart 代码', () async { final tempDir = await Directory.systemTemp.createTemp( 'koi_swagger_parser_defaults_', ); addTearDown(() => tempDir.delete(recursive: true)); final specFile = File(p.join(tempDir.path, 'openapi.json')); await specFile.writeAsString(r''' { "openapi": "3.1.0", "info": { "title": "Defaults Sample", "version": "1.0.0" }, "paths": { "/api/v1/samples": { "get": { "tags": ["samples"], "operationId": "list_samples_api_v1_samples_get", "parameters": [ { "name": "page_no", "in": "query", "required": false, "schema": {"type": "integer", "default": 1} }, { "name": "tag", "in": "query", "required": false, "schema": {"type": "string"} } ], "responses": { "200": { "description": "ok", "content": { "application/json": { "schema": {"$ref": "#/components/schemas/SampleResponse"} } } } } } } }, "components": { "schemas": { "SampleResponse": { "type": "object", "required": ["id"], "properties": { "id": {"type": "integer"}, "conflict_policy": { "type": "string", "enum": ["exclusive", "mix"], "default": "exclusive" } } } } } } '''); final outputDir = p.join(tempDir.path, 'lib', 'src'); final configFile = File(p.join(tempDir.path, 'koi_swagger_parser.yaml')); await configFile.writeAsString(''' input: swagger_urls: - url: ${specFile.path} enabled: true output: base_dir: $outputDir api_dir: ${p.join(outputDir, 'api')} models_dir: ${p.join(outputDir, 'api_models')} included_tags: - samples split_by_tags: true generation: preset: name: koi_flutter api: enabled: true use_retrofit: true cancel_token_support: false client: class_name: SampleApiClient file_name: sample_api_client response_wrapper: mode: passthrough detect_standard_envelope: false success_data_field: data models: enabled: true class_prefix: Koi default_non_nullable_list_to_empty: true json_serializable: checked: true explicit_to_json: true include_if_null: false formatting: run_dart_format: false '''); await const KoiSwaggerParser().generate(configPath: configFile.path); final apiFile = File( p.join(outputDir, 'api', 'v1', 'samples_api.dart'), ).readAsStringSync(); expect(apiFile, contains("@Query('page_no') int pageNo = 1")); expect(apiFile, contains("@Query('tag') String? tag")); final resultFile = File( p.join(outputDir, 'api_models', 'result', 'sample_response.dart'), ).readAsStringSync(); expect( resultFile, contains('@Default(KoiSampleResponseConflictPolicy.exclusive)'), ); }); }); }