Complete OpenAPI 3.0/3.1 generation, diagnostics, lifecycle safety, enum and naming mappings, bilingual documentation, examples, and pub.dev release validation.
121 lines
3.9 KiB
Dart
121 lines
3.9 KiB
Dart
import 'dart:convert';
|
|
import 'dart:io';
|
|
|
|
import 'package:path/path.dart' as p;
|
|
import 'package:test/test.dart';
|
|
|
|
void main() {
|
|
test('top-level help is in English', () async {
|
|
final result = await _runCli(<String>['--help']);
|
|
|
|
expect(result.exitCode, 0, reason: result.stderr.toString());
|
|
expect(result.stdout.toString(), contains('Usage:'));
|
|
expect(result.stdout.toString(), contains('Available commands:'));
|
|
expect(result.stdout.toString(), contains('generate'));
|
|
expect(result.stdout.toString(), isNot(contains('用法')));
|
|
});
|
|
|
|
test('generate help documents command options in English', () async {
|
|
final result = await _runCli(<String>['generate', '--help']);
|
|
|
|
expect(result.exitCode, 0, reason: result.stderr.toString());
|
|
expect(
|
|
result.stdout.toString(),
|
|
contains('Generate API clients and models.'),
|
|
);
|
|
expect(result.stdout.toString(), contains('--config'));
|
|
expect(result.stdout.toString(), contains('--dry-run'));
|
|
expect(result.stdout.toString(), contains('--watch'));
|
|
expect(result.stdout.toString(), isNot(contains('显示帮助')));
|
|
});
|
|
|
|
test('invalid arguments report an English usage error', () async {
|
|
final result = await _runCli(<String>['--unknown']);
|
|
|
|
expect(result.exitCode, 64);
|
|
expect(result.stderr.toString(), startsWith('Error:'));
|
|
expect(result.stderr.toString(), contains('Usage:'));
|
|
});
|
|
|
|
test('generation failures are in English by default', () async {
|
|
final directory = await Directory.systemTemp.createTemp(
|
|
'koi_swagger_parser_cli_missing_',
|
|
);
|
|
addTearDown(() => directory.delete(recursive: true));
|
|
final missingConfig = p.join(directory.path, 'missing.yaml');
|
|
final result = await _runCli(<String>[
|
|
'generate',
|
|
'--config',
|
|
missingConfig,
|
|
]);
|
|
|
|
expect(result.exitCode, 1);
|
|
expect(result.stderr.toString(), contains('Generation failed.'));
|
|
expect(
|
|
result.stderr.toString(),
|
|
contains('Run with --verbose to see the underlying error.'),
|
|
);
|
|
expect(result.stderr.toString(), isNot(contains('生成失败')));
|
|
});
|
|
|
|
test(
|
|
'generate --dry-run reports planned writes without touching output',
|
|
() async {
|
|
final directory = await Directory.systemTemp.createTemp(
|
|
'koi_swagger_parser_cli_',
|
|
);
|
|
addTearDown(() => directory.delete(recursive: true));
|
|
final source = File(p.join(directory.path, 'openapi.json'));
|
|
await source.writeAsString(
|
|
jsonEncode(<String, Object?>{
|
|
'openapi': '3.1.0',
|
|
'info': <String, Object?>{'title': 'CLI', 'version': '1'},
|
|
'paths': <String, Object?>{
|
|
'/health': <String, Object?>{
|
|
'get': <String, Object?>{
|
|
'operationId': 'health',
|
|
'responses': <String, Object?>{
|
|
'204': <String, Object?>{'description': 'healthy'},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
}),
|
|
);
|
|
final output = p.join(directory.path, 'lib', 'src');
|
|
final config = File(p.join(directory.path, 'koi_swagger_parser.yaml'));
|
|
await config.writeAsString('''
|
|
input:
|
|
swagger_urls:
|
|
- ${source.path}
|
|
output:
|
|
base_dir: $output
|
|
api_dir: ${p.join(output, 'api')}
|
|
models_dir: ${p.join(output, 'models')}
|
|
formatting:
|
|
run_dart_format: false
|
|
''');
|
|
|
|
final result = await _runCli(<String>[
|
|
'generate',
|
|
'--config',
|
|
config.path,
|
|
'--dry-run',
|
|
]);
|
|
|
|
expect(result.exitCode, 0, reason: result.stderr.toString());
|
|
expect(result.stdout.toString(), contains('dry-run:'));
|
|
expect(result.stdout.toString(), contains('would be written'));
|
|
expect(Directory(output).existsSync(), isFalse);
|
|
},
|
|
);
|
|
}
|
|
|
|
Future<ProcessResult> _runCli(List<String> arguments) {
|
|
return Process.run(Platform.resolvedExecutable, <String>[
|
|
'run',
|
|
'koi_swagger_parser',
|
|
...arguments,
|
|
], workingDirectory: Directory.current.path);
|
|
}
|