From 7e1ca33a28921789f0720542e63b2c520e553fcf Mon Sep 17 00:00:00 2001 From: ch1nru5t Date: Sat, 24 Feb 2024 12:48:53 +0530 Subject: [PATCH 01/19] fixed curl code gen error for empty url --- lib/codegen/others/curl.dart | 65 +++++++++++++++++++---------- pubspec.lock | 40 ++++++++++++++---- test/codegen/curl_codegen_test.dart | 5 ++- 3 files changed, 78 insertions(+), 32 deletions(-) diff --git a/lib/codegen/others/curl.dart b/lib/codegen/others/curl.dart index 4ae610de..638e9da5 100644 --- a/lib/codegen/others/curl.dart +++ b/lib/codegen/others/curl.dart @@ -1,6 +1,7 @@ -import 'package:jinja/jinja.dart' as jj; -import 'package:apidash/utils/utils.dart' show requestModelToHARJsonRequest; import 'package:apidash/models/models.dart' show RequestModel; +import 'package:jinja/jinja.dart' as jj; + +import '../../consts.dart'; // ignore: camel_case_types class cURLCodeGen { @@ -29,30 +30,48 @@ class cURLCodeGen { if (!url.contains("://") && url.isNotEmpty) { url = "$defaultUriScheme://$url"; } + if (requestModel.enabledParamsMap.isNotEmpty) { + if (!url.contains('?')) { + url += "?"; + } else { + url += "&"; + } + for (MapEntry entry + in requestModel.enabledParamsMap.entries) { + url += "${Uri.encodeFull(entry.key)}=${Uri.encodeFull(entry.value)}&"; + } + url = url.substring(0, url.length - 1); + } var rM = requestModel.copyWith(url: url); - - var harJson = requestModelToHARJsonRequest(rM, useEnabled: true); - var templateStart = jj.Template(kTemplateStart); result += templateStart.render({ - "method": switch (harJson["method"]) { + "method": switch (rM.method.name.toUpperCase()) { "GET" => "", "HEAD" => " --head", - _ => " --request ${harJson["method"]} \\\n" + _ => " --request ${rM.method.name.toUpperCase()} \\\n" }, - "url": harJson["url"], + "url": rM.url, }); - var headers = harJson["headers"]; - if (headers.isNotEmpty) { - for (var item in headers) { - var templateHeader = jj.Template(kTemplateHeader); - result += templateHeader - .render({"name": item["name"], "value": item["value"]}); - } + Map headers = rM.enabledHeadersMap; + if (rM.requestBody != null && + rM.requestBody!.isNotEmpty && + rM.method != HTTPVerb.get && + rM.requestBodyContentType != ContentType.formdata) { + var templateHeader = jj.Template(kTemplateHeader); + result += templateHeader.render({ + "name": "Content-Type", + "value": rM.requestBodyContentType.header + }); } - if (harJson['formData'] != null) { - var formDataList = harJson['formData'] as List>; + for (MapEntry header in headers.entries) { + var templateHeader = jj.Template(kTemplateHeader); + result += + templateHeader.render({"name": header.key, "value": header.value}); + } + + if (rM.requestBodyContentType == ContentType.formdata) { + List> formDataList = rM.formDataMapList; for (var formData in formDataList) { var templateFormData = jj.Template(kTemplateFormData); if (formData['type'] != null && @@ -67,11 +86,13 @@ class cURLCodeGen { }); } } - } - - if (harJson["postData"]?["text"] != null) { - var templateBody = jj.Template(kTemplateBody); - result += templateBody.render({"body": harJson["postData"]["text"]}); + } else { + if (rM.requestBody != null && + rM.requestBody!.isNotEmpty && + rM.method != HTTPVerb.get) { + var templateBody = jj.Template(kTemplateBody); + result += templateBody.render({"body": rM.requestBody}); + } } return result; } catch (e) { diff --git a/pubspec.lock b/pubspec.lock index 2f3f7f55..1737f75f 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -625,6 +625,30 @@ packages: url: "https://pub.dev" source: hosted version: "0.2.0" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: "78eb209deea09858f5269f5a5b02be4049535f568c07b275096836f01ea323fa" + url: "https://pub.dev" + source: hosted + version: "10.0.0" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: b46c5e37c19120a8a01918cfaf293547f47269f7cb4b0058f21531c2465d6ef0 + url: "https://pub.dev" + source: hosted + version: "2.0.1" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: a597f72a664dbd293f3bfc51f9ba69816f84dcd403cdac7066cb3f6003f3ab47 + url: "https://pub.dev" + source: hosted + version: "2.0.1" lints: dependency: transitive description: @@ -661,26 +685,26 @@ packages: dependency: transitive description: name: matcher - sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" + sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb url: "https://pub.dev" source: hosted - version: "0.12.16" + version: "0.12.16+1" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" + sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" url: "https://pub.dev" source: hosted - version: "0.5.0" + version: "0.8.0" meta: dependency: transitive description: name: meta - sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e + sha256: d584fa6707a52763a52446f02cc621b077888fb63b93bbcb1143a7be5a0c0c04 url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.11.0" mime: dependency: transitive description: @@ -757,10 +781,10 @@ packages: dependency: "direct main" description: name: path - sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" + sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" url: "https://pub.dev" source: hosted - version: "1.8.3" + version: "1.9.0" path_parsing: dependency: transitive description: diff --git a/test/codegen/curl_codegen_test.dart b/test/codegen/curl_codegen_test.dart index e9bb7f60..b62de8b4 100644 --- a/test/codegen/curl_codegen_test.dart +++ b/test/codegen/curl_codegen_test.dart @@ -1,7 +1,8 @@ import 'package:apidash/codegen/others/curl.dart'; -import '../request_models.dart'; import 'package:test/test.dart'; +import '../request_models.dart'; + void main() { final curlCodeGen = cURLCodeGen(); @@ -19,7 +20,7 @@ void main() { test('GET 3', () { const expectedCode = - r"""curl --url 'https://api.foss42.com/country/data?code=IND'"""; + r"""curl --url 'https://api.foss42.com/country/data?code=US&code=IND'"""; expect(curlCodeGen.getCode(requestModelGet3, "https"), expectedCode); }); From 1b4a5caa7ae5160926f2b9a1203ca27d75c20950 Mon Sep 17 00:00:00 2001 From: Ankit Mahato Date: Sun, 10 Mar 2024 05:33:53 +0530 Subject: [PATCH 02/19] Update cURL codegen --- lib/codegen/others/curl.dart | 45 ++++++++++--------- test/codegen/curl_codegen_test.dart | 68 ++++++++++++++++++++++++++--- 2 files changed, 86 insertions(+), 27 deletions(-) diff --git a/lib/codegen/others/curl.dart b/lib/codegen/others/curl.dart index 4ae610de..6c0e02fc 100644 --- a/lib/codegen/others/curl.dart +++ b/lib/codegen/others/curl.dart @@ -1,6 +1,7 @@ import 'package:jinja/jinja.dart' as jj; import 'package:apidash/utils/utils.dart' show requestModelToHARJsonRequest; import 'package:apidash/models/models.dart' show RequestModel; +import 'package:apidash/consts.dart'; // ignore: camel_case_types class cURLCodeGen { @@ -11,7 +12,7 @@ class cURLCodeGen { --header '{{name}}: {{value}}' """; String kTemplateFormData = """ \\ - --form '{{name}}: {{value}}' + --form '{{name}}={{value}}' """; String kTemplateBody = """ \\ @@ -38,7 +39,7 @@ class cURLCodeGen { "method": switch (harJson["method"]) { "GET" => "", "HEAD" => " --head", - _ => " --request ${harJson["method"]} \\\n" + _ => " --request ${harJson["method"]} \\\n " }, "url": harJson["url"], }); @@ -51,27 +52,31 @@ class cURLCodeGen { .render({"name": item["name"], "value": item["value"]}); } } - if (harJson['formData'] != null) { - var formDataList = harJson['formData'] as List>; - for (var formData in formDataList) { - var templateFormData = jj.Template(kTemplateFormData); - if (formData['type'] != null && - formData['name'] != null && - formData['value'] != null && - formData['name']!.isNotEmpty && - formData['value']!.isNotEmpty) { - result += templateFormData.render({ - "name": formData["name"], - "value": - "${formData['type'] == 'file' ? '@' : ''}${formData["value"]}", - }); + + var method = requestModel.method; + if (kMethodsWithBody.contains(method)) { + if (harJson['formData'] != null) { + var formDataList = harJson['formData'] as List>; + for (var formData in formDataList) { + var templateFormData = jj.Template(kTemplateFormData); + if (formData['type'] != null && + formData['name'] != null && + formData['value'] != null && + formData['name']!.isNotEmpty && + formData['value']!.isNotEmpty) { + result += templateFormData.render({ + "name": formData["name"], + "value": + "${formData['type'] == 'file' ? '@' : ''}${formData["value"]}", + }); + } } } - } - if (harJson["postData"]?["text"] != null) { - var templateBody = jj.Template(kTemplateBody); - result += templateBody.render({"body": harJson["postData"]["text"]}); + if (harJson["postData"]?["text"] != null) { + var templateBody = jj.Template(kTemplateBody); + result += templateBody.render({"body": harJson["postData"]["text"]}); + } } return result; } catch (e) { diff --git a/test/codegen/curl_codegen_test.dart b/test/codegen/curl_codegen_test.dart index 212a82ce..cde41db3 100644 --- a/test/codegen/curl_codegen_test.dart +++ b/test/codegen/curl_codegen_test.dart @@ -102,7 +102,7 @@ void main() { group('POST Request', () { test('POST 1', () { const expectedCode = r"""curl --request POST \ - --url 'https://api.apidash.dev/case/lower' \ + --url 'https://api.apidash.dev/case/lower' \ --header 'Content-Type: text/plain' \ --data '{ "text": "I LOVE Flutter" @@ -112,7 +112,7 @@ void main() { test('POST 2', () { const expectedCode = r"""curl --request POST \ - --url 'https://api.apidash.dev/case/lower' \ + --url 'https://api.apidash.dev/case/lower' \ --header 'Content-Type: application/json' \ --data '{ "text": "I LOVE Flutter" @@ -122,7 +122,7 @@ void main() { test('POST 3', () { const expectedCode = r"""curl --request POST \ - --url 'https://api.apidash.dev/case/lower' \ + --url 'https://api.apidash.dev/case/lower' \ --header 'Content-Type: application/json' \ --header 'User-Agent: Test Agent' \ --data '{ @@ -130,12 +130,66 @@ void main() { }'"""; expect(curlCodeGen.getCode(requestModelPost3, "https"), expectedCode); }); + + test('POST 4', () { + const expectedCode = r"""curl --request POST \ + --url 'https://api.apidash.dev/io/form' \ + --form 'text=API' \ + --form 'sep=|' \ + --form 'times=3'"""; + expect(curlCodeGen.getCode(requestModelPost4, "https"), expectedCode); + }); + + test('POST 5', () { + const expectedCode = r"""curl --request POST \ + --url 'https://api.apidash.dev/io/form' \ + --header 'User-Agent: Test Agent' \ + --form 'text=API' \ + --form 'sep=|' \ + --form 'times=3'"""; + expect(curlCodeGen.getCode(requestModelPost5, "https"), expectedCode); + }); + + test('POST 6', () { + const expectedCode = r"""curl --request POST \ + --url 'https://api.apidash.dev/io/img' \ + --form 'token=xyz' \ + --form 'imfile=@/Documents/up/1.png'"""; + expect(curlCodeGen.getCode(requestModelPost6, "https"), expectedCode); + }); + + test('POST 7', () { + const expectedCode = r"""curl --request POST \ + --url 'https://api.apidash.dev/io/img' \ + --form 'token=xyz' \ + --form 'imfile=@/Documents/up/1.png'"""; + expect(curlCodeGen.getCode(requestModelPost7, "https"), expectedCode); + }); + + test('POST 8', () { + const expectedCode = r"""curl --request POST \ + --url 'https://api.apidash.dev/io/form?size=2&len=3' \ + --form 'text=API' \ + --form 'sep=|' \ + --form 'times=3'"""; + expect(curlCodeGen.getCode(requestModelPost8, "https"), expectedCode); + }); + + test('POST 9', () { + const expectedCode = r"""curl --request POST \ + --url 'https://api.apidash.dev/io/img?size=2&len=3' \ + --header 'User-Agent: Test Agent' \ + --header 'Keep-Alive: true' \ + --form 'token=xyz' \ + --form 'imfile=@/Documents/up/1.png'"""; + expect(curlCodeGen.getCode(requestModelPost9, "https"), expectedCode); + }); }); group('PUT Request', () { test('PUT 1', () { const expectedCode = r"""curl --request PUT \ - --url 'https://reqres.in/api/users/2' \ + --url 'https://reqres.in/api/users/2' \ --header 'Content-Type: application/json' \ --data '{ "name": "morpheus", @@ -148,7 +202,7 @@ void main() { group('PATCH Request', () { test('PATCH 1', () { const expectedCode = r"""curl --request PATCH \ - --url 'https://reqres.in/api/users/2' \ + --url 'https://reqres.in/api/users/2' \ --header 'Content-Type: application/json' \ --data '{ "name": "marfeus", @@ -161,13 +215,13 @@ void main() { group('DELETE Request', () { test('DELETE 1', () { const expectedCode = r"""curl --request DELETE \ - --url 'https://reqres.in/api/users/2'"""; + --url 'https://reqres.in/api/users/2'"""; expect(curlCodeGen.getCode(requestModelDelete1, "https"), expectedCode); }); test('DELETE 2', () { const expectedCode = r"""curl --request DELETE \ - --url 'https://reqres.in/api/users/2' \ + --url 'https://reqres.in/api/users/2' \ --header 'Content-Type: application/json' \ --data '{ "name": "marfeus", From beb6d52c79ae59ca703b057b35cf4b7258df8cca Mon Sep 17 00:00:00 2001 From: Ankit Mahato Date: Sun, 10 Mar 2024 06:06:28 +0530 Subject: [PATCH 03/19] Fix multipart request --- lib/providers/collection_providers.dart | 2 - lib/services/http_service.dart | 75 +++++++++++++------------ 2 files changed, 39 insertions(+), 38 deletions(-) diff --git a/lib/providers/collection_providers.dart b/lib/providers/collection_providers.dart index a1afa070..8768773d 100644 --- a/lib/providers/collection_providers.dart +++ b/lib/providers/collection_providers.dart @@ -173,8 +173,6 @@ class CollectionStateNotifier (http.Response?, Duration?, String?)? responseRec = await request( requestModel, defaultUriScheme: defaultUriScheme, - isMultiPartRequest: - requestModel.requestBodyContentType == ContentType.formdata, ); late final RequestModel newRequestModel; if (responseRec.$1 == null) { diff --git a/lib/services/http_service.dart b/lib/services/http_service.dart index c5a7b4ce..dec0b516 100644 --- a/lib/services/http_service.dart +++ b/lib/services/http_service.dart @@ -9,7 +9,6 @@ import 'package:apidash/consts.dart'; Future<(http.Response?, Duration?, String?)> request( RequestModel requestModel, { String defaultUriScheme = kDefaultUriScheme, - bool isMultiPartRequest = false, }) async { (Uri?, String?) uriRec = getValidRequestUri( requestModel.url, @@ -22,44 +21,48 @@ Future<(http.Response?, Duration?, String?)> request( http.Response response; String? body; try { - var requestBody = requestModel.requestBody; - if (kMethodsWithBody.contains(requestModel.method) && - requestBody != null) { - var contentLength = utf8.encode(requestBody).length; - if (contentLength > 0) { - body = requestBody; - headers[HttpHeaders.contentLengthHeader] = contentLength.toString(); - if (!requestModel.hasContentTypeHeader) { - headers[HttpHeaders.contentTypeHeader] = - requestModel.requestBodyContentType.header; - } - } - } Stopwatch stopwatch = Stopwatch()..start(); - if (isMultiPartRequest) { - var multiPartRequest = http.MultipartRequest( - requestModel.method.name.toUpperCase(), - requestUrl, - ); - multiPartRequest.headers.addAll(headers); - for (FormDataModel formData - in (requestModel.requestFormDataList ?? [])) { - if (formData.type == FormDataType.text) { - multiPartRequest.fields.addAll({formData.name: formData.value}); - } else { - multiPartRequest.files.add( - await http.MultipartFile.fromPath( - formData.name, - formData.value, - ), - ); + var isMultiPartRequest = + requestModel.requestBodyContentType == ContentType.formdata; + if (kMethodsWithBody.contains(requestModel.method)) { + var requestBody = requestModel.requestBody; + if (requestBody != null && !isMultiPartRequest) { + var contentLength = utf8.encode(requestBody).length; + if (contentLength > 0) { + body = requestBody; + headers[HttpHeaders.contentLengthHeader] = contentLength.toString(); + if (!requestModel.hasContentTypeHeader) { + headers[HttpHeaders.contentTypeHeader] = + requestModel.requestBodyContentType.header; + } } } - http.StreamedResponse multiPartResponse = await multiPartRequest.send(); - stopwatch.stop(); - http.Response convertedMultiPartResponse = - await convertStreamedResponse(multiPartResponse); - return (convertedMultiPartResponse, stopwatch.elapsed, null); + if (isMultiPartRequest) { + var multiPartRequest = http.MultipartRequest( + requestModel.method.name.toUpperCase(), + requestUrl, + ); + multiPartRequest.headers.addAll(headers); + for (var formData + in (requestModel.requestFormDataList ?? [])) { + if (formData.type == FormDataType.text) { + multiPartRequest.fields.addAll({formData.name: formData.value}); + } else { + multiPartRequest.files.add( + await http.MultipartFile.fromPath( + formData.name, + formData.value, + ), + ); + } + } + http.StreamedResponse multiPartResponse = + await multiPartRequest.send(); + stopwatch.stop(); + http.Response convertedMultiPartResponse = + await convertStreamedResponse(multiPartResponse); + return (convertedMultiPartResponse, stopwatch.elapsed, null); + } } switch (requestModel.method) { case HTTPVerb.get: From 28516cd1c92ec4b2604b572cf79b70fdc33ac226 Mon Sep 17 00:00:00 2001 From: Ankit Mahato Date: Sun, 10 Mar 2024 06:59:31 +0530 Subject: [PATCH 04/19] Revert "fixed curl code gen error for empty url" This reverts commit 7e1ca33a28921789f0720542e63b2c520e553fcf. --- lib/codegen/others/curl.dart | 65 ++++++++++------------------- pubspec.lock | 40 ++++-------------- test/codegen/curl_codegen_test.dart | 5 +-- 3 files changed, 32 insertions(+), 78 deletions(-) diff --git a/lib/codegen/others/curl.dart b/lib/codegen/others/curl.dart index 638e9da5..4ae610de 100644 --- a/lib/codegen/others/curl.dart +++ b/lib/codegen/others/curl.dart @@ -1,7 +1,6 @@ -import 'package:apidash/models/models.dart' show RequestModel; import 'package:jinja/jinja.dart' as jj; - -import '../../consts.dart'; +import 'package:apidash/utils/utils.dart' show requestModelToHARJsonRequest; +import 'package:apidash/models/models.dart' show RequestModel; // ignore: camel_case_types class cURLCodeGen { @@ -30,48 +29,30 @@ class cURLCodeGen { if (!url.contains("://") && url.isNotEmpty) { url = "$defaultUriScheme://$url"; } - if (requestModel.enabledParamsMap.isNotEmpty) { - if (!url.contains('?')) { - url += "?"; - } else { - url += "&"; - } - for (MapEntry entry - in requestModel.enabledParamsMap.entries) { - url += "${Uri.encodeFull(entry.key)}=${Uri.encodeFull(entry.value)}&"; - } - url = url.substring(0, url.length - 1); - } var rM = requestModel.copyWith(url: url); + + var harJson = requestModelToHARJsonRequest(rM, useEnabled: true); + var templateStart = jj.Template(kTemplateStart); result += templateStart.render({ - "method": switch (rM.method.name.toUpperCase()) { + "method": switch (harJson["method"]) { "GET" => "", "HEAD" => " --head", - _ => " --request ${rM.method.name.toUpperCase()} \\\n" + _ => " --request ${harJson["method"]} \\\n" }, - "url": rM.url, + "url": harJson["url"], }); - Map headers = rM.enabledHeadersMap; - if (rM.requestBody != null && - rM.requestBody!.isNotEmpty && - rM.method != HTTPVerb.get && - rM.requestBodyContentType != ContentType.formdata) { - var templateHeader = jj.Template(kTemplateHeader); - result += templateHeader.render({ - "name": "Content-Type", - "value": rM.requestBodyContentType.header - }); + var headers = harJson["headers"]; + if (headers.isNotEmpty) { + for (var item in headers) { + var templateHeader = jj.Template(kTemplateHeader); + result += templateHeader + .render({"name": item["name"], "value": item["value"]}); + } } - for (MapEntry header in headers.entries) { - var templateHeader = jj.Template(kTemplateHeader); - result += - templateHeader.render({"name": header.key, "value": header.value}); - } - - if (rM.requestBodyContentType == ContentType.formdata) { - List> formDataList = rM.formDataMapList; + if (harJson['formData'] != null) { + var formDataList = harJson['formData'] as List>; for (var formData in formDataList) { var templateFormData = jj.Template(kTemplateFormData); if (formData['type'] != null && @@ -86,13 +67,11 @@ class cURLCodeGen { }); } } - } else { - if (rM.requestBody != null && - rM.requestBody!.isNotEmpty && - rM.method != HTTPVerb.get) { - var templateBody = jj.Template(kTemplateBody); - result += templateBody.render({"body": rM.requestBody}); - } + } + + if (harJson["postData"]?["text"] != null) { + var templateBody = jj.Template(kTemplateBody); + result += templateBody.render({"body": harJson["postData"]["text"]}); } return result; } catch (e) { diff --git a/pubspec.lock b/pubspec.lock index 1737f75f..2f3f7f55 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -625,30 +625,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.2.0" - leak_tracker: - dependency: transitive - description: - name: leak_tracker - sha256: "78eb209deea09858f5269f5a5b02be4049535f568c07b275096836f01ea323fa" - url: "https://pub.dev" - source: hosted - version: "10.0.0" - leak_tracker_flutter_testing: - dependency: transitive - description: - name: leak_tracker_flutter_testing - sha256: b46c5e37c19120a8a01918cfaf293547f47269f7cb4b0058f21531c2465d6ef0 - url: "https://pub.dev" - source: hosted - version: "2.0.1" - leak_tracker_testing: - dependency: transitive - description: - name: leak_tracker_testing - sha256: a597f72a664dbd293f3bfc51f9ba69816f84dcd403cdac7066cb3f6003f3ab47 - url: "https://pub.dev" - source: hosted - version: "2.0.1" lints: dependency: transitive description: @@ -685,26 +661,26 @@ packages: dependency: transitive description: name: matcher - sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb + sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" url: "https://pub.dev" source: hosted - version: "0.12.16+1" + version: "0.12.16" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" + sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" url: "https://pub.dev" source: hosted - version: "0.8.0" + version: "0.5.0" meta: dependency: transitive description: name: meta - sha256: d584fa6707a52763a52446f02cc621b077888fb63b93bbcb1143a7be5a0c0c04 + sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e url: "https://pub.dev" source: hosted - version: "1.11.0" + version: "1.10.0" mime: dependency: transitive description: @@ -781,10 +757,10 @@ packages: dependency: "direct main" description: name: path - sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" + sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" url: "https://pub.dev" source: hosted - version: "1.9.0" + version: "1.8.3" path_parsing: dependency: transitive description: diff --git a/test/codegen/curl_codegen_test.dart b/test/codegen/curl_codegen_test.dart index b62de8b4..e9bb7f60 100644 --- a/test/codegen/curl_codegen_test.dart +++ b/test/codegen/curl_codegen_test.dart @@ -1,7 +1,6 @@ import 'package:apidash/codegen/others/curl.dart'; -import 'package:test/test.dart'; - import '../request_models.dart'; +import 'package:test/test.dart'; void main() { final curlCodeGen = cURLCodeGen(); @@ -20,7 +19,7 @@ void main() { test('GET 3', () { const expectedCode = - r"""curl --url 'https://api.foss42.com/country/data?code=US&code=IND'"""; + r"""curl --url 'https://api.foss42.com/country/data?code=IND'"""; expect(curlCodeGen.getCode(requestModelGet3, "https"), expectedCode); }); From d23019a43d911ecad964d03635ae0877b2cded4e Mon Sep 17 00:00:00 2001 From: Ankit Mahato Date: Sun, 10 Mar 2024 07:02:23 +0530 Subject: [PATCH 05/19] Accept test change --- test/codegen/curl_codegen_test.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/codegen/curl_codegen_test.dart b/test/codegen/curl_codegen_test.dart index e9bb7f60..6ba9c01b 100644 --- a/test/codegen/curl_codegen_test.dart +++ b/test/codegen/curl_codegen_test.dart @@ -1,6 +1,6 @@ +import 'package:test/test.dart'; import 'package:apidash/codegen/others/curl.dart'; import '../request_models.dart'; -import 'package:test/test.dart'; void main() { final curlCodeGen = cURLCodeGen(); From f9c32cddfd296719aebf84b3b4b9c494c5f55dca Mon Sep 17 00:00:00 2001 From: Ankit Mahato Date: Sun, 10 Mar 2024 23:10:19 +0530 Subject: [PATCH 06/19] replace by getNewUuid --- lib/providers/collection_providers.dart | 8 ++++---- lib/utils/file_utils.dart | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/providers/collection_providers.dart b/lib/providers/collection_providers.dart index 8768773d..4ecc51ab 100644 --- a/lib/providers/collection_providers.dart +++ b/lib/providers/collection_providers.dart @@ -3,7 +3,7 @@ import 'settings_providers.dart'; import 'ui_providers.dart'; import '../models/models.dart'; import '../services/services.dart' show hiveHandler, HiveHandler, request; -import '../utils/utils.dart' show uuid, collectionToHAR; +import '../utils/utils.dart' show getNewUuid, collectionToHAR; import '../consts.dart'; import 'package:http/http.dart' as http; @@ -54,7 +54,7 @@ class CollectionStateNotifier } void add() { - final id = uuid.v1(); + final id = getNewUuid(); final newRequestModel = RequestModel( id: id, ); @@ -97,7 +97,7 @@ class CollectionStateNotifier } void duplicate(String id) { - final newId = uuid.v1(); + final newId = getNewUuid(); var itemIds = ref.read(requestSequenceProvider); int idx = itemIds.indexOf(id); @@ -213,7 +213,7 @@ class CollectionStateNotifier bool loadData() { var ids = hiveHandler.getIds(); if (ids == null || ids.length == 0) { - String newId = uuid.v1(); + String newId = getNewUuid(); state = { newId: RequestModel( id: newId, diff --git a/lib/utils/file_utils.dart b/lib/utils/file_utils.dart index 41a6d4a3..4f5c2228 100644 --- a/lib/utils/file_utils.dart +++ b/lib/utils/file_utils.dart @@ -49,7 +49,7 @@ String getShortPath(String path) { } String getTempFileName() { - return uuid.v1(); + return getNewUuid(); } Future pickFile() async { From 5776d9b840d3a566f753be99e9896fee77727020 Mon Sep 17 00:00:00 2001 From: Ankit Mahato Date: Sun, 10 Mar 2024 23:27:00 +0530 Subject: [PATCH 07/19] set boundary --- lib/codegen/codegen.dart | 14 ++++++++++---- lib/codegen/python/http_client.dart | 9 ++++----- lib/codegen/python/requests.dart | 8 ++++---- 3 files changed, 18 insertions(+), 13 deletions(-) diff --git a/lib/codegen/codegen.dart b/lib/codegen/codegen.dart index 1aec7144..d39e4d10 100644 --- a/lib/codegen/codegen.dart +++ b/lib/codegen/codegen.dart @@ -1,5 +1,6 @@ import 'package:apidash/models/models.dart' show RequestModel; import 'package:apidash/consts.dart'; +import 'package:apidash/utils/utils.dart' show getNewUuid; import 'dart/http.dart'; import 'dart/dio.dart'; import 'kotlin/okhttp.dart'; @@ -14,8 +15,12 @@ class Codegen { String? getCode( CodegenLanguage codegenLanguage, RequestModel requestModel, - String defaultUriScheme, - ) { + String defaultUriScheme, { + String? boundary, + }) { + if (requestModel.isFormDataRequest) { + boundary = boundary ?? getNewUuid(); + } switch (codegenLanguage) { case CodegenLanguage.curl: return cURLCodeGen().getCode(requestModel, defaultUriScheme); @@ -39,9 +44,10 @@ class Codegen { return KotlinOkHttpCodeGen().getCode(requestModel, defaultUriScheme); case CodegenLanguage.pythonHttpClient: return PythonHttpClientCodeGen() - .getCode(requestModel, defaultUriScheme); + .getCode(requestModel, defaultUriScheme, boundary); case CodegenLanguage.pythonRequests: - return PythonRequestsCodeGen().getCode(requestModel, defaultUriScheme); + return PythonRequestsCodeGen() + .getCode(requestModel, defaultUriScheme, boundary); } } } diff --git a/lib/codegen/python/http_client.dart b/lib/codegen/python/http_client.dart index 196b10df..c9082bb1 100644 --- a/lib/codegen/python/http_client.dart +++ b/lib/codegen/python/http_client.dart @@ -2,7 +2,7 @@ import 'dart:io'; import 'dart:convert'; import 'package:jinja/jinja.dart' as jj; import 'package:apidash/utils/utils.dart' - show getNewUuid, getValidRequestUri, padMultilineString; + show getValidRequestUri, padMultilineString; import 'package:apidash/models/models.dart' show RequestModel; import 'package:apidash/consts.dart'; @@ -89,9 +89,8 @@ body = b'\r\n'.join(dataList) String? getCode( RequestModel requestModel, String defaultUriScheme, + String? boundary, ) { - String uuid = getNewUuid(); - try { String result = ""; bool hasHeaders = false; @@ -148,7 +147,7 @@ body = b'\r\n'.join(dataList) var formHeaderTemplate = jj.Template(kTemplateFormHeaderContentType); headers[HttpHeaders.contentTypeHeader] = formHeaderTemplate.render({ - "boundary": uuid, + "boundary": boundary, }); } @@ -169,7 +168,7 @@ body = b'\r\n'.join(dataList) result += formDataBodyData.render( { "fields_list": json.encode(requestModel.formDataMapList), - "boundary": uuid, + "boundary": boundary, }, ); } diff --git a/lib/codegen/python/requests.dart b/lib/codegen/python/requests.dart index cd79ccde..b9ea1bca 100644 --- a/lib/codegen/python/requests.dart +++ b/lib/codegen/python/requests.dart @@ -3,7 +3,7 @@ import 'dart:convert'; import 'package:jinja/jinja.dart' as jj; import 'package:apidash/consts.dart'; import 'package:apidash/utils/utils.dart' - show getNewUuid, getValidRequestUri, padMultilineString, stripUriParams; + show getValidRequestUri, padMultilineString, stripUriParams; import 'package:apidash/models/models.dart' show RequestModel; class PythonRequestsCodeGen { @@ -94,6 +94,7 @@ print('Response Body:', response.text) String? getCode( RequestModel requestModel, String defaultUriScheme, + String? boundary, ) { try { String result = ""; @@ -101,7 +102,6 @@ print('Response Body:', response.text) bool hasHeaders = false; bool hasBody = false; bool hasJsonBody = false; - String uuid = getNewUuid(); String url = requestModel.url; if (!url.contains("://") && url.isNotEmpty) { @@ -155,7 +155,7 @@ print('Response Body:', response.text) var formHeaderTemplate = jj.Template(kTemplateFormHeaderContentType); headers[HttpHeaders.contentTypeHeader] = formHeaderTemplate.render({ - "boundary": uuid, + "boundary": boundary, }); } if (headers.isNotEmpty || hasBody) { @@ -175,7 +175,7 @@ print('Response Body:', response.text) result += formDataBodyData.render( { "fields_list": json.encode(requestModel.formDataMapList), - "boundary": uuid, + "boundary": boundary, }, ); } From 5af2fe885e8bbd458b82d8a8b6bd66b1769d1873 Mon Sep 17 00:00:00 2001 From: Ankit Mahato Date: Tue, 12 Mar 2024 01:50:33 +0530 Subject: [PATCH 08/19] Update file_utils.dart --- lib/utils/file_utils.dart | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lib/utils/file_utils.dart b/lib/utils/file_utils.dart index 4f5c2228..68554153 100644 --- a/lib/utils/file_utils.dart +++ b/lib/utils/file_utils.dart @@ -48,6 +48,11 @@ String getShortPath(String path) { return path; } +String getFilenameFromPath(String path) { + var f = p.split(path); + return f.last; +} + String getTempFileName() { return getNewUuid(); } From 20d99e02586350ef569fd82649ef3e517518157b Mon Sep 17 00:00:00 2001 From: Ankit Mahato Date: Tue, 12 Mar 2024 01:50:57 +0530 Subject: [PATCH 09/19] Update POST Model 2 --- test/request_models.dart | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/test/request_models.dart b/test/request_models.dart index 0c3d85e2..67ff2835 100644 --- a/test/request_models.dart +++ b/test/request_models.dart @@ -209,7 +209,12 @@ const requestModelPost2 = RequestModel( url: 'https://api.apidash.dev/case/lower', method: HTTPVerb.post, requestBody: r"""{ -"text": "I LOVE Flutter" +"text": "I LOVE Flutter", +"flag": null, +"male": true, +"female": false, +"no": 1.2, +"arr": ["null", "true", "false", null] }""", ); From e517e9d919ddc4a42ef90070d53167f8eb355598 Mon Sep 17 00:00:00 2001 From: Ankit Mahato Date: Tue, 12 Mar 2024 01:51:12 +0530 Subject: [PATCH 10/19] Update request_model_test.dart --- test/models/request_model_test.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/models/request_model_test.dart b/test/models/request_model_test.dart index 1bb40ec7..b7dbb413 100644 --- a/test/models/request_model_test.dart +++ b/test/models/request_model_test.dart @@ -175,7 +175,7 @@ void main() { }); expect(requestModel.paramsMap, {}); expect(requestModel.formDataMapList, []); - expect(requestModel.isFormDataRequest, false); + expect(requestModel.hasFormData, false); expect(requestModel.hasContentTypeHeader, true); }); From e8fd13cbcef2ad3a65153bc3089b2b6060b94cb7 Mon Sep 17 00:00:00 2001 From: Ankit Mahato Date: Tue, 12 Mar 2024 01:52:24 +0530 Subject: [PATCH 11/19] Update Python requests codegen --- lib/codegen/codegen.dart | 64 +++-- lib/codegen/codegen_utils.dart | 15 ++ lib/codegen/python/requests.dart | 144 ++++++----- .../codegen/python_requests_codegen_test.dart | 235 +++++++++++++++--- 4 files changed, 331 insertions(+), 127 deletions(-) create mode 100644 lib/codegen/codegen_utils.dart diff --git a/lib/codegen/codegen.dart b/lib/codegen/codegen.dart index d39e4d10..f6fdaa5f 100644 --- a/lib/codegen/codegen.dart +++ b/lib/codegen/codegen.dart @@ -18,36 +18,64 @@ class Codegen { String defaultUriScheme, { String? boundary, }) { - if (requestModel.isFormDataRequest) { - boundary = boundary ?? getNewUuid(); - } switch (codegenLanguage) { case CodegenLanguage.curl: - return cURLCodeGen().getCode(requestModel, defaultUriScheme); + return cURLCodeGen().getCode( + requestModel, + defaultUriScheme, + ); case CodegenLanguage.har: - return HARCodeGen().getCode(requestModel, defaultUriScheme); + return HARCodeGen().getCode( + requestModel, + defaultUriScheme, + ); case CodegenLanguage.dartHttp: - return DartHttpCodeGen().getCode(requestModel, defaultUriScheme); + return DartHttpCodeGen().getCode( + requestModel, + defaultUriScheme, + ); case CodegenLanguage.dartDio: - return DartDioCodeGen().getCode(requestModel, defaultUriScheme); + return DartDioCodeGen().getCode( + requestModel, + defaultUriScheme, + ); case CodegenLanguage.jsAxios: - return AxiosCodeGen().getCode(requestModel, defaultUriScheme); + return AxiosCodeGen().getCode( + requestModel, + defaultUriScheme, + ); case CodegenLanguage.jsFetch: - return FetchCodeGen().getCode(requestModel, defaultUriScheme); + return FetchCodeGen().getCode( + requestModel, + defaultUriScheme, + ); case CodegenLanguage.nodejsAxios: - return AxiosCodeGen(isNodeJs: true) - .getCode(requestModel, defaultUriScheme); + return AxiosCodeGen(isNodeJs: true).getCode( + requestModel, + defaultUriScheme, + ); case CodegenLanguage.nodejsFetch: - return FetchCodeGen(isNodeJs: true) - .getCode(requestModel, defaultUriScheme); + return FetchCodeGen(isNodeJs: true).getCode( + requestModel, + defaultUriScheme, + ); case CodegenLanguage.kotlinOkHttp: - return KotlinOkHttpCodeGen().getCode(requestModel, defaultUriScheme); + return KotlinOkHttpCodeGen().getCode( + requestModel, + defaultUriScheme, + ); case CodegenLanguage.pythonHttpClient: - return PythonHttpClientCodeGen() - .getCode(requestModel, defaultUriScheme, boundary); + return PythonHttpClientCodeGen().getCode( + requestModel, + defaultUriScheme, + boundary: boundary ?? getNewUuid(), + ); case CodegenLanguage.pythonRequests: - return PythonRequestsCodeGen() - .getCode(requestModel, defaultUriScheme, boundary); + return PythonRequestsCodeGen().getCode( + requestModel, + defaultUriScheme, + boundary: boundary, + ); } } } diff --git a/lib/codegen/codegen_utils.dart b/lib/codegen/codegen_utils.dart new file mode 100644 index 00000000..2d7a1846 --- /dev/null +++ b/lib/codegen/codegen_utils.dart @@ -0,0 +1,15 @@ +String jsonToPyDict(String jsonString) { + Map replaceWithMap = { + "null": "None", + "true": "True", + "false": "False" + }; + String pyDict = jsonString; + for (var k in replaceWithMap.keys) { + RegExp regExp = RegExp(k + r'(?=([^"]*"[^"]*")*[^"]*$)'); + pyDict = pyDict.replaceAllMapped(regExp, (match) { + return replaceWithMap[match.group(0)] ?? match.group(0)!; + }); + } + return pyDict; +} diff --git a/lib/codegen/python/requests.dart b/lib/codegen/python/requests.dart index b9ea1bca..8a700122 100644 --- a/lib/codegen/python/requests.dart +++ b/lib/codegen/python/requests.dart @@ -1,15 +1,14 @@ import 'dart:io'; -import 'dart:convert'; import 'package:jinja/jinja.dart' as jj; import 'package:apidash/consts.dart'; import 'package:apidash/utils/utils.dart' - show getValidRequestUri, padMultilineString, stripUriParams; + show getValidRequestUri, stripUriParams, getFilenameFromPath; import 'package:apidash/models/models.dart' show RequestModel; +import '../codegen_utils.dart'; class PythonRequestsCodeGen { final String kTemplateStart = """import requests -{% if isFormDataRequest %}import mimetypes -from codecs import encode +{% if hasFormData %}from requests_toolbelt.multipart.encoder import MultipartEncoder {% endif %} url = '{{url}}' @@ -20,7 +19,6 @@ url = '{{url}}' params = {{params}} """; - int kParamsPadding = 9; String kTemplateBody = """ @@ -39,44 +37,27 @@ payload = {{body}} headers = {{headers}} """; - String kTemplateFormHeaderContentType = ''' -multipart/form-data; boundary={{boundary}}'''; - - int kHeadersPadding = 10; String kTemplateRequest = """ response = requests.{{method}}(url """; - final String kStringFormDataBody = r''' + final String kTemplateFormDataBody = r''' -def build_data_list(fields): - dataList = [] - for field in fields: - name = field.get('name', '') - value = field.get('value', '') - type_ = field.get('type', 'text') +payload = MultipartEncoder({ +{{formdata_payload}} +}{% if boundary != '' %}, + boundary="{{boundary}}" +{% endif %}) - dataList.append(encode('--{{boundary}}')) - if type_ == 'text': - dataList.append(encode(f'Content-Disposition: form-data; name="{name}"')) - dataList.append(encode('Content-Type: text/plain')) - dataList.append(encode('')) - dataList.append(encode(value)) - elif type_ == 'file': - dataList.append(encode(f'Content-Disposition: form-data; name="{name}"; filename="{value}"')) - dataList.append(encode(f'Content-Type: {mimetypes.guess_type(value)[0] or "application/octet-stream"}')) - dataList.append(encode('')) - dataList.append(open(value, 'rb').read()) - dataList.append(encode('--{{boundary}}--')) - dataList.append(encode('')) - return dataList - -dataList = build_data_list({{fields_list}}) -payload = b'\r\n'.join(dataList) '''; + String kTemplateFormDataRowText = r""" "{{name}}": "{{value}}","""; + + String kTemplateFormDataRowFile = + r""" "{{name}}": ("{{filename}}", open("{{path}}", "rb")),"""; + String kStringRequestParams = """, params=params"""; String kStringRequestBody = """, data=payload"""; @@ -91,11 +72,18 @@ print('Status Code:', response.status_code) print('Response Body:', response.text) """; + String kStringFormDataContentType = "payload.content_type"; + + String refactorHeaderString(String headerString) { + return headerString.replaceAll( + '"$kStringFormDataContentType"', kStringFormDataContentType); + } + String? getCode( RequestModel requestModel, - String defaultUriScheme, + String defaultUriScheme, { String? boundary, - ) { + }) { try { String result = ""; bool hasQuery = false; @@ -117,7 +105,7 @@ print('Response Body:', response.text) var templateStartUrl = jj.Template(kTemplateStart); result += templateStartUrl.render({ "url": stripUriParams(uri), - 'isFormDataRequest': requestModel.isFormDataRequest + 'hasFormData': requestModel.hasFormData }); if (uri.hasQuery) { @@ -126,77 +114,85 @@ print('Response Body:', response.text) hasQuery = true; var templateParams = jj.Template(kTemplateParams); var paramsString = kEncoder.convert(params); - paramsString = padMultilineString(paramsString, kParamsPadding); result += templateParams.render({"params": paramsString}); } } - var method = requestModel.method; - var requestBody = requestModel.requestBody; - if (kMethodsWithBody.contains(method) && requestBody != null) { - var contentLength = utf8.encode(requestBody).length; - if (contentLength > 0) { - if (requestModel.requestBodyContentType == ContentType.json) { - hasJsonBody = true; - var templateBody = jj.Template(kTemplateJson); - result += templateBody.render({"body": requestBody}); - } else if (!requestModel.isFormDataRequest) { - hasBody = true; - var templateBody = jj.Template(kTemplateBody); - result += templateBody.render({"body": requestBody}); + if (requestModel.hasFormData) { + hasBody = true; + List formdataPayload = []; + for (var item in requestModel.formDataList) { + if (item.type == FormDataType.text) { + formdataPayload.add(jj.Template(kTemplateFormDataRowText).render({ + "name": item.name, + "value": item.value, + })); + } + if (item.type == FormDataType.file) { + formdataPayload.add(jj.Template(kTemplateFormDataRowFile).render({ + "name": item.name, + "filename": getFilenameFromPath(item.value), + "path": item.value, + })); } } + var formDataBodyData = jj.Template(kTemplateFormDataBody); + result += formDataBodyData.render( + { + "formdata_payload": formdataPayload.join("\n"), + "boundary": boundary ?? '', + }, + ); + } else if (requestModel.hasJsonData) { + hasJsonBody = true; + var templateBody = jj.Template(kTemplateJson); + var pyDict = jsonToPyDict(requestModel.requestBody ?? ""); + result += templateBody.render({"body": pyDict}); + } else if (requestModel.hasTextData) { + hasBody = true; + var templateBody = jj.Template(kTemplateBody); + result += templateBody.render({"body": requestModel.requestBody}); } var headersList = requestModel.enabledRequestHeaders; if (headersList != null || hasBody) { var headers = requestModel.enabledHeadersMap; - if (requestModel.isFormDataRequest) { - var formHeaderTemplate = - jj.Template(kTemplateFormHeaderContentType); - headers[HttpHeaders.contentTypeHeader] = formHeaderTemplate.render({ - "boundary": boundary, - }); - } - if (headers.isNotEmpty || hasBody) { - hasHeaders = true; - if (hasBody) { + if (hasBody) { + if (requestModel.hasFormData) { + headers[HttpHeaders.contentTypeHeader] = + kStringFormDataContentType; + } else { headers[HttpHeaders.contentTypeHeader] = requestModel.requestBodyContentType.header; } + } + if (headers.isNotEmpty) { + hasHeaders = true; var headersString = kEncoder.convert(headers); - headersString = padMultilineString(headersString, kHeadersPadding); + headersString = refactorHeaderString(headersString); var templateHeaders = jj.Template(kTemplateHeaders); result += templateHeaders.render({"headers": headersString}); } } - if (requestModel.isFormDataRequest) { - var formDataBodyData = jj.Template(kStringFormDataBody); - result += formDataBodyData.render( - { - "fields_list": json.encode(requestModel.formDataMapList), - "boundary": boundary, - }, - ); - } + var templateRequest = jj.Template(kTemplateRequest); result += templateRequest.render({ - "method": method.name.toLowerCase(), + "method": requestModel.method.name.toLowerCase(), }); if (hasQuery) { result += kStringRequestParams; } - if (hasBody || requestModel.isFormDataRequest) { + if (hasBody) { result += kStringRequestBody; } - if (hasJsonBody || requestModel.isFormDataRequest) { + if (hasJsonBody) { result += kStringRequestJson; } - if (hasHeaders || requestModel.isFormDataRequest) { + if (hasHeaders) { result += kStringRequestHeaders; } diff --git a/test/codegen/python_requests_codegen_test.dart b/test/codegen/python_requests_codegen_test.dart index 3ed0a38a..babe65d6 100644 --- a/test/codegen/python_requests_codegen_test.dart +++ b/test/codegen/python_requests_codegen_test.dart @@ -26,8 +26,8 @@ print('Response Body:', response.text) url = 'https://api.apidash.dev/country/data' params = { - "code": "US" - } + "code": "US" +} response = requests.get(url, params=params) @@ -44,8 +44,8 @@ print('Response Body:', response.text) url = 'https://api.apidash.dev/country/data' params = { - "code": "IND" - } + "code": "IND" +} response = requests.get(url, params=params) @@ -62,12 +62,12 @@ print('Response Body:', response.text) url = 'https://api.apidash.dev/humanize/social' params = { - "num": "8700000", - "digits": "3", - "system": "SS", - "add_space": "true", - "trailing_zeros": "true" - } + "num": "8700000", + "digits": "3", + "system": "SS", + "add_space": "true", + "trailing_zeros": "true" +} response = requests.get(url, params=params) @@ -84,8 +84,8 @@ print('Response Body:', response.text) url = 'https://api.github.com/repos/foss42/apidash' headers = { - "User-Agent": "Test Agent" - } + "User-Agent": "Test Agent" +} response = requests.get(url, headers=headers) @@ -102,12 +102,12 @@ print('Response Body:', response.text) url = 'https://api.github.com/repos/foss42/apidash' params = { - "raw": "true" - } + "raw": "true" +} headers = { - "User-Agent": "Test Agent" - } + "User-Agent": "Test Agent" +} response = requests.get(url, params=params, headers=headers) @@ -138,12 +138,12 @@ print('Response Body:', response.text) url = 'https://api.github.com/repos/foss42/apidash' params = { - "raw": "true" - } + "raw": "true" +} headers = { - "User-Agent": "Test Agent" - } + "User-Agent": "Test Agent" +} response = requests.get(url, params=params, headers=headers) @@ -160,9 +160,9 @@ print('Response Body:', response.text) url = 'https://api.apidash.dev/humanize/social' params = { - "num": "8700000", - "add_space": "true" - } + "num": "8700000", + "add_space": "true" +} response = requests.get(url, params=params) @@ -179,8 +179,8 @@ print('Response Body:', response.text) url = 'https://api.apidash.dev/humanize/social' headers = { - "User-Agent": "Test Agent" - } + "User-Agent": "Test Agent" +} response = requests.get(url, headers=headers) @@ -201,13 +201,13 @@ print('Response Body:', response.text) url = 'https://api.apidash.dev/humanize/social' params = { - "num": "8700000", - "digits": "3" - } + "num": "8700000", + "digits": "3" +} headers = { - "User-Agent": "Test Agent" - } + "User-Agent": "Test Agent" +} response = requests.get(url, params=params, headers=headers) @@ -274,8 +274,8 @@ payload = r'''{ }''' headers = { - "content-type": "text/plain" - } + "content-type": "text/plain" +} response = requests.post(url, data=payload, headers=headers) @@ -292,7 +292,12 @@ print('Response Body:', response.text) url = 'https://api.apidash.dev/case/lower' payload = { -"text": "I LOVE Flutter" +"text": "I LOVE Flutter", +"flag": None, +"male": True, +"female": False, +"no": 1.2, +"arr": ["null", "true", "false", None] } response = requests.post(url, json=payload) @@ -314,8 +319,8 @@ payload = { } headers = { - "User-Agent": "Test Agent" - } + "User-Agent": "Test Agent" +} response = requests.post(url, json=payload, headers=headers) @@ -325,6 +330,166 @@ print('Response Body:', response.text) expect(pythonRequestsCodeGen.getCode(requestModelPost3, "https"), expectedCode); }); + + test('POST 4', () { + const expectedCode = r"""import requests +from requests_toolbelt.multipart.encoder import MultipartEncoder + +url = 'https://api.apidash.dev/io/form' + +payload = MultipartEncoder({ + "text": "API", + "sep": "|", + "times": "3", +}) + +headers = { + "content-type": payload.content_type +} + +response = requests.post(url, data=payload, headers=headers) + +print('Status Code:', response.status_code) +print('Response Body:', response.text) +"""; + expect(pythonRequestsCodeGen.getCode(requestModelPost4, "https"), + expectedCode); + }); + + test('POST 5', () { + const expectedCode = r"""import requests +from requests_toolbelt.multipart.encoder import MultipartEncoder + +url = 'https://api.apidash.dev/io/form' + +payload = MultipartEncoder({ + "text": "API", + "sep": "|", + "times": "3", +}) + +headers = { + "User-Agent": "Test Agent", + "content-type": payload.content_type +} + +response = requests.post(url, data=payload, headers=headers) + +print('Status Code:', response.status_code) +print('Response Body:', response.text) +"""; + expect(pythonRequestsCodeGen.getCode(requestModelPost5, "https"), + expectedCode); + }); + + test('POST 6', () { + const expectedCode = r"""import requests +from requests_toolbelt.multipart.encoder import MultipartEncoder + +url = 'https://api.apidash.dev/io/img' + +payload = MultipartEncoder({ + "token": "xyz", + "imfile": ("1.png", open("/Documents/up/1.png", "rb")), +}) + +headers = { + "content-type": payload.content_type +} + +response = requests.post(url, data=payload, headers=headers) + +print('Status Code:', response.status_code) +print('Response Body:', response.text) +"""; + expect(pythonRequestsCodeGen.getCode(requestModelPost6, "https"), + expectedCode); + }); + + test('POST 7', () { + const expectedCode = r"""import requests +from requests_toolbelt.multipart.encoder import MultipartEncoder + +url = 'https://api.apidash.dev/io/img' + +payload = MultipartEncoder({ + "token": "xyz", + "imfile": ("1.png", open("/Documents/up/1.png", "rb")), +}) + +headers = { + "content-type": payload.content_type +} + +response = requests.post(url, data=payload, headers=headers) + +print('Status Code:', response.status_code) +print('Response Body:', response.text) +"""; + expect(pythonRequestsCodeGen.getCode(requestModelPost7, "https"), + expectedCode); + }); + + test('POST 8', () { + const expectedCode = r"""import requests +from requests_toolbelt.multipart.encoder import MultipartEncoder + +url = 'https://api.apidash.dev/io/form' + +params = { + "size": "2", + "len": "3" +} + +payload = MultipartEncoder({ + "text": "API", + "sep": "|", + "times": "3", +}) + +headers = { + "content-type": payload.content_type +} + +response = requests.post(url, params=params, data=payload, headers=headers) + +print('Status Code:', response.status_code) +print('Response Body:', response.text) +"""; + expect(pythonRequestsCodeGen.getCode(requestModelPost8, "https"), + expectedCode); + }); + + test('POST 9', () { + const expectedCode = r"""import requests +from requests_toolbelt.multipart.encoder import MultipartEncoder + +url = 'https://api.apidash.dev/io/img' + +params = { + "size": "2", + "len": "3" +} + +payload = MultipartEncoder({ + "token": "xyz", + "imfile": ("1.png", open("/Documents/up/1.png", "rb")), +}) + +headers = { + "User-Agent": "Test Agent", + "Keep-Alive": "true", + "content-type": payload.content_type +} + +response = requests.post(url, params=params, data=payload, headers=headers) + +print('Status Code:', response.status_code) +print('Response Body:', response.text) +"""; + expect(pythonRequestsCodeGen.getCode(requestModelPost9, "https"), + expectedCode); + }); }); group('PUT Request', () { From 4d4380f3aab9f1b168c3dc133d93464e9fdb2868 Mon Sep 17 00:00:00 2001 From: Ankit Mahato Date: Tue, 12 Mar 2024 01:53:06 +0530 Subject: [PATCH 12/19] Update request model --- lib/codegen/js/axios.dart | 14 ++++++-------- lib/codegen/js/fetch.dart | 10 +++++----- lib/codegen/kotlin/okhttp.dart | 4 ++-- lib/codegen/python/http_client.dart | 18 +++++++++--------- lib/models/request_model.dart | 21 ++++++++++++++++++++- 5 files changed, 42 insertions(+), 25 deletions(-) diff --git a/lib/codegen/js/axios.dart b/lib/codegen/js/axios.dart index 1aeee285..424aa710 100644 --- a/lib/codegen/js/axios.dart +++ b/lib/codegen/js/axios.dart @@ -12,7 +12,7 @@ class AxiosCodeGen { String kStringImportNode = """{% if isNodeJs %}import axios from 'axios'; -{% endif %}{% if isFormDataRequest and isNodeJs %}const fs = require('fs');{% endif %} +{% endif %}{% if hasFormData and isNodeJs %}const fs = require('fs');{% endif %} """; String kTemplateStart = """let config = { @@ -78,13 +78,12 @@ async function buildFormData(fields) { try { jj.Template kNodejsImportTemplate = jj.Template(kStringImportNode); String importsData = kNodejsImportTemplate.render({ - "isFormDataRequest": requestModel.isFormDataRequest, + "hasFormData": requestModel.hasFormData, "isNodeJs": isNodeJs, }); String result = importsData; - if (requestModel.isFormDataRequest && - requestModel.formDataMapList.isNotEmpty) { + if (requestModel.hasFormData && requestModel.formDataMapList.isNotEmpty) { var templateMultiPartBody = jj.Template(kMultiPartBodyTemplate); var renderedMultiPartBody = templateMultiPartBody.render({ "isNodeJs": isNodeJs, @@ -118,13 +117,13 @@ async function buildFormData(fields) { } var headers = harJson["headers"]; - if (headers.isNotEmpty || requestModel.isFormDataRequest) { + if (headers.isNotEmpty || requestModel.hasFormData) { var templateHeader = jj.Template(kTemplateHeader); var m = {}; for (var i in headers) { m[i["name"]] = i["value"]; } - if (requestModel.isFormDataRequest) { + if (requestModel.hasFormData) { m['Content-Type'] = 'multipart/form-data'; } result += templateHeader @@ -132,8 +131,7 @@ async function buildFormData(fields) { } var templateBody = jj.Template(kTemplateBody); - if (requestModel.isFormDataRequest && - requestModel.formDataMapList.isNotEmpty) { + if (requestModel.hasFormData && requestModel.formDataMapList.isNotEmpty) { var getFieldDataTemplate = jj.Template(kGetFormDataTemplate); result += templateBody.render({ diff --git a/lib/codegen/js/fetch.dart b/lib/codegen/js/fetch.dart index 4ef2e551..3241e311 100644 --- a/lib/codegen/js/fetch.dart +++ b/lib/codegen/js/fetch.dart @@ -12,7 +12,7 @@ class FetchCodeGen { String kStringImportNode = """ import fetch from 'node-fetch'; -{% if isFormDataRequest %}const fs = require('fs');{% endif %} +{% if hasFormData %}const fs = require('fs');{% endif %} """; @@ -78,11 +78,11 @@ fetch(url, options) try { jj.Template kNodejsImportTemplate = jj.Template(kStringImportNode); String importsData = kNodejsImportTemplate.render({ - "isFormDataRequest": requestModel.isFormDataRequest, + "hasFormData": requestModel.hasFormData, }); String result = isNodeJs ? importsData : ""; - if (requestModel.isFormDataRequest) { + if (requestModel.hasFormData) { var templateMultiPartBody = jj.Template(kMultiPartBodyTemplate); result += templateMultiPartBody.render({ "isNodeJs": isNodeJs, @@ -108,7 +108,7 @@ fetch(url, options) if (headers.isNotEmpty) { var templateHeader = jj.Template(kTemplateHeader); var m = {}; - if (requestModel.isFormDataRequest) { + if (requestModel.hasFormData) { m["Content-Type"] = "multipart/form-data"; } for (var i in headers) { @@ -124,7 +124,7 @@ fetch(url, options) result += templateBody.render({ "body": kEncoder.convert(harJson["postData"]["text"]), }); - } else if (requestModel.isFormDataRequest) { + } else if (requestModel.hasFormData) { var templateBody = jj.Template(kTemplateBody); result += templateBody.render({ "body": 'payload', diff --git a/lib/codegen/kotlin/okhttp.dart b/lib/codegen/kotlin/okhttp.dart index bd8f0489..856d8f0c 100644 --- a/lib/codegen/kotlin/okhttp.dart +++ b/lib/codegen/kotlin/okhttp.dart @@ -113,7 +113,7 @@ import okhttp3.MultipartBody"""; var method = requestModel.method; var requestBody = requestModel.requestBody; - if (requestModel.isFormDataRequest) { + if (requestModel.hasFormData) { hasFormData = true; var formDataTemplate = jj.Template(kFormDataBody); @@ -152,7 +152,7 @@ import okhttp3.MultipartBody"""; var templateRequestEnd = jj.Template(kTemplateRequestEnd); result += templateRequestEnd.render({ "method": method.name.toLowerCase(), - "hasBody": (hasBody || requestModel.isFormDataRequest) ? "body" : "", + "hasBody": (hasBody || requestModel.hasFormData) ? "body" : "", }); } return result; diff --git a/lib/codegen/python/http_client.dart b/lib/codegen/python/http_client.dart index c9082bb1..1d042e96 100644 --- a/lib/codegen/python/http_client.dart +++ b/lib/codegen/python/http_client.dart @@ -8,7 +8,7 @@ import 'package:apidash/consts.dart'; class PythonHttpClientCodeGen { final String kTemplateStart = """import http.client -{% if isFormDataRequest %}import mimetypes +{% if hasFormData %}import mimetypes from codecs import encode {% endif %} """; @@ -88,9 +88,9 @@ body = b'\r\n'.join(dataList) '''; String? getCode( RequestModel requestModel, - String defaultUriScheme, + String defaultUriScheme, { String? boundary, - ) { + }) { try { String result = ""; bool hasHeaders = false; @@ -105,7 +105,7 @@ body = b'\r\n'.join(dataList) var templateStartUrl = jj.Template(kTemplateStart); result += templateStartUrl.render( { - "isFormDataRequest": requestModel.isFormDataRequest, + "hasFormData": requestModel.hasFormData, }, ); var rec = getValidRequestUri( @@ -131,7 +131,7 @@ body = b'\r\n'.join(dataList) var requestBody = requestModel.requestBody; if (kMethodsWithBody.contains(method) && requestBody != null && - !requestModel.isFormDataRequest) { + !requestModel.hasFormData) { var contentLength = utf8.encode(requestBody).length; if (contentLength > 0) { hasBody = true; @@ -143,7 +143,7 @@ body = b'\r\n'.join(dataList) var headersList = requestModel.enabledRequestHeaders; if (headersList != null || hasBody) { var headers = requestModel.enabledHeadersMap; - if (requestModel.isFormDataRequest) { + if (requestModel.hasFormData) { var formHeaderTemplate = jj.Template(kTemplateFormHeaderContentType); headers[HttpHeaders.contentTypeHeader] = formHeaderTemplate.render({ @@ -163,7 +163,7 @@ body = b'\r\n'.join(dataList) result += templateHeaders.render({"headers": headersString}); } } - if (requestModel.isFormDataRequest) { + if (requestModel.hasFormData) { var formDataBodyData = jj.Template(kStringFormDataBody); result += formDataBodyData.render( { @@ -185,11 +185,11 @@ body = b'\r\n'.join(dataList) "queryParamsStr": hasQuery ? " + queryParamsStr" : "", }); - if (hasBody || requestModel.isFormDataRequest) { + if (hasBody || requestModel.hasFormData) { result += kStringRequestBody; } - if (hasHeaders || requestModel.isFormDataRequest) { + if (hasHeaders || requestModel.hasFormData) { result += kStringRequestHeaders; } diff --git a/lib/models/request_model.dart b/lib/models/request_model.dart index a8d3569a..290681f6 100644 --- a/lib/models/request_model.dart +++ b/lib/models/request_model.dart @@ -1,4 +1,5 @@ import 'dart:io'; +import 'dart:convert'; import 'package:flutter/foundation.dart'; import '../utils/utils.dart' show @@ -62,9 +63,27 @@ class RequestModel { Map get headersMap => rowsToMap(requestHeaders) ?? {}; Map get paramsMap => rowsToMap(requestParams) ?? {}; + bool get hasFormDataContentType => + requestBodyContentType == ContentType.formdata; + bool get hasJsonContentType => requestBodyContentType == ContentType.json; + bool get hasTextContentType => requestBodyContentType == ContentType.text; + int get contentLength => utf8.encode(requestBody ?? "").length; + bool get hasJsonData => + kMethodsWithBody.contains(method) && + hasJsonContentType && + contentLength > 0; + bool get hasTextData => + kMethodsWithBody.contains(method) && + hasTextContentType && + contentLength > 0; + bool get hasFormData => + kMethodsWithBody.contains(method) && + hasFormDataContentType && + (requestFormDataList ?? []).isNotEmpty; + List get formDataList => + requestFormDataList ?? []; List> get formDataMapList => rowsToFormDataMapList(requestFormDataList) ?? []; - bool get isFormDataRequest => requestBodyContentType == ContentType.formdata; bool get hasContentTypeHeader => enabledHeadersMap.keys .any((k) => k.toLowerCase() == HttpHeaders.contentTypeHeader); From 2d5186bdf8f7d355178602a5024c186b3fd864fa Mon Sep 17 00:00:00 2001 From: Ankit Mahato Date: Tue, 12 Mar 2024 02:04:01 +0530 Subject: [PATCH 13/19] Update for POST 2 --- test/codegen/dart_dio_codegen_test.dart | 7 ++++++- test/codegen/kotlin_okhttp_codegen_test.dart | 7 ++++++- test/codegen/python_http_client_codegen_test.dart | 7 ++++++- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/test/codegen/dart_dio_codegen_test.dart b/test/codegen/dart_dio_codegen_test.dart index 5b981fde..1576070c 100644 --- a/test/codegen/dart_dio_codegen_test.dart +++ b/test/codegen/dart_dio_codegen_test.dart @@ -398,7 +398,12 @@ import 'dart:convert' as convert; void main() async { try { final data = convert.json.decode(r'''{ -"text": "I LOVE Flutter" +"text": "I LOVE Flutter", +"flag": null, +"male": true, +"female": false, +"no": 1.2, +"arr": ["null", "true", "false", null] }'''); final response = await dio.Dio.post( 'https://api.apidash.dev/case/lower', diff --git a/test/codegen/kotlin_okhttp_codegen_test.dart b/test/codegen/kotlin_okhttp_codegen_test.dart index 1b9ac764..3170028f 100644 --- a/test/codegen/kotlin_okhttp_codegen_test.dart +++ b/test/codegen/kotlin_okhttp_codegen_test.dart @@ -428,7 +428,12 @@ fun main() { val mediaType = "application/json".toMediaType() val body = """{ -"text": "I LOVE Flutter" +"text": "I LOVE Flutter", +"flag": null, +"male": true, +"female": false, +"no": 1.2, +"arr": ["null", "true", "false", null] }""".toRequestBody(mediaType) val request = Request.Builder() diff --git a/test/codegen/python_http_client_codegen_test.dart b/test/codegen/python_http_client_codegen_test.dart index 0ca712c2..0665e186 100644 --- a/test/codegen/python_http_client_codegen_test.dart +++ b/test/codegen/python_http_client_codegen_test.dart @@ -326,7 +326,12 @@ print(data.decode("utf-8")) const expectedCode = r"""import http.client body = r'''{ -"text": "I LOVE Flutter" +"text": "I LOVE Flutter", +"flag": null, +"male": true, +"female": false, +"no": 1.2, +"arr": ["null", "true", "false", null] }''' headers = { From 9be445072cfaf93919cd54d0a90443576a29479b Mon Sep 17 00:00:00 2001 From: Ankit Mahato Date: Tue, 12 Mar 2024 02:06:21 +0530 Subject: [PATCH 14/19] Update har_utils_test.dart --- test/utils/har_utils_test.dart | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/test/utils/har_utils_test.dart b/test/utils/har_utils_test.dart index 174ab180..9655e7c1 100644 --- a/test/utils/har_utils_test.dart +++ b/test/utils/har_utils_test.dart @@ -261,14 +261,19 @@ void main() { 'postData': { 'mimeType': 'application/json', 'text': '{\n' - '"text": "I LOVE Flutter"\n' + '"text": "I LOVE Flutter",\n' + '"flag": null,\n' + '"male": true,\n' + '"female": false,\n' + '"no": 1.2,\n' + '"arr": ["null", "true", "false", null]\n' '}', 'comment': '' }, 'comment': '', 'cookies': [], 'headersSize': -1, - 'bodySize': 28 + 'bodySize': 124 }; expect( requestModelToHARJsonRequest( From fc7a051285bfe4293f447c0a91efeaa704036d6a Mon Sep 17 00:00:00 2001 From: Ankit Mahato Date: Tue, 12 Mar 2024 02:24:35 +0530 Subject: [PATCH 15/19] POST 2 test updates --- test/codegen/curl_codegen_test.dart | 7 ++++++- test/codegen/dart_http_codegen_test.dart | 7 ++++++- test/codegen/js_axios_codegen_test.dart | 2 +- test/codegen/js_fetch_codegen_test.dart | 2 +- test/codegen/nodejs_axios_codegen_test.dart | 2 +- test/codegen/nodejs_fetch_codegen_test.dart | 2 +- 6 files changed, 16 insertions(+), 6 deletions(-) diff --git a/test/codegen/curl_codegen_test.dart b/test/codegen/curl_codegen_test.dart index 4481e819..29f9a406 100644 --- a/test/codegen/curl_codegen_test.dart +++ b/test/codegen/curl_codegen_test.dart @@ -115,7 +115,12 @@ void main() { --url 'https://api.apidash.dev/case/lower' \ --header 'Content-Type: application/json' \ --data '{ -"text": "I LOVE Flutter" +"text": "I LOVE Flutter", +"flag": null, +"male": true, +"female": false, +"no": 1.2, +"arr": ["null", "true", "false", null] }'"""; expect(curlCodeGen.getCode(requestModelPost2, "https"), expectedCode); }); diff --git a/test/codegen/dart_http_codegen_test.dart b/test/codegen/dart_http_codegen_test.dart index 790658b1..696646b0 100644 --- a/test/codegen/dart_http_codegen_test.dart +++ b/test/codegen/dart_http_codegen_test.dart @@ -409,7 +409,12 @@ void main() async { var uri = Uri.parse('https://api.apidash.dev/case/lower'); String body = r'''{ -"text": "I LOVE Flutter" +"text": "I LOVE Flutter", +"flag": null, +"male": true, +"female": false, +"no": 1.2, +"arr": ["null", "true", "false", null] }'''; var headers = {'content-type': 'application/json'}; diff --git a/test/codegen/js_axios_codegen_test.dart b/test/codegen/js_axios_codegen_test.dart index c364dbdb..cf2d5a18 100644 --- a/test/codegen/js_axios_codegen_test.dart +++ b/test/codegen/js_axios_codegen_test.dart @@ -383,7 +383,7 @@ axios(config) headers: { "Content-Type": "application/json" }, - data: "{\n\"text\": \"I LOVE Flutter\"\n}" + data: "{\n\"text\": \"I LOVE Flutter\",\n\"flag\": null,\n\"male\": true,\n\"female\": false,\n\"no\": 1.2,\n\"arr\": [\"null\", \"true\", \"false\", null]\n}" }; axios(config) diff --git a/test/codegen/js_fetch_codegen_test.dart b/test/codegen/js_fetch_codegen_test.dart index c29f93b9..2c2ec049 100644 --- a/test/codegen/js_fetch_codegen_test.dart +++ b/test/codegen/js_fetch_codegen_test.dart @@ -429,7 +429,7 @@ let options = { "Content-Type": "application/json" }, body: -"{\n\"text\": \"I LOVE Flutter\"\n}" +"{\n\"text\": \"I LOVE Flutter\",\n\"flag\": null,\n\"male\": true,\n\"female\": false,\n\"no\": 1.2,\n\"arr\": [\"null\", \"true\", \"false\", null]\n}" }; let status; diff --git a/test/codegen/nodejs_axios_codegen_test.dart b/test/codegen/nodejs_axios_codegen_test.dart index d4a12902..f3e77570 100644 --- a/test/codegen/nodejs_axios_codegen_test.dart +++ b/test/codegen/nodejs_axios_codegen_test.dart @@ -415,7 +415,7 @@ let config = { headers: { "Content-Type": "application/json" }, - data: "{\n\"text\": \"I LOVE Flutter\"\n}" + data: "{\n\"text\": \"I LOVE Flutter\",\n\"flag\": null,\n\"male\": true,\n\"female\": false,\n\"no\": 1.2,\n\"arr\": [\"null\", \"true\", \"false\", null]\n}" }; axios(config) diff --git a/test/codegen/nodejs_fetch_codegen_test.dart b/test/codegen/nodejs_fetch_codegen_test.dart index 592610ee..0c98ac35 100644 --- a/test/codegen/nodejs_fetch_codegen_test.dart +++ b/test/codegen/nodejs_fetch_codegen_test.dart @@ -451,7 +451,7 @@ let options = { "Content-Type": "application/json" }, body: -"{\n\"text\": \"I LOVE Flutter\"\n}" +"{\n\"text\": \"I LOVE Flutter\",\n\"flag\": null,\n\"male\": true,\n\"female\": false,\n\"no\": 1.2,\n\"arr\": [\"null\", \"true\", \"false\", null]\n}" }; let status; From cb8bfebecdbe118e853a576dc44a4890d38398c7 Mon Sep 17 00:00:00 2001 From: Ankit Mahato Date: Tue, 12 Mar 2024 05:19:03 +0530 Subject: [PATCH 16/19] Refactor codegen --- lib/codegen/codegen.dart | 68 ++++------- lib/codegen/dart/dio.dart | 7 +- lib/codegen/dart/http.dart | 7 +- lib/codegen/js/axios.dart | 16 +-- lib/codegen/js/fetch.dart | 13 +- lib/codegen/kotlin/okhttp.dart | 8 +- lib/codegen/others/har.dart | 6 +- lib/codegen/python/http_client.dart | 10 +- lib/codegen/python/requests.dart | 10 +- test/codegen/curl_codegen_test.dart | 88 +++++++++----- test/codegen/dart_dio_codegen_test.dart | 89 ++++++++++---- test/codegen/dart_http_codegen_test.dart | 89 ++++++++++---- test/codegen/js_axios_codegen_test.dart | 92 ++++++++++---- test/codegen/js_fetch_codegen_test.dart | 92 ++++++++++---- test/codegen/kotlin_okhttp_codegen_test.dart | 92 ++++++++++---- test/codegen/nodejs_axios_codegen_test.dart | 110 +++++++++++++---- test/codegen/nodejs_fetch_codegen_test.dart | 110 +++++++++++++---- .../python_http_client_codegen_test.dart | 90 ++++++++++---- .../codegen/python_requests_codegen_test.dart | 114 +++++++++++++----- 19 files changed, 759 insertions(+), 352 deletions(-) diff --git a/lib/codegen/codegen.dart b/lib/codegen/codegen.dart index f6fdaa5f..ad348e24 100644 --- a/lib/codegen/codegen.dart +++ b/lib/codegen/codegen.dart @@ -18,64 +18,40 @@ class Codegen { String defaultUriScheme, { String? boundary, }) { + String url = requestModel.url; + + if (url.isEmpty) { + url = kDefaultUri; + } + if (!url.contains("://") && url.isNotEmpty) { + url = "$defaultUriScheme://$url"; + } + var rM = requestModel.copyWith(url: url); + switch (codegenLanguage) { case CodegenLanguage.curl: - return cURLCodeGen().getCode( - requestModel, - defaultUriScheme, - ); + return cURLCodeGen().getCode(rM); case CodegenLanguage.har: - return HARCodeGen().getCode( - requestModel, - defaultUriScheme, - ); + return HARCodeGen().getCode(rM, defaultUriScheme, boundary: boundary); case CodegenLanguage.dartHttp: - return DartHttpCodeGen().getCode( - requestModel, - defaultUriScheme, - ); + return DartHttpCodeGen().getCode(rM); case CodegenLanguage.dartDio: - return DartDioCodeGen().getCode( - requestModel, - defaultUriScheme, - ); + return DartDioCodeGen().getCode(rM); case CodegenLanguage.jsAxios: - return AxiosCodeGen().getCode( - requestModel, - defaultUriScheme, - ); + return AxiosCodeGen().getCode(rM); case CodegenLanguage.jsFetch: - return FetchCodeGen().getCode( - requestModel, - defaultUriScheme, - ); + return FetchCodeGen().getCode(rM); case CodegenLanguage.nodejsAxios: - return AxiosCodeGen(isNodeJs: true).getCode( - requestModel, - defaultUriScheme, - ); + return AxiosCodeGen(isNodeJs: true).getCode(rM); case CodegenLanguage.nodejsFetch: - return FetchCodeGen(isNodeJs: true).getCode( - requestModel, - defaultUriScheme, - ); + return FetchCodeGen(isNodeJs: true).getCode(rM); case CodegenLanguage.kotlinOkHttp: - return KotlinOkHttpCodeGen().getCode( - requestModel, - defaultUriScheme, - ); + return KotlinOkHttpCodeGen().getCode(rM); case CodegenLanguage.pythonHttpClient: - return PythonHttpClientCodeGen().getCode( - requestModel, - defaultUriScheme, - boundary: boundary ?? getNewUuid(), - ); + return PythonHttpClientCodeGen() + .getCode(rM, boundary: boundary ?? getNewUuid()); case CodegenLanguage.pythonRequests: - return PythonRequestsCodeGen().getCode( - requestModel, - defaultUriScheme, - boundary: boundary, - ); + return PythonRequestsCodeGen().getCode(rM, boundary: boundary); } } } diff --git a/lib/codegen/dart/dio.dart b/lib/codegen/dart/dio.dart index c4a7ed8e..c05b0b68 100644 --- a/lib/codegen/dart/dio.dart +++ b/lib/codegen/dart/dio.dart @@ -8,15 +8,10 @@ import 'shared.dart'; class DartDioCodeGen { String? getCode( RequestModel requestModel, - String defaultUriScheme, ) { try { - String url = requestModel.url; - if (!url.contains("://") && url.isNotEmpty) { - url = "$defaultUriScheme://$url"; - } final next = generatedDartCode( - url: url, + url: requestModel.url, method: requestModel.method, queryParams: requestModel.enabledParamsMap, headers: requestModel.enabledHeadersMap, diff --git a/lib/codegen/dart/http.dart b/lib/codegen/dart/http.dart index 42c44ecb..89e8062c 100644 --- a/lib/codegen/dart/http.dart +++ b/lib/codegen/dart/http.dart @@ -9,15 +9,10 @@ import 'shared.dart'; class DartHttpCodeGen { String? getCode( RequestModel requestModel, - String defaultUriScheme, ) { try { - String url = requestModel.url; - if (!url.contains("://") && url.isNotEmpty) { - url = "$defaultUriScheme://$url"; - } final next = generatedDartCode( - url: url, + url: requestModel.url, method: requestModel.method, queryParams: requestModel.enabledParamsMap, headers: {...requestModel.enabledHeadersMap}, diff --git a/lib/codegen/js/axios.dart b/lib/codegen/js/axios.dart index 424aa710..71456d6e 100644 --- a/lib/codegen/js/axios.dart +++ b/lib/codegen/js/axios.dart @@ -73,7 +73,6 @@ async function buildFormData(fields) { '''; String? getCode( RequestModel requestModel, - String defaultUriScheme, ) { try { jj.Template kNodejsImportTemplate = jj.Template(kStringImportNode); @@ -91,17 +90,14 @@ async function buildFormData(fields) { result += renderedMultiPartBody; } - String url = requestModel.url; - if (!url.contains("://") && url.isNotEmpty) { - url = "$defaultUriScheme://$url"; - } - var rM = requestModel.copyWith(url: url); - - var harJson = requestModelToHARJsonRequest(rM, useEnabled: true); + var harJson = requestModelToHARJsonRequest( + requestModel, + useEnabled: true, + ); var templateStart = jj.Template(kTemplateStart); result += templateStart.render({ - "url": stripUrlParams(url), + "url": stripUrlParams(requestModel.url), "method": harJson["method"].toLowerCase(), }); @@ -124,7 +120,7 @@ async function buildFormData(fields) { m[i["name"]] = i["value"]; } if (requestModel.hasFormData) { - m['Content-Type'] = 'multipart/form-data'; + m[kHeaderContentType] = 'multipart/form-data'; } result += templateHeader .render({"headers": padMultilineString(kEncoder.convert(m), 2)}); diff --git a/lib/codegen/js/fetch.dart b/lib/codegen/js/fetch.dart index 3241e311..2ff88a9b 100644 --- a/lib/codegen/js/fetch.dart +++ b/lib/codegen/js/fetch.dart @@ -73,7 +73,6 @@ fetch(url, options) String? getCode( RequestModel requestModel, - String defaultUriScheme, ) { try { jj.Template kNodejsImportTemplate = jj.Template(kStringImportNode); @@ -89,13 +88,11 @@ fetch(url, options) "fields_list": json.encode(requestModel.formDataMapList), }); } - String url = requestModel.url; - if (!url.contains("://") && url.isNotEmpty) { - url = "$defaultUriScheme://$url"; - } - var rM = requestModel.copyWith(url: url); - var harJson = requestModelToHARJsonRequest(rM, useEnabled: true); + var harJson = requestModelToHARJsonRequest( + requestModel, + useEnabled: true, + ); var templateStart = jj.Template(kTemplateStart); result += templateStart.render({ @@ -109,7 +106,7 @@ fetch(url, options) var templateHeader = jj.Template(kTemplateHeader); var m = {}; if (requestModel.hasFormData) { - m["Content-Type"] = "multipart/form-data"; + m[kHeaderContentType] = "multipart/form-data"; } for (var i in headers) { m[i["name"]] = i["value"]; diff --git a/lib/codegen/kotlin/okhttp.dart b/lib/codegen/kotlin/okhttp.dart index 856d8f0c..c717dc97 100644 --- a/lib/codegen/kotlin/okhttp.dart +++ b/lib/codegen/kotlin/okhttp.dart @@ -75,7 +75,6 @@ import okhttp3.MultipartBody"""; String? getCode( RequestModel requestModel, - String defaultUriScheme, ) { try { String result = ""; @@ -83,13 +82,8 @@ import okhttp3.MultipartBody"""; bool hasBody = false; bool hasFormData = false; - String url = requestModel.url; - if (!url.contains("://") && url.isNotEmpty) { - url = "$defaultUriScheme://$url"; - } - var rec = getValidRequestUri( - url, + requestModel.url, requestModel.enabledRequestParams, ); Uri? uri = rec.$1; diff --git a/lib/codegen/others/har.dart b/lib/codegen/others/har.dart index 77d78f58..72ab8731 100644 --- a/lib/codegen/others/har.dart +++ b/lib/codegen/others/har.dart @@ -5,13 +5,15 @@ import 'package:apidash/models/models.dart' show RequestModel; class HARCodeGen { String? getCode( RequestModel requestModel, - String defaultUriScheme, - ) { + String defaultUriScheme, { + String? boundary, + }) { try { var harString = kEncoder.convert(requestModelToHARJsonRequest( requestModel, defaultUriScheme: defaultUriScheme, useEnabled: true, + boundary: boundary, )); return harString; } catch (e) { diff --git a/lib/codegen/python/http_client.dart b/lib/codegen/python/http_client.dart index 1d042e96..6913314a 100644 --- a/lib/codegen/python/http_client.dart +++ b/lib/codegen/python/http_client.dart @@ -87,8 +87,7 @@ dataList = build_data_list({{fields_list}}) body = b'\r\n'.join(dataList) '''; String? getCode( - RequestModel requestModel, - String defaultUriScheme, { + RequestModel requestModel, { String? boundary, }) { try { @@ -97,11 +96,6 @@ body = b'\r\n'.join(dataList) bool hasQuery = false; bool hasBody = false; - String url = requestModel.url; - if (!url.contains("://") && url.isNotEmpty) { - url = "$defaultUriScheme://$url"; - } - var templateStartUrl = jj.Template(kTemplateStart); result += templateStartUrl.render( { @@ -109,7 +103,7 @@ body = b'\r\n'.join(dataList) }, ); var rec = getValidRequestUri( - url, + requestModel.url, requestModel.enabledRequestParams, ); diff --git a/lib/codegen/python/requests.dart b/lib/codegen/python/requests.dart index 8a700122..6fb07908 100644 --- a/lib/codegen/python/requests.dart +++ b/lib/codegen/python/requests.dart @@ -80,8 +80,7 @@ print('Response Body:', response.text) } String? getCode( - RequestModel requestModel, - String defaultUriScheme, { + RequestModel requestModel, { String? boundary, }) { try { @@ -91,13 +90,8 @@ print('Response Body:', response.text) bool hasBody = false; bool hasJsonBody = false; - String url = requestModel.url; - if (!url.contains("://") && url.isNotEmpty) { - url = "$defaultUriScheme://$url"; - } - var rec = getValidRequestUri( - url, + requestModel.url, requestModel.enabledRequestParams, ); Uri? uri = rec.$1; diff --git a/test/codegen/curl_codegen_test.dart b/test/codegen/curl_codegen_test.dart index 29f9a406..ec0df5db 100644 --- a/test/codegen/curl_codegen_test.dart +++ b/test/codegen/curl_codegen_test.dart @@ -1,64 +1,74 @@ +import 'package:apidash/codegen/codegen.dart'; +import 'package:apidash/consts.dart'; import 'package:test/test.dart'; -import 'package:apidash/codegen/others/curl.dart'; import '../request_models.dart'; void main() { - final curlCodeGen = cURLCodeGen(); + final codeGen = Codegen(); group('GET Request', () { test('GET 1', () { const expectedCode = r"""curl --url 'https://api.apidash.dev'"""; - expect(curlCodeGen.getCode(requestModelGet1, "https"), expectedCode); + expect(codeGen.getCode(CodegenLanguage.curl, requestModelGet1, "https"), + expectedCode); }); test('GET 2', () { const expectedCode = r"""curl --url 'https://api.apidash.dev/country/data?code=US'"""; - expect(curlCodeGen.getCode(requestModelGet2, "https"), expectedCode); + expect(codeGen.getCode(CodegenLanguage.curl, requestModelGet2, "https"), + expectedCode); }); test('GET 3', () { const expectedCode = r"""curl --url 'https://api.apidash.dev/country/data?code=IND'"""; - expect(curlCodeGen.getCode(requestModelGet3, "https"), expectedCode); + expect(codeGen.getCode(CodegenLanguage.curl, requestModelGet3, "https"), + expectedCode); }); test('GET 4', () { const expectedCode = r"""curl --url 'https://api.apidash.dev/humanize/social?num=8700000&digits=3&system=SS&add_space=true&trailing_zeros=true'"""; - expect(curlCodeGen.getCode(requestModelGet4, "https"), expectedCode); + expect(codeGen.getCode(CodegenLanguage.curl, requestModelGet4, "https"), + expectedCode); }); test('GET 5', () { const expectedCode = r"""curl --url 'https://api.github.com/repos/foss42/apidash' \ --header 'User-Agent: Test Agent'"""; - expect(curlCodeGen.getCode(requestModelGet5, "https"), expectedCode); + expect(codeGen.getCode(CodegenLanguage.curl, requestModelGet5, "https"), + expectedCode); }); test('GET 6', () { const expectedCode = r"""curl --url 'https://api.github.com/repos/foss42/apidash?raw=true' \ --header 'User-Agent: Test Agent'"""; - expect(curlCodeGen.getCode(requestModelGet6, "https"), expectedCode); + expect(codeGen.getCode(CodegenLanguage.curl, requestModelGet6, "https"), + expectedCode); }); test('GET 7', () { const expectedCode = r"""curl --url 'https://api.apidash.dev'"""; - expect(curlCodeGen.getCode(requestModelGet7, "https"), expectedCode); + expect(codeGen.getCode(CodegenLanguage.curl, requestModelGet7, "https"), + expectedCode); }); test('GET 8', () { const expectedCode = r"""curl --url 'https://api.github.com/repos/foss42/apidash?raw=true' \ --header 'User-Agent: Test Agent'"""; - expect(curlCodeGen.getCode(requestModelGet8, "https"), expectedCode); + expect(codeGen.getCode(CodegenLanguage.curl, requestModelGet8, "https"), + expectedCode); }); test('GET 9', () { const expectedCode = r"""curl --url 'https://api.apidash.dev/humanize/social?num=8700000&add_space=true'"""; - expect(curlCodeGen.getCode(requestModelGet9, "https"), expectedCode); + expect(codeGen.getCode(CodegenLanguage.curl, requestModelGet9, "https"), + expectedCode); }); test('GET 10', () { @@ -66,7 +76,8 @@ void main() { r"""curl --url 'https://api.apidash.dev/humanize/social' \ --header 'User-Agent: Test Agent'"""; expect( - curlCodeGen.getCode( + codeGen.getCode( + CodegenLanguage.curl, requestModelGet10, "https", ), @@ -77,25 +88,29 @@ void main() { const expectedCode = r"""curl --url 'https://api.apidash.dev/humanize/social?num=8700000&digits=3' \ --header 'User-Agent: Test Agent'"""; - expect(curlCodeGen.getCode(requestModelGet11, "https"), expectedCode); + expect(codeGen.getCode(CodegenLanguage.curl, requestModelGet11, "https"), + expectedCode); }); test('GET 12', () { const expectedCode = r"""curl --url 'https://api.apidash.dev/humanize/social'"""; - expect(curlCodeGen.getCode(requestModelGet12, "https"), expectedCode); + expect(codeGen.getCode(CodegenLanguage.curl, requestModelGet12, "https"), + expectedCode); }); }); group('HEAD Request', () { test('HEAD 1', () { const expectedCode = r"""curl --head --url 'https://api.apidash.dev'"""; - expect(curlCodeGen.getCode(requestModelHead1, "https"), expectedCode); + expect(codeGen.getCode(CodegenLanguage.curl, requestModelHead1, "https"), + expectedCode); }); test('HEAD 2', () { const expectedCode = r"""curl --head --url 'http://api.apidash.dev'"""; - expect(curlCodeGen.getCode(requestModelHead2, "http"), expectedCode); + expect(codeGen.getCode(CodegenLanguage.curl, requestModelHead2, "http"), + expectedCode); }); }); @@ -107,7 +122,8 @@ void main() { --data '{ "text": "I LOVE Flutter" }'"""; - expect(curlCodeGen.getCode(requestModelPost1, "https"), expectedCode); + expect(codeGen.getCode(CodegenLanguage.curl, requestModelPost1, "https"), + expectedCode); }); test('POST 2', () { @@ -122,7 +138,8 @@ void main() { "no": 1.2, "arr": ["null", "true", "false", null] }'"""; - expect(curlCodeGen.getCode(requestModelPost2, "https"), expectedCode); + expect(codeGen.getCode(CodegenLanguage.curl, requestModelPost2, "https"), + expectedCode); }); test('POST 3', () { @@ -133,7 +150,8 @@ void main() { --data '{ "text": "I LOVE Flutter" }'"""; - expect(curlCodeGen.getCode(requestModelPost3, "https"), expectedCode); + expect(codeGen.getCode(CodegenLanguage.curl, requestModelPost3, "https"), + expectedCode); }); test('POST 4', () { @@ -142,7 +160,8 @@ void main() { --form 'text=API' \ --form 'sep=|' \ --form 'times=3'"""; - expect(curlCodeGen.getCode(requestModelPost4, "https"), expectedCode); + expect(codeGen.getCode(CodegenLanguage.curl, requestModelPost4, "https"), + expectedCode); }); test('POST 5', () { @@ -152,7 +171,8 @@ void main() { --form 'text=API' \ --form 'sep=|' \ --form 'times=3'"""; - expect(curlCodeGen.getCode(requestModelPost5, "https"), expectedCode); + expect(codeGen.getCode(CodegenLanguage.curl, requestModelPost5, "https"), + expectedCode); }); test('POST 6', () { @@ -160,7 +180,8 @@ void main() { --url 'https://api.apidash.dev/io/img' \ --form 'token=xyz' \ --form 'imfile=@/Documents/up/1.png'"""; - expect(curlCodeGen.getCode(requestModelPost6, "https"), expectedCode); + expect(codeGen.getCode(CodegenLanguage.curl, requestModelPost6, "https"), + expectedCode); }); test('POST 7', () { @@ -168,7 +189,8 @@ void main() { --url 'https://api.apidash.dev/io/img' \ --form 'token=xyz' \ --form 'imfile=@/Documents/up/1.png'"""; - expect(curlCodeGen.getCode(requestModelPost7, "https"), expectedCode); + expect(codeGen.getCode(CodegenLanguage.curl, requestModelPost7, "https"), + expectedCode); }); test('POST 8', () { @@ -177,7 +199,8 @@ void main() { --form 'text=API' \ --form 'sep=|' \ --form 'times=3'"""; - expect(curlCodeGen.getCode(requestModelPost8, "https"), expectedCode); + expect(codeGen.getCode(CodegenLanguage.curl, requestModelPost8, "https"), + expectedCode); }); test('POST 9', () { @@ -187,7 +210,8 @@ void main() { --header 'Keep-Alive: true' \ --form 'token=xyz' \ --form 'imfile=@/Documents/up/1.png'"""; - expect(curlCodeGen.getCode(requestModelPost9, "https"), expectedCode); + expect(codeGen.getCode(CodegenLanguage.curl, requestModelPost9, "https"), + expectedCode); }); }); @@ -200,7 +224,8 @@ void main() { "name": "morpheus", "job": "zion resident" }'"""; - expect(curlCodeGen.getCode(requestModelPut1, "https"), expectedCode); + expect(codeGen.getCode(CodegenLanguage.curl, requestModelPut1, "https"), + expectedCode); }); }); @@ -213,7 +238,8 @@ void main() { "name": "marfeus", "job": "accountant" }'"""; - expect(curlCodeGen.getCode(requestModelPatch1, "https"), expectedCode); + expect(codeGen.getCode(CodegenLanguage.curl, requestModelPatch1, "https"), + expectedCode); }); }); @@ -221,7 +247,9 @@ void main() { test('DELETE 1', () { const expectedCode = r"""curl --request DELETE \ --url 'https://reqres.in/api/users/2'"""; - expect(curlCodeGen.getCode(requestModelDelete1, "https"), expectedCode); + expect( + codeGen.getCode(CodegenLanguage.curl, requestModelDelete1, "https"), + expectedCode); }); test('DELETE 2', () { @@ -232,7 +260,9 @@ void main() { "name": "marfeus", "job": "accountant" }'"""; - expect(curlCodeGen.getCode(requestModelDelete2, "https"), expectedCode); + expect( + codeGen.getCode(CodegenLanguage.curl, requestModelDelete2, "https"), + expectedCode); }); }); } diff --git a/test/codegen/dart_dio_codegen_test.dart b/test/codegen/dart_dio_codegen_test.dart index 1576070c..84ae29d4 100644 --- a/test/codegen/dart_dio_codegen_test.dart +++ b/test/codegen/dart_dio_codegen_test.dart @@ -1,10 +1,10 @@ -import 'package:apidash/codegen/dart/dio.dart'; +import 'package:apidash/codegen/codegen.dart'; +import 'package:apidash/consts.dart'; import 'package:test/test.dart'; - import '../request_models.dart'; void main() { - final dartDioCodeGen = DartDioCodeGen(); + final codeGen = Codegen(); group('GET Request', () { test('GET 1', () { @@ -25,7 +25,9 @@ void main() async { } } """; - expect(dartDioCodeGen.getCode(requestModelGet1, "https"), expectedCode); + expect( + codeGen.getCode(CodegenLanguage.dartDio, requestModelGet1, "https"), + expectedCode); }); test('GET 2', () { @@ -50,7 +52,9 @@ void main() async { } } """; - expect(dartDioCodeGen.getCode(requestModelGet2, "https"), expectedCode); + expect( + codeGen.getCode(CodegenLanguage.dartDio, requestModelGet2, "https"), + expectedCode); }); test('GET 3', () { @@ -75,7 +79,9 @@ void main() async { } } """; - expect(dartDioCodeGen.getCode(requestModelGet3, "https"), expectedCode); + expect( + codeGen.getCode(CodegenLanguage.dartDio, requestModelGet3, "https"), + expectedCode); }); test('GET 4', () { @@ -106,7 +112,9 @@ void main() async { } } """; - expect(dartDioCodeGen.getCode(requestModelGet4, "https"), expectedCode); + expect( + codeGen.getCode(CodegenLanguage.dartDio, requestModelGet4, "https"), + expectedCode); }); test('GET 5', () { @@ -131,7 +139,9 @@ void main() async { } } """; - expect(dartDioCodeGen.getCode(requestModelGet5, "https"), expectedCode); + expect( + codeGen.getCode(CodegenLanguage.dartDio, requestModelGet5, "https"), + expectedCode); }); test('GET 6', () { @@ -158,7 +168,9 @@ void main() async { } } """; - expect(dartDioCodeGen.getCode(requestModelGet6, "https"), expectedCode); + expect( + codeGen.getCode(CodegenLanguage.dartDio, requestModelGet6, "https"), + expectedCode); }); test('GET 7', () { @@ -179,7 +191,9 @@ void main() async { } } """; - expect(dartDioCodeGen.getCode(requestModelGet7, "https"), expectedCode); + expect( + codeGen.getCode(CodegenLanguage.dartDio, requestModelGet7, "https"), + expectedCode); }); test('GET 8', () { @@ -206,7 +220,9 @@ void main() async { } } """; - expect(dartDioCodeGen.getCode(requestModelGet8, "https"), expectedCode); + expect( + codeGen.getCode(CodegenLanguage.dartDio, requestModelGet8, "https"), + expectedCode); }); test('GET 9', () { @@ -234,7 +250,9 @@ void main() async { } } """; - expect(dartDioCodeGen.getCode(requestModelGet9, "https"), expectedCode); + expect( + codeGen.getCode(CodegenLanguage.dartDio, requestModelGet9, "https"), + expectedCode); }); test('GET 10', () { @@ -260,7 +278,8 @@ void main() async { } """; expect( - dartDioCodeGen.getCode( + codeGen.getCode( + CodegenLanguage.dartDio, requestModelGet10, "https", ), @@ -294,7 +313,9 @@ void main() async { } } """; - expect(dartDioCodeGen.getCode(requestModelGet11, "https"), expectedCode); + expect( + codeGen.getCode(CodegenLanguage.dartDio, requestModelGet11, "https"), + expectedCode); }); test('GET 12', () { @@ -315,7 +336,9 @@ void main() async { } } """; - expect(dartDioCodeGen.getCode(requestModelGet12, "https"), expectedCode); + expect( + codeGen.getCode(CodegenLanguage.dartDio, requestModelGet12, "https"), + expectedCode); }); }); @@ -338,7 +361,9 @@ void main() async { } } """; - expect(dartDioCodeGen.getCode(requestModelHead1, "https"), expectedCode); + expect( + codeGen.getCode(CodegenLanguage.dartDio, requestModelHead1, "https"), + expectedCode); }); test('HEAD 2', () { @@ -359,7 +384,9 @@ void main() async { } } """; - expect(dartDioCodeGen.getCode(requestModelHead2, "http"), expectedCode); + expect( + codeGen.getCode(CodegenLanguage.dartDio, requestModelHead2, "http"), + expectedCode); }); }); @@ -388,7 +415,9 @@ void main() async { } } """; - expect(dartDioCodeGen.getCode(requestModelPost1, "https"), expectedCode); + expect( + codeGen.getCode(CodegenLanguage.dartDio, requestModelPost1, "https"), + expectedCode); }); test('POST 2', () { @@ -421,7 +450,9 @@ void main() async { } } """; - expect(dartDioCodeGen.getCode(requestModelPost2, "https"), expectedCode); + expect( + codeGen.getCode(CodegenLanguage.dartDio, requestModelPost2, "https"), + expectedCode); }); test('POST 3', () { @@ -451,7 +482,9 @@ void main() async { } } """; - expect(dartDioCodeGen.getCode(requestModelPost3, "https"), expectedCode); + expect( + codeGen.getCode(CodegenLanguage.dartDio, requestModelPost3, "https"), + expectedCode); }); }); @@ -482,7 +515,9 @@ void main() async { } } """; - expect(dartDioCodeGen.getCode(requestModelPut1, "https"), expectedCode); + expect( + codeGen.getCode(CodegenLanguage.dartDio, requestModelPut1, "https"), + expectedCode); }); }); @@ -513,7 +548,9 @@ void main() async { } } """; - expect(dartDioCodeGen.getCode(requestModelPatch1, "https"), expectedCode); + expect( + codeGen.getCode(CodegenLanguage.dartDio, requestModelPatch1, "https"), + expectedCode); }); }); @@ -537,7 +574,9 @@ void main() async { } """; expect( - dartDioCodeGen.getCode(requestModelDelete1, "https"), expectedCode); + codeGen.getCode( + CodegenLanguage.dartDio, requestModelDelete1, "https"), + expectedCode); }); test('DELETE 2', () { @@ -567,7 +606,9 @@ void main() async { } """; expect( - dartDioCodeGen.getCode(requestModelDelete2, "https"), expectedCode); + codeGen.getCode( + CodegenLanguage.dartDio, requestModelDelete2, "https"), + expectedCode); }); }); } diff --git a/test/codegen/dart_http_codegen_test.dart b/test/codegen/dart_http_codegen_test.dart index 696646b0..b8530555 100644 --- a/test/codegen/dart_http_codegen_test.dart +++ b/test/codegen/dart_http_codegen_test.dart @@ -1,10 +1,10 @@ -import 'package:apidash/codegen/dart/http.dart'; +import 'package:apidash/codegen/codegen.dart'; +import 'package:apidash/consts.dart'; import 'package:test/test.dart'; - import '../request_models.dart'; void main() { - final dartHttpCodeGen = DartHttpCodeGen(); + final codeGen = Codegen(); group('GET Request', () { test('GET 1', () { @@ -25,7 +25,9 @@ void main() async { } } """; - expect(dartHttpCodeGen.getCode(requestModelGet1, "https"), expectedCode); + expect( + codeGen.getCode(CodegenLanguage.dartHttp, requestModelGet1, "https"), + expectedCode); }); test('GET 2', () { @@ -50,7 +52,9 @@ void main() async { } """; - expect(dartHttpCodeGen.getCode(requestModelGet2, "https"), expectedCode); + expect( + codeGen.getCode(CodegenLanguage.dartHttp, requestModelGet2, "https"), + expectedCode); }); test('GET 3', () { @@ -76,7 +80,9 @@ void main() async { } } """; - expect(dartHttpCodeGen.getCode(requestModelGet3, "https"), expectedCode); + expect( + codeGen.getCode(CodegenLanguage.dartHttp, requestModelGet3, "https"), + expectedCode); }); test('GET 4', () { @@ -106,7 +112,9 @@ void main() async { } } """; - expect(dartHttpCodeGen.getCode(requestModelGet4, "https"), expectedCode); + expect( + codeGen.getCode(CodegenLanguage.dartHttp, requestModelGet4, "https"), + expectedCode); }); test('GET 5', () { @@ -132,7 +140,9 @@ void main() async { } } """; - expect(dartHttpCodeGen.getCode(requestModelGet5, "https"), expectedCode); + expect( + codeGen.getCode(CodegenLanguage.dartHttp, requestModelGet5, "https"), + expectedCode); }); test('GET 6', () { @@ -161,7 +171,9 @@ void main() async { } } """; - expect(dartHttpCodeGen.getCode(requestModelGet6, "https"), expectedCode); + expect( + codeGen.getCode(CodegenLanguage.dartHttp, requestModelGet6, "https"), + expectedCode); }); test('GET 7', () { @@ -182,7 +194,9 @@ void main() async { } } """; - expect(dartHttpCodeGen.getCode(requestModelGet7, "https"), expectedCode); + expect( + codeGen.getCode(CodegenLanguage.dartHttp, requestModelGet7, "https"), + expectedCode); }); test('GET 8', () { @@ -211,7 +225,9 @@ void main() async { } } """; - expect(dartHttpCodeGen.getCode(requestModelGet8, "https"), expectedCode); + expect( + codeGen.getCode(CodegenLanguage.dartHttp, requestModelGet8, "https"), + expectedCode); }); test('GET 9', () { @@ -238,7 +254,9 @@ void main() async { } } """; - expect(dartHttpCodeGen.getCode(requestModelGet9, "https"), expectedCode); + expect( + codeGen.getCode(CodegenLanguage.dartHttp, requestModelGet9, "https"), + expectedCode); }); test('GET 10', () { @@ -265,7 +283,8 @@ void main() async { } """; expect( - dartHttpCodeGen.getCode( + codeGen.getCode( + CodegenLanguage.dartHttp, requestModelGet10, "https", ), @@ -301,7 +320,9 @@ void main() async { } } """; - expect(dartHttpCodeGen.getCode(requestModelGet11, "https"), expectedCode); + expect( + codeGen.getCode(CodegenLanguage.dartHttp, requestModelGet11, "https"), + expectedCode); }); test('GET 12', () { @@ -322,7 +343,9 @@ void main() async { } } """; - expect(dartHttpCodeGen.getCode(requestModelGet12, "https"), expectedCode); + expect( + codeGen.getCode(CodegenLanguage.dartHttp, requestModelGet12, "https"), + expectedCode); }); }); @@ -345,7 +368,9 @@ void main() async { } } """; - expect(dartHttpCodeGen.getCode(requestModelHead1, "https"), expectedCode); + expect( + codeGen.getCode(CodegenLanguage.dartHttp, requestModelHead1, "https"), + expectedCode); }); test('HEAD 2', () { @@ -366,7 +391,9 @@ void main() async { } } """; - expect(dartHttpCodeGen.getCode(requestModelHead2, "http"), expectedCode); + expect( + codeGen.getCode(CodegenLanguage.dartHttp, requestModelHead2, "http"), + expectedCode); }); }); @@ -399,7 +426,9 @@ void main() async { } } """; - expect(dartHttpCodeGen.getCode(requestModelPost1, "https"), expectedCode); + expect( + codeGen.getCode(CodegenLanguage.dartHttp, requestModelPost1, "https"), + expectedCode); }); test('POST 2', () { @@ -435,7 +464,9 @@ void main() async { } } """; - expect(dartHttpCodeGen.getCode(requestModelPost2, "https"), expectedCode); + expect( + codeGen.getCode(CodegenLanguage.dartHttp, requestModelPost2, "https"), + expectedCode); }); test('POST 3', () { @@ -469,7 +500,9 @@ void main() async { } } """; - expect(dartHttpCodeGen.getCode(requestModelPost3, "https"), expectedCode); + expect( + codeGen.getCode(CodegenLanguage.dartHttp, requestModelPost3, "https"), + expectedCode); }); }); @@ -503,7 +536,9 @@ void main() async { } } """; - expect(dartHttpCodeGen.getCode(requestModelPut1, "https"), expectedCode); + expect( + codeGen.getCode(CodegenLanguage.dartHttp, requestModelPut1, "https"), + expectedCode); }); }); @@ -538,7 +573,9 @@ void main() async { } """; expect( - dartHttpCodeGen.getCode(requestModelPatch1, "https"), expectedCode); + codeGen.getCode( + CodegenLanguage.dartHttp, requestModelPatch1, "https"), + expectedCode); }); }); @@ -562,7 +599,9 @@ void main() async { } """; expect( - dartHttpCodeGen.getCode(requestModelDelete1, "https"), expectedCode); + codeGen.getCode( + CodegenLanguage.dartHttp, requestModelDelete1, "https"), + expectedCode); }); test('DELETE 2', () { @@ -595,7 +634,9 @@ void main() async { } """; expect( - dartHttpCodeGen.getCode(requestModelDelete2, "https"), expectedCode); + codeGen.getCode( + CodegenLanguage.dartHttp, requestModelDelete2, "https"), + expectedCode); }); }); } diff --git a/test/codegen/js_axios_codegen_test.dart b/test/codegen/js_axios_codegen_test.dart index cf2d5a18..40b420e4 100644 --- a/test/codegen/js_axios_codegen_test.dart +++ b/test/codegen/js_axios_codegen_test.dart @@ -1,9 +1,10 @@ -import 'package:apidash/codegen/js/axios.dart'; -import '../request_models.dart'; +import 'package:apidash/codegen/codegen.dart'; +import 'package:apidash/consts.dart'; import 'package:test/test.dart'; +import '../request_models.dart'; void main() { - final axiosCodeGen = AxiosCodeGen(); + final codeGen = Codegen(); group('GET Request', () { test('GET 1', () { @@ -24,7 +25,9 @@ axios(config) console.log(error); }); """; - expect(axiosCodeGen.getCode(requestModelGet1, "https"), expectedCode); + expect( + codeGen.getCode(CodegenLanguage.jsAxios, requestModelGet1, "https"), + expectedCode); }); test('GET 2', () { @@ -48,7 +51,9 @@ axios(config) console.log(error); }); """; - expect(axiosCodeGen.getCode(requestModelGet2, "https"), expectedCode); + expect( + codeGen.getCode(CodegenLanguage.jsAxios, requestModelGet2, "https"), + expectedCode); }); test('GET 3', () { @@ -72,7 +77,9 @@ axios(config) console.log(error); }); """; - expect(axiosCodeGen.getCode(requestModelGet3, "https"), expectedCode); + expect( + codeGen.getCode(CodegenLanguage.jsAxios, requestModelGet3, "https"), + expectedCode); }); test('GET 4', () { @@ -100,7 +107,9 @@ axios(config) console.log(error); }); """; - expect(axiosCodeGen.getCode(requestModelGet4, "https"), expectedCode); + expect( + codeGen.getCode(CodegenLanguage.jsAxios, requestModelGet4, "https"), + expectedCode); }); test('GET 5', () { @@ -124,7 +133,9 @@ axios(config) console.log(error); }); """; - expect(axiosCodeGen.getCode(requestModelGet5, "https"), expectedCode); + expect( + codeGen.getCode(CodegenLanguage.jsAxios, requestModelGet5, "https"), + expectedCode); }); test('GET 6', () { @@ -151,7 +162,9 @@ axios(config) console.log(error); }); """; - expect(axiosCodeGen.getCode(requestModelGet6, "https"), expectedCode); + expect( + codeGen.getCode(CodegenLanguage.jsAxios, requestModelGet6, "https"), + expectedCode); }); test('GET 7', () { @@ -172,7 +185,9 @@ axios(config) console.log(error); }); """; - expect(axiosCodeGen.getCode(requestModelGet7, "https"), expectedCode); + expect( + codeGen.getCode(CodegenLanguage.jsAxios, requestModelGet7, "https"), + expectedCode); }); test('GET 8', () { @@ -199,7 +214,9 @@ axios(config) console.log(error); }); """; - expect(axiosCodeGen.getCode(requestModelGet8, "https"), expectedCode); + expect( + codeGen.getCode(CodegenLanguage.jsAxios, requestModelGet8, "https"), + expectedCode); }); test('GET 9', () { @@ -224,7 +241,9 @@ axios(config) console.log(error); }); """; - expect(axiosCodeGen.getCode(requestModelGet9, "https"), expectedCode); + expect( + codeGen.getCode(CodegenLanguage.jsAxios, requestModelGet9, "https"), + expectedCode); }); test('GET 10', () { @@ -249,7 +268,8 @@ axios(config) }); """; expect( - axiosCodeGen.getCode( + codeGen.getCode( + CodegenLanguage.jsAxios, requestModelGet10, "https", ), @@ -281,7 +301,9 @@ axios(config) console.log(error); }); """; - expect(axiosCodeGen.getCode(requestModelGet11, "https"), expectedCode); + expect( + codeGen.getCode(CodegenLanguage.jsAxios, requestModelGet11, "https"), + expectedCode); }); test('GET 12', () { @@ -302,7 +324,9 @@ axios(config) console.log(error); }); """; - expect(axiosCodeGen.getCode(requestModelGet12, "https"), expectedCode); + expect( + codeGen.getCode(CodegenLanguage.jsAxios, requestModelGet12, "https"), + expectedCode); }); }); @@ -325,7 +349,9 @@ axios(config) console.log(error); }); """; - expect(axiosCodeGen.getCode(requestModelHead1, "https"), expectedCode); + expect( + codeGen.getCode(CodegenLanguage.jsAxios, requestModelHead1, "https"), + expectedCode); }); test('HEAD 2', () { @@ -346,7 +372,9 @@ axios(config) console.log(error); }); """; - expect(axiosCodeGen.getCode(requestModelHead2, "http"), expectedCode); + expect( + codeGen.getCode(CodegenLanguage.jsAxios, requestModelHead2, "http"), + expectedCode); }); }); @@ -373,7 +401,9 @@ axios(config) console.log(error); }); """; - expect(axiosCodeGen.getCode(requestModelPost1, "https"), expectedCode); + expect( + codeGen.getCode(CodegenLanguage.jsAxios, requestModelPost1, "https"), + expectedCode); }); test('POST 2', () { @@ -398,7 +428,9 @@ axios(config) console.log(error); }); """; - expect(axiosCodeGen.getCode(requestModelPost2, "https"), expectedCode); + expect( + codeGen.getCode(CodegenLanguage.jsAxios, requestModelPost2, "https"), + expectedCode); }); test('POST 3', () { @@ -424,7 +456,9 @@ axios(config) console.log(error); }); """; - expect(axiosCodeGen.getCode(requestModelPost3, "https"), expectedCode); + expect( + codeGen.getCode(CodegenLanguage.jsAxios, requestModelPost3, "https"), + expectedCode); }); }); @@ -451,7 +485,9 @@ axios(config) console.log(error); }); """; - expect(axiosCodeGen.getCode(requestModelPut1, "https"), expectedCode); + expect( + codeGen.getCode(CodegenLanguage.jsAxios, requestModelPut1, "https"), + expectedCode); }); }); @@ -478,7 +514,9 @@ axios(config) console.log(error); }); """; - expect(axiosCodeGen.getCode(requestModelPatch1, "https"), expectedCode); + expect( + codeGen.getCode(CodegenLanguage.jsAxios, requestModelPatch1, "https"), + expectedCode); }); }); @@ -501,7 +539,10 @@ axios(config) console.log(error); }); """; - expect(axiosCodeGen.getCode(requestModelDelete1, "https"), expectedCode); + expect( + codeGen.getCode( + CodegenLanguage.jsAxios, requestModelDelete1, "https"), + expectedCode); }); test('DELETE 2', () { @@ -526,7 +567,10 @@ axios(config) console.log(error); }); """; - expect(axiosCodeGen.getCode(requestModelDelete2, "https"), expectedCode); + expect( + codeGen.getCode( + CodegenLanguage.jsAxios, requestModelDelete2, "https"), + expectedCode); }); }); } diff --git a/test/codegen/js_fetch_codegen_test.dart b/test/codegen/js_fetch_codegen_test.dart index 2c2ec049..4f070142 100644 --- a/test/codegen/js_fetch_codegen_test.dart +++ b/test/codegen/js_fetch_codegen_test.dart @@ -1,9 +1,10 @@ -import 'package:apidash/codegen/js/fetch.dart'; -import '../request_models.dart'; +import 'package:apidash/codegen/codegen.dart'; +import 'package:apidash/consts.dart'; import 'package:test/test.dart'; +import '../request_models.dart'; void main() { - final fetchCodeGen = FetchCodeGen(); + final codeGen = Codegen(); group('GET Request', () { test('GET 1', () { @@ -28,7 +29,9 @@ fetch(url, options) console.error('error:' + err); }); """; - expect(fetchCodeGen.getCode(requestModelGet1, "https"), expectedCode); + expect( + codeGen.getCode(CodegenLanguage.jsFetch, requestModelGet1, "https"), + expectedCode); }); test('GET 2', () { @@ -54,7 +57,9 @@ fetch(url, options) console.error('error:' + err); }); """; - expect(fetchCodeGen.getCode(requestModelGet2, "https"), expectedCode); + expect( + codeGen.getCode(CodegenLanguage.jsFetch, requestModelGet2, "https"), + expectedCode); }); test('GET 3', () { @@ -80,7 +85,9 @@ fetch(url, options) console.error('error:' + err); }); """; - expect(fetchCodeGen.getCode(requestModelGet3, "https"), expectedCode); + expect( + codeGen.getCode(CodegenLanguage.jsFetch, requestModelGet3, "https"), + expectedCode); }); test('GET 4', () { @@ -106,7 +113,9 @@ fetch(url, options) console.error('error:' + err); }); """; - expect(fetchCodeGen.getCode(requestModelGet4, "https"), expectedCode); + expect( + codeGen.getCode(CodegenLanguage.jsFetch, requestModelGet4, "https"), + expectedCode); }); test('GET 5', () { @@ -135,7 +144,9 @@ fetch(url, options) console.error('error:' + err); }); """; - expect(fetchCodeGen.getCode(requestModelGet5, "https"), expectedCode); + expect( + codeGen.getCode(CodegenLanguage.jsFetch, requestModelGet5, "https"), + expectedCode); }); test('GET 6', () { @@ -164,7 +175,9 @@ fetch(url, options) console.error('error:' + err); }); """; - expect(fetchCodeGen.getCode(requestModelGet6, "https"), expectedCode); + expect( + codeGen.getCode(CodegenLanguage.jsFetch, requestModelGet6, "https"), + expectedCode); }); test('GET 7', () { @@ -189,7 +202,9 @@ fetch(url, options) console.error('error:' + err); }); """; - expect(fetchCodeGen.getCode(requestModelGet7, "https"), expectedCode); + expect( + codeGen.getCode(CodegenLanguage.jsFetch, requestModelGet7, "https"), + expectedCode); }); test('GET 8', () { @@ -218,7 +233,9 @@ fetch(url, options) console.error('error:' + err); }); """; - expect(fetchCodeGen.getCode(requestModelGet8, "https"), expectedCode); + expect( + codeGen.getCode(CodegenLanguage.jsFetch, requestModelGet8, "https"), + expectedCode); }); test('GET 9', () { @@ -244,7 +261,9 @@ fetch(url, options) console.error('error:' + err); }); """; - expect(fetchCodeGen.getCode(requestModelGet9, "https"), expectedCode); + expect( + codeGen.getCode(CodegenLanguage.jsFetch, requestModelGet9, "https"), + expectedCode); }); test('GET 10', () { @@ -274,7 +293,8 @@ fetch(url, options) }); """; expect( - fetchCodeGen.getCode( + codeGen.getCode( + CodegenLanguage.jsFetch, requestModelGet10, "https", ), @@ -307,7 +327,9 @@ fetch(url, options) console.error('error:' + err); }); """; - expect(fetchCodeGen.getCode(requestModelGet11, "https"), expectedCode); + expect( + codeGen.getCode(CodegenLanguage.jsFetch, requestModelGet11, "https"), + expectedCode); }); test('GET 12', () { @@ -333,7 +355,9 @@ fetch(url, options) console.error('error:' + err); }); """; - expect(fetchCodeGen.getCode(requestModelGet12, "https"), expectedCode); + expect( + codeGen.getCode(CodegenLanguage.jsFetch, requestModelGet12, "https"), + expectedCode); }); }); @@ -360,7 +384,9 @@ fetch(url, options) console.error('error:' + err); }); """; - expect(fetchCodeGen.getCode(requestModelHead1, "https"), expectedCode); + expect( + codeGen.getCode(CodegenLanguage.jsFetch, requestModelHead1, "https"), + expectedCode); }); test('HEAD 2', () { @@ -385,7 +411,9 @@ fetch(url, options) console.error('error:' + err); }); """; - expect(fetchCodeGen.getCode(requestModelHead2, "http"), expectedCode); + expect( + codeGen.getCode(CodegenLanguage.jsFetch, requestModelHead2, "http"), + expectedCode); }); }); @@ -417,7 +445,9 @@ fetch(url, options) console.error('error:' + err); }); """; - expect(fetchCodeGen.getCode(requestModelPost1, "https"), expectedCode); + expect( + codeGen.getCode(CodegenLanguage.jsFetch, requestModelPost1, "https"), + expectedCode); }); test('POST 2', () { @@ -447,7 +477,9 @@ fetch(url, options) console.error('error:' + err); }); """; - expect(fetchCodeGen.getCode(requestModelPost2, "https"), expectedCode); + expect( + codeGen.getCode(CodegenLanguage.jsFetch, requestModelPost2, "https"), + expectedCode); }); test('POST 3', () { @@ -478,7 +510,9 @@ fetch(url, options) console.error('error:' + err); }); """; - expect(fetchCodeGen.getCode(requestModelPost3, "https"), expectedCode); + expect( + codeGen.getCode(CodegenLanguage.jsFetch, requestModelPost3, "https"), + expectedCode); }); }); @@ -510,7 +544,9 @@ fetch(url, options) console.error('error:' + err); }); """; - expect(fetchCodeGen.getCode(requestModelPut1, "https"), expectedCode); + expect( + codeGen.getCode(CodegenLanguage.jsFetch, requestModelPut1, "https"), + expectedCode); }); }); @@ -542,7 +578,9 @@ fetch(url, options) console.error('error:' + err); }); """; - expect(fetchCodeGen.getCode(requestModelPatch1, "https"), expectedCode); + expect( + codeGen.getCode(CodegenLanguage.jsFetch, requestModelPatch1, "https"), + expectedCode); }); }); @@ -569,7 +607,10 @@ fetch(url, options) console.error('error:' + err); }); """; - expect(fetchCodeGen.getCode(requestModelDelete1, "https"), expectedCode); + expect( + codeGen.getCode( + CodegenLanguage.jsFetch, requestModelDelete1, "https"), + expectedCode); }); test('DELETE 2', () { @@ -599,7 +640,10 @@ fetch(url, options) console.error('error:' + err); }); """; - expect(fetchCodeGen.getCode(requestModelDelete2, "https"), expectedCode); + expect( + codeGen.getCode( + CodegenLanguage.jsFetch, requestModelDelete2, "https"), + expectedCode); }); }); } diff --git a/test/codegen/kotlin_okhttp_codegen_test.dart b/test/codegen/kotlin_okhttp_codegen_test.dart index 3170028f..f91f183c 100644 --- a/test/codegen/kotlin_okhttp_codegen_test.dart +++ b/test/codegen/kotlin_okhttp_codegen_test.dart @@ -1,9 +1,10 @@ -import 'package:apidash/codegen/kotlin/okhttp.dart'; +import 'package:apidash/codegen/codegen.dart'; +import 'package:apidash/consts.dart'; import 'package:test/test.dart'; import '../request_models.dart'; void main() { - final kotlinOkHttpCodeGen = KotlinOkHttpCodeGen(); + final codeGen = Codegen(); group('GET Request', () { test('GET 1', () { @@ -27,7 +28,9 @@ fun main() { } """; expect( - kotlinOkHttpCodeGen.getCode(requestModelGet1, "https"), expectedCode); + codeGen.getCode( + CodegenLanguage.kotlinOkHttp, requestModelGet1, "https"), + expectedCode); }); test('GET 2', () { @@ -54,7 +57,9 @@ fun main() { } """; expect( - kotlinOkHttpCodeGen.getCode(requestModelGet2, "https"), expectedCode); + codeGen.getCode( + CodegenLanguage.kotlinOkHttp, requestModelGet2, "https"), + expectedCode); }); test('GET 3', () { @@ -81,7 +86,9 @@ fun main() { } """; expect( - kotlinOkHttpCodeGen.getCode(requestModelGet3, "https"), expectedCode); + codeGen.getCode( + CodegenLanguage.kotlinOkHttp, requestModelGet3, "https"), + expectedCode); }); test('GET 4', () { @@ -112,7 +119,9 @@ fun main() { } """; expect( - kotlinOkHttpCodeGen.getCode(requestModelGet4, "https"), expectedCode); + codeGen.getCode( + CodegenLanguage.kotlinOkHttp, requestModelGet4, "https"), + expectedCode); }); test('GET 5', () { @@ -137,7 +146,9 @@ fun main() { } """; expect( - kotlinOkHttpCodeGen.getCode(requestModelGet5, "https"), expectedCode); + codeGen.getCode( + CodegenLanguage.kotlinOkHttp, requestModelGet5, "https"), + expectedCode); }); test('GET 6', () { @@ -165,7 +176,9 @@ fun main() { } """; expect( - kotlinOkHttpCodeGen.getCode(requestModelGet6, "https"), expectedCode); + codeGen.getCode( + CodegenLanguage.kotlinOkHttp, requestModelGet6, "https"), + expectedCode); }); test('GET 7', () { @@ -189,7 +202,9 @@ fun main() { } """; expect( - kotlinOkHttpCodeGen.getCode(requestModelGet7, "https"), expectedCode); + codeGen.getCode( + CodegenLanguage.kotlinOkHttp, requestModelGet7, "https"), + expectedCode); }); test('GET 8', () { @@ -217,7 +232,9 @@ fun main() { } """; expect( - kotlinOkHttpCodeGen.getCode(requestModelGet8, "https"), expectedCode); + codeGen.getCode( + CodegenLanguage.kotlinOkHttp, requestModelGet8, "https"), + expectedCode); }); test('GET 9', () { @@ -245,7 +262,9 @@ fun main() { } """; expect( - kotlinOkHttpCodeGen.getCode(requestModelGet9, "https"), expectedCode); + codeGen.getCode( + CodegenLanguage.kotlinOkHttp, requestModelGet9, "https"), + expectedCode); }); test('GET 10', () { @@ -270,7 +289,8 @@ fun main() { } """; expect( - kotlinOkHttpCodeGen.getCode( + codeGen.getCode( + CodegenLanguage.kotlinOkHttp, requestModelGet10, "https", ), @@ -302,7 +322,9 @@ fun main() { println(response.body?.string()) } """; - expect(kotlinOkHttpCodeGen.getCode(requestModelGet11, "https"), + expect( + codeGen.getCode( + CodegenLanguage.kotlinOkHttp, requestModelGet11, "https"), expectedCode); }); @@ -326,7 +348,9 @@ fun main() { println(response.body?.string()) } """; - expect(kotlinOkHttpCodeGen.getCode(requestModelGet12, "https"), + expect( + codeGen.getCode( + CodegenLanguage.kotlinOkHttp, requestModelGet12, "https"), expectedCode); }); }); @@ -352,7 +376,9 @@ fun main() { println(response.body?.string()) } """; - expect(kotlinOkHttpCodeGen.getCode(requestModelHead1, "https"), + expect( + codeGen.getCode( + CodegenLanguage.kotlinOkHttp, requestModelHead1, "https"), expectedCode); }); @@ -377,7 +403,9 @@ fun main() { } """; expect( - kotlinOkHttpCodeGen.getCode(requestModelHead2, "http"), expectedCode); + codeGen.getCode( + CodegenLanguage.kotlinOkHttp, requestModelHead2, "http"), + expectedCode); }); }); @@ -410,7 +438,9 @@ fun main() { println(response.body?.string()) } '''; - expect(kotlinOkHttpCodeGen.getCode(requestModelPost1, "https"), + expect( + codeGen.getCode( + CodegenLanguage.kotlinOkHttp, requestModelPost1, "https"), expectedCode); }); @@ -447,7 +477,9 @@ fun main() { println(response.body?.string()) } '''; - expect(kotlinOkHttpCodeGen.getCode(requestModelPost2, "https"), + expect( + codeGen.getCode( + CodegenLanguage.kotlinOkHttp, requestModelPost2, "https"), expectedCode); }); @@ -480,7 +512,9 @@ fun main() { println(response.body?.string()) } '''; - expect(kotlinOkHttpCodeGen.getCode(requestModelPost3, "https"), + expect( + codeGen.getCode( + CodegenLanguage.kotlinOkHttp, requestModelPost3, "https"), expectedCode); }); @@ -509,7 +543,9 @@ fun main() { println(response.body?.string()) } '''; - expect(kotlinOkHttpCodeGen.getCode(requestModelPost5, "https"), + expect( + codeGen.getCode( + CodegenLanguage.kotlinOkHttp, requestModelPost5, "https"), expectedCode); }); }); @@ -545,7 +581,9 @@ fun main() { } '''; expect( - kotlinOkHttpCodeGen.getCode(requestModelPut1, "https"), expectedCode); + codeGen.getCode( + CodegenLanguage.kotlinOkHttp, requestModelPut1, "https"), + expectedCode); }); }); @@ -579,7 +617,9 @@ fun main() { println(response.body?.string()) } '''; - expect(kotlinOkHttpCodeGen.getCode(requestModelPatch1, "https"), + expect( + codeGen.getCode( + CodegenLanguage.kotlinOkHttp, requestModelPatch1, "https"), expectedCode); }); }); @@ -605,7 +645,9 @@ fun main() { println(response.body?.string()) } """; - expect(kotlinOkHttpCodeGen.getCode(requestModelDelete1, "https"), + expect( + codeGen.getCode( + CodegenLanguage.kotlinOkHttp, requestModelDelete1, "https"), expectedCode); }); @@ -638,7 +680,9 @@ fun main() { println(response.body?.string()) } '''; - expect(kotlinOkHttpCodeGen.getCode(requestModelDelete2, "https"), + expect( + codeGen.getCode( + CodegenLanguage.kotlinOkHttp, requestModelDelete2, "https"), expectedCode); }); }); diff --git a/test/codegen/nodejs_axios_codegen_test.dart b/test/codegen/nodejs_axios_codegen_test.dart index f3e77570..ab4c2bf5 100644 --- a/test/codegen/nodejs_axios_codegen_test.dart +++ b/test/codegen/nodejs_axios_codegen_test.dart @@ -1,9 +1,10 @@ -import 'package:apidash/codegen/js/axios.dart'; -import '../request_models.dart'; +import 'package:apidash/codegen/codegen.dart'; +import 'package:apidash/consts.dart'; import 'package:test/test.dart'; +import '../request_models.dart'; void main() { - final axiosCodeGen = AxiosCodeGen(isNodeJs: true); + final codeGen = Codegen(); group('GET Request', () { test('GET 1', () { @@ -26,7 +27,10 @@ axios(config) console.log(error); }); """; - expect(axiosCodeGen.getCode(requestModelGet1, "https"), expectedCode); + expect( + codeGen.getCode( + CodegenLanguage.nodejsAxios, requestModelGet1, "https"), + expectedCode); }); test('GET 2', () { @@ -52,7 +56,10 @@ axios(config) console.log(error); }); """; - expect(axiosCodeGen.getCode(requestModelGet2, "https"), expectedCode); + expect( + codeGen.getCode( + CodegenLanguage.nodejsAxios, requestModelGet2, "https"), + expectedCode); }); test('GET 3', () { @@ -78,7 +85,10 @@ axios(config) console.log(error); }); """; - expect(axiosCodeGen.getCode(requestModelGet3, "https"), expectedCode); + expect( + codeGen.getCode( + CodegenLanguage.nodejsAxios, requestModelGet3, "https"), + expectedCode); }); test('GET 4', () { @@ -108,7 +118,10 @@ axios(config) console.log(error); }); """; - expect(axiosCodeGen.getCode(requestModelGet4, "https"), expectedCode); + expect( + codeGen.getCode( + CodegenLanguage.nodejsAxios, requestModelGet4, "https"), + expectedCode); }); test('GET 5', () { @@ -134,7 +147,10 @@ axios(config) console.log(error); }); """; - expect(axiosCodeGen.getCode(requestModelGet5, "https"), expectedCode); + expect( + codeGen.getCode( + CodegenLanguage.nodejsAxios, requestModelGet5, "https"), + expectedCode); }); test('GET 6', () { @@ -163,7 +179,10 @@ axios(config) console.log(error); }); """; - expect(axiosCodeGen.getCode(requestModelGet6, "https"), expectedCode); + expect( + codeGen.getCode( + CodegenLanguage.nodejsAxios, requestModelGet6, "https"), + expectedCode); }); test('GET 7', () { @@ -186,7 +205,10 @@ axios(config) console.log(error); }); """; - expect(axiosCodeGen.getCode(requestModelGet7, "https"), expectedCode); + expect( + codeGen.getCode( + CodegenLanguage.nodejsAxios, requestModelGet7, "https"), + expectedCode); }); test('GET 8', () { @@ -215,7 +237,10 @@ axios(config) console.log(error); }); """; - expect(axiosCodeGen.getCode(requestModelGet8, "https"), expectedCode); + expect( + codeGen.getCode( + CodegenLanguage.nodejsAxios, requestModelGet8, "https"), + expectedCode); }); test('GET 9', () { @@ -242,7 +267,10 @@ axios(config) console.log(error); }); """; - expect(axiosCodeGen.getCode(requestModelGet9, "https"), expectedCode); + expect( + codeGen.getCode( + CodegenLanguage.nodejsAxios, requestModelGet9, "https"), + expectedCode); }); test('GET 10', () { @@ -269,7 +297,8 @@ axios(config) }); """; expect( - axiosCodeGen.getCode( + codeGen.getCode( + CodegenLanguage.nodejsAxios, requestModelGet10, "https", ), @@ -303,7 +332,10 @@ axios(config) console.log(error); }); """; - expect(axiosCodeGen.getCode(requestModelGet11, "https"), expectedCode); + expect( + codeGen.getCode( + CodegenLanguage.nodejsAxios, requestModelGet11, "https"), + expectedCode); }); test('GET 12', () { @@ -326,7 +358,10 @@ axios(config) console.log(error); }); """; - expect(axiosCodeGen.getCode(requestModelGet12, "https"), expectedCode); + expect( + codeGen.getCode( + CodegenLanguage.nodejsAxios, requestModelGet12, "https"), + expectedCode); }); }); @@ -351,7 +386,10 @@ axios(config) console.log(error); }); """; - expect(axiosCodeGen.getCode(requestModelHead1, "https"), expectedCode); + expect( + codeGen.getCode( + CodegenLanguage.nodejsAxios, requestModelHead1, "https"), + expectedCode); }); test('HEAD 2', () { @@ -374,7 +412,10 @@ axios(config) console.log(error); }); """; - expect(axiosCodeGen.getCode(requestModelHead2, "http"), expectedCode); + expect( + codeGen.getCode( + CodegenLanguage.nodejsAxios, requestModelHead2, "http"), + expectedCode); }); }); @@ -403,7 +444,10 @@ axios(config) console.log(error); }); """; - expect(axiosCodeGen.getCode(requestModelPost1, "https"), expectedCode); + expect( + codeGen.getCode( + CodegenLanguage.nodejsAxios, requestModelPost1, "https"), + expectedCode); }); test('POST 2', () { @@ -430,7 +474,10 @@ axios(config) console.log(error); }); """; - expect(axiosCodeGen.getCode(requestModelPost2, "https"), expectedCode); + expect( + codeGen.getCode( + CodegenLanguage.nodejsAxios, requestModelPost2, "https"), + expectedCode); }); test('POST 3', () { @@ -458,7 +505,10 @@ axios(config) console.log(error); }); """; - expect(axiosCodeGen.getCode(requestModelPost3, "https"), expectedCode); + expect( + codeGen.getCode( + CodegenLanguage.nodejsAxios, requestModelPost3, "https"), + expectedCode); }); }); @@ -487,7 +537,10 @@ axios(config) console.log(error); }); """; - expect(axiosCodeGen.getCode(requestModelPut1, "https"), expectedCode); + expect( + codeGen.getCode( + CodegenLanguage.nodejsAxios, requestModelPut1, "https"), + expectedCode); }); }); @@ -516,7 +569,10 @@ axios(config) console.log(error); }); """; - expect(axiosCodeGen.getCode(requestModelPatch1, "https"), expectedCode); + expect( + codeGen.getCode( + CodegenLanguage.nodejsAxios, requestModelPatch1, "https"), + expectedCode); }); }); @@ -541,7 +597,10 @@ axios(config) console.log(error); }); """; - expect(axiosCodeGen.getCode(requestModelDelete1, "https"), expectedCode); + expect( + codeGen.getCode( + CodegenLanguage.nodejsAxios, requestModelDelete1, "https"), + expectedCode); }); test('DELETE 2', () { @@ -568,7 +627,10 @@ axios(config) console.log(error); }); """; - expect(axiosCodeGen.getCode(requestModelDelete2, "https"), expectedCode); + expect( + codeGen.getCode( + CodegenLanguage.nodejsAxios, requestModelDelete2, "https"), + expectedCode); }); }); } diff --git a/test/codegen/nodejs_fetch_codegen_test.dart b/test/codegen/nodejs_fetch_codegen_test.dart index 0c98ac35..831fd2e0 100644 --- a/test/codegen/nodejs_fetch_codegen_test.dart +++ b/test/codegen/nodejs_fetch_codegen_test.dart @@ -1,9 +1,10 @@ -import 'package:apidash/codegen/js/fetch.dart'; -import '../request_models.dart'; +import 'package:apidash/codegen/codegen.dart'; +import 'package:apidash/consts.dart'; import 'package:test/test.dart'; +import '../request_models.dart'; void main() { - final fetchCodeGen = FetchCodeGen(isNodeJs: true); + final codeGen = Codegen(); group('GET Request', () { test('GET 1', () { @@ -30,7 +31,10 @@ fetch(url, options) console.error('error:' + err); }); """; - expect(fetchCodeGen.getCode(requestModelGet1, "https"), expectedCode); + expect( + codeGen.getCode( + CodegenLanguage.nodejsFetch, requestModelGet1, "https"), + expectedCode); }); test('GET 2', () { @@ -57,7 +61,10 @@ fetch(url, options) console.error('error:' + err); }); """; - expect(fetchCodeGen.getCode(requestModelGet2, "https"), expectedCode); + expect( + codeGen.getCode( + CodegenLanguage.nodejsFetch, requestModelGet2, "https"), + expectedCode); }); test('GET 3', () { @@ -84,7 +91,10 @@ fetch(url, options) console.error('error:' + err); }); """; - expect(fetchCodeGen.getCode(requestModelGet3, "https"), expectedCode); + expect( + codeGen.getCode( + CodegenLanguage.nodejsFetch, requestModelGet3, "https"), + expectedCode); }); test('GET 4', () { @@ -111,7 +121,10 @@ fetch(url, options) console.error('error:' + err); }); """; - expect(fetchCodeGen.getCode(requestModelGet4, "https"), expectedCode); + expect( + codeGen.getCode( + CodegenLanguage.nodejsFetch, requestModelGet4, "https"), + expectedCode); }); test('GET 5', () { @@ -141,7 +154,10 @@ fetch(url, options) console.error('error:' + err); }); """; - expect(fetchCodeGen.getCode(requestModelGet5, "https"), expectedCode); + expect( + codeGen.getCode( + CodegenLanguage.nodejsFetch, requestModelGet5, "https"), + expectedCode); }); test('GET 6', () { @@ -171,7 +187,10 @@ fetch(url, options) console.error('error:' + err); }); """; - expect(fetchCodeGen.getCode(requestModelGet6, "https"), expectedCode); + expect( + codeGen.getCode( + CodegenLanguage.nodejsFetch, requestModelGet6, "https"), + expectedCode); }); test('GET 7', () { @@ -198,7 +217,10 @@ fetch(url, options) console.error('error:' + err); }); """; - expect(fetchCodeGen.getCode(requestModelGet7, "https"), expectedCode); + expect( + codeGen.getCode( + CodegenLanguage.nodejsFetch, requestModelGet7, "https"), + expectedCode); }); test('GET 8', () { @@ -228,7 +250,10 @@ fetch(url, options) console.error('error:' + err); }); """; - expect(fetchCodeGen.getCode(requestModelGet8, "https"), expectedCode); + expect( + codeGen.getCode( + CodegenLanguage.nodejsFetch, requestModelGet8, "https"), + expectedCode); }); test('GET 9', () { @@ -255,7 +280,10 @@ fetch(url, options) console.error('error:' + err); }); """; - expect(fetchCodeGen.getCode(requestModelGet9, "https"), expectedCode); + expect( + codeGen.getCode( + CodegenLanguage.nodejsFetch, requestModelGet9, "https"), + expectedCode); }); test('GET 10', () { @@ -286,7 +314,8 @@ fetch(url, options) }); """; expect( - fetchCodeGen.getCode( + codeGen.getCode( + CodegenLanguage.nodejsFetch, requestModelGet10, "https", ), @@ -320,7 +349,10 @@ fetch(url, options) console.error('error:' + err); }); """; - expect(fetchCodeGen.getCode(requestModelGet11, "https"), expectedCode); + expect( + codeGen.getCode( + CodegenLanguage.nodejsFetch, requestModelGet11, "https"), + expectedCode); }); test('GET 12', () { @@ -347,7 +379,10 @@ fetch(url, options) console.error('error:' + err); }); """; - expect(fetchCodeGen.getCode(requestModelGet12, "https"), expectedCode); + expect( + codeGen.getCode( + CodegenLanguage.nodejsFetch, requestModelGet12, "https"), + expectedCode); }); }); @@ -376,7 +411,10 @@ fetch(url, options) console.error('error:' + err); }); """; - expect(fetchCodeGen.getCode(requestModelHead1, "https"), expectedCode); + expect( + codeGen.getCode( + CodegenLanguage.nodejsFetch, requestModelHead1, "https"), + expectedCode); }); test('HEAD 2', () { @@ -403,7 +441,10 @@ fetch(url, options) console.error('error:' + err); }); """; - expect(fetchCodeGen.getCode(requestModelHead2, "http"), expectedCode); + expect( + codeGen.getCode( + CodegenLanguage.nodejsFetch, requestModelHead2, "http"), + expectedCode); }); }); @@ -437,7 +478,10 @@ fetch(url, options) console.error('error:' + err); }); """; - expect(fetchCodeGen.getCode(requestModelPost1, "https"), expectedCode); + expect( + codeGen.getCode( + CodegenLanguage.nodejsFetch, requestModelPost1, "https"), + expectedCode); }); test('POST 2', () { @@ -469,7 +513,10 @@ fetch(url, options) console.error('error:' + err); }); """; - expect(fetchCodeGen.getCode(requestModelPost2, "https"), expectedCode); + expect( + codeGen.getCode( + CodegenLanguage.nodejsFetch, requestModelPost2, "https"), + expectedCode); }); test('POST 3', () { @@ -502,7 +549,10 @@ fetch(url, options) console.error('error:' + err); }); """; - expect(fetchCodeGen.getCode(requestModelPost3, "https"), expectedCode); + expect( + codeGen.getCode( + CodegenLanguage.nodejsFetch, requestModelPost3, "https"), + expectedCode); }); }); @@ -536,7 +586,10 @@ fetch(url, options) console.error('error:' + err); }); """; - expect(fetchCodeGen.getCode(requestModelPut1, "https"), expectedCode); + expect( + codeGen.getCode( + CodegenLanguage.nodejsFetch, requestModelPut1, "https"), + expectedCode); }); }); @@ -570,7 +623,10 @@ fetch(url, options) console.error('error:' + err); }); """; - expect(fetchCodeGen.getCode(requestModelPatch1, "https"), expectedCode); + expect( + codeGen.getCode( + CodegenLanguage.nodejsFetch, requestModelPatch1, "https"), + expectedCode); }); }); @@ -599,7 +655,10 @@ fetch(url, options) console.error('error:' + err); }); """; - expect(fetchCodeGen.getCode(requestModelDelete1, "https"), expectedCode); + expect( + codeGen.getCode( + CodegenLanguage.nodejsFetch, requestModelDelete1, "https"), + expectedCode); }); test('DELETE 2', () { @@ -631,7 +690,10 @@ fetch(url, options) console.error('error:' + err); }); """; - expect(fetchCodeGen.getCode(requestModelDelete2, "https"), expectedCode); + expect( + codeGen.getCode( + CodegenLanguage.nodejsFetch, requestModelDelete2, "https"), + expectedCode); }); }); } diff --git a/test/codegen/python_http_client_codegen_test.dart b/test/codegen/python_http_client_codegen_test.dart index 0665e186..b5774809 100644 --- a/test/codegen/python_http_client_codegen_test.dart +++ b/test/codegen/python_http_client_codegen_test.dart @@ -1,9 +1,10 @@ -import 'package:apidash/codegen/python/http_client.dart'; -import '../request_models.dart'; +import 'package:apidash/codegen/codegen.dart'; +import 'package:apidash/consts.dart'; import 'package:test/test.dart'; +import '../request_models.dart'; void main() { - final pythonHttpClientCodeGen = PythonHttpClientCodeGen(); + final codeGen = Codegen(); group('GET Request', () { test('GET 1', () { @@ -17,7 +18,9 @@ data = res.read() print(data.decode("utf-8")) """; - expect(pythonHttpClientCodeGen.getCode(requestModelGet1, "https"), + expect( + codeGen.getCode( + CodegenLanguage.pythonHttpClient, requestModelGet1, "https"), expectedCode); }); @@ -38,7 +41,9 @@ data = res.read() print(data.decode("utf-8")) """; - expect(pythonHttpClientCodeGen.getCode(requestModelGet2, "https"), + expect( + codeGen.getCode( + CodegenLanguage.pythonHttpClient, requestModelGet2, "https"), expectedCode); }); @@ -59,7 +64,9 @@ data = res.read() print(data.decode("utf-8")) """; - expect(pythonHttpClientCodeGen.getCode(requestModelGet3, "https"), + expect( + codeGen.getCode( + CodegenLanguage.pythonHttpClient, requestModelGet3, "https"), expectedCode); }); @@ -84,7 +91,9 @@ data = res.read() print(data.decode("utf-8")) """; - expect(pythonHttpClientCodeGen.getCode(requestModelGet4, "https"), + expect( + codeGen.getCode( + CodegenLanguage.pythonHttpClient, requestModelGet4, "https"), expectedCode); }); @@ -104,7 +113,9 @@ data = res.read() print(data.decode("utf-8")) """; - expect(pythonHttpClientCodeGen.getCode(requestModelGet5, "https"), + expect( + codeGen.getCode( + CodegenLanguage.pythonHttpClient, requestModelGet5, "https"), expectedCode); }); @@ -130,7 +141,9 @@ data = res.read() print(data.decode("utf-8")) """; - expect(pythonHttpClientCodeGen.getCode(requestModelGet6, "https"), + expect( + codeGen.getCode( + CodegenLanguage.pythonHttpClient, requestModelGet6, "https"), expectedCode); }); @@ -145,7 +158,9 @@ data = res.read() print(data.decode("utf-8")) """; - expect(pythonHttpClientCodeGen.getCode(requestModelGet7, "https"), + expect( + codeGen.getCode( + CodegenLanguage.pythonHttpClient, requestModelGet7, "https"), expectedCode); }); @@ -171,7 +186,9 @@ data = res.read() print(data.decode("utf-8")) """; - expect(pythonHttpClientCodeGen.getCode(requestModelGet8, "https"), + expect( + codeGen.getCode( + CodegenLanguage.pythonHttpClient, requestModelGet8, "https"), expectedCode); }); @@ -193,7 +210,9 @@ data = res.read() print(data.decode("utf-8")) """; - expect(pythonHttpClientCodeGen.getCode(requestModelGet9, "https"), + expect( + codeGen.getCode( + CodegenLanguage.pythonHttpClient, requestModelGet9, "https"), expectedCode); }); @@ -214,7 +233,8 @@ data = res.read() print(data.decode("utf-8")) """; expect( - pythonHttpClientCodeGen.getCode( + codeGen.getCode( + CodegenLanguage.pythonHttpClient, requestModelGet10, "https", ), @@ -244,7 +264,9 @@ data = res.read() print(data.decode("utf-8")) """; - expect(pythonHttpClientCodeGen.getCode(requestModelGet11, "https"), + expect( + codeGen.getCode( + CodegenLanguage.pythonHttpClient, requestModelGet11, "https"), expectedCode); }); @@ -259,7 +281,9 @@ data = res.read() print(data.decode("utf-8")) """; - expect(pythonHttpClientCodeGen.getCode(requestModelGet12, "https"), + expect( + codeGen.getCode( + CodegenLanguage.pythonHttpClient, requestModelGet12, "https"), expectedCode); }); }); @@ -276,7 +300,9 @@ data = res.read() print(data.decode("utf-8")) """; - expect(pythonHttpClientCodeGen.getCode(requestModelHead1, "https"), + expect( + codeGen.getCode( + CodegenLanguage.pythonHttpClient, requestModelHead1, "https"), expectedCode); }); @@ -291,7 +317,9 @@ data = res.read() print(data.decode("utf-8")) """; - expect(pythonHttpClientCodeGen.getCode(requestModelHead2, "http"), + expect( + codeGen.getCode( + CodegenLanguage.pythonHttpClient, requestModelHead2, "http"), expectedCode); }); }); @@ -318,7 +346,9 @@ data = res.read() print(data.decode("utf-8")) """; - expect(pythonHttpClientCodeGen.getCode(requestModelPost1, "https"), + expect( + codeGen.getCode( + CodegenLanguage.pythonHttpClient, requestModelPost1, "https"), expectedCode); }); @@ -348,7 +378,9 @@ data = res.read() print(data.decode("utf-8")) """; - expect(pythonHttpClientCodeGen.getCode(requestModelPost2, "https"), + expect( + codeGen.getCode( + CodegenLanguage.pythonHttpClient, requestModelPost2, "https"), expectedCode); }); @@ -374,7 +406,9 @@ data = res.read() print(data.decode("utf-8")) """; - expect(pythonHttpClientCodeGen.getCode(requestModelPost3, "https"), + expect( + codeGen.getCode( + CodegenLanguage.pythonHttpClient, requestModelPost3, "https"), expectedCode); }); }); @@ -402,7 +436,9 @@ data = res.read() print(data.decode("utf-8")) """; - expect(pythonHttpClientCodeGen.getCode(requestModelPut1, "https"), + expect( + codeGen.getCode( + CodegenLanguage.pythonHttpClient, requestModelPut1, "https"), expectedCode); }); }); @@ -430,7 +466,9 @@ data = res.read() print(data.decode("utf-8")) """; - expect(pythonHttpClientCodeGen.getCode(requestModelPatch1, "https"), + expect( + codeGen.getCode( + CodegenLanguage.pythonHttpClient, requestModelPatch1, "https"), expectedCode); }); }); @@ -447,7 +485,9 @@ data = res.read() print(data.decode("utf-8")) """; - expect(pythonHttpClientCodeGen.getCode(requestModelDelete1, "https"), + expect( + codeGen.getCode( + CodegenLanguage.pythonHttpClient, requestModelDelete1, "https"), expectedCode); }); @@ -473,7 +513,9 @@ data = res.read() print(data.decode("utf-8")) """; - expect(pythonHttpClientCodeGen.getCode(requestModelDelete2, "https"), + expect( + codeGen.getCode( + CodegenLanguage.pythonHttpClient, requestModelDelete2, "https"), expectedCode); }); }); diff --git a/test/codegen/python_requests_codegen_test.dart b/test/codegen/python_requests_codegen_test.dart index babe65d6..057c09c6 100644 --- a/test/codegen/python_requests_codegen_test.dart +++ b/test/codegen/python_requests_codegen_test.dart @@ -1,9 +1,10 @@ -import 'package:apidash/codegen/python/requests.dart'; -import '../request_models.dart'; +import 'package:apidash/codegen/codegen.dart'; +import 'package:apidash/consts.dart'; import 'package:test/test.dart'; +import '../request_models.dart'; void main() { - final pythonRequestsCodeGen = PythonRequestsCodeGen(); + final codeGen = Codegen(); group('GET Request', () { test('GET 1', () { @@ -16,7 +17,9 @@ response = requests.get(url) print('Status Code:', response.status_code) print('Response Body:', response.text) """; - expect(pythonRequestsCodeGen.getCode(requestModelGet1, "https"), + expect( + codeGen.getCode( + CodegenLanguage.pythonRequests, requestModelGet1, "https"), expectedCode); }); @@ -34,7 +37,9 @@ response = requests.get(url, params=params) print('Status Code:', response.status_code) print('Response Body:', response.text) """; - expect(pythonRequestsCodeGen.getCode(requestModelGet2, "https"), + expect( + codeGen.getCode( + CodegenLanguage.pythonRequests, requestModelGet2, "https"), expectedCode); }); @@ -52,7 +57,9 @@ response = requests.get(url, params=params) print('Status Code:', response.status_code) print('Response Body:', response.text) """; - expect(pythonRequestsCodeGen.getCode(requestModelGet3, "https"), + expect( + codeGen.getCode( + CodegenLanguage.pythonRequests, requestModelGet3, "https"), expectedCode); }); @@ -74,7 +81,9 @@ response = requests.get(url, params=params) print('Status Code:', response.status_code) print('Response Body:', response.text) """; - expect(pythonRequestsCodeGen.getCode(requestModelGet4, "https"), + expect( + codeGen.getCode( + CodegenLanguage.pythonRequests, requestModelGet4, "https"), expectedCode); }); @@ -92,7 +101,9 @@ response = requests.get(url, headers=headers) print('Status Code:', response.status_code) print('Response Body:', response.text) """; - expect(pythonRequestsCodeGen.getCode(requestModelGet5, "https"), + expect( + codeGen.getCode( + CodegenLanguage.pythonRequests, requestModelGet5, "https"), expectedCode); }); @@ -114,7 +125,9 @@ response = requests.get(url, params=params, headers=headers) print('Status Code:', response.status_code) print('Response Body:', response.text) """; - expect(pythonRequestsCodeGen.getCode(requestModelGet6, "https"), + expect( + codeGen.getCode( + CodegenLanguage.pythonRequests, requestModelGet6, "https"), expectedCode); }); @@ -128,7 +141,9 @@ response = requests.get(url) print('Status Code:', response.status_code) print('Response Body:', response.text) """; - expect(pythonRequestsCodeGen.getCode(requestModelGet7, "https"), + expect( + codeGen.getCode( + CodegenLanguage.pythonRequests, requestModelGet7, "https"), expectedCode); }); @@ -150,7 +165,9 @@ response = requests.get(url, params=params, headers=headers) print('Status Code:', response.status_code) print('Response Body:', response.text) """; - expect(pythonRequestsCodeGen.getCode(requestModelGet8, "https"), + expect( + codeGen.getCode( + CodegenLanguage.pythonRequests, requestModelGet8, "https"), expectedCode); }); @@ -169,7 +186,9 @@ response = requests.get(url, params=params) print('Status Code:', response.status_code) print('Response Body:', response.text) """; - expect(pythonRequestsCodeGen.getCode(requestModelGet9, "https"), + expect( + codeGen.getCode( + CodegenLanguage.pythonRequests, requestModelGet9, "https"), expectedCode); }); @@ -188,7 +207,8 @@ print('Status Code:', response.status_code) print('Response Body:', response.text) """; expect( - pythonRequestsCodeGen.getCode( + codeGen.getCode( + CodegenLanguage.pythonRequests, requestModelGet10, "https", ), @@ -214,7 +234,9 @@ response = requests.get(url, params=params, headers=headers) print('Status Code:', response.status_code) print('Response Body:', response.text) """; - expect(pythonRequestsCodeGen.getCode(requestModelGet11, "https"), + expect( + codeGen.getCode( + CodegenLanguage.pythonRequests, requestModelGet11, "https"), expectedCode); }); @@ -228,7 +250,9 @@ response = requests.get(url) print('Status Code:', response.status_code) print('Response Body:', response.text) """; - expect(pythonRequestsCodeGen.getCode(requestModelGet12, "https"), + expect( + codeGen.getCode( + CodegenLanguage.pythonRequests, requestModelGet12, "https"), expectedCode); }); }); @@ -244,7 +268,9 @@ response = requests.head(url) print('Status Code:', response.status_code) print('Response Body:', response.text) """; - expect(pythonRequestsCodeGen.getCode(requestModelHead1, "https"), + expect( + codeGen.getCode( + CodegenLanguage.pythonRequests, requestModelHead1, "https"), expectedCode); }); @@ -258,7 +284,9 @@ response = requests.head(url) print('Status Code:', response.status_code) print('Response Body:', response.text) """; - expect(pythonRequestsCodeGen.getCode(requestModelHead2, "http"), + expect( + codeGen.getCode( + CodegenLanguage.pythonRequests, requestModelHead2, "http"), expectedCode); }); }); @@ -282,7 +310,9 @@ response = requests.post(url, data=payload, headers=headers) print('Status Code:', response.status_code) print('Response Body:', response.text) """; - expect(pythonRequestsCodeGen.getCode(requestModelPost1, "https"), + expect( + codeGen.getCode( + CodegenLanguage.pythonRequests, requestModelPost1, "https"), expectedCode); }); @@ -305,7 +335,9 @@ response = requests.post(url, json=payload) print('Status Code:', response.status_code) print('Response Body:', response.text) """; - expect(pythonRequestsCodeGen.getCode(requestModelPost2, "https"), + expect( + codeGen.getCode( + CodegenLanguage.pythonRequests, requestModelPost2, "https"), expectedCode); }); @@ -327,7 +359,9 @@ response = requests.post(url, json=payload, headers=headers) print('Status Code:', response.status_code) print('Response Body:', response.text) """; - expect(pythonRequestsCodeGen.getCode(requestModelPost3, "https"), + expect( + codeGen.getCode( + CodegenLanguage.pythonRequests, requestModelPost3, "https"), expectedCode); }); @@ -352,7 +386,9 @@ response = requests.post(url, data=payload, headers=headers) print('Status Code:', response.status_code) print('Response Body:', response.text) """; - expect(pythonRequestsCodeGen.getCode(requestModelPost4, "https"), + expect( + codeGen.getCode( + CodegenLanguage.pythonRequests, requestModelPost4, "https"), expectedCode); }); @@ -378,7 +414,9 @@ response = requests.post(url, data=payload, headers=headers) print('Status Code:', response.status_code) print('Response Body:', response.text) """; - expect(pythonRequestsCodeGen.getCode(requestModelPost5, "https"), + expect( + codeGen.getCode( + CodegenLanguage.pythonRequests, requestModelPost5, "https"), expectedCode); }); @@ -402,7 +440,9 @@ response = requests.post(url, data=payload, headers=headers) print('Status Code:', response.status_code) print('Response Body:', response.text) """; - expect(pythonRequestsCodeGen.getCode(requestModelPost6, "https"), + expect( + codeGen.getCode( + CodegenLanguage.pythonRequests, requestModelPost6, "https"), expectedCode); }); @@ -426,7 +466,9 @@ response = requests.post(url, data=payload, headers=headers) print('Status Code:', response.status_code) print('Response Body:', response.text) """; - expect(pythonRequestsCodeGen.getCode(requestModelPost7, "https"), + expect( + codeGen.getCode( + CodegenLanguage.pythonRequests, requestModelPost7, "https"), expectedCode); }); @@ -456,7 +498,9 @@ response = requests.post(url, params=params, data=payload, headers=headers) print('Status Code:', response.status_code) print('Response Body:', response.text) """; - expect(pythonRequestsCodeGen.getCode(requestModelPost8, "https"), + expect( + codeGen.getCode( + CodegenLanguage.pythonRequests, requestModelPost8, "https"), expectedCode); }); @@ -487,7 +531,9 @@ response = requests.post(url, params=params, data=payload, headers=headers) print('Status Code:', response.status_code) print('Response Body:', response.text) """; - expect(pythonRequestsCodeGen.getCode(requestModelPost9, "https"), + expect( + codeGen.getCode( + CodegenLanguage.pythonRequests, requestModelPost9, "https"), expectedCode); }); }); @@ -508,7 +554,9 @@ response = requests.put(url, json=payload) print('Status Code:', response.status_code) print('Response Body:', response.text) """; - expect(pythonRequestsCodeGen.getCode(requestModelPut1, "https"), + expect( + codeGen.getCode( + CodegenLanguage.pythonRequests, requestModelPut1, "https"), expectedCode); }); }); @@ -529,7 +577,9 @@ response = requests.patch(url, json=payload) print('Status Code:', response.status_code) print('Response Body:', response.text) """; - expect(pythonRequestsCodeGen.getCode(requestModelPatch1, "https"), + expect( + codeGen.getCode( + CodegenLanguage.pythonRequests, requestModelPatch1, "https"), expectedCode); }); }); @@ -545,7 +595,9 @@ response = requests.delete(url) print('Status Code:', response.status_code) print('Response Body:', response.text) """; - expect(pythonRequestsCodeGen.getCode(requestModelDelete1, "https"), + expect( + codeGen.getCode( + CodegenLanguage.pythonRequests, requestModelDelete1, "https"), expectedCode); }); @@ -564,7 +616,9 @@ response = requests.delete(url, json=payload) print('Status Code:', response.status_code) print('Response Body:', response.text) """; - expect(pythonRequestsCodeGen.getCode(requestModelDelete2, "https"), + expect( + codeGen.getCode( + CodegenLanguage.pythonRequests, requestModelDelete2, "https"), expectedCode); }); }); From 11a38fcb541fc2b1a3d4f237a9456c876e728f8a Mon Sep 17 00:00:00 2001 From: Ankit Mahato Date: Tue, 12 Mar 2024 05:19:37 +0530 Subject: [PATCH 17/19] Add default uri --- lib/consts.dart | 11 ++++++++--- lib/screens/settings_page.dart | 2 +- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/lib/consts.dart b/lib/consts.dart index d7c2689c..40f51633 100644 --- a/lib/consts.dart +++ b/lib/consts.dart @@ -8,6 +8,7 @@ import 'package:davi/davi.dart'; const kDiscordUrl = "https://bit.ly/heyfoss"; const kGitUrl = "https://github.com/foss42/apidash"; const kIssueUrl = "$kGitUrl/issues"; +const kDefaultUri = "api.apidash.dev"; final kIsMacOS = !kIsWeb && Platform.isMacOS; final kIsWindows = !kIsWeb && Platform.isWindows; @@ -282,6 +283,8 @@ enum CodegenLanguage { const JsonEncoder kEncoder = JsonEncoder.withIndent(' '); const LineSplitter kSplitter = LineSplitter(); +const kHeaderContentType = "Content-Type"; + const kTypeApplication = 'application'; // application const kSubTypeJson = 'json'; @@ -312,12 +315,15 @@ const kSubTypeSvg = 'svg+xml'; const kTypeAudio = 'audio'; const kTypeVideo = 'video'; +const kTypeMultipart = "multipart"; +const kSubTypeFormData = "form-data"; + const kSubTypeDefaultViewOptions = 'all'; enum ContentType { json("$kTypeApplication/$kSubTypeJson"), text("$kTypeText/$kSubTypePlain"), - formdata("multipart/form-data"); + formdata("$kTypeMultipart/$kSubTypeFormData"); const ContentType(this.header); final String header; @@ -499,8 +505,7 @@ const kRaiseIssue = const kCsvError = "There seems to be an issue rendering this CSV. Please raise an issue in API Dash GitHub repo so that we can resolve it."; -const kHintTextUrlCard = - "Enter API endpoint like api.apidash.dev/country/codes"; +const kHintTextUrlCard = "Enter API endpoint like https://$kDefaultUri/"; const kLabelPlusNew = "+ New"; const kLabelSend = "Send"; const kLabelSending = "Sending.."; diff --git a/lib/screens/settings_page.dart b/lib/screens/settings_page.dart index 44e67330..fde7dce7 100644 --- a/lib/screens/settings_page.dart +++ b/lib/screens/settings_page.dart @@ -65,7 +65,7 @@ class SettingsPage extends ConsumerWidget { hoverColor: kColorTransparent, title: const Text('Default URI Scheme'), subtitle: Text( - 'api.apidash.dev → ${settings.defaultUriScheme}://api.apidash.dev'), + '$kDefaultUri → ${settings.defaultUriScheme}://$kDefaultUri'), trailing: DropdownMenu( onSelected: (value) { ref From e4f0633eca28e8426cbaf46b4ca9039c7a8bd2e9 Mon Sep 17 00:00:00 2001 From: Ankit Mahato Date: Tue, 12 Mar 2024 05:20:15 +0530 Subject: [PATCH 18/19] Update curl.dart --- lib/codegen/others/curl.dart | 50 +++++++++++++++--------------------- 1 file changed, 20 insertions(+), 30 deletions(-) diff --git a/lib/codegen/others/curl.dart b/lib/codegen/others/curl.dart index 6c0e02fc..2ba59765 100644 --- a/lib/codegen/others/curl.dart +++ b/lib/codegen/others/curl.dart @@ -21,18 +21,14 @@ class cURLCodeGen { String? getCode( RequestModel requestModel, - String defaultUriScheme, ) { try { String result = ""; - String url = requestModel.url; - if (!url.contains("://") && url.isNotEmpty) { - url = "$defaultUriScheme://$url"; - } - var rM = requestModel.copyWith(url: url); - - var harJson = requestModelToHARJsonRequest(rM, useEnabled: true); + var harJson = requestModelToHARJsonRequest( + requestModel, + useEnabled: true, + ); var templateStart = jj.Template(kTemplateStart); result += templateStart.render({ @@ -47,37 +43,31 @@ class cURLCodeGen { var headers = harJson["headers"]; if (headers.isNotEmpty) { for (var item in headers) { + if (requestModel.hasFormData && item["name"] == kHeaderContentType) { + continue; + } var templateHeader = jj.Template(kTemplateHeader); result += templateHeader .render({"name": item["name"], "value": item["value"]}); } } - var method = requestModel.method; - if (kMethodsWithBody.contains(method)) { - if (harJson['formData'] != null) { - var formDataList = harJson['formData'] as List>; - for (var formData in formDataList) { - var templateFormData = jj.Template(kTemplateFormData); - if (formData['type'] != null && - formData['name'] != null && - formData['value'] != null && - formData['name']!.isNotEmpty && - formData['value']!.isNotEmpty) { - result += templateFormData.render({ - "name": formData["name"], - "value": - "${formData['type'] == 'file' ? '@' : ''}${formData["value"]}", - }); - } + if (requestModel.hasJsonData || requestModel.hasTextData) { + var templateBody = jj.Template(kTemplateBody); + result += templateBody.render({"body": requestModel.requestBody}); + } else if (requestModel.hasFormData) { + for (var formData in requestModel.formDataList) { + var templateFormData = jj.Template(kTemplateFormData); + if (formData.name.isNotEmpty && formData.value.isNotEmpty) { + result += templateFormData.render({ + "name": formData.name, + "value": + "${formData.type == FormDataType.file ? '@' : ''}${formData.value}", + }); } } - - if (harJson["postData"]?["text"] != null) { - var templateBody = jj.Template(kTemplateBody); - result += templateBody.render({"body": harJson["postData"]["text"]}); - } } + return result; } catch (e) { return null; From 67fcc66aa2f8aa3a00f24202c76cf8466fca960b Mon Sep 17 00:00:00 2001 From: Ankit Mahato Date: Tue, 12 Mar 2024 05:23:27 +0530 Subject: [PATCH 19/19] Update HAR codegen --- lib/utils/har_utils.dart | 61 ++++-- test/codegen/har_codegen_test.dart | 306 ++++++++++++++++++++++++++--- 2 files changed, 321 insertions(+), 46 deletions(-) diff --git a/lib/utils/har_utils.dart b/lib/utils/har_utils.dart index b5e1de72..86ada7fe 100644 --- a/lib/utils/har_utils.dart +++ b/lib/utils/har_utils.dart @@ -1,6 +1,10 @@ +// http://www.softwareishard.com/blog/har-12-spec/ +// https://github.com/ahmadnassri/har-spec/blob/master/versions/1.2.md + import 'dart:convert'; import 'package:apidash/consts.dart'; -import 'package:apidash/utils/utils.dart' show getValidRequestUri; +import 'package:apidash/utils/utils.dart' + show getValidRequestUri, getNewUuid, getFilenameFromPath; import 'package:apidash/models/models.dart' show RequestModel; import 'package:package_info_plus/package_info_plus.dart'; @@ -75,6 +79,7 @@ Map requestModelToHARJsonRequest( defaultUriScheme = kDefaultUriScheme, bool exportMode = false, bool useEnabled = false, + String? boundary, }) { Map json = {}; bool hasBody = false; @@ -110,21 +115,37 @@ Map requestModelToHARJsonRequest( } } - var method = requestModel.method; - var requestBody = requestModel.requestBody; - if (kMethodsWithBody.contains(method) && - requestBody != null && - !requestModel.isFormDataRequest) { - var contentLength = utf8.encode(requestBody).length; - if (contentLength > 0) { - hasBody = true; - json["postData"] = {}; - json["postData"]["mimeType"] = - requestModel.requestBodyContentType.header; - json["postData"]["text"] = requestBody; - if (exportMode) { - json["postData"]["comment"] = ""; + if (requestModel.hasJsonData || requestModel.hasTextData) { + hasBody = true; + json["postData"] = {}; + json["postData"]["mimeType"] = requestModel.requestBodyContentType.header; + json["postData"]["text"] = requestModel.requestBody; + if (exportMode) { + json["postData"]["comment"] = ""; + } + } + + if (requestModel.hasFormData) { + boundary = boundary ?? getNewUuid(); + hasBody = true; + json["postData"] = {}; + json["postData"]["mimeType"] = + "${requestModel.requestBodyContentType.header}; boundary=$boundary"; + json["postData"]["params"] = []; + for (var item in requestModel.formDataList) { + Map d = exportMode ? {"comment": ""} : {}; + if (item.type == FormDataType.text) { + d["name"] = item.name; + d["value"] = item.value; } + if (item.type == FormDataType.file) { + d["name"] = item.name; + d["fileName"] = getFilenameFromPath(item.value); + } + json["postData"]["params"].add(d); + } + if (exportMode) { + json["postData"]["comment"] = ""; } } @@ -137,8 +158,8 @@ Map requestModelToHARJsonRequest( if (headers.isNotEmpty || hasBody) { if (hasBody && !requestModel.hasContentTypeHeader) { var m = { - "name": "Content-Type", - "value": requestModel.requestBodyContentType.header + "name": kHeaderContentType, + "value": json["postData"]["mimeType"] }; if (exportMode) { m["comment"] = ""; @@ -154,14 +175,12 @@ Map requestModelToHARJsonRequest( } } } - if (requestModel.isFormDataRequest) { - json["formData"] = requestModel.formDataMapList; - } if (exportMode) { json["comment"] = ""; json["cookies"] = []; json["headersSize"] = -1; - json["bodySize"] = hasBody ? utf8.encode(requestBody!).length : 0; + json["bodySize"] = + hasBody ? utf8.encode(json["postData"]["text"] ?? "").length : 0; } } return json; diff --git a/test/codegen/har_codegen_test.dart b/test/codegen/har_codegen_test.dart index ea40bf93..767afc98 100644 --- a/test/codegen/har_codegen_test.dart +++ b/test/codegen/har_codegen_test.dart @@ -1,9 +1,10 @@ -import 'package:apidash/codegen/others/har.dart'; -import '../request_models.dart'; +import 'package:apidash/codegen/codegen.dart'; +import 'package:apidash/consts.dart'; import 'package:test/test.dart'; +import '../request_models.dart'; void main() { - final harCodeGen = HARCodeGen(); + final codeGen = Codegen(); group('GET Request', () { test('GET 1', () { @@ -14,7 +15,8 @@ void main() { "queryString": [], "headers": [] }"""; - expect(harCodeGen.getCode(requestModelGet1, "https"), expectedCode); + expect(codeGen.getCode(CodegenLanguage.har, requestModelGet1, "https"), + expectedCode); }); test('GET 2', () { @@ -30,7 +32,8 @@ void main() { ], "headers": [] }"""; - expect(harCodeGen.getCode(requestModelGet2, "https"), expectedCode); + expect(codeGen.getCode(CodegenLanguage.har, requestModelGet2, "https"), + expectedCode); }); test('GET 3', () { @@ -46,7 +49,8 @@ void main() { ], "headers": [] }"""; - expect(harCodeGen.getCode(requestModelGet3, "https"), expectedCode); + expect(codeGen.getCode(CodegenLanguage.har, requestModelGet3, "https"), + expectedCode); }); test('GET 4', () { @@ -78,7 +82,8 @@ void main() { ], "headers": [] }"""; - expect(harCodeGen.getCode(requestModelGet4, "https"), expectedCode); + expect(codeGen.getCode(CodegenLanguage.har, requestModelGet4, "https"), + expectedCode); }); test('GET 5', () { @@ -94,7 +99,8 @@ void main() { } ] }"""; - expect(harCodeGen.getCode(requestModelGet5, "https"), expectedCode); + expect(codeGen.getCode(CodegenLanguage.har, requestModelGet5, "https"), + expectedCode); }); test('GET 6', () { @@ -115,7 +121,8 @@ void main() { } ] }"""; - expect(harCodeGen.getCode(requestModelGet6, "https"), expectedCode); + expect(codeGen.getCode(CodegenLanguage.har, requestModelGet6, "https"), + expectedCode); }); test('GET 7', () { @@ -126,7 +133,8 @@ void main() { "queryString": [], "headers": [] }"""; - expect(harCodeGen.getCode(requestModelGet7, "https"), expectedCode); + expect(codeGen.getCode(CodegenLanguage.har, requestModelGet7, "https"), + expectedCode); }); test('GET 8', () { @@ -147,7 +155,8 @@ void main() { } ] }"""; - expect(harCodeGen.getCode(requestModelGet8, "https"), expectedCode); + expect(codeGen.getCode(CodegenLanguage.har, requestModelGet8, "https"), + expectedCode); }); test('GET 9', () { @@ -167,7 +176,8 @@ void main() { ], "headers": [] }"""; - expect(harCodeGen.getCode(requestModelGet9, "https"), expectedCode); + expect(codeGen.getCode(CodegenLanguage.har, requestModelGet9, "https"), + expectedCode); }); test('GET 10', () { @@ -184,7 +194,8 @@ void main() { ] }"""; expect( - harCodeGen.getCode( + codeGen.getCode( + CodegenLanguage.har, requestModelGet10, "https", ), @@ -213,7 +224,8 @@ void main() { } ] }"""; - expect(harCodeGen.getCode(requestModelGet11, "https"), expectedCode); + expect(codeGen.getCode(CodegenLanguage.har, requestModelGet11, "https"), + expectedCode); }); test('GET 12', () { @@ -224,7 +236,8 @@ void main() { "queryString": [], "headers": [] }"""; - expect(harCodeGen.getCode(requestModelGet12, "https"), expectedCode); + expect(codeGen.getCode(CodegenLanguage.har, requestModelGet12, "https"), + expectedCode); }); }); @@ -237,7 +250,8 @@ void main() { "queryString": [], "headers": [] }"""; - expect(harCodeGen.getCode(requestModelHead1, "https"), expectedCode); + expect(codeGen.getCode(CodegenLanguage.har, requestModelHead1, "https"), + expectedCode); }); test('HEAD 2', () { @@ -248,7 +262,8 @@ void main() { "queryString": [], "headers": [] }"""; - expect(harCodeGen.getCode(requestModelHead2, "http"), expectedCode); + expect(codeGen.getCode(CodegenLanguage.har, requestModelHead2, "http"), + expectedCode); }); }); @@ -270,7 +285,8 @@ void main() { "text": "{\n\"text\": \"I LOVE Flutter\"\n}" } }"""; - expect(harCodeGen.getCode(requestModelPost1, "https"), expectedCode); + expect(codeGen.getCode(CodegenLanguage.har, requestModelPost1, "https"), + expectedCode); }); test('POST 2', () { @@ -287,10 +303,11 @@ void main() { ], "postData": { "mimeType": "application/json", - "text": "{\n\"text\": \"I LOVE Flutter\"\n}" + "text": "{\n\"text\": \"I LOVE Flutter\",\n\"flag\": null,\n\"male\": true,\n\"female\": false,\n\"no\": 1.2,\n\"arr\": [\"null\", \"true\", \"false\", null]\n}" } }"""; - expect(harCodeGen.getCode(requestModelPost2, "https"), expectedCode); + expect(codeGen.getCode(CodegenLanguage.har, requestModelPost2, "https"), + expectedCode); }); test('POST 3', () { @@ -314,7 +331,242 @@ void main() { "text": "{\n\"text\": \"I LOVE Flutter\"\n}" } }"""; - expect(harCodeGen.getCode(requestModelPost3, "https"), expectedCode); + expect(codeGen.getCode(CodegenLanguage.har, requestModelPost3, "https"), + expectedCode); + }); + + test('POST 4', () { + const expectedCode = r"""{ + "method": "POST", + "url": "https://api.apidash.dev/io/form", + "httpVersion": "HTTP/1.1", + "queryString": [], + "headers": [ + { + "name": "Content-Type", + "value": "multipart/form-data; boundary=d43e2510-a25e-1f08-b0a5-591aeb704467" + } + ], + "postData": { + "mimeType": "multipart/form-data; boundary=d43e2510-a25e-1f08-b0a5-591aeb704467", + "params": [ + { + "name": "text", + "value": "API" + }, + { + "name": "sep", + "value": "|" + }, + { + "name": "times", + "value": "3" + } + ] + } +}"""; + expect( + codeGen.getCode(CodegenLanguage.har, requestModelPost4, "https", + boundary: "d43e2510-a25e-1f08-b0a5-591aeb704467"), + expectedCode); + }); + + test('POST 5', () { + const expectedCode = r"""{ + "method": "POST", + "url": "https://api.apidash.dev/io/form", + "httpVersion": "HTTP/1.1", + "queryString": [], + "headers": [ + { + "name": "Content-Type", + "value": "multipart/form-data; boundary=ce268b20-a3e6-1f08-b0a5-591aeb704467" + }, + { + "name": "User-Agent", + "value": "Test Agent" + } + ], + "postData": { + "mimeType": "multipart/form-data; boundary=ce268b20-a3e6-1f08-b0a5-591aeb704467", + "params": [ + { + "name": "text", + "value": "API" + }, + { + "name": "sep", + "value": "|" + }, + { + "name": "times", + "value": "3" + } + ] + } +}"""; + expect( + codeGen.getCode(CodegenLanguage.har, requestModelPost5, "https", + boundary: "ce268b20-a3e6-1f08-b0a5-591aeb704467"), + expectedCode); + }); + + test('POST 6', () { + const expectedCode = r"""{ + "method": "POST", + "url": "https://api.apidash.dev/io/img", + "httpVersion": "HTTP/1.1", + "queryString": [], + "headers": [ + { + "name": "Content-Type", + "value": "multipart/form-data; boundary=c90d21a0-a44d-1f08-b0a5-591aeb704467" + } + ], + "postData": { + "mimeType": "multipart/form-data; boundary=c90d21a0-a44d-1f08-b0a5-591aeb704467", + "params": [ + { + "name": "token", + "value": "xyz" + }, + { + "name": "imfile", + "fileName": "1.png" + } + ] + } +}"""; + expect( + codeGen.getCode(CodegenLanguage.har, requestModelPost6, "https", + boundary: "c90d21a0-a44d-1f08-b0a5-591aeb704467"), + expectedCode); + }); + + test('POST 7', () { + const expectedCode = r"""{ + "method": "POST", + "url": "https://api.apidash.dev/io/img", + "httpVersion": "HTTP/1.1", + "queryString": [], + "headers": [ + { + "name": "Content-Type", + "value": "multipart/form-data; boundary=4ac86770-a4dc-1f08-b0a5-591aeb704467" + } + ], + "postData": { + "mimeType": "multipart/form-data; boundary=4ac86770-a4dc-1f08-b0a5-591aeb704467", + "params": [ + { + "name": "token", + "value": "xyz" + }, + { + "name": "imfile", + "fileName": "1.png" + } + ] + } +}"""; + expect( + codeGen.getCode(CodegenLanguage.har, requestModelPost7, "https", + boundary: "4ac86770-a4dc-1f08-b0a5-591aeb704467"), + expectedCode); + }); + + test('POST 8', () { + const expectedCode = r"""{ + "method": "POST", + "url": "https://api.apidash.dev/io/form?size=2&len=3", + "httpVersion": "HTTP/1.1", + "queryString": [ + { + "name": "size", + "value": "2" + }, + { + "name": "len", + "value": "3" + } + ], + "headers": [ + { + "name": "Content-Type", + "value": "multipart/form-data; boundary=78403a20-a54a-1f08-b0a5-591aeb704467" + } + ], + "postData": { + "mimeType": "multipart/form-data; boundary=78403a20-a54a-1f08-b0a5-591aeb704467", + "params": [ + { + "name": "text", + "value": "API" + }, + { + "name": "sep", + "value": "|" + }, + { + "name": "times", + "value": "3" + } + ] + } +}"""; + expect( + codeGen.getCode(CodegenLanguage.har, requestModelPost8, "https", + boundary: "78403a20-a54a-1f08-b0a5-591aeb704467"), + expectedCode); + }); + + test('POST 9', () { + const expectedCode = r"""{ + "method": "POST", + "url": "https://api.apidash.dev/io/img?size=2&len=3", + "httpVersion": "HTTP/1.1", + "queryString": [ + { + "name": "size", + "value": "2" + }, + { + "name": "len", + "value": "3" + } + ], + "headers": [ + { + "name": "Content-Type", + "value": "multipart/form-data; boundary=2d9cd390-a593-1f08-b0a5-591aeb704467" + }, + { + "name": "User-Agent", + "value": "Test Agent" + }, + { + "name": "Keep-Alive", + "value": "true" + } + ], + "postData": { + "mimeType": "multipart/form-data; boundary=2d9cd390-a593-1f08-b0a5-591aeb704467", + "params": [ + { + "name": "token", + "value": "xyz" + }, + { + "name": "imfile", + "fileName": "1.png" + } + ] + } +}"""; + expect( + codeGen.getCode(CodegenLanguage.har, requestModelPost9, "https", + boundary: "2d9cd390-a593-1f08-b0a5-591aeb704467"), + expectedCode); }); }); @@ -336,7 +588,8 @@ void main() { "text": "{\n\"name\": \"morpheus\",\n\"job\": \"zion resident\"\n}" } }"""; - expect(harCodeGen.getCode(requestModelPut1, "https"), expectedCode); + expect(codeGen.getCode(CodegenLanguage.har, requestModelPut1, "https"), + expectedCode); }); }); @@ -358,7 +611,8 @@ void main() { "text": "{\n\"name\": \"marfeus\",\n\"job\": \"accountant\"\n}" } }"""; - expect(harCodeGen.getCode(requestModelPatch1, "https"), expectedCode); + expect(codeGen.getCode(CodegenLanguage.har, requestModelPatch1, "https"), + expectedCode); }); }); @@ -371,7 +625,8 @@ void main() { "queryString": [], "headers": [] }"""; - expect(harCodeGen.getCode(requestModelDelete1, "https"), expectedCode); + expect(codeGen.getCode(CodegenLanguage.har, requestModelDelete1, "https"), + expectedCode); }); test('DELETE 2', () { @@ -391,7 +646,8 @@ void main() { "text": "{\n\"name\": \"marfeus\",\n\"job\": \"accountant\"\n}" } }"""; - expect(harCodeGen.getCode(requestModelDelete2, "https"), expectedCode); + expect(codeGen.getCode(CodegenLanguage.har, requestModelDelete2, "https"), + expectedCode); }); }); }