136 lines
4.1 KiB
Dart
136 lines
4.1 KiB
Dart
import 'dart:io';
|
|
|
|
import 'package:swagger_generator_flutter/core/template_renderer.dart';
|
|
import 'package:test/test.dart';
|
|
|
|
void main() {
|
|
group('TemplateRenderer', () {
|
|
late TemplateRenderer renderer;
|
|
|
|
setUp(() {
|
|
renderer = TemplateRenderer();
|
|
});
|
|
|
|
test('renders file header template', () {
|
|
final result = renderer.render('common/file_header', {
|
|
'description': 'Test API',
|
|
'apiUrl': 'https://api.example.com',
|
|
});
|
|
|
|
expect(result, contains('Test API'));
|
|
expect(result, contains('https://api.example.com'));
|
|
expect(result, contains('xy_swagger_generator'));
|
|
});
|
|
|
|
test('renders imports template', () {
|
|
final result = renderer.render('common/imports', {
|
|
'imports': [
|
|
'package:dio/dio.dart',
|
|
'package:retrofit/retrofit.dart',
|
|
],
|
|
});
|
|
|
|
expect(result, contains("import 'package:dio/dio.dart';"));
|
|
expect(result, contains("import 'package:retrofit/retrofit.dart';"));
|
|
});
|
|
|
|
test('renders API class template', () {
|
|
final result = renderer.render('api/api_class', {
|
|
'description': 'User API',
|
|
'imports': ['package:dio/dio.dart'],
|
|
'className': 'UserApi',
|
|
'hasRestApi': true,
|
|
'baseUrl': 'https://api.example.com',
|
|
'hasRetrofit': true,
|
|
'docLines': ['User API 接口', '管理用户相关操作'],
|
|
'methods': [
|
|
{
|
|
'methodName': 'getUser',
|
|
'returnType': 'BaseResult<User>',
|
|
'docLines': ['获取用户信息'],
|
|
'annotations': ["@GET('/users/{id}')"],
|
|
'params': [
|
|
{'annotation': "@Path('id')", 'type': 'String', 'name': 'id'},
|
|
],
|
|
},
|
|
],
|
|
});
|
|
|
|
expect(result, contains('abstract class UserApi'));
|
|
expect(result, contains('@RestApi'));
|
|
expect(result, contains('factory UserApi'));
|
|
expect(result, contains('Future<BaseResult<User>> getUser'));
|
|
expect(result, contains("@GET('/users/{id}')"));
|
|
});
|
|
|
|
test('renders freezed model template', () {
|
|
final result = renderer.render('models/freezed_model', {
|
|
'description': 'User Model',
|
|
'className': 'User',
|
|
'partFile': 'user',
|
|
'docLines': ['用户模型'],
|
|
'properties': [
|
|
{
|
|
'name': 'id',
|
|
'type': 'String',
|
|
'required': true,
|
|
},
|
|
{
|
|
'name': 'name',
|
|
'type': 'String',
|
|
'required': true,
|
|
},
|
|
{
|
|
'name': 'email',
|
|
'type': 'String',
|
|
'nullable': true,
|
|
},
|
|
],
|
|
});
|
|
|
|
expect(result, contains('class User'));
|
|
expect(result, contains('@freezed'));
|
|
expect(result, contains('required String id'));
|
|
expect(result, contains('required String name'));
|
|
expect(result, contains('String? email'));
|
|
});
|
|
|
|
test('renders enum model template', () {
|
|
final result = renderer.render('models/enum_model', {
|
|
'description': 'User Status',
|
|
'className': 'UserStatus',
|
|
'docLines': ['用户状态枚举'],
|
|
'valueType': 'String',
|
|
'values': [
|
|
{'name': 'active', 'value': "'active'"},
|
|
{'name': 'inactive', 'value': "'inactive'"},
|
|
],
|
|
});
|
|
|
|
expect(result, contains('enum UserStatus'));
|
|
expect(result, contains('@JsonEnum()'));
|
|
expect(result, contains('active'));
|
|
expect(result, contains('inactive'));
|
|
});
|
|
|
|
test('prefers file template over embedded templates', () async {
|
|
final tempDir = await Directory.systemTemp.createTemp('tmpl_test');
|
|
final customHeader = File(
|
|
'${tempDir.path}/common/file_header.mustache',
|
|
);
|
|
await customHeader.create(recursive: true);
|
|
await customHeader.writeAsString('// from file {{description}}');
|
|
|
|
final fileRenderer = TemplateRenderer(templateRoot: tempDir.path);
|
|
final result = fileRenderer.render('common/file_header', {
|
|
'description': 'Custom',
|
|
'apiUrl': 'https://api.example.com',
|
|
});
|
|
|
|
expect(result, contains('from file Custom'));
|
|
|
|
await tempDir.delete(recursive: true);
|
|
});
|
|
});
|
|
}
|