Files
mr.koi 454e6c51d7 Release 0.2.0
Complete OpenAPI 3.0/3.1 generation, diagnostics, lifecycle safety, enum and naming mappings, bilingual documentation, examples, and pub.dev release validation.
2026-07-31 16:47:39 +08:00

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