1+ {% macro sub_schema(definitions , property ) %}{% if property .sub_schema %}{% if property .type == ' array' %}List< <String , dynamic >>{% else %}<String , dynamic >{
2+ {% if definitions [property .sub_schema ] %}{% for property in definitions [property .sub_schema ].properties | filter(p => p .required ) %}
3+ '{{property .name | escapeDollarSign }}': {% if property .type == ' object' %}{% if property .sub_schema and (property .sub_schema != ' prefs' and property .sub_schema != ' preferences' ) %}{{_self.sub_schema (spec .definitions , property )}}{% else %}<String , dynamic >{}{% endif %}{% elseif property .type == ' array' %}[]{% elseif property .type == ' string' %}'{{property .example | escapeDollarSign }}'{% elseif property .type == ' boolean' %}true{% else %}{{property .example }}{% endif %},
4+ {% endfor %}{% endif %}}{% endif %}{% else %}{% if property .type == ' object' and property .additionalProperties %}Map<String , dynamic >{% else %}{{property | typeName }}{% endif %}{% endif %}{% endmacro %}
5+ {% import ' flutter/base/utils.twig' as utils %}
6+ {% if ' dart' in language .params .packageName %}
7+ import 'package:test/test.dart';
8+ {% else %}
9+ import 'package:flutter_test/flutter_test.dart';
10+ {% endif %}
11+ import 'package:mockito/mockito.dart';
12+ import 'package:{{ language .params .packageName }}/models.dart' as models;
13+ import 'package:{{ language .params .packageName }}/enums.dart' as enums;
14+ import 'package:{{ language .params .packageName }}/src/enums.dart';
15+ import 'package:{{ language .params .packageName }}/src/response.dart';
16+ import 'dart:typed_data';
17+ import 'package:{{ language .params .packageName }}/{{ language .params .packageName }}.dart';
18+
19+ class MockClient extends Mock implements Client {
20+ Map<String , String > config = {'project': 'testproject'};
21+ String endPoint = 'https://localhost/v1';
22+ @override
23+ Future<Response > call(
24+ HttpMethod? method, {
25+ String path = '',
26+ Map<String , String > headers = const {},
27+ Map<String , dynamic > params = const {},
28+ ResponseType? responseType,
29+ }) async {
30+ return super.noSuchMethod(Invocation.method(#call, [method]),
31+ returnValue: Response());
32+ }
33+
34+ @override
35+ Future webAuth(
36+ Uri? url,
37+ {
38+ String? callbackUrlScheme,
39+ }
40+ ) async {
41+ return super.noSuchMethod(Invocation.method(#webAuth, [url]), returnValue: 'done');
42+ }
43+
44+ @override
45+ Future<Response > chunkedUpload({
46+ String? path,
47+ Map<String , dynamic >? params,
48+ String? paramName,
49+ String? idParamName,
50+ Map<String , String >? headers,
51+ Function(UploadProgress)? onProgress,
52+ }) async {
53+ return super.noSuchMethod(Invocation.method(#chunkedUpload, [path, params, paramName, idParamName, headers]), returnValue: Response(data: {}));
54+ }
55+ }
56+
57+ void main() {
58+ group('{{service .name | caseUcfirst }} test', () {
59+ late MockClient client;
60+ late {{service .name | caseUcfirst }} {{service .name | caseCamel }};
61+
62+ setUp(() {
63+ client = MockClient();
64+ {{service .name | caseCamel }} = {{service .name | caseUcfirst }}(client);
65+ });
66+
67+ {% for method in service .methods %}
68+ test('test method {{method .name | caseCamel }}()', () async {
69+ {%- if method .type == ' webAuth' -%}
70+ {%~ elseif method .type == ' location' -%}
71+ final Uint8List data = Uint8List.fromList([]);
72+ {%- else -%}
73+
74+ {%~ if method .responseModel and method .responseModel != ' any' ~%}
75+ final Map<String , dynamic > data = {
76+ {%- for definition in spec .definitions ~%}{%~ if definition .name == method .responseModel -%}{%~ for property in definition .properties | filter((param ) => param .required ) ~%}
77+ '{{property .name | escapeDollarSign }}': {% if property .type == ' object' %}{% if property .sub_schema and (property .sub_schema != ' prefs' and property .sub_schema != ' preferences' ) %}{{_self.sub_schema (spec .definitions , property )}}{% else %}<String , dynamic >{}{% endif %}{% elseif property .type == ' array' %}[]{% elseif property .type == ' string' %}'{{property .example | escapeDollarSign }}'{% elseif property .type == ' boolean' %}true{% else %}{{property .example }}{% endif %},{%~ endfor ~%}{% set break = true %}{%- else -%}{% set continue = true %}{%- endif -%}{%~ endfor -%}
78+
79+ };
80+ {%~ else ~%}
81+ final data = '';
82+ {%- endif -%}
83+ {% endif %}
84+
85+ {%~ if method .type == ' webAuth' ~%}
86+ when(client.webAuth(
87+ Uri(),
88+ )).thenAnswer((_) async => 'done');
89+ {%~ elseif ' multipart/form-data' in method .consumes ~%}
90+ when(client.chunkedUpload(
91+ path: argThat(isNotNull),
92+ params: argThat(isNotNull),
93+ paramName: argThat(isNotNull),
94+ idParamName: argThat(isNotNull),
95+ headers: argThat(isNotNull),
96+ )).thenAnswer((_) async => Response(data: data));
97+ {%~ else ~%}
98+ when(client.call(
99+ HttpMethod.{{method .method | caseLower }},
100+ )).thenAnswer((_) async => Response(data: data));
101+ {%~ endif ~%}
102+
103+ final response = await {{service .name | caseCamel }}.{{method .name | caseCamel }}({%~ for parameter in method .parameters .all | filter((param ) => param .required ) ~%}
104+ {{parameter .name | escapeKeyword | caseCamel }}: {% if parameter .enumValues | length > 0%}{{ parameter | typeName }}.{{ (parameter .enumKeys [0 ] ?? parameter .enumValues [0 ]) | caseEnumKey }}{% elseif parameter .type == ' object' %}{}{% elseif parameter .type == ' array' %}[]{% elseif parameter .type == ' file' %}InputFile.fromPath(path: './image.png'){% elseif parameter .type == ' boolean' %}true{% elseif parameter .type == ' string' %}'{% if parameter .example is not empty %}{{parameter .example | escapeDollarSign }}{% endif %}'{% elseif parameter .type == ' integer' and parameter [' x-example' ] is empty %}1{% elseif parameter .type == ' number' and parameter [' x-example' ] is empty %}1.0{% else %}{{parameter .example }}{%~ endif ~%},{%~ endfor ~%}
105+ );
106+
107+ {%- if method .type == ' location' ~%}
108+ expect(response, isA<Uint8List >());
109+ {%~ endif ~%}{%~ if method .responseModel and method .responseModel != ' any' ~%}
110+ expect(response, isA<models .{{method .responseModel | caseUcfirst | overrideIdentifier }}>());
111+ {%~ endif ~%}
112+ });
113+
114+ {% endfor %}
115+ });
116+ }
0 commit comments