From ad15c05ca038528c82b28fdf89aade5d78073c23 Mon Sep 17 00:00:00 2001 From: Mark Abramenko Date: Fri, 11 Oct 2024 20:40:12 +0300 Subject: [PATCH 1/2] fix: Add definitions parsing for OpenAPI 2.0 --- .../lib/src/parser/corrector/open_api_corrector.dart | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/swagger_parser/lib/src/parser/corrector/open_api_corrector.dart b/swagger_parser/lib/src/parser/corrector/open_api_corrector.dart index aad1a884..ba9fcd4c 100644 --- a/swagger_parser/lib/src/parser/corrector/open_api_corrector.dart +++ b/swagger_parser/lib/src/parser/corrector/open_api_corrector.dart @@ -21,13 +21,18 @@ class OpenApiCorrector { ? json.decode(fileContent) as Map : (loadYaml(fileContent) as YamlMap).toMap(); + // OpenAPI 3.0 and 3.1 final components = definitionFileContent['components'] as Map?; final schemes = components?['schemas'] as Map?; + // OpenAPI 2.0 + final definitions = definitionFileContent['definitions'] as Map?; - if (schemes != null) { + final models = schemes ?? definitions; + + if (models != null) { // Apply replacement rules to all class names and format to PascalCase - for (final type in schemes.keys) { + for (final type in models.keys) { var correctType = type; for (final rule in config.replacementRules) { From 9ad48d4d097c783d4469b5ded5131215e86ac85b Mon Sep 17 00:00:00 2001 From: Mark Abramenko Date: Fri, 11 Oct 2024 20:40:33 +0300 Subject: [PATCH 2/2] test: Add test cases for replacement rules chore: Dart format fix: Remove deleting from tests --- .../parser/corrector/open_api_corrector.dart | 3 +- swagger_parser/test/e2e/e2e_test.dart | 33 ++++ .../expected_files/clients/client_client.dart | 51 +++++++ .../expected_files/export.dart | 14 ++ .../expected_files/models/error_dto.dart | 23 +++ .../expected_files/models/lizt_dto.dart | 21 +++ .../expected_files/models/new_pet_dto.dart | 27 ++++ .../models/new_pet_dto_action_dto.dart | 27 ++++ .../expected_files/models/pet_dto.dart | 28 ++++ .../expected_files/rest_client.dart | 25 ++++ .../basic/replacement_rules.2.0/openapi.yaml | 141 ++++++++++++++++++ .../expected_files/clients/client_client.dart | 54 +++++++ .../expected_files/export.dart | 24 +++ .../models/class_name1_dto.dart | 5 + .../models/class_name2_dto.dart | 5 + .../models/class_name3_dto.dart | 5 + .../models/class_name56_dto.dart | 5 + .../models/class_name5_dto.dart | 5 + .../expected_files/models/data1_att_dto.dart | 5 + .../expected_files/models/data_att2_dto.dart | 5 + .../expected_files/models/data_att4_dto.dart | 5 + .../expected_files/models/enum0_dto.dart | 28 ++++ .../expected_files/models/object0_dto.dart | 18 +++ .../expected_files/models/object1_dto.dart | 22 +++ .../expected_files/models/p1_class_dto.dart | 18 +++ .../expected_files/models/p2_enum_dto.dart | 27 ++++ .../models/private_att_data3_dto.dart | 5 + .../models/private_class_name4_dto.dart | 5 + .../expected_files/rest_client.dart | 25 ++++ .../basic/replacement_rules.3.1/openapi.yaml | 114 ++++++++++++++ 30 files changed, 772 insertions(+), 1 deletion(-) create mode 100644 swagger_parser/test/e2e/tests/basic/replacement_rules.2.0/expected_files/clients/client_client.dart create mode 100644 swagger_parser/test/e2e/tests/basic/replacement_rules.2.0/expected_files/export.dart create mode 100644 swagger_parser/test/e2e/tests/basic/replacement_rules.2.0/expected_files/models/error_dto.dart create mode 100644 swagger_parser/test/e2e/tests/basic/replacement_rules.2.0/expected_files/models/lizt_dto.dart create mode 100644 swagger_parser/test/e2e/tests/basic/replacement_rules.2.0/expected_files/models/new_pet_dto.dart create mode 100644 swagger_parser/test/e2e/tests/basic/replacement_rules.2.0/expected_files/models/new_pet_dto_action_dto.dart create mode 100644 swagger_parser/test/e2e/tests/basic/replacement_rules.2.0/expected_files/models/pet_dto.dart create mode 100644 swagger_parser/test/e2e/tests/basic/replacement_rules.2.0/expected_files/rest_client.dart create mode 100644 swagger_parser/test/e2e/tests/basic/replacement_rules.2.0/openapi.yaml create mode 100644 swagger_parser/test/e2e/tests/basic/replacement_rules.3.1/expected_files/clients/client_client.dart create mode 100644 swagger_parser/test/e2e/tests/basic/replacement_rules.3.1/expected_files/export.dart create mode 100644 swagger_parser/test/e2e/tests/basic/replacement_rules.3.1/expected_files/models/class_name1_dto.dart create mode 100644 swagger_parser/test/e2e/tests/basic/replacement_rules.3.1/expected_files/models/class_name2_dto.dart create mode 100644 swagger_parser/test/e2e/tests/basic/replacement_rules.3.1/expected_files/models/class_name3_dto.dart create mode 100644 swagger_parser/test/e2e/tests/basic/replacement_rules.3.1/expected_files/models/class_name56_dto.dart create mode 100644 swagger_parser/test/e2e/tests/basic/replacement_rules.3.1/expected_files/models/class_name5_dto.dart create mode 100644 swagger_parser/test/e2e/tests/basic/replacement_rules.3.1/expected_files/models/data1_att_dto.dart create mode 100644 swagger_parser/test/e2e/tests/basic/replacement_rules.3.1/expected_files/models/data_att2_dto.dart create mode 100644 swagger_parser/test/e2e/tests/basic/replacement_rules.3.1/expected_files/models/data_att4_dto.dart create mode 100644 swagger_parser/test/e2e/tests/basic/replacement_rules.3.1/expected_files/models/enum0_dto.dart create mode 100644 swagger_parser/test/e2e/tests/basic/replacement_rules.3.1/expected_files/models/object0_dto.dart create mode 100644 swagger_parser/test/e2e/tests/basic/replacement_rules.3.1/expected_files/models/object1_dto.dart create mode 100644 swagger_parser/test/e2e/tests/basic/replacement_rules.3.1/expected_files/models/p1_class_dto.dart create mode 100644 swagger_parser/test/e2e/tests/basic/replacement_rules.3.1/expected_files/models/p2_enum_dto.dart create mode 100644 swagger_parser/test/e2e/tests/basic/replacement_rules.3.1/expected_files/models/private_att_data3_dto.dart create mode 100644 swagger_parser/test/e2e/tests/basic/replacement_rules.3.1/expected_files/models/private_class_name4_dto.dart create mode 100644 swagger_parser/test/e2e/tests/basic/replacement_rules.3.1/expected_files/rest_client.dart create mode 100644 swagger_parser/test/e2e/tests/basic/replacement_rules.3.1/openapi.yaml diff --git a/swagger_parser/lib/src/parser/corrector/open_api_corrector.dart b/swagger_parser/lib/src/parser/corrector/open_api_corrector.dart index ba9fcd4c..1a7835ce 100644 --- a/swagger_parser/lib/src/parser/corrector/open_api_corrector.dart +++ b/swagger_parser/lib/src/parser/corrector/open_api_corrector.dart @@ -26,7 +26,8 @@ class OpenApiCorrector { definitionFileContent['components'] as Map?; final schemes = components?['schemas'] as Map?; // OpenAPI 2.0 - final definitions = definitionFileContent['definitions'] as Map?; + final definitions = + definitionFileContent['definitions'] as Map?; final models = schemes ?? definitions; diff --git a/swagger_parser/test/e2e/e2e_test.dart b/swagger_parser/test/e2e/e2e_test.dart index e8d8b3a0..078815a9 100644 --- a/swagger_parser/test/e2e/e2e_test.dart +++ b/swagger_parser/test/e2e/e2e_test.dart @@ -249,6 +249,39 @@ void main() { ); }); + test('replacement_rules.2.0', () async { + await e2eTest( + 'basic/replacement_rules.2.0', + (outputDirectory, schemaPath) => SWPConfig( + outputDirectory: outputDirectory, + schemaPath: schemaPath, + putClientsInFolder: true, + replacementRules: [ + ReplacementRule(pattern: RegExp('List'), replacement: 'Lizt'), + ReplacementRule(pattern: RegExp(r'$'), replacement: 'DTO'), + ], + ), + schemaFileName: 'openapi.yaml', + ); + }); + + test('replacement_rules.3.1', () async { + await e2eTest( + 'basic/replacement_rules.3.1', + (outputDirectory, schemaPath) => SWPConfig( + outputDirectory: outputDirectory, + schemaPath: schemaPath, + jsonSerializer: JsonSerializer.freezed, + putClientsInFolder: true, + replacementRules: [ + ReplacementRule(pattern: RegExp('V1'), replacement: ''), + ReplacementRule(pattern: RegExp(r'$'), replacement: 'DTO'), + ], + ), + schemaFileName: 'openapi.yaml', + ); + }); + test('wrapping_collections.2.0', () async { await e2eTest( 'basic/wrapping_collections.2.0', diff --git a/swagger_parser/test/e2e/tests/basic/replacement_rules.2.0/expected_files/clients/client_client.dart b/swagger_parser/test/e2e/tests/basic/replacement_rules.2.0/expected_files/clients/client_client.dart new file mode 100644 index 00000000..1ed8699e --- /dev/null +++ b/swagger_parser/test/e2e/tests/basic/replacement_rules.2.0/expected_files/clients/client_client.dart @@ -0,0 +1,51 @@ +// coverage:ignore-file +// GENERATED CODE - DO NOT MODIFY BY HAND +// ignore_for_file: type=lint, unused_import + +import 'package:dio/dio.dart'; +import 'package:retrofit/retrofit.dart'; + +import '../models/new_pet_dto.dart'; +import '../models/pet_dto.dart'; + +part 'client_client.g.dart'; + +@RestApi() +abstract class ClientClient { + factory ClientClient(Dio dio, {String? baseUrl}) = _ClientClient; + + /// Returns all pets from the system that the user has access to. + /// + /// [tags] - tags to filter by. + /// + /// [limit] - maximum number of results to return. + @GET('/pets') + Future> findPets({ + @Query('tags') List? tags, + @Query('limit') int? limit, + }); + + /// Creates a new pet in the store. Duplicates are allowed. + /// + /// [pet] - PetDto to add to the store. + @POST('/pets') + Future addPet({ + @Body() required NewPetDto pet, + }); + + /// Returns a user based on a single ID, if the user does not have access to the pet. + /// + /// [id] - ID of pet to fetch. + @GET('/pets/{id}') + Future findPetById({ + @Path('id') required int id, + }); + + /// deletes a single pet based on the ID supplied. + /// + /// [id] - ID of pet to delete. + @DELETE('/pets/{id}') + Future deletePet({ + @Path('id') required int id, + }); +} diff --git a/swagger_parser/test/e2e/tests/basic/replacement_rules.2.0/expected_files/export.dart b/swagger_parser/test/e2e/tests/basic/replacement_rules.2.0/expected_files/export.dart new file mode 100644 index 00000000..87ab41e7 --- /dev/null +++ b/swagger_parser/test/e2e/tests/basic/replacement_rules.2.0/expected_files/export.dart @@ -0,0 +1,14 @@ +// coverage:ignore-file +// GENERATED CODE - DO NOT MODIFY BY HAND +// ignore_for_file: type=lint, unused_import + +// Clients +export 'clients/client_client.dart'; +// Data classes +export 'models/pet_dto.dart'; +export 'models/new_pet_dto.dart'; +export 'models/error_dto.dart'; +export 'models/lizt_dto.dart'; +export 'models/new_pet_dto_action_dto.dart'; +// Root client +export 'rest_client.dart'; diff --git a/swagger_parser/test/e2e/tests/basic/replacement_rules.2.0/expected_files/models/error_dto.dart b/swagger_parser/test/e2e/tests/basic/replacement_rules.2.0/expected_files/models/error_dto.dart new file mode 100644 index 00000000..ae0043f4 --- /dev/null +++ b/swagger_parser/test/e2e/tests/basic/replacement_rules.2.0/expected_files/models/error_dto.dart @@ -0,0 +1,23 @@ +// coverage:ignore-file +// GENERATED CODE - DO NOT MODIFY BY HAND +// ignore_for_file: type=lint, unused_import + +import 'package:json_annotation/json_annotation.dart'; + +part 'error_dto.g.dart'; + +@JsonSerializable() +class ErrorDto { + const ErrorDto({ + required this.code, + required this.message, + }); + + factory ErrorDto.fromJson(Map json) => + _$ErrorDtoFromJson(json); + + final int code; + final String message; + + Map toJson() => _$ErrorDtoToJson(this); +} diff --git a/swagger_parser/test/e2e/tests/basic/replacement_rules.2.0/expected_files/models/lizt_dto.dart b/swagger_parser/test/e2e/tests/basic/replacement_rules.2.0/expected_files/models/lizt_dto.dart new file mode 100644 index 00000000..01501898 --- /dev/null +++ b/swagger_parser/test/e2e/tests/basic/replacement_rules.2.0/expected_files/models/lizt_dto.dart @@ -0,0 +1,21 @@ +// coverage:ignore-file +// GENERATED CODE - DO NOT MODIFY BY HAND +// ignore_for_file: type=lint, unused_import + +import 'package:json_annotation/json_annotation.dart'; + +part 'lizt_dto.g.dart'; + +@JsonSerializable() +class LiztDto { + const LiztDto({ + required this.message, + }); + + factory LiztDto.fromJson(Map json) => + _$LiztDtoFromJson(json); + + final String message; + + Map toJson() => _$LiztDtoToJson(this); +} diff --git a/swagger_parser/test/e2e/tests/basic/replacement_rules.2.0/expected_files/models/new_pet_dto.dart b/swagger_parser/test/e2e/tests/basic/replacement_rules.2.0/expected_files/models/new_pet_dto.dart new file mode 100644 index 00000000..8abdcdef --- /dev/null +++ b/swagger_parser/test/e2e/tests/basic/replacement_rules.2.0/expected_files/models/new_pet_dto.dart @@ -0,0 +1,27 @@ +// coverage:ignore-file +// GENERATED CODE - DO NOT MODIFY BY HAND +// ignore_for_file: type=lint, unused_import + +import 'package:json_annotation/json_annotation.dart'; + +import 'new_pet_dto_action_dto.dart'; + +part 'new_pet_dto.g.dart'; + +@JsonSerializable() +class NewPetDto { + const NewPetDto({ + required this.name, + required this.tag, + required this.action, + }); + + factory NewPetDto.fromJson(Map json) => + _$NewPetDtoFromJson(json); + + final String name; + final String tag; + final NewPetDtoActionDto action; + + Map toJson() => _$NewPetDtoToJson(this); +} diff --git a/swagger_parser/test/e2e/tests/basic/replacement_rules.2.0/expected_files/models/new_pet_dto_action_dto.dart b/swagger_parser/test/e2e/tests/basic/replacement_rules.2.0/expected_files/models/new_pet_dto_action_dto.dart new file mode 100644 index 00000000..eb3851ff --- /dev/null +++ b/swagger_parser/test/e2e/tests/basic/replacement_rules.2.0/expected_files/models/new_pet_dto_action_dto.dart @@ -0,0 +1,27 @@ +// coverage:ignore-file +// GENERATED CODE - DO NOT MODIFY BY HAND +// ignore_for_file: type=lint, unused_import + +import 'package:json_annotation/json_annotation.dart'; + +@JsonEnum() +enum NewPetDtoActionDto { + @JsonValue('one') + one('one'), + @JsonValue('other') + other('other'), + @JsonValue('another') + another('another'), + + /// Default value for all unparsed values, allows backward compatibility when adding new values on the backend. + $unknown(null); + + const NewPetDtoActionDto(this.json); + + factory NewPetDtoActionDto.fromJson(String json) => values.firstWhere( + (e) => e.json == json, + orElse: () => $unknown, + ); + + final String? json; +} diff --git a/swagger_parser/test/e2e/tests/basic/replacement_rules.2.0/expected_files/models/pet_dto.dart b/swagger_parser/test/e2e/tests/basic/replacement_rules.2.0/expected_files/models/pet_dto.dart new file mode 100644 index 00000000..ba7f0691 --- /dev/null +++ b/swagger_parser/test/e2e/tests/basic/replacement_rules.2.0/expected_files/models/pet_dto.dart @@ -0,0 +1,28 @@ +// coverage:ignore-file +// GENERATED CODE - DO NOT MODIFY BY HAND +// ignore_for_file: type=lint, unused_import + +import 'package:json_annotation/json_annotation.dart'; + +import 'new_pet_dto_action_dto.dart'; + +part 'pet_dto.g.dart'; + +@JsonSerializable() +class PetDto { + const PetDto({ + required this.name, + required this.tag, + required this.action, + required this.id, + }); + + factory PetDto.fromJson(Map json) => _$PetDtoFromJson(json); + + final String name; + final String tag; + final NewPetDtoActionDto action; + final int id; + + Map toJson() => _$PetDtoToJson(this); +} diff --git a/swagger_parser/test/e2e/tests/basic/replacement_rules.2.0/expected_files/rest_client.dart b/swagger_parser/test/e2e/tests/basic/replacement_rules.2.0/expected_files/rest_client.dart new file mode 100644 index 00000000..a5017a38 --- /dev/null +++ b/swagger_parser/test/e2e/tests/basic/replacement_rules.2.0/expected_files/rest_client.dart @@ -0,0 +1,25 @@ +// coverage:ignore-file +// GENERATED CODE - DO NOT MODIFY BY HAND +// ignore_for_file: type=lint, unused_import + +import 'package:dio/dio.dart'; + +import 'clients/client_client.dart'; + +/// Swagger Petstore `v1.0.0` +class RestClient { + RestClient( + Dio dio, { + String? baseUrl, + }) : _dio = dio, + _baseUrl = baseUrl; + + final Dio _dio; + final String? _baseUrl; + + static String get version => '1.0.0'; + + ClientClient? _client; + + ClientClient get client => _client ??= ClientClient(_dio, baseUrl: _baseUrl); +} diff --git a/swagger_parser/test/e2e/tests/basic/replacement_rules.2.0/openapi.yaml b/swagger_parser/test/e2e/tests/basic/replacement_rules.2.0/openapi.yaml new file mode 100644 index 00000000..2f5df14b --- /dev/null +++ b/swagger_parser/test/e2e/tests/basic/replacement_rules.2.0/openapi.yaml @@ -0,0 +1,141 @@ +swagger: "2.0" +info: + version: 1.0.0 + title: Swagger Petstore +host: petstore.swagger.io +basePath: /api +paths: + /pets: + get: + description: | + Returns all pets from the system that the user has access to + operationId: findPets + parameters: + - name: tags + in: query + description: tags to filter by + required: false + type: array + collectionFormat: csv + items: + type: string + - name: limit + in: query + description: maximum number of results to return + required: false + type: integer + format: int32 + responses: + "200": + description: pet response + schema: + type: array + items: + $ref: '#/definitions/Pet' + default: + description: unexpected error + schema: + $ref: '#/definitions/Error' + post: + description: Creates a new pet in the store. Duplicates are allowed + operationId: addPet + parameters: + - name: pet + in: body + description: Pet to add to the store + required: true + schema: + $ref: '#/definitions/NewPet' + responses: + "200": + description: pet response + schema: + $ref: '#/definitions/Pet' + default: + description: unexpected error + schema: + $ref: '#/definitions/Error' + /pets/{id}: + get: + description: Returns a user based on a single ID, if the user does not have access to the pet + operationId: find pet by id + parameters: + - name: id + in: path + description: ID of pet to fetch + required: true + type: integer + format: int64 + responses: + "200": + description: pet response + schema: + $ref: '#/definitions/Pet' + default: + description: unexpected error + schema: + $ref: '#/definitions/Error' + delete: + description: deletes a single pet based on the ID supplied + operationId: deletePet + parameters: + - name: id + in: path + description: ID of pet to delete + required: true + type: integer + format: int64 + responses: + "204": + description: pet deleted + default: + description: unexpected error + schema: + $ref: '#/definitions/Error' +definitions: + Pet: + allOf: + - $ref: '#/definitions/NewPet' + - required: + - id + type: "object" + properties: + id: + type: integer + format: int64 + + NewPet: + type: "object" + required: + - name + properties: + name: + type: string + tag: + type: string + action: + type: string + enum: + - one + - other + - another + + Error: + type: "object" + required: + - code + - message + properties: + code: + type: integer + format: int32 + message: + type: string + + List: + type: "object" + required: + - message + properties: + message: + type: string \ No newline at end of file diff --git a/swagger_parser/test/e2e/tests/basic/replacement_rules.3.1/expected_files/clients/client_client.dart b/swagger_parser/test/e2e/tests/basic/replacement_rules.3.1/expected_files/clients/client_client.dart new file mode 100644 index 00000000..3c798ebd --- /dev/null +++ b/swagger_parser/test/e2e/tests/basic/replacement_rules.3.1/expected_files/clients/client_client.dart @@ -0,0 +1,54 @@ +// coverage:ignore-file +// GENERATED CODE - DO NOT MODIFY BY HAND +// ignore_for_file: type=lint, unused_import + +import 'dart:convert'; +import 'package:dio/dio.dart'; +import 'package:retrofit/retrofit.dart'; + +import '../models/class_name1_dto.dart'; +import '../models/class_name2_dto.dart'; +import '../models/class_name3_dto.dart'; +import '../models/class_name56_dto.dart'; +import '../models/class_name5_dto.dart'; +import '../models/data1_att_dto.dart'; +import '../models/data_att2_dto.dart'; +import '../models/data_att4_dto.dart'; +import '../models/enum0_dto.dart'; +import '../models/object0_dto.dart'; +import '../models/object1_dto.dart'; +import '../models/private_att_data3_dto.dart'; +import '../models/private_class_name4_dto.dart'; + +part 'client_client.g.dart'; + +@RestApi() +abstract class ClientClient { + factory ClientClient(Dio dio, {String? baseUrl}) = _ClientClient; + + /// [p1Class] - Name not received and was auto-generated. + /// + /// [p2Enum] - Name not received and was auto-generated. + @MultiPart() + @GET('/api/v1/') + Future getApiV1({ + @Part(name: 'p1') required ClassName1Dto p1, + @Part(name: 'p3') required ClassName3Dto p3, + @Part(name: 'p5') required ClassName5Dto p5, + @Part(name: 'v1') required Data1AttDto v1, + @Part(name: 'v3') required PrivateAttData3Dto v3, + @Part(name: 'p2') ClassName2Dto? p2, + @Part(name: 'p4') PrivateClassName4Dto? p4, + @Part(name: 'p6') ClassName56Dto? p6, + @Part(name: 'v2') DataAtt2Dto? v2, + @Part(name: 'v4') DataAtt4Dto? v4, + @Part(name: 'p1_class') Object0Dto? p1Class, + @Part(name: 'p2_enum') Enum0Dto? p2Enum, + }); + + /// [body] - Name not received and was auto-generated. + @POST('/api/v1/') + Future postApiV1({ + @Body() Object1Dto? body, + }); +} diff --git a/swagger_parser/test/e2e/tests/basic/replacement_rules.3.1/expected_files/export.dart b/swagger_parser/test/e2e/tests/basic/replacement_rules.3.1/expected_files/export.dart new file mode 100644 index 00000000..cbe79b71 --- /dev/null +++ b/swagger_parser/test/e2e/tests/basic/replacement_rules.3.1/expected_files/export.dart @@ -0,0 +1,24 @@ +// coverage:ignore-file +// GENERATED CODE - DO NOT MODIFY BY HAND +// ignore_for_file: type=lint, unused_import + +// Clients +export 'clients/client_client.dart'; +// Data classes +export 'models/class_name1_dto.dart'; +export 'models/class_name2_dto.dart'; +export 'models/class_name3_dto.dart'; +export 'models/private_class_name4_dto.dart'; +export 'models/class_name5_dto.dart'; +export 'models/class_name56_dto.dart'; +export 'models/data1_att_dto.dart'; +export 'models/data_att2_dto.dart'; +export 'models/private_att_data3_dto.dart'; +export 'models/data_att4_dto.dart'; +export 'models/object0_dto.dart'; +export 'models/p1_class_dto.dart'; +export 'models/object1_dto.dart'; +export 'models/enum0_dto.dart'; +export 'models/p2_enum_dto.dart'; +// Root client +export 'rest_client.dart'; diff --git a/swagger_parser/test/e2e/tests/basic/replacement_rules.3.1/expected_files/models/class_name1_dto.dart b/swagger_parser/test/e2e/tests/basic/replacement_rules.3.1/expected_files/models/class_name1_dto.dart new file mode 100644 index 00000000..f8aff465 --- /dev/null +++ b/swagger_parser/test/e2e/tests/basic/replacement_rules.3.1/expected_files/models/class_name1_dto.dart @@ -0,0 +1,5 @@ +// coverage:ignore-file +// GENERATED CODE - DO NOT MODIFY BY HAND +// ignore_for_file: type=lint, unused_import + +typedef ClassName1Dto = dynamic; diff --git a/swagger_parser/test/e2e/tests/basic/replacement_rules.3.1/expected_files/models/class_name2_dto.dart b/swagger_parser/test/e2e/tests/basic/replacement_rules.3.1/expected_files/models/class_name2_dto.dart new file mode 100644 index 00000000..69627540 --- /dev/null +++ b/swagger_parser/test/e2e/tests/basic/replacement_rules.3.1/expected_files/models/class_name2_dto.dart @@ -0,0 +1,5 @@ +// coverage:ignore-file +// GENERATED CODE - DO NOT MODIFY BY HAND +// ignore_for_file: type=lint, unused_import + +typedef ClassName2Dto = dynamic; diff --git a/swagger_parser/test/e2e/tests/basic/replacement_rules.3.1/expected_files/models/class_name3_dto.dart b/swagger_parser/test/e2e/tests/basic/replacement_rules.3.1/expected_files/models/class_name3_dto.dart new file mode 100644 index 00000000..5e1ad272 --- /dev/null +++ b/swagger_parser/test/e2e/tests/basic/replacement_rules.3.1/expected_files/models/class_name3_dto.dart @@ -0,0 +1,5 @@ +// coverage:ignore-file +// GENERATED CODE - DO NOT MODIFY BY HAND +// ignore_for_file: type=lint, unused_import + +typedef ClassName3Dto = dynamic; diff --git a/swagger_parser/test/e2e/tests/basic/replacement_rules.3.1/expected_files/models/class_name56_dto.dart b/swagger_parser/test/e2e/tests/basic/replacement_rules.3.1/expected_files/models/class_name56_dto.dart new file mode 100644 index 00000000..e1788ac0 --- /dev/null +++ b/swagger_parser/test/e2e/tests/basic/replacement_rules.3.1/expected_files/models/class_name56_dto.dart @@ -0,0 +1,5 @@ +// coverage:ignore-file +// GENERATED CODE - DO NOT MODIFY BY HAND +// ignore_for_file: type=lint, unused_import + +typedef ClassName56Dto = dynamic; diff --git a/swagger_parser/test/e2e/tests/basic/replacement_rules.3.1/expected_files/models/class_name5_dto.dart b/swagger_parser/test/e2e/tests/basic/replacement_rules.3.1/expected_files/models/class_name5_dto.dart new file mode 100644 index 00000000..d13a298c --- /dev/null +++ b/swagger_parser/test/e2e/tests/basic/replacement_rules.3.1/expected_files/models/class_name5_dto.dart @@ -0,0 +1,5 @@ +// coverage:ignore-file +// GENERATED CODE - DO NOT MODIFY BY HAND +// ignore_for_file: type=lint, unused_import + +typedef ClassName5Dto = dynamic; diff --git a/swagger_parser/test/e2e/tests/basic/replacement_rules.3.1/expected_files/models/data1_att_dto.dart b/swagger_parser/test/e2e/tests/basic/replacement_rules.3.1/expected_files/models/data1_att_dto.dart new file mode 100644 index 00000000..2b3afc32 --- /dev/null +++ b/swagger_parser/test/e2e/tests/basic/replacement_rules.3.1/expected_files/models/data1_att_dto.dart @@ -0,0 +1,5 @@ +// coverage:ignore-file +// GENERATED CODE - DO NOT MODIFY BY HAND +// ignore_for_file: type=lint, unused_import + +typedef Data1AttDto = dynamic; diff --git a/swagger_parser/test/e2e/tests/basic/replacement_rules.3.1/expected_files/models/data_att2_dto.dart b/swagger_parser/test/e2e/tests/basic/replacement_rules.3.1/expected_files/models/data_att2_dto.dart new file mode 100644 index 00000000..ad57660d --- /dev/null +++ b/swagger_parser/test/e2e/tests/basic/replacement_rules.3.1/expected_files/models/data_att2_dto.dart @@ -0,0 +1,5 @@ +// coverage:ignore-file +// GENERATED CODE - DO NOT MODIFY BY HAND +// ignore_for_file: type=lint, unused_import + +typedef DataAtt2Dto = dynamic; diff --git a/swagger_parser/test/e2e/tests/basic/replacement_rules.3.1/expected_files/models/data_att4_dto.dart b/swagger_parser/test/e2e/tests/basic/replacement_rules.3.1/expected_files/models/data_att4_dto.dart new file mode 100644 index 00000000..9a9b0b02 --- /dev/null +++ b/swagger_parser/test/e2e/tests/basic/replacement_rules.3.1/expected_files/models/data_att4_dto.dart @@ -0,0 +1,5 @@ +// coverage:ignore-file +// GENERATED CODE - DO NOT MODIFY BY HAND +// ignore_for_file: type=lint, unused_import + +typedef DataAtt4Dto = dynamic; diff --git a/swagger_parser/test/e2e/tests/basic/replacement_rules.3.1/expected_files/models/enum0_dto.dart b/swagger_parser/test/e2e/tests/basic/replacement_rules.3.1/expected_files/models/enum0_dto.dart new file mode 100644 index 00000000..dcfd6619 --- /dev/null +++ b/swagger_parser/test/e2e/tests/basic/replacement_rules.3.1/expected_files/models/enum0_dto.dart @@ -0,0 +1,28 @@ +// coverage:ignore-file +// GENERATED CODE - DO NOT MODIFY BY HAND +// ignore_for_file: type=lint, unused_import + +import 'package:freezed_annotation/freezed_annotation.dart'; + +/// Name not received and was auto-generated. +@JsonEnum() +enum Enum0Dto { + @JsonValue('teV1st1') + teV1st1('teV1st1'), + @JsonValue('V1_test2') + v1Test2('V1_test2'), + @JsonValue('testV13') + testV13('testV13'), + + /// Default value for all unparsed values, allows backward compatibility when adding new values on the backend. + $unknown(null); + + const Enum0Dto(this.json); + + factory Enum0Dto.fromJson(String json) => values.firstWhere( + (e) => e.json == json, + orElse: () => $unknown, + ); + + final String? json; +} diff --git a/swagger_parser/test/e2e/tests/basic/replacement_rules.3.1/expected_files/models/object0_dto.dart b/swagger_parser/test/e2e/tests/basic/replacement_rules.3.1/expected_files/models/object0_dto.dart new file mode 100644 index 00000000..a27a2647 --- /dev/null +++ b/swagger_parser/test/e2e/tests/basic/replacement_rules.3.1/expected_files/models/object0_dto.dart @@ -0,0 +1,18 @@ +// coverage:ignore-file +// GENERATED CODE - DO NOT MODIFY BY HAND +// ignore_for_file: type=lint, unused_import + +import 'package:freezed_annotation/freezed_annotation.dart'; + +part 'object0_dto.freezed.dart'; +part 'object0_dto.g.dart'; + +@Freezed() +class Object0Dto with _$Object0Dto { + const factory Object0Dto({ + required DateTime test, + }) = _Object0Dto; + + factory Object0Dto.fromJson(Map json) => + _$Object0DtoFromJson(json); +} diff --git a/swagger_parser/test/e2e/tests/basic/replacement_rules.3.1/expected_files/models/object1_dto.dart b/swagger_parser/test/e2e/tests/basic/replacement_rules.3.1/expected_files/models/object1_dto.dart new file mode 100644 index 00000000..8dd4f292 --- /dev/null +++ b/swagger_parser/test/e2e/tests/basic/replacement_rules.3.1/expected_files/models/object1_dto.dart @@ -0,0 +1,22 @@ +// coverage:ignore-file +// GENERATED CODE - DO NOT MODIFY BY HAND +// ignore_for_file: type=lint, unused_import + +import 'package:freezed_annotation/freezed_annotation.dart'; + +import 'p1_class_dto.dart'; +import 'p2_enum_dto.dart'; + +part 'object1_dto.freezed.dart'; +part 'object1_dto.g.dart'; + +@Freezed() +class Object1Dto with _$Object1Dto { + const factory Object1Dto({ + @JsonKey(name: 'p1_class') required P1ClassDto p1Class, + @JsonKey(name: 'p2_enum') required P2EnumDto p2Enum, + }) = _Object1Dto; + + factory Object1Dto.fromJson(Map json) => + _$Object1DtoFromJson(json); +} diff --git a/swagger_parser/test/e2e/tests/basic/replacement_rules.3.1/expected_files/models/p1_class_dto.dart b/swagger_parser/test/e2e/tests/basic/replacement_rules.3.1/expected_files/models/p1_class_dto.dart new file mode 100644 index 00000000..afd4cade --- /dev/null +++ b/swagger_parser/test/e2e/tests/basic/replacement_rules.3.1/expected_files/models/p1_class_dto.dart @@ -0,0 +1,18 @@ +// coverage:ignore-file +// GENERATED CODE - DO NOT MODIFY BY HAND +// ignore_for_file: type=lint, unused_import + +import 'package:freezed_annotation/freezed_annotation.dart'; + +part 'p1_class_dto.freezed.dart'; +part 'p1_class_dto.g.dart'; + +@Freezed() +class P1ClassDto with _$P1ClassDto { + const factory P1ClassDto({ + required DateTime test, + }) = _P1ClassDto; + + factory P1ClassDto.fromJson(Map json) => + _$P1ClassDtoFromJson(json); +} diff --git a/swagger_parser/test/e2e/tests/basic/replacement_rules.3.1/expected_files/models/p2_enum_dto.dart b/swagger_parser/test/e2e/tests/basic/replacement_rules.3.1/expected_files/models/p2_enum_dto.dart new file mode 100644 index 00000000..0dd2e011 --- /dev/null +++ b/swagger_parser/test/e2e/tests/basic/replacement_rules.3.1/expected_files/models/p2_enum_dto.dart @@ -0,0 +1,27 @@ +// coverage:ignore-file +// GENERATED CODE - DO NOT MODIFY BY HAND +// ignore_for_file: type=lint, unused_import + +import 'package:freezed_annotation/freezed_annotation.dart'; + +@JsonEnum() +enum P2EnumDto { + @JsonValue('teV1st1') + teV1st1('teV1st1'), + @JsonValue('V1_test2') + v1Test2('V1_test2'), + @JsonValue('testV13') + testV13('testV13'), + + /// Default value for all unparsed values, allows backward compatibility when adding new values on the backend. + $unknown(null); + + const P2EnumDto(this.json); + + factory P2EnumDto.fromJson(String json) => values.firstWhere( + (e) => e.json == json, + orElse: () => $unknown, + ); + + final String? json; +} diff --git a/swagger_parser/test/e2e/tests/basic/replacement_rules.3.1/expected_files/models/private_att_data3_dto.dart b/swagger_parser/test/e2e/tests/basic/replacement_rules.3.1/expected_files/models/private_att_data3_dto.dart new file mode 100644 index 00000000..0b1a3d73 --- /dev/null +++ b/swagger_parser/test/e2e/tests/basic/replacement_rules.3.1/expected_files/models/private_att_data3_dto.dart @@ -0,0 +1,5 @@ +// coverage:ignore-file +// GENERATED CODE - DO NOT MODIFY BY HAND +// ignore_for_file: type=lint, unused_import + +typedef PrivateAttData3Dto = dynamic; diff --git a/swagger_parser/test/e2e/tests/basic/replacement_rules.3.1/expected_files/models/private_class_name4_dto.dart b/swagger_parser/test/e2e/tests/basic/replacement_rules.3.1/expected_files/models/private_class_name4_dto.dart new file mode 100644 index 00000000..b2db60a4 --- /dev/null +++ b/swagger_parser/test/e2e/tests/basic/replacement_rules.3.1/expected_files/models/private_class_name4_dto.dart @@ -0,0 +1,5 @@ +// coverage:ignore-file +// GENERATED CODE - DO NOT MODIFY BY HAND +// ignore_for_file: type=lint, unused_import + +typedef PrivateClassName4Dto = dynamic; diff --git a/swagger_parser/test/e2e/tests/basic/replacement_rules.3.1/expected_files/rest_client.dart b/swagger_parser/test/e2e/tests/basic/replacement_rules.3.1/expected_files/rest_client.dart new file mode 100644 index 00000000..55df2338 --- /dev/null +++ b/swagger_parser/test/e2e/tests/basic/replacement_rules.3.1/expected_files/rest_client.dart @@ -0,0 +1,25 @@ +// coverage:ignore-file +// GENERATED CODE - DO NOT MODIFY BY HAND +// ignore_for_file: type=lint, unused_import + +import 'package:dio/dio.dart'; + +import 'clients/client_client.dart'; + +/// API `v1.0.0` +class RestClient { + RestClient( + Dio dio, { + String? baseUrl, + }) : _dio = dio, + _baseUrl = baseUrl; + + final Dio _dio; + final String? _baseUrl; + + static String get version => '1.0.0'; + + ClientClient? _client; + + ClientClient get client => _client ??= ClientClient(_dio, baseUrl: _baseUrl); +} diff --git a/swagger_parser/test/e2e/tests/basic/replacement_rules.3.1/openapi.yaml b/swagger_parser/test/e2e/tests/basic/replacement_rules.3.1/openapi.yaml new file mode 100644 index 00000000..f941b2bf --- /dev/null +++ b/swagger_parser/test/e2e/tests/basic/replacement_rules.3.1/openapi.yaml @@ -0,0 +1,114 @@ +openapi: 3.1.0 +info: + title: API + version: 1.0.0 +paths: + /api/v1/: + get: + operationId: get_api_v1 + requestBody: + content: + multipart/form-data: + schema: + type: object + properties: + p1: + $ref: '#/components/schemes/ClassName1' + p2: + $ref: '#/components/schemes/Class_name_2' + p3: + $ref: '#/components/schemes/className3' + p4: + $ref: '#/components/schemes/_class_name4' + p5: + $ref: '#/components/schemes/-class-name-5' + p6: + $ref: '#/components/schemes/-class-name-56' + v1: + $ref: '#/components/schemes/V1data1[Att]' + v2: + $ref: '#/components/schemes/data{Att}V12' + v3: + $ref: '#/components/schemes/_(Att)V1_data3' + v4: + $ref: '#/components/schemes/dataV14' + p1_class: + type: object + properties: + test: + type: string + format: date-time + p2_enum: + type: string + enum: + - teV1st1 + - V1_test2 + - testV13 + required: + - p1 + - p3 + - p5 + - v1 + - v3 + responses: + '200': + description: dummy + content: + text/plain: + schema: + type: string + post: + operationId: post_api_v1 + requestBody: + content: + application/json: + schema: + type: object + properties: + p1_class: + type: object + properties: + test: + type: string + format: date-time + p2_enum: + type: string + enum: + - teV1st1 + - V1_test2 + - testV13 + required: + - p1_class + responses: + '200': + description: dummy + content: + text/plain: + schema: + type: string + +components: + schemas: + ClassName1: + type: object + Class_name_2: + type: object + className3: + type: object + _class_name4: + type: object + -class-name-5: + type: object + -class-name-56: + type: object + + V1data1[Att]: + type: object + data{Att}V12: + type: object + _(Att)V1_data3: + type: object + dataV14: + type: object + + \ No newline at end of file