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.
This commit is contained in:
@@ -0,0 +1,120 @@
|
||||
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);
|
||||
}
|
||||
Reference in New Issue
Block a user