From 61c5dded1b578c6ba0990eea4713b18e9ab41568 Mon Sep 17 00:00:00 2001 From: Nikhil Date: Thu, 20 Mar 2025 02:56:32 +0530 Subject: [PATCH 01/42] Resolving conflicts --- lib/codegen/dart/dio.dart | 2 +- lib/codegen/dart/http.dart | 2 +- lib/utils/har_utils.dart | 12 +++-- lib/widgets/table_request.dart | 6 +-- .../lib/models/http_request_model.dart | 6 +-- .../lib/utils/http_request_utils.dart | 49 +++++++++++++++++++ .../lib/utils/uri_utils.dart | 16 +++--- 7 files changed, 74 insertions(+), 19 deletions(-) diff --git a/lib/codegen/dart/dio.dart b/lib/codegen/dart/dio.dart index 488d3cc7f..9b60ab3aa 100644 --- a/lib/codegen/dart/dio.dart +++ b/lib/codegen/dart/dio.dart @@ -28,7 +28,7 @@ class DartDioCodeGen { String generatedDartCode({ required String url, required HTTPVerb method, - required Map queryParams, + required Map queryParams, required Map headers, required String? body, required ContentType contentType, diff --git a/lib/codegen/dart/http.dart b/lib/codegen/dart/http.dart index 2c7e66a54..58798c18b 100644 --- a/lib/codegen/dart/http.dart +++ b/lib/codegen/dart/http.dart @@ -30,7 +30,7 @@ class DartHttpCodeGen { String generatedDartCode({ required String url, required HTTPVerb method, - required Map queryParams, + required Map queryParams, required Map headers, required ContentType contentType, required String? body, diff --git a/lib/utils/har_utils.dart b/lib/utils/har_utils.dart index 31c466ceb..6e0f97e1f 100644 --- a/lib/utils/har_utils.dart +++ b/lib/utils/har_utils.dart @@ -110,14 +110,16 @@ Map requestModelToHARJsonRequest( json["queryString"] = []; json["headers"] = []; - var params = uri.queryParameters; + Map> params = uri.queryParametersAll; if (params.isNotEmpty) { for (final k in params.keys) { - var m = {"name": k, "value": params[k]}; - if (exportMode) { - m["comment"] = ""; + for (final val in params[k]!) { + var m = {"name": k, "value": val}; + if (exportMode) { + m["comment"] = ""; + } + json["queryString"].add(m); } - json["queryString"].add(m); } } diff --git a/lib/widgets/table_request.dart b/lib/widgets/table_request.dart index 7b57ebdf7..fe3e19e2b 100644 --- a/lib/widgets/table_request.dart +++ b/lib/widgets/table_request.dart @@ -12,7 +12,7 @@ class RequestDataTable extends StatelessWidget { this.valueName, }); - final Map rows; + final Map rows; final String? keyName; final String? valueName; @@ -57,7 +57,7 @@ class RequestDataTable extends StatelessWidget { final List dataRows = rows.entries .map( - (MapEntry entry) => DataRow( + (MapEntry entry) => DataRow( cells: [ const DataCell(kHSpacer5), DataCell( @@ -71,7 +71,7 @@ class RequestDataTable extends StatelessWidget { ), DataCell( ReadOnlyTextField( - initialValue: entry.value, + initialValue: entry.value is String ? entry.value : entry.value.toString(), decoration: fieldDecoration, ), ), diff --git a/packages/better_networking/lib/models/http_request_model.dart b/packages/better_networking/lib/models/http_request_model.dart index 2d915cfa6..67fb6d7c0 100644 --- a/packages/better_networking/lib/models/http_request_model.dart +++ b/packages/better_networking/lib/models/http_request_model.dart @@ -3,7 +3,7 @@ import 'package:freezed_annotation/freezed_annotation.dart'; import 'package:seed/seed.dart'; import '../extensions/extensions.dart'; import '../utils/utils.dart' - show rowsToFormDataMapList, rowsToMap, getEnabledRows; + show rowsToFormDataMapList, rowsToMap, getEnabledRows,rowsToRequestMap; import '../consts.dart'; part 'http_request_model.freezed.dart'; @@ -31,14 +31,14 @@ class HttpRequestModel with _$HttpRequestModel { _$HttpRequestModelFromJson(json); Map get headersMap => rowsToMap(headers) ?? {}; - Map get paramsMap => rowsToMap(params) ?? {}; + Map get paramsMap => rowsToRequestMap(params) ?? {}; List? get enabledHeaders => getEnabledRows(headers, isHeaderEnabledList); List? get enabledParams => getEnabledRows(params, isParamEnabledList); Map get enabledHeadersMap => rowsToMap(enabledHeaders) ?? {}; - Map get enabledParamsMap => rowsToMap(enabledParams) ?? {}; + Map get enabledParamsMap => rowsToRequestMap(enabledParams) ?? {}; bool get hasContentTypeHeader => enabledHeadersMap.hasKeyContentType(); bool get hasFormDataContentType => bodyContentType == ContentType.formdata; diff --git a/packages/better_networking/lib/utils/http_request_utils.dart b/packages/better_networking/lib/utils/http_request_utils.dart index c13fab75b..6917ace24 100644 --- a/packages/better_networking/lib/utils/http_request_utils.dart +++ b/packages/better_networking/lib/utils/http_request_utils.dart @@ -1,5 +1,7 @@ import 'package:better_networking/better_networking.dart'; import 'package:json5/json5.dart' as json5; +import 'package:seed/models/form_data_model.dart'; +import 'package:seed/models/name_value_model.dart'; Map? rowsToMap( List? kvRows, { @@ -95,7 +97,54 @@ String? getRequestBody(APIType type, HttpRequestModel httpRequestModel) { APIType.graphql => getGraphQLBody(httpRequestModel), }; } +Map? rowsToRequestMap(List? rows) { + if (rows == null) { + return null; + } + + final Map finalMap = {}; + + for (var row in rows) { + final key = row.name.trim(); + if (key.isEmpty) continue; + + final value = row.value.toString(); + + if (finalMap.containsKey(key)) { + + if (finalMap[key] is List) { + (finalMap[key] as List).add(value); + } else { + finalMap[key] = [finalMap[key], value]; + } + } else { + + finalMap[key] = value; + } + } + + return finalMap; +} +List? requestMapToRows(Map? requestMap) { + if (requestMap == null) { + return null; + } + + final List finalRows = []; + + requestMap.forEach((key, value) { + if (value is List) { + for (var item in value) { + finalRows.add(NameValueModel(name: key, value: item.toString())); + } + } else { + finalRows.add(NameValueModel(name: key, value: value.toString())); + } + }); + + return finalRows; +} // TODO: Expose this function to remove JSON comments String? removeJsonComments(String? json) { try { diff --git a/packages/better_networking/lib/utils/uri_utils.dart b/packages/better_networking/lib/utils/uri_utils.dart index 9dbf922e6..db2cb6336 100644 --- a/packages/better_networking/lib/utils/uri_utils.dart +++ b/packages/better_networking/lib/utils/uri_utils.dart @@ -55,12 +55,16 @@ String stripUrlParams(String url) { uri = uri.removeFragment(); } - Map? queryParams = rowsToMap(requestParams); - if (queryParams != null && queryParams.isNotEmpty) { - if (uri.hasQuery) { - Map urlQueryParams = uri.queryParameters; - queryParams = mergeMaps(urlQueryParams, queryParams); - } + Map> queryParams = uri.queryParametersAll; + + Map? requestQueryParams = rowsToRequestMap(requestParams); + if (requestQueryParams != null) { + Map> queryParamsList = requestQueryParams.map((key, value) { + return MapEntry(key, List.from(value is String ? [value] : value)); + }); + queryParams = mergeMaps(queryParams, queryParamsList, value: (v1, v2) => v1 + v2); + } + if (queryParams.isNotEmpty) { uri = uri.replace(queryParameters: queryParams); } return (uri, null); From 1fb40b86512e50a9b60df705113df2c2640fd0ca Mon Sep 17 00:00:00 2001 From: Nikhil Date: Thu, 20 Mar 2025 04:34:09 +0530 Subject: [PATCH 02/42] Codegen updated for dart(http/dio) --- lib/codegen/dart/dio.dart | 5 +++-- lib/codegen/dart/http.dart | 8 ++++---- .../lib/models/http_request_model.dart | 16 +++++++++++++++- 3 files changed, 22 insertions(+), 7 deletions(-) diff --git a/lib/codegen/dart/dio.dart b/lib/codegen/dart/dio.dart index 9b60ab3aa..5ade085fd 100644 --- a/lib/codegen/dart/dio.dart +++ b/lib/codegen/dart/dio.dart @@ -87,11 +87,12 @@ class DartDioCodeGen { dataExp = declareFinal('data').assign(refer('dio.FormData()')); } } + final parsedUrl = url.split('?').first; final responseExp = declareFinal('response').assign(InvokeExpression.newOf( refer('dio.Dio()'), - [literalString(url)], + [literalString(parsedUrl)], { - if (queryParamExp != null) 'queryParameters': refer('queryParams'), + if (queryParamExp != null) 'queryParameters': refer('queryParams'), if (headerExp != null) 'options': refer('dio.Options').newInstance( [], diff --git a/lib/codegen/dart/http.dart b/lib/codegen/dart/http.dart index 58798c18b..a6a6a0061 100644 --- a/lib/codegen/dart/http.dart +++ b/lib/codegen/dart/http.dart @@ -43,9 +43,9 @@ class DartHttpCodeGen { final emitter = DartEmitter(); final dioImport = Directive.import('package:http/http.dart', as: 'http'); sbf.writeln(dioImport.accept(emitter)); - + final parsedUrl = url.split('?').first; final uriExp = - declareVar('uri').assign(refer('Uri.parse').call([literalString(url)])); + declareVar('uri').assign(refer('Uri.parse').call([literalString(parsedUrl)])); Expression? dataExp; if (kMethodsWithBody.contains(method) && @@ -61,7 +61,7 @@ class DartHttpCodeGen { Expression? queryParamExp; List? uriReassignExps; - // var urlQueryParams = Map.from(uri.queryParameters); + // var urlQueryParams = Map.from(uri.queryParameters); // urlQueryParams.addAll(queryParams); // uri = uri.replace(queryParameters: urlQueryParams); @@ -74,7 +74,7 @@ class DartHttpCodeGen { if (uri.hasQuery) declareVar('urlQueryParams').assign( InvokeExpression.newOf( - refer('Map'), + refer('Map'), [refer('uri.queryParameters')], {}, [], diff --git a/packages/better_networking/lib/models/http_request_model.dart b/packages/better_networking/lib/models/http_request_model.dart index 67fb6d7c0..04e3c2329 100644 --- a/packages/better_networking/lib/models/http_request_model.dart +++ b/packages/better_networking/lib/models/http_request_model.dart @@ -38,7 +38,21 @@ class HttpRequestModel with _$HttpRequestModel { getEnabledRows(params, isParamEnabledList); Map get enabledHeadersMap => rowsToMap(enabledHeaders) ?? {}; - Map get enabledParamsMap => rowsToRequestMap(enabledParams) ?? {}; +Map get enabledParamsMap { + var extractedParams = Uri.parse(url).queryParametersAll; + var userParams = rowsToRequestMap(enabledParams) ?? {}; + + extractedParams.forEach((key, value) { + userParams[key] = [ + ...value, + if (userParams.containsKey(key)) + ...(userParams[key] is List ? List.from(userParams[key]) : [userParams[key]]) + ]; + }); + + return userParams; +} + bool get hasContentTypeHeader => enabledHeadersMap.hasKeyContentType(); bool get hasFormDataContentType => bodyContentType == ContentType.formdata; From 9296babd0dcdc3c942dabc8ddefc1e2904ce8ff0 Mon Sep 17 00:00:00 2001 From: Nikhil Date: Fri, 21 Mar 2025 00:14:17 +0530 Subject: [PATCH 03/42] Updated GO --- lib/codegen/go/http.dart | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/lib/codegen/go/http.dart b/lib/codegen/go/http.dart index 28fd805a2..5342c9148 100644 --- a/lib/codegen/go/http.dart +++ b/lib/codegen/go/http.dart @@ -58,14 +58,15 @@ func main() { """; String kTemplateQueryParam = """ - query := url.Query() - {% for key, value in params %} - query.Set("{{key}}", "{{value}}"){% endfor %} +query := url.Query() +{% for param in params %} +query.Add("{{param.key}}", "{{param.value}}"){% endfor %} - url.RawQuery = query.Encode() +url.RawQuery = query.Encode() """; + String kTemplateRequest = """ req, _ := http.NewRequest("{{method}}", url.String(), {% if hasBody %}payload{% else %}nil{% endif %}) @@ -102,7 +103,7 @@ func main() { }); var templateUrl = jj.Template(kTemplateUrl); - result += templateUrl.render({"url": url}); + result += templateUrl.render({"url": url.split('?').first}); var rec = getValidRequestUri( url, @@ -124,15 +125,21 @@ func main() { "fields": requestModel.formDataMapList, }); } - - if (uri.hasQuery) { - var params = uri.queryParameters; - if (params.isNotEmpty) { - var templateQueryParam = jj.Template(kTemplateQueryParam); - result += templateQueryParam.render({"params": params}); + if (requestModel.enabledParamsMap.isNotEmpty) { + var queryParams = []; + requestModel.enabledParamsMap.forEach((key, value) { + if (value is List) { + for (var v in value) { + queryParams.add({'key': key, 'value': v}); } + } else { + queryParams.add({'key': key, 'value': value}); } + }); + var templateQueryParam = jj.Template(kTemplateQueryParam); + result += templateQueryParam.render({"params": queryParams}); + } var method = requestModel.method.name.toUpperCase(); var templateRequest = jj.Template(kTemplateRequest); result += templateRequest.render({ From 28b6bc21b8c71b1a72b371276b6e061581b4d8a3 Mon Sep 17 00:00:00 2001 From: Nikhil Date: Fri, 21 Mar 2025 20:30:47 +0530 Subject: [PATCH 04/42] Updated C# --- lib/codegen/csharp/http_client.dart | 58 +++++++++++++++++++---------- lib/codegen/csharp/rest_sharp.dart | 25 ++++++++----- 2 files changed, 53 insertions(+), 30 deletions(-) diff --git a/lib/codegen/csharp/http_client.dart b/lib/codegen/csharp/http_client.dart index 6d086db83..e0590a887 100644 --- a/lib/codegen/csharp/http_client.dart +++ b/lib/codegen/csharp/http_client.dart @@ -5,19 +5,31 @@ class CSharpHttpClientCodeGen { final String kTemplateNamespaces = r''' using System; using System.Net.Http; +using System.Collections.Generic; +using System.Linq; {%- if formdata == 'multipart' %} using System.IO; -{%- elif formdata == 'urlencoded' %} -using System.Collections.Generic; {%- endif %} '''; - final String kTemplateUri = ''' -string uri = "{{ uri }}"; +final String kTemplateQueryParams = ''' +string baseUri = "{{ baseUri }}"; + +var query = new Dictionary>(); +{%- for key, values in queryParams %} +query["{{ key }}"] = new List(); +{%- for value in values %} +query["{{ key }}"].Add("{{ value }}"); +{%- endfor %} +{%- endfor %} + +var queryString = string.Join("&", query.SelectMany(kv => kv.Value.Select(v => string.Format("{0}={1}", kv.Key, v)))); +string uri = string.Format("{0}?{1}", baseUri, queryString); '''; + final String kTemplateHttpClientAndRequest = ''' using (var client = new HttpClient()) using (var request = new HttpRequestMessage(HttpMethod.{{ method | capitalize }}, uri)) @@ -81,17 +93,23 @@ using (var request = new HttpRequestMessage(HttpMethod.{{ method | capitalize }} StringBuffer result = StringBuffer(); // Include necessary C# namespace - String formdataImport = requestModel.hasFormData - ? "multipart" //(requestModel.hasFileInFormData ? "multipart" : "urlencoded") - : "nodata"; + String formdataImport = requestModel.hasFormData + ? "multipart" //(requestModel.hasFileInFormData ? "multipart" : "urlencoded") + : "nodata"; result.writeln(jj.Template(kTemplateNamespaces) - .render({"formdata": formdataImport})); - - // Set request URL - var (uri, _) = - getValidRequestUri(requestModel.url, requestModel.enabledParams); - if (uri != null) { - result.writeln(jj.Template(kTemplateUri).render({"uri": uri})); + .render({"formdata": formdataImport})); + + // Extract query parameters and URL + String baseUri = requestModel.url.split('?')[0]; + var queryParams = requestModel.enabledParamsMap; + + if (queryParams.isNotEmpty) { + result.writeln(jj.Template(kTemplateQueryParams).render({ + "baseUri": baseUri, + "queryParams": queryParams, + })); + } else { + result.writeln('string uri = "$baseUri";\n'); } // Initialize HttpClient and create HttpRequestMessage @@ -103,18 +121,18 @@ using (var request = new HttpRequestMessage(HttpMethod.{{ method | capitalize }} var headers = requestModel.enabledHeadersMap; if (headers.isNotEmpty) { result.writeln( - jj.Template(kTemplateHeaders).render({"headers": headers})); + jj.Template(kTemplateHeaders).render({"headers": headers})); } // Set request body if exists if (kMethodsWithBody.contains(requestModel.method) && - requestModel.hasBody) { + requestModel.hasBody) { var requestBody = requestModel.body; if (!requestModel.hasFormData && - requestBody != null && - requestBody.isNotEmpty) { - // if the request body is not formdata then render raw text body + requestBody != null && + requestBody.isNotEmpty) { + // if the request body is not formdata then render raw text body result.writeln(jj.Template(kTemplateRawBody).render({ "body": requestBody, "mediaType": requestModel.bodyContentType.header, @@ -133,7 +151,7 @@ using (var request = new HttpRequestMessage(HttpMethod.{{ method | capitalize }} result.writeln(kStringContentSetup); } - // Send request and get response + // Send request and get response result.write(kStringEnd); return result.toString(); } catch (e) { diff --git a/lib/codegen/csharp/rest_sharp.dart b/lib/codegen/csharp/rest_sharp.dart index efebb7cf9..fa5cc4a64 100644 --- a/lib/codegen/csharp/rest_sharp.dart +++ b/lib/codegen/csharp/rest_sharp.dart @@ -113,19 +113,24 @@ class Program }); result += methodType; - if (uri.hasQuery) { - var params = uri.queryParameters; - if (params.isNotEmpty) { - jj.Template templateParams = jj.Template(kTemplateParams); - String paramsResult = ""; - for (var item in params.entries) { - paramsResult += templateParams - .render({"param": item.key, "value": item.value}); + if (requestModel.enabledParamsMap.isNotEmpty) { + jj.Template templateParams = jj.Template(kTemplateParams); + String paramsResult = ""; + + requestModel.enabledParamsMap.forEach((key, values) { + if (values is List) { + for (var value in values) { + paramsResult += templateParams.render({"param": key, "value": value}); + } + } else { + paramsResult += templateParams.render({"param": key, "value": values}); } - result += "$paramsResult\n"; - } + }); + + result += "$paramsResult\n"; } + var headersList = requestModel.enabledHeaders; if (headersList != null || requestModel.hasJsonData || From 0b8dd91cd874cfef4beed2328c401507b3fb97fa Mon Sep 17 00:00:00 2001 From: Nikhil Date: Sat, 22 Mar 2025 03:20:03 +0530 Subject: [PATCH 05/42] updated js --- lib/codegen/js/axios.dart | 17 ++++++++--------- lib/codegen/js/fetch.dart | 22 +++++++++++++++++----- 2 files changed, 25 insertions(+), 14 deletions(-) diff --git a/lib/codegen/js/axios.dart b/lib/codegen/js/axios.dart index e6651976a..11338791a 100644 --- a/lib/codegen/js/axios.dart +++ b/lib/codegen/js/axios.dart @@ -69,16 +69,15 @@ axios(config) "method": harJson["method"].toLowerCase(), }); - var params = harJson["queryString"]; - if (params.isNotEmpty) { - var templateParams = jj.Template(kTemplateParams); - var m = {}; - for (var i in params) { - m[i["name"]] = i["value"]; + var enabledParams = requestModel.enabledParamsMap; + + if (enabledParams.isNotEmpty) { + var templateParams = jj.Template(kTemplateParams); + result += templateParams.render({ + "params": padMultilineString(kJsonEncoder.convert(enabledParams), 2) + }); } - result += templateParams - .render({"params": padMultilineString(kJsonEncoder.convert(m), 2)}); - } + var headers = harJson["headers"]; if (headers.isNotEmpty || requestModel.hasFormData) { diff --git a/lib/codegen/js/fetch.dart b/lib/codegen/js/fetch.dart index 5f610738b..bb8937c17 100644 --- a/lib/codegen/js/fetch.dart +++ b/lib/codegen/js/fetch.dart @@ -15,8 +15,18 @@ import { {% if hasFileInFormData %}fileFromSync, {% endif %}FormData } from 'nod """; - String kTemplateStart = """const url = '{{url}}'; - + String kTemplateStart = """const url = new URL('{{url}}'); + +{% for key, value in params -%} +{% if value is iterable and (value is not string) -%} +{% for item in value -%} +url.searchParams.append('{{key}}', '{{item}}'); +{% endfor -%} +{% else -%} + +url.searchParams.append('{{key}}', '{{value}}'); +{% endif -%} +{% endfor -%} const options = { method: '{{method}}' """; @@ -63,7 +73,7 @@ fetch(url, options) : requestModel.hasFileInFormData ? "// refer https://github.com/foss42/apidash/issues/293#issuecomment-1995208098 for details regarding integration\n\n" : ""; - if (requestModel.hasFormData) { + if (requestModel.hasFormData) { result += "const payload = new FormData();\n"; var templateMultiPartBody = jj.Template(kMultiPartBodyTemplate); var formFileCounter = 1; @@ -83,15 +93,17 @@ fetch(url, options) var harJson = requestModelToHARJsonRequest(requestModel, useEnabled: true); + var params = requestModel.enabledParamsMap; var templateStart = jj.Template(kTemplateStart); result += templateStart.render({ - "url": harJson["url"], + "url": stripUrlParams(requestModel.url), "method": harJson["method"], + "params": params, }); var headers = harJson["headers"]; - + if (headers.isNotEmpty) { var templateHeader = jj.Template(kTemplateHeader); var m = {}; From daf3df524e13df78c0e3f64ed4913494f75be712 Mon Sep 17 00:00:00 2001 From: Nikhil Date: Sun, 23 Mar 2025 05:38:50 +0530 Subject: [PATCH 06/42] Updated Swift --- lib/codegen/swift/urlsession.dart | 56 +++++++++++++++++++++++++------ 1 file changed, 45 insertions(+), 11 deletions(-) diff --git a/lib/codegen/swift/urlsession.dart b/lib/codegen/swift/urlsession.dart index 015d19afe..a6f3ff32b 100644 --- a/lib/codegen/swift/urlsession.dart +++ b/lib/codegen/swift/urlsession.dart @@ -50,10 +50,17 @@ let postData = """ '''; - final String kTemplateRequest = """ -var request = URLRequest(url: URL(string: "{{url}}")!) -request.httpMethod = "{{method}}" +final String kTemplateRequest = """ +var urlComponents = URLComponents(string: "{{url}}")! +var queryItems = [URLQueryItem]() + +{% for param in params %} +queryItems.append(URLQueryItem(name: "{{param.key}}", value: "{{param.value}}")){% if not loop.last %}{% else %}{% endif %}{% endfor %} +urlComponents.queryItems = queryItems +let requestUrl = urlComponents.url! +var request = URLRequest(url: requestUrl) +request.httpMethod = "{{method}}" """; final String kTemplateHeaders = """ @@ -75,10 +82,15 @@ request.httpBody = postData final String kTemplateEnd = """ let semaphore = DispatchSemaphore(value: 0) +let semaphore = DispatchSemaphore(value: 0) + let task = URLSession.shared.dataTask(with: request) { data, response, error in defer { semaphore.signal() } + defer { semaphore.signal() } + if let error = error { + print("Error: \\(error.localizedDescription)") print("Error: \\(error.localizedDescription)") return } @@ -88,11 +100,15 @@ let task = URLSession.shared.dataTask(with: request) { data, response, error in } if let responseString = String(data: data, encoding: .utf8) { print("Response: \\(responseString)") + print("Response: \\(responseString)") } } + task.resume() +semaphore.wait() + semaphore.wait() """; @@ -101,9 +117,26 @@ semaphore.wait() try { String result = kTemplateStart; - var rec = getValidRequestUri(requestModel.url, requestModel.enabledParams); + if (requestModel.hasFormData) { + result += kTemplateFormDataImport; + } + + var rec = + getValidRequestUri(requestModel.url, requestModel.enabledParams); Uri? uri = rec.$1; + var params = requestModel.enabledParamsMap.entries.expand((entry) { + + var values = entry.value is Iterable ? entry.value : [entry.value]; + + return values.map((value) { + return {'key': entry.key, 'value': value}; + }); + }).toList(); + + + + if (requestModel.hasFormData) { result += kTemplateFormDataImport; @@ -152,17 +185,18 @@ semaphore.wait() var templateRequest = jj.Template(kTemplateRequest); result += templateRequest.render({ "url": uri.toString(), - "method": requestModel.method.name.toUpperCase() + "method": requestModel.method.name.toUpperCase(), + "params": params, }); var headers = requestModel.enabledHeadersMap; if (requestModel.hasFormData) { - headers['Content-Type'] = - "multipart/form-data; boundary=\\(boundary.stringValue)"; - } else if(requestModel.hasJsonData||requestModel.hasTextData){ - headers['Content-Type'] = 'application/json'; - } - + headers.putIfAbsent("Content-Type", + () => "multipart/form-data; boundary=\\(boundary.stringValue)"); + } else if (requestModel.hasJsonData || requestModel.hasTextData) { + headers.putIfAbsent( + kHeaderContentType, () => requestModel.bodyContentType.header); + } if (headers.isNotEmpty) { var templateHeader = jj.Template(kTemplateHeaders); result += templateHeader.render({"headers": headers}); From bbc0c3acc1aa23dd7ed5b8250e0799e582c4add0 Mon Sep 17 00:00:00 2001 From: Nikhil Date: Sun, 23 Mar 2025 06:04:30 +0530 Subject: [PATCH 07/42] fix swift --- lib/codegen/swift/urlsession.dart | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/codegen/swift/urlsession.dart b/lib/codegen/swift/urlsession.dart index a6f3ff32b..cbd351cdc 100644 --- a/lib/codegen/swift/urlsession.dart +++ b/lib/codegen/swift/urlsession.dart @@ -80,6 +80,7 @@ request.httpBody = postData """; final String kTemplateEnd = """ + let semaphore = DispatchSemaphore(value: 0) let semaphore = DispatchSemaphore(value: 0) @@ -184,7 +185,7 @@ semaphore.wait() var templateRequest = jj.Template(kTemplateRequest); result += templateRequest.render({ - "url": uri.toString(), + "url": uri.toString().split('?').first, "method": requestModel.method.name.toUpperCase(), "params": params, }); From cf93885fce8f55186680fefb73f8ecd44a79b404 Mon Sep 17 00:00:00 2001 From: Nikhil Date: Tue, 25 Mar 2025 04:47:45 +0530 Subject: [PATCH 08/42] Updated Java --- lib/codegen/csharp/http_client.dart | 14 ++++++++++---- lib/codegen/java/async_http_client.dart | 12 ++++++------ lib/codegen/java/okhttp.dart | 22 ++++++++++------------ lib/codegen/java/unirest.dart | 25 ++++++++++++++----------- 4 files changed, 40 insertions(+), 33 deletions(-) diff --git a/lib/codegen/csharp/http_client.dart b/lib/codegen/csharp/http_client.dart index e0590a887..6d200051c 100644 --- a/lib/codegen/csharp/http_client.dart +++ b/lib/codegen/csharp/http_client.dart @@ -19,10 +19,15 @@ string baseUri = "{{ baseUri }}"; var query = new Dictionary>(); {%- for key, values in queryParams %} -query["{{ key }}"] = new List(); -{%- for value in values %} -query["{{ key }}"].Add("{{ value }}"); -{%- endfor %} + {%- if values is string %} + query["{{ key }}"] = new List(); + query["{{ key }}"].Add("{{ values }}"); + {%- else %} + query["{{ key }}"] = new List(); + {%- for value in values %} + query["{{ key }}"].Add("{{ value }}"); + {%- endfor %} + {%- endif %} {%- endfor %} var queryString = string.Join("&", query.SelectMany(kv => kv.Value.Select(v => string.Format("{0}={1}", kv.Key, v)))); @@ -30,6 +35,7 @@ string uri = string.Format("{0}?{1}", baseUri, queryString); '''; + final String kTemplateHttpClientAndRequest = ''' using (var client = new HttpClient()) using (var request = new HttpRequestMessage(HttpMethod.{{ method | capitalize }}, uri)) diff --git a/lib/codegen/java/async_http_client.dart b/lib/codegen/java/async_http_client.dart index 4b1957389..f19282a42 100644 --- a/lib/codegen/java/async_http_client.dart +++ b/lib/codegen/java/async_http_client.dart @@ -36,14 +36,14 @@ public class Main { '''; final String kTemplateRequestCreation = ''' - BoundRequestBuilder requestBuilder = asyncHttpClient.prepare("{{ method|upper }}", url);\n + BoundRequestBuilder requestBuilder = asyncHttpClient.prepare("{{ method|upper }}", url); '''; - final String kTemplateUrlQueryParam = ''' - requestBuilder{% for name, value in queryParams %} - .addQueryParam("{{ name }}", "{{ value }}"){% endfor %};\n + final String kTemplateUrlQueryParam = ''' {% for name, value in queryParams %} +{% if value is not string %} + {% for v in value %} requestBuilder.addQueryParam("{{ name }}", "{{ v }}"); + {% endfor %} {% else %} requestBuilder.addQueryParam("{{ name }}", "{{ value }}");{% endif %}{% endfor %}\n\n '''; - final String kTemplateRequestHeader = ''' requestBuilder{% for name, value in headers %} .addHeader("{{ name }}", "{{ value }}"){% endfor %};\n @@ -158,7 +158,7 @@ public class Main { result += templateRequestCreation.render({"method": method.name}); // setting up query parameters - var params = uri.queryParameters; + var params = requestModel.enabledParamsMap; if (params.isNotEmpty) { var templateUrlQueryParam = jj.Template(kTemplateUrlQueryParam); result += templateUrlQueryParam.render({"queryParams": params}); diff --git a/lib/codegen/java/okhttp.dart b/lib/codegen/java/okhttp.dart index e9b849a72..020d17c72 100644 --- a/lib/codegen/java/okhttp.dart +++ b/lib/codegen/java/okhttp.dart @@ -36,14 +36,18 @@ import okhttp3.MultipartBody;"""; '''; - final String kTemplateUrlQuery = ''' +final String kTemplateUrlQuery = ''' - HttpUrl url = HttpUrl.parse("{{url}}").newBuilder() - {{params}} - .build(); + HttpUrl.Builder urlBuilder = HttpUrl.parse("{{url}}").newBuilder(); + {% for name, value in queryParams %}{% if value is not string %} {% for v in value %} urlBuilder.addQueryParameter("{{ name }}", "{{ v }}"); + {% endfor %} + {% else %} urlBuilder.addQueryParameter("{{ name }}", "{{ value }}"); {% endif %}{% endfor %} + + HttpUrl url = urlBuilder.build(); '''; + String kTemplateRequestBody = ''' MediaType mediaType = MediaType.parse("{{contentType}}"); @@ -107,12 +111,12 @@ import okhttp3.MultipartBody;"""; String url = stripUriParams(uri); if (uri.hasQuery) { - var params = uri.queryParameters; + var params = requestModel.enabledParamsMap; if (params.isNotEmpty) { hasQuery = true; var templateParams = jj.Template(kTemplateUrlQuery); result += templateParams - .render({"url": url, "params": getQueryParams(params)}); + .render({"url": url, "queryParams": params}); } } if (!hasQuery) { @@ -172,12 +176,6 @@ import okhttp3.MultipartBody;"""; } } - String getQueryParams(Map params) { - final paramStrings = params.entries - .map((entry) => '.addQueryParameter("${entry.key}", "${entry.value}")') - .toList(); - return paramStrings.join('\n '); - } String getHeaders(Map headers) { String result = ""; diff --git a/lib/codegen/java/unirest.dart b/lib/codegen/java/unirest.dart index ad3a3e99f..23f9b4537 100644 --- a/lib/codegen/java/unirest.dart +++ b/lib/codegen/java/unirest.dart @@ -3,7 +3,7 @@ import 'package:jinja/jinja.dart' as jj; class JavaUnirestGen { final String kStringUnirestImports = ''' -import kong.unirest.core.*; +import kong.unirest.*; '''; @@ -35,10 +35,16 @@ public class Main { .header("{{name}}", "{{value}}")\n '''; - final String kTemplateUrlQueryParam = ''' - .queryString("{{name}}", "{{value}}")\n + final String kTemplateUrlQueryParam = ''' + {% for name, value in queryParams %} + {% if value is iterable and value is not string %} {% for v in value -%} + .queryString("{{name}}", "{{v}}"){% if not loop.last %} {% endif %} + {% endfor %} {% else %} + .queryString("{{name}}", "{{value}}") {% endif %} {% if not loop.last %}{% endif %} {% endfor %} '''; + + final String kTemplateRequestTextFormData = ''' .field("{{name}}", "{{value}}")\n '''; @@ -125,14 +131,11 @@ public class Main { // ~~~~~~~~~~~~~~~~~~ query parameters start ~~~~~~~~~~~~~~~~~~ - if (uri.hasQuery) { - var params = uri.queryParameters; - var templateUrlQueryParam = jj.Template(kTemplateUrlQueryParam); - params.forEach((name, value) { - result += - templateUrlQueryParam.render({"name": name, "value": value}); - }); - } + + var params = requestModel.enabledParamsMap; + var templateUrlQueryParam = jj.Template(kTemplateUrlQueryParam); + result += templateUrlQueryParam.render({"queryParams": params}); + // ~~~~~~~~~~~~~~~~~~ query parameters end ~~~~~~~~~~~~~~~~~~ From 4687327ff4667d2e24d077455c597e8f38c142ec Mon Sep 17 00:00:00 2001 From: Nikhil Date: Tue, 25 Mar 2025 05:06:06 +0530 Subject: [PATCH 09/42] julia --- lib/codegen/julia/http.dart | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/lib/codegen/julia/http.dart b/lib/codegen/julia/http.dart index 3425dc099..c453346c4 100644 --- a/lib/codegen/julia/http.dart +++ b/lib/codegen/julia/http.dart @@ -13,15 +13,19 @@ url = "{{url}}" \n """; - String kTemplateParams = """ +String kTemplateParams = """ params = Dict( {%- for name, value in params %} - "{{ name }}" => "{{ value }}", + "{{ name }}" => {%- if value is iterable and not value is string -%}[ + {%- for v in value -%}"{{ v }}"{%- if not loop.last -%}, {%- endif -%}{%- endfor -%} + ]{%- else -%}"{{ value }}"{%- endif -%}, {%- endfor %} ) \n """; + + String kTemplateHeaders = """ headers = Dict( {%- for name, value in headers %} @@ -64,7 +68,7 @@ response = HTTP.request("{{ method | upper }}", url final String kStringRequestEnd = r""" , status_exception=false) -println("Status Code: $(response.status) $(HTTP.StatusCodes.statustext(response.status))") +println("Status Code: $(response.status)") println("Response Body: \n$(String(response.body))") """; @@ -91,14 +95,14 @@ println("Response Body: \n$(String(response.body))") final templateUrl = jj.Template(kTemplateUrl); result += templateUrl.render({"url": stripUriParams(uri)}); - if (uri.hasQuery) { - var params = uri.queryParameters; + + var params = requestModel.enabledParamsMap; if (params.isNotEmpty) { hasQuery = true; final templateParams = jj.Template(kTemplateParams); result += templateParams.render({"params": params}); } - } + if (requestModel.hasJsonData || requestModel.hasTextData) { addHeaderForBody = true; From 1639323368e1f7002436c5fec104a1623a41be93 Mon Sep 17 00:00:00 2001 From: Nikhil Date: Tue, 25 Mar 2025 05:28:09 +0530 Subject: [PATCH 10/42] kotlin --- lib/codegen/kotlin/okhttp.dart | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/lib/codegen/kotlin/okhttp.dart b/lib/codegen/kotlin/okhttp.dart index 418c0ba96..610436701 100644 --- a/lib/codegen/kotlin/okhttp.dart +++ b/lib/codegen/kotlin/okhttp.dart @@ -36,12 +36,22 @@ import okhttp3.MediaType.Companion.toMediaType"""; '''; - final String kTemplateUrlQuery = ''' + final String kTemplateUrlQuery = """ val url = "{{url}}".toHttpUrl().newBuilder() -{{params}} .build() +{%- for name, values in params %} + {%- if values is iterable and not values is string %} + {%- for value in values %} + .addQueryParameter("{{ name }}", "{{ value }}") + {%- endfor %} + {%- else %} + .addQueryParameter("{{ name }}", "{{ values }}") + {%- endif %} +{%- endfor %} + .build() + +"""; -'''; String kTemplateRequestBody = ''' @@ -95,15 +105,13 @@ import okhttp3.MediaType.Companion.toMediaType"""; if (uri != null) { String url = stripUriParams(uri); - if (uri.hasQuery) { - var params = uri.queryParameters; + var params = requestModel.enabledParamsMap; if (params.isNotEmpty) { hasQuery = true; var templateParams = jj.Template(kTemplateUrlQuery); result += templateParams - .render({"url": url, "params": getQueryParams(params)}); + .render({"url": url, "params": params}); } - } if (!hasQuery) { var templateUrl = jj.Template(kTemplateUrl); result += templateUrl.render({"url": url}); From 3b00e9910c68e7a41babbaba9a894f859f0f9cae Mon Sep 17 00:00:00 2001 From: Nikhil Date: Thu, 3 Apr 2025 07:17:39 +0530 Subject: [PATCH 11/42] php --- lib/codegen/php/curl.dart | 32 ++++++++++++++++++------------ lib/codegen/php/guzzle.dart | 35 ++++++++++++++++++++------------- lib/codegen/php/http_plug.dart | 36 ++++++++++++++++++++-------------- 3 files changed, 62 insertions(+), 41 deletions(-) diff --git a/lib/codegen/php/curl.dart b/lib/codegen/php/curl.dart index 24ff2579f..3425a66d4 100644 --- a/lib/codegen/php/curl.dart +++ b/lib/codegen/php/curl.dart @@ -35,11 +35,9 @@ $request_body = '{{body}}'; //defining query parameters String kTemplateParams = r''' $queryParams = [ -{%- for name, value in params %} - '{{ name }}' => '{{ value }}', -{%- endfor %} +{{params}} ]; -$uri .= '?' . http_build_query($queryParams); +$uri .= '?' . http_build_query($queryParams, '', '&'); '''; @@ -82,9 +80,9 @@ curl_setopt_array($request, [ $response = curl_exec($request); +$httpCode = curl_getinfo($request, CURLINFO_HTTP_CODE); curl_close($request); -$httpCode = curl_getinfo($request, CURLINFO_HTTP_CODE); echo "Status Code: " . $httpCode . "\n"; echo $response . "\n"; '''; @@ -122,13 +120,23 @@ echo $response . "\n"; } //checking and adding query params - if (uri.hasQuery) { - if (requestModel.enabledParamsMap.isNotEmpty) { - var templateParams = jj.Template(kTemplateParams); - result += templateParams - .render({"params": requestModel.enabledParamsMap}); - } - } + var params = requestModel.enabledParamsMap; +if (params.isNotEmpty) { + var templateParams = jj.Template(kTemplateParams); + List paramList = []; + + params.forEach((key, value) { + if (value is List) { + paramList.add("'$key' => [${value.map((v) => "'$v'").join(", ")}]"); + } else { + paramList.add("'$key' => '$value'"); + } + }); + + result += templateParams.render({ + "params": paramList.join(",\n"), + }); +} var headers = requestModel.enabledHeadersMap; if (requestModel.hasBody && !requestModel.hasContentTypeHeader) { diff --git a/lib/codegen/php/guzzle.dart b/lib/codegen/php/guzzle.dart index d6fe79f64..72aa3a73c 100644 --- a/lib/codegen/php/guzzle.dart +++ b/lib/codegen/php/guzzle.dart @@ -20,14 +20,14 @@ use GuzzleHttp\\Psr7\\Request; """; - String kTemplateParams = """ +String kTemplateParams = """ \$queryParams = [ {{params}} ]; -\$queryParamsStr = '?' . http_build_query(\$queryParams); +\$queryParamsStr = '?' . http_build_query(\$queryParams, '','&'); +"""; -"""; String kTemplateHeader = """ \$headers = [ @@ -80,17 +80,24 @@ echo $res->getBody(); result += renderedMultiPartBody; } - var params = requestModel.enabledParamsMap; - if (params.isNotEmpty) { - var templateParams = jj.Template(kTemplateParams); - List paramList = []; - params.forEach((key, value) { - paramList.add("'$key' => '$value'"); - }); - result += templateParams.render({ - "params": paramList.join(",\n"), - }); - } +var params = requestModel.enabledParamsMap; +if (params.isNotEmpty) { + var templateParams = jj.Template(kTemplateParams); + List paramList = []; + + params.forEach((key, value) { + if (value is List) { + paramList.add("'$key' => [${value.map((v) => "'$v'").join(", ")}]"); + } else { + paramList.add("'$key' => '$value'"); + } + }); + + result += templateParams.render({ + "params": paramList.join(",\n"), + }); +} + var headers = requestModel.enabledHeadersMap; List headerList = []; diff --git a/lib/codegen/php/http_plug.dart b/lib/codegen/php/http_plug.dart index 299c1a93e..98162f472 100644 --- a/lib/codegen/php/http_plug.dart +++ b/lib/codegen/php/http_plug.dart @@ -19,10 +19,12 @@ use Http\\Discovery\\Psr18ClientDiscovery; """; String kTemplateParams = """ -\$queryParams = [{{params}}]; -\$uri .= '?' . http_build_query(\$queryParams); + \$queryParams = [ + {{params}} + ]; + \$uri .= '?' . http_build_query(\$queryParams,'','&'); -"""; + """; String kTemplateRequestInit = """ \$request = Psr17FactoryDiscovery::findRequestFactory()->createRequest('{{method}}', \$uri); @@ -89,19 +91,23 @@ echo \$response->getBody(); var templateUri = jj.Template(kTemplateUri); result += templateUri.render({"uri": stripUriParams(uri)}); - if (uri.hasQuery) { - var params = uri.queryParameters; - if (params.isNotEmpty) { - var templateParams = jj.Template(kTemplateParams); - List queryList = []; - for (MapEntry entry in params.entries) { - String entryStr = "\"${entry.key}\" => \"${entry.value}\""; - queryList.add(entryStr); - } - String paramsString = "\n ${queryList.join(",\n ")}\n"; - result += templateParams.render({"params": paramsString}); + var params = requestModel.enabledParamsMap; + if (params.isNotEmpty) { + var templateParams = jj.Template(kTemplateParams); + List paramList = []; + + params.forEach((key, value) { + if (value is List) { + paramList.add("'$key' => [${value.map((v) => "'$v'").join(", ")}]"); + } else { + paramList.add("'$key' => '$value'"); } - } + }); + + result += templateParams.render({ + "params": paramList.join(",\n"), + }); + } var templateRequestInit = jj.Template(kTemplateRequestInit); result += templateRequestInit From 9f64c70eebb32d09b874742bd690f1c60827ae7b Mon Sep 17 00:00:00 2001 From: Nikhil Date: Thu, 3 Apr 2025 20:39:43 +0530 Subject: [PATCH 12/42] pythom --- lib/codegen/python/requests.dart | 33 +++++++++++++++++++------------- 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/lib/codegen/python/requests.dart b/lib/codegen/python/requests.dart index ef2a19faa..803621677 100644 --- a/lib/codegen/python/requests.dart +++ b/lib/codegen/python/requests.dart @@ -12,11 +12,9 @@ url = '{{url}}' """; - String kTemplateParams = """ - -params = {{params}} - -"""; +String kTemplateParams = """ +params = { {{params}} } +"""; String kTemplateBody = """ @@ -100,15 +98,24 @@ print('Response Body:', response.text) 'hasFormData': requestModel.hasFormData }); - if (uri.hasQuery) { - var params = uri.queryParameters; - if (params.isNotEmpty) { - hasQuery = true; - var templateParams = jj.Template(kTemplateParams); - var paramsString = kJsonEncoder.convert(params); - result += templateParams.render({"params": paramsString}); - } + var params = requestModel.enabledParamsMap; + if (params.isNotEmpty) { + hasQuery=true; + var templateParams = jj.Template(kTemplateParams); + List paramList = []; + + params.forEach((key, value) { + if (value is List) { + paramList.add("'$key': [${value.map((v) => "'$v'").join(", ")}]"); + } else { + paramList.add("'$key': '$value'"); } + }); + + result += templateParams.render({ + "params": paramList.join(",\n"), + }); + } if (requestModel.hasFormData) { hasBody = true; From f8613a0b1589583d409d0de53fa4e1db354e459a Mon Sep 17 00:00:00 2001 From: Nikhil Date: Thu, 3 Apr 2025 21:50:47 +0530 Subject: [PATCH 13/42] python - httpclient --- lib/codegen/python/http_client.dart | 33 ++++++++++++++++++----------- 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/lib/codegen/python/http_client.dart b/lib/codegen/python/http_client.dart index a2c018082..58867a2c6 100644 --- a/lib/codegen/python/http_client.dart +++ b/lib/codegen/python/http_client.dart @@ -12,9 +12,8 @@ from codecs import encode String kTemplateParams = """ from urllib.parse import urlencode - -queryParams = {{params}} -queryParamsStr = '?' + urlencode(queryParams) +params = { {{params}} } +queryParamsStr = '?' + urlencode(params,doseq=True) """; @@ -102,17 +101,27 @@ body = b'\r\n'.join(dataList) ); Uri? uri = rec.$1; + var params = requestModel.enabledParamsMap; + if (params.isNotEmpty) { + hasQuery=true; + var templateParams = jj.Template(kTemplateParams); + List paramList = []; + + params.forEach((key, value) { + if (value is List) { + paramList.add("'$key': [${value.map((v) => "'$v'").join(", ")}]"); + } else { + paramList.add("'$key': '$value'"); + } + }); + + result += templateParams.render({ + "params": paramList.join(",\n"), + }); + } if (uri != null) { - if (uri.hasQuery) { - var params = uri.queryParameters; - if (params.isNotEmpty) { - hasQuery = true; - var templateParams = jj.Template(kTemplateParams); - var paramsString = kJsonEncoder.convert(params); - result += templateParams.render({"params": paramsString}); - } - } + if (requestModel.hasBody) { hasBody = true; From 5a75442769503bff602288afeada67fa2580338d Mon Sep 17 00:00:00 2001 From: Nikhil Date: Fri, 4 Apr 2025 02:31:09 +0530 Subject: [PATCH 14/42] rust-actix-hyper --- lib/codegen/rust/actix.dart | 61 ++++++++++++------------ lib/codegen/rust/hyper.dart | 92 +++++++++++++++++++++++-------------- 2 files changed, 89 insertions(+), 64 deletions(-) diff --git a/lib/codegen/rust/actix.dart b/lib/codegen/rust/actix.dart index acc752ead..f346cbaae 100644 --- a/lib/codegen/rust/actix.dart +++ b/lib/codegen/rust/actix.dart @@ -13,11 +13,24 @@ use std::io::Read; async fn main() -> Result<(), Box> { let url = "{{url}}"; let client = awc::Client::default(); - + let mut request = client.{{method}}(url); """; - String kTemplateParams = - """\n .query(&{{ params }})\n .unwrap()"""; +String kTemplateParams = """ + + let query_params = [ + {%- for key, values in params %} + {%- if values is iterable and values is not string %} + {%- for val in values %} + ("{{key}}", "{{val}}"), + {%- endfor %} + {%- else %} + ("{{key}}", "{{values}}"), + {%- endif %} + {%- endfor %} + ]; + request = request.query(&query_params).unwrap(); +"""; String kTemplateBody = """ @@ -37,11 +50,6 @@ async fn main() -> Result<(), Box> { String kTemplateFormHeaderContentType = ''' multipart/form-data; boundary={{boundary}}'''; - String kTemplateRequest = """ - - let mut response = client\n .{{method}}(url) -"""; - final String kStringFormDataBody = r""" struct FormDataItem { @@ -92,11 +100,11 @@ multipart/form-data; boundary={{boundary}}'''; let payload = build_data_list(form_data_items); """; - String kStringRequestBody = """\n .send_body(payload)"""; + String kStringRequestBody = """\n let mut response = request.send_body(payload)"""; - String kStringRequestJson = """\n .send_json(&payload)"""; + String kStringRequestJson = """\n let mut response = request.send_json(&payload)"""; - String kStringRequestNormal = """\n .send()"""; + String kStringRequestNormal = """\n let mut response = request.send()"""; final String kStringRequestEnd = """\n .await\n .unwrap(); @@ -127,9 +135,10 @@ multipart/form-data; boundary={{boundary}}'''; ); Uri? uri = rec.$1; if (uri != null) { + var baseUrl = stripUriParams(uri); var templateStartUrl = jj.Template(kTemplateStart); result += templateStartUrl.render({ - "url": stripUriParams(uri), + "url": baseUrl, 'isFormDataRequest': requestModel.hasFormData, "method": requestModel.method.name.toLowerCase() }); @@ -160,23 +169,17 @@ multipart/form-data; boundary={{boundary}}'''; }, ); } - var templateRequest = jj.Template(kTemplateRequest); - result += templateRequest.render({ - "method": method.name.toLowerCase(), - }); - - if (uri.hasQuery) { - var params = uri.queryParameters; - if (params.isNotEmpty) { - var tupleStrings = params.entries - .map((entry) => '("${entry.key}", "${entry.value}")') - .toList(); - var paramsString = "[${tupleStrings.join(', ')}]"; - var templateParms = jj.Template(kTemplateParams); - result += templateParms.render({"params": paramsString}); - } - } - + + var params = requestModel.enabledParamsMap; + + if (params.isNotEmpty) { + var templateParams = jj.Template(kTemplateParams); + result += templateParams.render({ + "method": method.name.toLowerCase(), + "params": params, + }); + } + var headersList = requestModel.enabledHeaders; if (headersList != null || hasBody || requestModel.hasFormData) { var headers = requestModel.enabledHeadersMap; diff --git a/lib/codegen/rust/hyper.dart b/lib/codegen/rust/hyper.dart index 1acaab55c..23b918d0c 100644 --- a/lib/codegen/rust/hyper.dart +++ b/lib/codegen/rust/hyper.dart @@ -5,82 +5,90 @@ import 'package:jinja/jinja.dart' as jj; class RustHyperCodeGen { final String kTemplateStart = """ {% if hasForm %}extern crate hyper_multipart_rfc7578 as hyper_multipart; -{% endif %}use hyper::{Body, Client, Request, Uri}; +{% endif %}use hyper::{Body, Client, Request}; {% if isHttps %}use hyper_tls::HttpsConnector; {% else %}use hyper::client::HttpConnector; {% endif %}{% if hasForm %}use hyper_multipart::client::multipart; {% endif %}{% if hasJsonBody %}use serde_json::json; {% endif %}use tokio; +use url::Url; #[tokio::main] async fn main() -> Result<(), Box> { let http{% if isHttps %}s{% endif %} = Http{% if isHttps %}s{% endif %}Connector::new(); let client = Client::builder().build::<_, hyper::Body>(http{% if isHttps %}s{% endif %}); - let url = "{{ url }}".parse::().unwrap(); - + let mut url = Url::parse("{{ baseUrl }}")?;\n + """; + + final String kTemplateParams = """ + {% for key, values in params %}{% if values is iterable and values is not string %}{% for val in values %}\n url.query_pairs_mut().append_pair("{{ key }}", "{{ val }}");{% endfor %} + {% else %} + url.query_pairs_mut().append_pair("{{ key }}", "{{ values }}"); + {% endif %} + {% endfor %} """; final String kTemplateMethod = """ let req_builder = Request::builder() - .method("{{ method }}") - .uri(url) + .method("{{ method }}").uri(url.as_str()) """; + final String kTemplateMethodNoHeadersButForm = """ let req_builder = Request::builder() - .method("{{ method }}") - .uri(url); + .method("{{ method }}") + .uri(url.as_str()); """; final String kTemplateHeaders = """ - {% for key, val in headers %} - .header("{{ key }}", "{{ val }}") - {% endfor %}"""; + {% for key, val in headers %} + .header("{{ key }}", "{{ val }}") + {% endfor %}"""; final String kTemplateHeadersFormData = """ - {% for key, val in headers %} - .header("{{ key }}", "{{ val }}"){% if loop.last %};{% endif %} - {% endfor %} + {% for key, val in headers %} + .header("{{ key }}", "{{ val }}"){% if loop.last %};{% endif %} + {% endfor %} """; final String kTemplateBody = """ - - .body(Body::from(r#"{{ body }}"#))?;\n + + .body(Body::from(r#"{{ body }}"#))?;\n """; final String kTemplateJsonBody = """ - - .body(Body::from(json!({{ body }}).to_string()))?;\n + + .body(Body::from(json!({{ body }}).to_string()))?;\n """; final String kTemplateEmptyBody = """ - .body(Body::empty())?;\n + .body(Body::empty())?;\n """; final String kTemplateFormData = """ - + let mut form = multipart::Form::default(); {%- for field in fields_list %} - {%- if field.type == "file" %} + {%- if field.type == "file" %} form.add_file("{{ field.name }}", r"{{ field.value }}").unwrap(); - {%- else %} + {%- else %} form.add_text("{{ field.name }}", "{{ field.value }}"); - {%- endif %} + {%- endif %} {%- endfor %} let req = form.set_body_convert::(req_builder).unwrap(); - - """; + +"""; final String kTemplateEndForm = """ - let res = client.request(req).await?; + let res = client.request(req).await?; let status = res.status(); let body_bytes = hyper::body::to_bytes(res).await?; let body = String::from_utf8(body_bytes.to_vec())?; println!("Response Status: {}", status); println!("Response: {:?}", body); - + """; @@ -108,16 +116,30 @@ async fn main() -> Result<(), Box> { String url = requestModel.url; var rec = getValidRequestUri(url, requestModel.enabledParams); Uri? uri = rec.$1; - + if (uri != null) { + var baseUrl = url.split('?').first; + + // Get query parameters + var params = requestModel.enabledParamsMap; + var headers = requestModel.enabledHeadersMap; + + // Generate template start with base URL result += jj.Template(kTemplateStart).render({ - "url": uri, + "baseUrl": baseUrl, "isHttps": uri.scheme == "https" ? true : false, 'hasJsonBody': requestModel.hasJsonData, 'hasForm': requestModel.hasFormData, }); - + + // Add query parameters if available + if (params.isNotEmpty) { + result += jj.Template(kTemplateParams).render({ + "params": params, + }); + } + if (requestModel.hasFormData && headers.isEmpty) { result += jj.Template(kTemplateMethodNoHeadersButForm).render({ "method": requestModel.method.name.toUpperCase(), @@ -127,9 +149,8 @@ async fn main() -> Result<(), Box> { "method": requestModel.method.name.toUpperCase(), }); } - + // Add headers if available - if (headers.isNotEmpty) { if (requestModel.hasFormData) { result += jj.Template(kTemplateHeadersFormData) @@ -139,7 +160,7 @@ async fn main() -> Result<(), Box> { jj.Template(kTemplateHeaders).render({"headers": headers}); } } - + // Handle body (JSON or raw) var requestBody = requestModel.body; if (requestModel.hasFormData) { @@ -157,19 +178,20 @@ async fn main() -> Result<(), Box> { } else if (requestModel.hasTextData) { result += jj.Template(kTemplateBody).render({"body": requestBody}); } + // End request - if (requestModel.hasFormData && requestModel.method != HTTPVerb.get) { result += kTemplateEndForm; } else { result += kTemplateRequestEnd; } + result += kTemplateEnd; } - + return result; } catch (e) { return null; } } -} +} \ No newline at end of file From d0ce42ae35ed6cabf87a00c8f8ff3d176041e200 Mon Sep 17 00:00:00 2001 From: Nikhil Date: Fri, 4 Apr 2025 04:12:52 +0530 Subject: [PATCH 15/42] rust all --- lib/codegen/rust/curl_rust.dart | 56 +++++++++++++++++++++++---------- lib/codegen/rust/reqwest.dart | 53 +++++++++++++++++-------------- lib/codegen/rust/ureq.dart | 26 ++++++++------- 3 files changed, 84 insertions(+), 51 deletions(-) diff --git a/lib/codegen/rust/curl_rust.dart b/lib/codegen/rust/curl_rust.dart index 727f0b2cd..9284cdf2e 100644 --- a/lib/codegen/rust/curl_rust.dart +++ b/lib/codegen/rust/curl_rust.dart @@ -1,6 +1,6 @@ + import 'package:apidash_core/apidash_core.dart'; import 'package:jinja/jinja.dart' as jj; -import '../../utils/utils.dart'; class RustCurlCodeGen { final String kTemplateStart = """use curl::easy::Easy; @@ -10,11 +10,27 @@ class RustCurlCodeGen { fn main() { let mut easy = Easy::new(); let mut data = Vec::new(); - + let base_url = "{{baseUrl}}"; """; - String kTemplateUrl = """ - easy.url("{{url}}").unwrap(); + String kTemplateUrlParams = """ + + {% if params %} + let params: Vec<(&str, Vec<&str>)> = vec![ + {%- for key, values in params %} + ("{{key}}", vec![{% if values is iterable and values is not string %}{% for val in values %}"{{val}}", {% endfor %}{% else %}"{{values}}"{% endif %}]), + {%- endfor %} + ]; + let query_string: String = params + .iter() + .flat_map(|(key, values)| values.iter().map(move |val| format!("{}={}", key, val))) + .collect::>() + .join("&"); + let url = format!("{}?{}", base_url, query_string); + {% else %} + let url = base_url.to_string(); + {% endif %} + """; String kTemplateMethod = """ @@ -50,7 +66,7 @@ fn main() { .add().unwrap(); {% endfor %} easy.httppost(form).unwrap(); - """; +"""; String kTemplateHeader = """ {% if headers %}let mut list = List::new();{% for header, value in headers %} @@ -62,6 +78,7 @@ fn main() { final String kTemplateEnd = """ { + easy.url(&url).unwrap(); let mut transfer = easy.transfer(); transfer.write_function(|new_data| { data.extend_from_slice(new_data); @@ -71,7 +88,6 @@ fn main() { } let response_body = String::from_utf8_lossy(&data); - println!("Response body: {}", response_body); println!("Response code: {}", easy.response_code().unwrap()); }"""; @@ -86,7 +102,8 @@ fn main() { "hasJsonBody": requestModel.hasJsonData, "hasHeaders": (requestModel.enabledHeaders != null && requestModel.enabledHeaders!.isNotEmpty) || - (requestModel.hasJsonData || requestModel.hasTextData) + (requestModel.hasJsonData || requestModel.hasTextData), + "baseUrl": url.split('?').first, }); var rec = getValidRequestUri( @@ -95,16 +112,21 @@ fn main() { ); Uri? uri = rec.$1; - var harJson = - requestModelToHARJsonRequest(requestModel, useEnabled: true); + + if (uri != null) { - var templateUrl = jj.Template(kTemplateUrl); - result += templateUrl.render({"url": harJson["url"]}); + var params = requestModel.enabledParamsMap; - var methodTemplate = jj.Template(kTemplateMethod); - result += methodTemplate.render({"method": requestModel.method.name}); + var templateUrlParams = jj.Template(kTemplateUrlParams); + result += templateUrlParams.render({ + "params": params.isNotEmpty ? params : null, + }); - if (uri != null) { + // Method + var methodTemplate = jj.Template(kTemplateMethod); + result += methodTemplate.render({"method": requestModel.method.name.toLowerCase()}); + + // Request body if (requestModel.hasTextData) { var templateBody = jj.Template(kTemplateRawBody); result += templateBody.render({"body": requestModel.body}); @@ -117,7 +139,7 @@ fn main() { "fields": requestModel.formDataMapList, }); } - + var headersList = requestModel.enabledHeaders; if (headersList != null || requestModel.hasBody) { var headers = requestModel.enabledHeadersMap; @@ -129,10 +151,10 @@ fn main() { var templateHeader = jj.Template(kTemplateHeader); result += templateHeader.render({ "headers": headers, - }); + }); } } - + result += kTemplateEnd; } diff --git a/lib/codegen/rust/reqwest.dart b/lib/codegen/rust/reqwest.dart index 1e72807b0..c51b0fe90 100644 --- a/lib/codegen/rust/reqwest.dart +++ b/lib/codegen/rust/reqwest.dart @@ -7,26 +7,37 @@ class RustReqwestCodeGen { final String kTemplateStart = """fn main() -> Result<(), Box> { let client = reqwest::blocking::Client::new(); - let url = "{{url}}"; + let url = "{{url}}";\n +"""; + String kTemplateParamsDef = """ + let query_params = [ + {%- for key, values in params %} + {%- if values is iterable and values is not string %} + {%- for val in values %} + ("{{key}}", "{{val}}"), + {%- endfor %} + {%- else %} + ("{{key}}", "{{values}}"), + {%- endif %} + {%- endfor %} + ]; """; - String kTemplateParams = """\n .query(&{{params}})"""; + String kTemplateParamsChain = """\n .query(&query_params)"""; String kTemplateBody = """ let payload = r#"{{body}}"#; - """; String kTemplateJson = """ let payload = serde_json::json!({{body}}); - """; String kTemplateHeaders = - """\n {% for key, val in headers -%}.header("{{key}}", "{{val}}"){% if not loop.last %}{{ '\n ' }}{% endif %}{%- endfor -%}"""; + """\n {% for key, val in headers -%}.header("{{key}}", "{{val}}"){% if not loop.last %}{{ '\n ' }}{% endif %}{%- endfor -%}"""; String kTemplateRequest = """ @@ -79,7 +90,7 @@ class RustReqwestCodeGen { String? getCode( HttpRequestModel requestModel, - ) { + ) { try { String result = ""; bool hasBody = false; @@ -90,14 +101,12 @@ class RustReqwestCodeGen { var rec = getValidRequestUri( url, requestModel.enabledParams, - ); + ); Uri? uri = rec.$1; if (uri != null) { var templateStartUrl = jj.Template(kTemplateStart); result += templateStartUrl.render({ - "url": stripUriParams(uri), - 'isFormDataRequest': requestModel.hasFormData, - 'isJson': requestModel.bodyContentType == ContentType.json + "url": url.split('?').first }); var method = requestModel.method; @@ -121,28 +130,26 @@ class RustReqwestCodeGen { var formDataBodyData = jj.Template(kStringFormDataBody); result += formDataBodyData.render( { - "fields_list": requestModel.formDataMapList, - }, + "fields_list": requestModel.formDataMapList, + }, ); } + var params = requestModel.enabledParamsMap; + if (params.isNotEmpty) { + var templateParamsDef = jj.Template(kTemplateParamsDef); + result += templateParamsDef.render({"params": params}); + } + var templateRequest = jj.Template(kTemplateRequest); result += templateRequest.render({ "method": method.name.toLowerCase(), }); - if (uri.hasQuery) { - var params = uri.queryParameters; - if (params.isNotEmpty) { - var tupleStrings = params.entries - .map((entry) => '("${entry.key}", "${entry.value}")') - .toList(); - var paramsString = "[${tupleStrings.join(', ')}]"; - var templateParams = jj.Template(kTemplateParams); - result += templateParams.render({"params": paramsString}); - } + if (params.isNotEmpty) { + result += kTemplateParamsChain; } - var headersList = requestModel.enabledHeaders; + var headersList = requestModel.enabledHeaders; if (headersList != null || hasBody) { var headers = requestModel.enabledHeadersMap; if (hasBody) { diff --git a/lib/codegen/rust/ureq.dart b/lib/codegen/rust/ureq.dart index 6137f4fc3..2ac9d038d 100644 --- a/lib/codegen/rust/ureq.dart +++ b/lib/codegen/rust/ureq.dart @@ -16,14 +16,21 @@ fn main() -> Result<(), ureq::Error> { let url = "{{url}}"; """; - // String kTemplateParams = """\n .query_pairs({{ params }})"""; - String kTemplateParams = - """\n {% for key, val in params -%}.query("{{key}}", "{{val}}"){% if not loop.last %}{{ '\n ' }}{% endif %}{%- endfor -%}"""; + String kTemplateParams = """ + {%- for key, values in params %} + {%- if values is iterable and values is not string %} + {%- for val in values %} + .query("{{key}}", "{{val}}") + {%- endfor %} + {%- else %} + .query("{{key}}", "{{values}}") + {%- endif %} + {%- endfor %} +"""; String kTemplateBody = """ let payload = r#"{{body}}"#; - """; String kTemplateJson = """\n @@ -134,7 +141,6 @@ multipart/form-data; boundary={{boundary}}'''; result += templateStartUrl.render({ "url": stripUriParams(uri), 'isFormDataRequest': requestModel.hasFormData, - "method": requestModel.method.name.toLowerCase() }); @@ -167,12 +173,10 @@ multipart/form-data; boundary={{boundary}}'''; "method": method.name.toLowerCase(), }); - if (uri.hasQuery) { - var params = uri.queryParameters; - if (params.isNotEmpty) { - var templateParms = jj.Template(kTemplateParams); - result += templateParms.render({"params": params}); - } + var params = requestModel.enabledParamsMap; + if (params.isNotEmpty) { + var templateParams = jj.Template(kTemplateParams); + result += templateParams.render({"params": params}); } var headersList = requestModel.enabledHeaders; From 5f58d33580160bbd080fb9e95c8608b63a2d5724 Mon Sep 17 00:00:00 2001 From: Nikhil Date: Sat, 5 Apr 2025 04:31:30 +0530 Subject: [PATCH 16/42] ruby --- lib/codegen/ruby/faraday.dart | 12 ++++----- lib/codegen/ruby/net_http.dart | 44 ++++++++++++++++++++++++--------- lib/codegen/rust/curl_rust.dart | 6 +---- 3 files changed, 38 insertions(+), 24 deletions(-) diff --git a/lib/codegen/ruby/faraday.dart b/lib/codegen/ruby/faraday.dart index 11d73946d..1a903c34c 100644 --- a/lib/codegen/ruby/faraday.dart +++ b/lib/codegen/ruby/faraday.dart @@ -59,7 +59,8 @@ response = conn.{{ method|lower }}(REQUEST_URL{% if doesMethodAcceptBody and con final String kTemplateRequestParams = """ req.params = { -{% for key, val in params %} "{{ key }}" => "{{ val }}",\n{% endfor %} } + {% for key, val in params %}"{{ key }}" => {% if val is list %}[{% for v in val %}"{{ v|string }}"{% if not loop.last %}, {% endif %}{% endfor %}]{% else %}"{{ val|string }}"{% endif %}, + {% endfor %}} """; @@ -155,12 +156,9 @@ puts "Response Body: #{response.body}" result += templateRequestHeaders.render({"headers": headers}); } - if (uri.hasQuery) { - var params = uri.queryParameters; - if (params.isNotEmpty) { - var templateRequestParams = jj.Template(kTemplateRequestParams); - result += templateRequestParams.render({"params": params}); - } + if (requestModel.enabledParamsMap.isNotEmpty) { + var templateRequestParams = jj.Template(kTemplateRequestParams); + result += templateRequestParams.render({"params": requestModel.enabledParamsMap}); } if (requestModel.hasBody && requestModel.method == HTTPVerb.delete) { diff --git a/lib/codegen/ruby/net_http.dart b/lib/codegen/ruby/net_http.dart index 519c5cfa7..93a5f9c76 100644 --- a/lib/codegen/ruby/net_http.dart +++ b/lib/codegen/ruby/net_http.dart @@ -6,6 +6,16 @@ class RubyNetHttpCodeGen { require "net/http" url = URI("{{url}}") +"""; + + String kTemplateRequestParams = """ +\nparams = { +{% for key, val in params %} "{{ key }}" => {% if val is list %}[{% for v in val %}"{{ v|string }}"{% if not loop.last %}, {% endif %}{% endfor %}]{% else %}"{{ val|string }}"{% endif %}, +{% endfor %}} +url.query = URI.encode_www_form(params)\n +"""; + + String kTemplateConnectionAndRequest = """ https = Net::HTTP.new(url.host, url.port) {% if check == "https" %}https.use_ssl = true{% endif %} request = Net::HTTP::{{method}}.new(url) @@ -13,7 +23,8 @@ request = Net::HTTP::{{method}}.new(url) String kTemplateHeader = """ {% for key, value in headers %} -request["{{key}}"] = "{{value}}"{% endfor %} +request["{{key}}"] = "{{value}}" +{% endfor %} """; String kTemplateBody = """ @@ -31,7 +42,11 @@ HEREDOC response = https.request(request) puts "Response Code: #{response.code}" -{% if method != "head" %}puts "Response Body: #{response.body}"{% else %}puts "Response Body: #{response.to_hash}"{% endif %} +{% if method != "head" %} +puts "Response Body: #{response.body}" +{% else %} +puts "Response Headers: #{response.to_hash}" +{% endif %} """; @@ -52,7 +67,17 @@ puts "Response Code: #{response.code}" var templateStart = jj.Template(kTemplateStart); result += templateStart.render({ - "url": uri.query.isEmpty ? stripUriParams(uri) : uri, + "url": uri.toString().split('?').first, + }); + if (requestModel.enabledParamsMap.isNotEmpty) { + var templateRequestParams = jj.Template(kTemplateRequestParams); + result += templateRequestParams.render({ + "params": requestModel.enabledParamsMap, + }); + } + + var connectionTemplate = jj.Template(kTemplateConnectionAndRequest); + result += connectionTemplate.render({ "method": requestModel.method.name.capitalize(), "check": uri.scheme, }); @@ -78,8 +103,7 @@ puts "Response Code: #{response.code}" } if (requestModel.hasFormData) { - result += "\n"; - result += "form_data = ["; + result += "\nform_data = ["; var templateMultiPartBody = jj.Template(kMultiPartBodyTemplate); int length = requestModel.formDataMapList.length; @@ -90,16 +114,12 @@ puts "Response Code: #{response.code}" "value": element["value"], "type": element["type"] }); - length -= 1; - if (length == 0) { - result += "]"; - } else { - result += "],"; - } + result += "]"; + if (--length > 0) result += ", "; } result += "]\n"; result += - "request.set_form form_data, '${ContentType.formdata.header}'"; + "request.set_form form_data, '${ContentType.formdata.header}'\n"; } result += jj.Template(kStringRequest) diff --git a/lib/codegen/rust/curl_rust.dart b/lib/codegen/rust/curl_rust.dart index 9284cdf2e..64dba161b 100644 --- a/lib/codegen/rust/curl_rust.dart +++ b/lib/codegen/rust/curl_rust.dart @@ -21,11 +21,7 @@ fn main() { ("{{key}}", vec![{% if values is iterable and values is not string %}{% for val in values %}"{{val}}", {% endfor %}{% else %}"{{values}}"{% endif %}]), {%- endfor %} ]; - let query_string: String = params - .iter() - .flat_map(|(key, values)| values.iter().map(move |val| format!("{}={}", key, val))) - .collect::>() - .join("&"); + let query_string: String = params.iter().flat_map(|(key, values)| values.iter().map(move |val| format!("{}={}", key, val))) .collect::>().join("&"); let url = format!("{}?{}", base_url, query_string); {% else %} let url = base_url.to_string(); From c05e61b519a57ebcd3d83632967bad2786fba198 Mon Sep 17 00:00:00 2001 From: Nikhil Date: Mon, 7 Apr 2025 00:50:03 +0530 Subject: [PATCH 17/42] datatype changes --- .../lib/models/http_request_model.dart | 20 +++++------ .../lib/utils/http_request_utils.dart | 34 +++++-------------- .../lib/utils/uri_utils.dart | 12 +++---- 3 files changed, 23 insertions(+), 43 deletions(-) diff --git a/packages/better_networking/lib/models/http_request_model.dart b/packages/better_networking/lib/models/http_request_model.dart index 04e3c2329..c06aba586 100644 --- a/packages/better_networking/lib/models/http_request_model.dart +++ b/packages/better_networking/lib/models/http_request_model.dart @@ -31,25 +31,25 @@ class HttpRequestModel with _$HttpRequestModel { _$HttpRequestModelFromJson(json); Map get headersMap => rowsToMap(headers) ?? {}; - Map get paramsMap => rowsToRequestMap(params) ?? {}; + Map> get paramsMap => rowsToRequestMap(params) ?? {}; List? get enabledHeaders => getEnabledRows(headers, isHeaderEnabledList); List? get enabledParams => getEnabledRows(params, isParamEnabledList); Map get enabledHeadersMap => rowsToMap(enabledHeaders) ?? {}; -Map get enabledParamsMap { +Map> get enabledParamsMap { var extractedParams = Uri.parse(url).queryParametersAll; var userParams = rowsToRequestMap(enabledParams) ?? {}; - - extractedParams.forEach((key, value) { - userParams[key] = [ - ...value, - if (userParams.containsKey(key)) - ...(userParams[key] is List ? List.from(userParams[key]) : [userParams[key]]) - ]; + + extractedParams.forEach((key, values) { + if (userParams.containsKey(key)) { + userParams[key]!.addAll(values); + } else { + userParams[key] = List.from(values); + } }); - + return userParams; } diff --git a/packages/better_networking/lib/utils/http_request_utils.dart b/packages/better_networking/lib/utils/http_request_utils.dart index 6917ace24..96c6ea823 100644 --- a/packages/better_networking/lib/utils/http_request_utils.dart +++ b/packages/better_networking/lib/utils/http_request_utils.dart @@ -97,52 +97,34 @@ String? getRequestBody(APIType type, HttpRequestModel httpRequestModel) { APIType.graphql => getGraphQLBody(httpRequestModel), }; } -Map? rowsToRequestMap(List? rows) { +Map>? rowsToRequestMap(List? rows) { if (rows == null) { return null; } - - final Map finalMap = {}; - + final Map> finalMap = {}; for (var row in rows) { final key = row.name.trim(); if (key.isEmpty) continue; - final value = row.value.toString(); - if (finalMap.containsKey(key)) { - - if (finalMap[key] is List) { - (finalMap[key] as List).add(value); - } else { - finalMap[key] = [finalMap[key], value]; - } + finalMap[key]!.add(value); } else { - - finalMap[key] = value; + finalMap[key] = [value]; } } - return finalMap; } -List? requestMapToRows(Map? requestMap) { +List? requestMapToRows(Map>? requestMap) { if (requestMap == null) { return null; } - final List finalRows = []; - - requestMap.forEach((key, value) { - if (value is List) { - for (var item in value) { - finalRows.add(NameValueModel(name: key, value: item.toString())); - } - } else { - finalRows.add(NameValueModel(name: key, value: value.toString())); + requestMap.forEach((key, values) { + for (var value in values) { + finalRows.add(NameValueModel(name: key, value: value)); } }); - return finalRows; } // TODO: Expose this function to remove JSON comments diff --git a/packages/better_networking/lib/utils/uri_utils.dart b/packages/better_networking/lib/utils/uri_utils.dart index db2cb6336..e8f8d863e 100644 --- a/packages/better_networking/lib/utils/uri_utils.dart +++ b/packages/better_networking/lib/utils/uri_utils.dart @@ -57,13 +57,11 @@ String stripUrlParams(String url) { Map> queryParams = uri.queryParametersAll; - Map? requestQueryParams = rowsToRequestMap(requestParams); - if (requestQueryParams != null) { - Map> queryParamsList = requestQueryParams.map((key, value) { - return MapEntry(key, List.from(value is String ? [value] : value)); - }); - queryParams = mergeMaps(queryParams, queryParamsList, value: (v1, v2) => v1 + v2); - } + Map>? requestQueryParams = rowsToRequestMap(requestParams); + if (requestQueryParams != null) { + queryParams = mergeMaps(queryParams, requestQueryParams, value: (v1, v2) => v1 + v2); +} + if (queryParams.isNotEmpty) { uri = uri.replace(queryParameters: queryParams); } From 70d9215606ffc981fa09cd6d09ed942cd1632fef Mon Sep 17 00:00:00 2001 From: Nikhil Date: Fri, 11 Apr 2025 04:08:23 +0530 Subject: [PATCH 18/42] updated datatypes --- .../history_widgets/his_request_pane.dart | 25 +++++---- lib/widgets/table_request.dart | 51 +++++++++---------- test/widgets/table_request_test.dart | 20 ++++---- 3 files changed, 48 insertions(+), 48 deletions(-) diff --git a/lib/screens/history/history_widgets/his_request_pane.dart b/lib/screens/history/history_widgets/his_request_pane.dart index c1e8995d5..5731c6565 100644 --- a/lib/screens/history/history_widgets/his_request_pane.dart +++ b/lib/screens/history/history_widgets/his_request_pane.dart @@ -21,15 +21,15 @@ class HistoryRequestPane extends ConsumerWidget { final codePaneVisible = ref.watch(historyCodePaneVisibleStateProvider); final apiType = ref.watch(selectedHistoryRequestModelProvider .select((value) => value?.metaData.apiType)); - final headersMap = ref.watch(selectedHistoryRequestModelProvider - .select((value) => value?.httpRequestModel.headersMap)) ?? - {}; - final headerLength = headersMap.length; + final headers = ref.watch(selectedHistoryRequestModelProvider + .select((value) => value?.httpRequestModel.headers)) ?? + []; + final headerLength = headers.length; - final paramsMap = ref.watch(selectedHistoryRequestModelProvider - .select((value) => value?.httpRequestModel.paramsMap)) ?? - {}; - final paramLength = paramsMap.length; + final params = ref.watch(selectedHistoryRequestModelProvider + .select((value) => value?.httpRequestModel.params)) ?? + []; + final paramLength = params.length; final hasBody = ref.watch(selectedHistoryRequestModelProvider .select((value) => value?.httpRequestModel.hasBody)) ?? @@ -69,11 +69,11 @@ class HistoryRequestPane extends ConsumerWidget { ], children: [ RequestDataTable( - rows: paramsMap, + rows: params, keyName: kNameURLParam, ), RequestDataTable( - rows: headersMap, + rows: headers, keyName: kNameHeader, ), const HisRequestBody(), @@ -97,7 +97,7 @@ class HistoryRequestPane extends ConsumerWidget { ], children: [ RequestDataTable( - rows: headersMap, + rows: headers, keyName: kNameHeader, ), const HisRequestBody(), @@ -145,8 +145,7 @@ class HisRequestBody extends ConsumerWidget { ContentType.formdata => Padding( padding: kPh4, child: RequestFormDataTable( - rows: requestModel?.formData ?? []), - ), + rows: requestModel?.formData ?? [])), ContentType.json => Padding( padding: kPt5o10, child: JsonTextFieldEditor( diff --git a/lib/widgets/table_request.dart b/lib/widgets/table_request.dart index fe3e19e2b..d3c6a57c9 100644 --- a/lib/widgets/table_request.dart +++ b/lib/widgets/table_request.dart @@ -2,6 +2,7 @@ import 'package:apidash_design_system/apidash_design_system.dart'; import 'package:flutter/material.dart'; import 'package:data_table_2/data_table_2.dart'; import 'package:apidash/consts.dart'; +import 'package:apidash_core/apidash_core.dart'; import 'field_read_only.dart'; class RequestDataTable extends StatelessWidget { @@ -12,7 +13,7 @@ class RequestDataTable extends StatelessWidget { this.valueName, }); - final Map rows; + final List rows; final String? keyName; final String? valueName; @@ -55,31 +56,29 @@ class RequestDataTable extends StatelessWidget { ), ); - final List dataRows = rows.entries - .map( - (MapEntry entry) => DataRow( - cells: [ - const DataCell(kHSpacer5), - DataCell( - ReadOnlyTextField( - initialValue: entry.key, - decoration: fieldDecoration, - ), - ), - const DataCell( - Text('='), - ), - DataCell( - ReadOnlyTextField( - initialValue: entry.value is String ? entry.value : entry.value.toString(), - decoration: fieldDecoration, - ), - ), - const DataCell(kHSpacer5), - ], + final List dataRows = rows.map((NameValueModel row) { + return DataRow( + cells: [ + const DataCell(kHSpacer5), + DataCell( + ReadOnlyTextField( + initialValue: row.name, + decoration: fieldDecoration, + ), ), - ) - .toList(); + const DataCell( + Text('='), + ), + DataCell( + ReadOnlyTextField( + initialValue: row.value, + decoration: fieldDecoration, + ), + ), + const DataCell(kHSpacer5), + ], + ); + }).toList(); return Container( margin: kP10, @@ -106,4 +105,4 @@ class RequestDataTable extends StatelessWidget { ), ); } -} +} \ No newline at end of file diff --git a/test/widgets/table_request_test.dart b/test/widgets/table_request_test.dart index cc0e33242..0c94e03ee 100644 --- a/test/widgets/table_request_test.dart +++ b/test/widgets/table_request_test.dart @@ -1,4 +1,5 @@ import 'package:apidash/widgets/widgets.dart'; +import 'package:apidash_core/apidash_core.dart'; import 'package:data_table_2/data_table_2.dart'; import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; @@ -6,10 +7,10 @@ import 'package:flutter_test/flutter_test.dart'; void main() { dataTableShowLogs = false; testWidgets('Testing RequestDataTable', (WidgetTester tester) async { - final Map sampleData = { - 'Key1': 'Value1', - 'Key2': 'Value2', - }; + final List sampleData = [ + const NameValueModel(name: 'key1', value: 'Value1'), + const NameValueModel(name: 'key2', value: 'value2'), + ]; await tester.pumpWidget( MaterialApp( @@ -22,12 +23,13 @@ void main() { ), ), ); + expect(find.byType(DataTable2), findsOneWidget); - expect(find.byType(ReadOnlyTextField), findsNWidgets(4)); + expect(find.byType(ReadOnlyTextField), findsNWidgets(4)); - expect(find.text('Key1'), findsOneWidget); + expect(find.text('key1'), findsOneWidget); expect(find.text('Value1'), findsOneWidget); - expect(find.text('Key2'), findsOneWidget); - expect(find.text('Value2'), findsOneWidget); + expect(find.text('key2'), findsOneWidget); + expect(find.text('value2'), findsOneWidget); }); -} +} \ No newline at end of file From f5f5c4d12282ab616e74b9a595f9f5836d7f3614 Mon Sep 17 00:00:00 2001 From: Nikhil Date: Sat, 10 May 2025 16:27:57 +0530 Subject: [PATCH 19/42] updated test --- test/models/http_request_model_test.dart | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/models/http_request_model_test.dart b/test/models/http_request_model_test.dart index 78a520978..9cab2832e 100644 --- a/test/models/http_request_model_test.dart +++ b/test/models/http_request_model_test.dart @@ -33,7 +33,7 @@ void main() { 'User-Agent': 'Test Agent', 'Content-Type': 'application/json; charset=utf-8' }); - expect(httpRequestModel.paramsMap, {'size': '2', 'len': '3'}); + expect(httpRequestModel.paramsMap, {'size': ['2'], 'len': ['3']}); expect(httpRequestModel.enabledHeaders, const [ NameValueModel( name: 'Content-Type', value: 'application/json; charset=utf-8') @@ -44,7 +44,7 @@ void main() { ]); expect(httpRequestModel.enabledHeadersMap, {'Content-Type': 'application/json; charset=utf-8'}); - expect(httpRequestModel.enabledParamsMap, {'size': '2', 'len': '3'}); + expect(httpRequestModel.enabledParamsMap, {'size': ['2'], 'len': ['3']}); expect(httpRequestModel.hasContentTypeHeader, true); expect(httpRequestModel.hasFormDataContentType, false); From ac0151323711b56dafc58d2e37c29b061508be6f Mon Sep 17 00:00:00 2001 From: Nikhil <72620320+badnikhil@users.noreply.github.com> Date: Mon, 12 May 2025 00:18:59 +0530 Subject: [PATCH 20/42] Update codegen.dart From 8dce59294c3af8daf2c14f118304d24ccb0fdaee Mon Sep 17 00:00:00 2001 From: Nikhil <72620320+badnikhil@users.noreply.github.com> Date: Mon, 12 May 2025 00:20:35 +0530 Subject: [PATCH 21/42] Update main.dart --- lib/main.dart | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/main.dart b/lib/main.dart index 2b43ca94f..e99f44b6f 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,4 +1,6 @@ import 'package:apidash_design_system/apidash_design_system.dart'; + + import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'models/models.dart'; From 8070e861b23b9e3e37888db02130201f2aee4693 Mon Sep 17 00:00:00 2001 From: Nikhil <72620320+badnikhil@users.noreply.github.com> Date: Mon, 12 May 2025 00:21:22 +0530 Subject: [PATCH 22/42] Update main.dart --- lib/main.dart | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/main.dart b/lib/main.dart index e99f44b6f..019bb284d 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,6 +1,5 @@ import 'package:apidash_design_system/apidash_design_system.dart'; - import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'models/models.dart'; From bf0f7e7b93f91885971d5aa3d3d9296c772a7d40 Mon Sep 17 00:00:00 2001 From: Nikhil Date: Thu, 15 May 2025 03:41:08 +0530 Subject: [PATCH 23/42] minor optimisation/fixes in codegen --- lib/codegen/csharp/http_client.dart | 5 --- lib/codegen/csharp/rest_sharp.dart | 10 ++---- lib/codegen/go/http.dart | 10 ++---- lib/codegen/java/async_http_client.dart | 7 ++-- lib/codegen/java/okhttp.dart | 14 +++----- lib/codegen/java/unirest.dart | 13 +++---- lib/codegen/js/fetch.dart | 8 +---- lib/codegen/julia/http.dart | 4 +-- lib/codegen/kotlin/okhttp.dart | 6 +--- lib/codegen/php/curl.dart | 8 ++--- lib/codegen/php/guzzle.dart | 8 ++--- lib/codegen/php/http_plug.dart | 8 ++--- lib/codegen/python/http_client.dart | 8 ++--- lib/codegen/python/requests.dart | 8 ++--- lib/codegen/ruby/net_http.dart | 2 +- lib/codegen/rust/actix.dart | 4 --- lib/codegen/rust/curl_rust.dart | 2 +- lib/codegen/rust/hyper.dart | 9 ++--- lib/codegen/rust/reqwest.dart | 4 --- lib/codegen/rust/ureq.dart | 4 --- lib/codegen/swift/alamofire.dart | 46 +++++++++++++++++++++---- lib/codegen/swift/urlsession.dart | 2 +- 22 files changed, 79 insertions(+), 111 deletions(-) diff --git a/lib/codegen/csharp/http_client.dart b/lib/codegen/csharp/http_client.dart index 6d200051c..370638163 100644 --- a/lib/codegen/csharp/http_client.dart +++ b/lib/codegen/csharp/http_client.dart @@ -19,15 +19,10 @@ string baseUri = "{{ baseUri }}"; var query = new Dictionary>(); {%- for key, values in queryParams %} - {%- if values is string %} - query["{{ key }}"] = new List(); - query["{{ key }}"].Add("{{ values }}"); - {%- else %} query["{{ key }}"] = new List(); {%- for value in values %} query["{{ key }}"].Add("{{ value }}"); {%- endfor %} - {%- endif %} {%- endfor %} var queryString = string.Join("&", query.SelectMany(kv => kv.Value.Select(v => string.Format("{0}={1}", kv.Key, v)))); diff --git a/lib/codegen/csharp/rest_sharp.dart b/lib/codegen/csharp/rest_sharp.dart index fa5cc4a64..0d0747d0d 100644 --- a/lib/codegen/csharp/rest_sharp.dart +++ b/lib/codegen/csharp/rest_sharp.dart @@ -118,14 +118,10 @@ class Program String paramsResult = ""; requestModel.enabledParamsMap.forEach((key, values) { - if (values is List) { - for (var value in values) { - paramsResult += templateParams.render({"param": key, "value": value}); - } - } else { - paramsResult += templateParams.render({"param": key, "value": values}); + for (var value in values) { + paramsResult += templateParams.render({"param": key, "value": value}); } - }); + }); result += "$paramsResult\n"; } diff --git a/lib/codegen/go/http.dart b/lib/codegen/go/http.dart index 5342c9148..36b958c93 100644 --- a/lib/codegen/go/http.dart +++ b/lib/codegen/go/http.dart @@ -128,14 +128,10 @@ url.RawQuery = query.Encode() if (requestModel.enabledParamsMap.isNotEmpty) { var queryParams = []; requestModel.enabledParamsMap.forEach((key, value) { - if (value is List) { - for (var v in value) { - queryParams.add({'key': key, 'value': v}); - } - } else { - queryParams.add({'key': key, 'value': value}); + for (var v in value) { + queryParams.add({'key': key, 'value': v}); } - }); + }); var templateQueryParam = jj.Template(kTemplateQueryParam); result += templateQueryParam.render({"params": queryParams}); diff --git a/lib/codegen/java/async_http_client.dart b/lib/codegen/java/async_http_client.dart index f19282a42..e4060995e 100644 --- a/lib/codegen/java/async_http_client.dart +++ b/lib/codegen/java/async_http_client.dart @@ -39,10 +39,9 @@ public class Main { BoundRequestBuilder requestBuilder = asyncHttpClient.prepare("{{ method|upper }}", url); '''; - final String kTemplateUrlQueryParam = ''' {% for name, value in queryParams %} -{% if value is not string %} - {% for v in value %} requestBuilder.addQueryParam("{{ name }}", "{{ v }}"); - {% endfor %} {% else %} requestBuilder.addQueryParam("{{ name }}", "{{ value }}");{% endif %}{% endfor %}\n\n + final String kTemplateUrlQueryParam = ''' + {% for name, value in queryParams %} {% for v in value %} + requestBuilder.addQueryParam("{{ name }}", "{{ v }}"); {% endfor %}{% endfor %}\n '''; final String kTemplateRequestHeader = ''' requestBuilder{% for name, value in headers %} diff --git a/lib/codegen/java/okhttp.dart b/lib/codegen/java/okhttp.dart index 020d17c72..31e0e7be0 100644 --- a/lib/codegen/java/okhttp.dart +++ b/lib/codegen/java/okhttp.dart @@ -37,19 +37,15 @@ import okhttp3.MultipartBody;"""; '''; final String kTemplateUrlQuery = ''' - HttpUrl.Builder urlBuilder = HttpUrl.parse("{{url}}").newBuilder(); - {% for name, value in queryParams %}{% if value is not string %} {% for v in value %} urlBuilder.addQueryParameter("{{ name }}", "{{ v }}"); - {% endfor %} - {% else %} urlBuilder.addQueryParameter("{{ name }}", "{{ value }}"); {% endif %}{% endfor %} - - HttpUrl url = urlBuilder.build(); - -'''; + {% for name, value in queryParams %}{% for v in value %} + urlBuilder.addQueryParameter("{{ name }}", "{{ v }}");{% endfor %}{% endfor %} + HttpUrl url = urlBuilder.build(); + '''; String kTemplateRequestBody = ''' - + MediaType mediaType = MediaType.parse("{{contentType}}"); RequestBody body = RequestBody.create({{body}}, mediaType); diff --git a/lib/codegen/java/unirest.dart b/lib/codegen/java/unirest.dart index 23f9b4537..563476770 100644 --- a/lib/codegen/java/unirest.dart +++ b/lib/codegen/java/unirest.dart @@ -27,8 +27,7 @@ public class Main { '''; final String kTemplateRequestCreation = ''' - HttpResponse response = Unirest - .{{method}}(requestURL)\n + HttpResponse response = Unirest.{{method}}(requestURL)\n '''; final String kTemplateRequestHeader = ''' @@ -36,11 +35,9 @@ public class Main { '''; final String kTemplateUrlQueryParam = ''' - {% for name, value in queryParams %} - {% if value is iterable and value is not string %} {% for v in value -%} - .queryString("{{name}}", "{{v}}"){% if not loop.last %} {% endif %} - {% endfor %} {% else %} - .queryString("{{name}}", "{{value}}") {% endif %} {% if not loop.last %}{% endif %} {% endfor %} + {% for name, value in queryParams %}{% for v in value -%} + .queryString("{{name}}", "{{v}}") + {% endfor %}{% endfor %} '''; @@ -58,7 +55,7 @@ public class Main { '''; final String kStringRequestEnd = """ - .asJson(); + .asJson(); System.out.println(response.getStatus()); System.out.println(response.getBody()); } diff --git a/lib/codegen/js/fetch.dart b/lib/codegen/js/fetch.dart index bb8937c17..d08b2daa9 100644 --- a/lib/codegen/js/fetch.dart +++ b/lib/codegen/js/fetch.dart @@ -15,17 +15,11 @@ import { {% if hasFileInFormData %}fileFromSync, {% endif %}FormData } from 'nod """; - String kTemplateStart = """const url = new URL('{{url}}'); - + String kTemplateStart = """const url = new URL('{{url}}'); {% for key, value in params -%} -{% if value is iterable and (value is not string) -%} {% for item in value -%} url.searchParams.append('{{key}}', '{{item}}'); {% endfor -%} -{% else -%} - -url.searchParams.append('{{key}}', '{{value}}'); -{% endif -%} {% endfor -%} const options = { method: '{{method}}' diff --git a/lib/codegen/julia/http.dart b/lib/codegen/julia/http.dart index c453346c4..60224964c 100644 --- a/lib/codegen/julia/http.dart +++ b/lib/codegen/julia/http.dart @@ -16,9 +16,9 @@ url = "{{url}}" String kTemplateParams = """ params = Dict( {%- for name, value in params %} - "{{ name }}" => {%- if value is iterable and not value is string -%}[ + "{{ name }}" =>[ {%- for v in value -%}"{{ v }}"{%- if not loop.last -%}, {%- endif -%}{%- endfor -%} - ]{%- else -%}"{{ value }}"{%- endif -%}, + ], {%- endfor %} ) \n diff --git a/lib/codegen/kotlin/okhttp.dart b/lib/codegen/kotlin/okhttp.dart index 610436701..319ca80e3 100644 --- a/lib/codegen/kotlin/okhttp.dart +++ b/lib/codegen/kotlin/okhttp.dart @@ -40,15 +40,11 @@ import okhttp3.MediaType.Companion.toMediaType"""; val url = "{{url}}".toHttpUrl().newBuilder() {%- for name, values in params %} - {%- if values is iterable and not values is string %} {%- for value in values %} .addQueryParameter("{{ name }}", "{{ value }}") {%- endfor %} - {%- else %} - .addQueryParameter("{{ name }}", "{{ values }}") - {%- endif %} {%- endfor %} - .build() + .build() """; diff --git a/lib/codegen/php/curl.dart b/lib/codegen/php/curl.dart index 3425a66d4..b7eab3fa3 100644 --- a/lib/codegen/php/curl.dart +++ b/lib/codegen/php/curl.dart @@ -126,12 +126,8 @@ if (params.isNotEmpty) { List paramList = []; params.forEach((key, value) { - if (value is List) { - paramList.add("'$key' => [${value.map((v) => "'$v'").join(", ")}]"); - } else { - paramList.add("'$key' => '$value'"); - } - }); + paramList.add("'$key' => [${value.map((v) => "'$v'").join(", ")}]"); + }); result += templateParams.render({ "params": paramList.join(",\n"), diff --git a/lib/codegen/php/guzzle.dart b/lib/codegen/php/guzzle.dart index 72aa3a73c..9a6697bf2 100644 --- a/lib/codegen/php/guzzle.dart +++ b/lib/codegen/php/guzzle.dart @@ -86,12 +86,8 @@ if (params.isNotEmpty) { List paramList = []; params.forEach((key, value) { - if (value is List) { - paramList.add("'$key' => [${value.map((v) => "'$v'").join(", ")}]"); - } else { - paramList.add("'$key' => '$value'"); - } - }); + paramList.add("'$key' => [${value.map((v) => "'$v'").join(", ")}]"); + }); result += templateParams.render({ "params": paramList.join(",\n"), diff --git a/lib/codegen/php/http_plug.dart b/lib/codegen/php/http_plug.dart index 98162f472..f6e6d5b73 100644 --- a/lib/codegen/php/http_plug.dart +++ b/lib/codegen/php/http_plug.dart @@ -97,12 +97,8 @@ echo \$response->getBody(); List paramList = []; params.forEach((key, value) { - if (value is List) { - paramList.add("'$key' => [${value.map((v) => "'$v'").join(", ")}]"); - } else { - paramList.add("'$key' => '$value'"); - } - }); + paramList.add("'$key' => [${value.map((v) => "'$v'").join(", ")}]"); + }); result += templateParams.render({ "params": paramList.join(",\n"), diff --git a/lib/codegen/python/http_client.dart b/lib/codegen/python/http_client.dart index 58867a2c6..9240e670a 100644 --- a/lib/codegen/python/http_client.dart +++ b/lib/codegen/python/http_client.dart @@ -108,12 +108,8 @@ body = b'\r\n'.join(dataList) List paramList = []; params.forEach((key, value) { - if (value is List) { - paramList.add("'$key': [${value.map((v) => "'$v'").join(", ")}]"); - } else { - paramList.add("'$key': '$value'"); - } - }); + paramList.add("'$key': [${value.map((v) => "'$v'").join(", ")}]"); + }); result += templateParams.render({ "params": paramList.join(",\n"), diff --git a/lib/codegen/python/requests.dart b/lib/codegen/python/requests.dart index 803621677..fd22c7743 100644 --- a/lib/codegen/python/requests.dart +++ b/lib/codegen/python/requests.dart @@ -105,12 +105,8 @@ print('Response Body:', response.text) List paramList = []; params.forEach((key, value) { - if (value is List) { - paramList.add("'$key': [${value.map((v) => "'$v'").join(", ")}]"); - } else { - paramList.add("'$key': '$value'"); - } - }); + paramList.add("'$key': [${value.map((v) => "'$v'").join(", ")}]"); + }); result += templateParams.render({ "params": paramList.join(",\n"), diff --git a/lib/codegen/ruby/net_http.dart b/lib/codegen/ruby/net_http.dart index 93a5f9c76..e58957372 100644 --- a/lib/codegen/ruby/net_http.dart +++ b/lib/codegen/ruby/net_http.dart @@ -10,7 +10,7 @@ url = URI("{{url}}") String kTemplateRequestParams = """ \nparams = { -{% for key, val in params %} "{{ key }}" => {% if val is list %}[{% for v in val %}"{{ v|string }}"{% if not loop.last %}, {% endif %}{% endfor %}]{% else %}"{{ val|string }}"{% endif %}, +{% for key, val in params %} "{{ key }}" => [{% for v in val %}"{{ v|string }}"{% if not loop.last %}, {% endif %}{% endfor %}], {% endfor %}} url.query = URI.encode_www_form(params)\n """; diff --git a/lib/codegen/rust/actix.dart b/lib/codegen/rust/actix.dart index f346cbaae..e9485aa1f 100644 --- a/lib/codegen/rust/actix.dart +++ b/lib/codegen/rust/actix.dart @@ -20,13 +20,9 @@ String kTemplateParams = """ let query_params = [ {%- for key, values in params %} - {%- if values is iterable and values is not string %} {%- for val in values %} ("{{key}}", "{{val}}"), {%- endfor %} - {%- else %} - ("{{key}}", "{{values}}"), - {%- endif %} {%- endfor %} ]; request = request.query(&query_params).unwrap(); diff --git a/lib/codegen/rust/curl_rust.dart b/lib/codegen/rust/curl_rust.dart index 64dba161b..b612d4b47 100644 --- a/lib/codegen/rust/curl_rust.dart +++ b/lib/codegen/rust/curl_rust.dart @@ -18,7 +18,7 @@ fn main() { {% if params %} let params: Vec<(&str, Vec<&str>)> = vec![ {%- for key, values in params %} - ("{{key}}", vec![{% if values is iterable and values is not string %}{% for val in values %}"{{val}}", {% endfor %}{% else %}"{{values}}"{% endif %}]), + ("{{key}}", vec![{% for val in values %}"{{val}}", {% endfor %}]), {%- endfor %} ]; let query_string: String = params.iter().flat_map(|(key, values)| values.iter().map(move |val| format!("{}={}", key, val))) .collect::>().join("&"); diff --git a/lib/codegen/rust/hyper.dart b/lib/codegen/rust/hyper.dart index 23b918d0c..f88f46689 100644 --- a/lib/codegen/rust/hyper.dart +++ b/lib/codegen/rust/hyper.dart @@ -17,15 +17,12 @@ use url::Url; async fn main() -> Result<(), Box> { let http{% if isHttps %}s{% endif %} = Http{% if isHttps %}s{% endif %}Connector::new(); let client = Client::builder().build::<_, hyper::Body>(http{% if isHttps %}s{% endif %}); - let mut url = Url::parse("{{ baseUrl }}")?;\n + let mut url = Url::parse("{{ baseUrl }}")?; """; final String kTemplateParams = """ - {% for key, values in params %}{% if values is iterable and values is not string %}{% for val in values %}\n url.query_pairs_mut().append_pair("{{ key }}", "{{ val }}");{% endfor %} - {% else %} - url.query_pairs_mut().append_pair("{{ key }}", "{{ values }}"); - {% endif %} - {% endfor %} + {% for key, values in params %}{% for val in values %} + url.query_pairs_mut().append_pair("{{ key }}", "{{ val }}");{% endfor %}{% endfor %} """; final String kTemplateMethod = """ diff --git a/lib/codegen/rust/reqwest.dart b/lib/codegen/rust/reqwest.dart index c51b0fe90..aa260fb38 100644 --- a/lib/codegen/rust/reqwest.dart +++ b/lib/codegen/rust/reqwest.dart @@ -13,13 +13,9 @@ class RustReqwestCodeGen { String kTemplateParamsDef = """ let query_params = [ {%- for key, values in params %} - {%- if values is iterable and values is not string %} {%- for val in values %} ("{{key}}", "{{val}}"), {%- endfor %} - {%- else %} - ("{{key}}", "{{values}}"), - {%- endif %} {%- endfor %} ]; """; diff --git a/lib/codegen/rust/ureq.dart b/lib/codegen/rust/ureq.dart index 2ac9d038d..348a98760 100644 --- a/lib/codegen/rust/ureq.dart +++ b/lib/codegen/rust/ureq.dart @@ -18,13 +18,9 @@ fn main() -> Result<(), ureq::Error> { String kTemplateParams = """ {%- for key, values in params %} - {%- if values is iterable and values is not string %} {%- for val in values %} .query("{{key}}", "{{val}}") {%- endfor %} - {%- else %} - .query("{{key}}", "{{values}}") - {%- endif %} {%- endfor %} """; diff --git a/lib/codegen/swift/alamofire.dart b/lib/codegen/swift/alamofire.dart index b128a7278..8886124f1 100644 --- a/lib/codegen/swift/alamofire.dart +++ b/lib/codegen/swift/alamofire.dart @@ -8,6 +8,15 @@ import Foundation import Alamofire """; + final String kTemplateQueryItems = ''' +var urlComponents = URLComponents(string: "{{baseUrl}}")! +var queryItems = [URLQueryItem]() +{% for param in queryParams %}queryItems.append(URLQueryItem(name: "{{param.name}}", value: "{{param.value}}")) +{% endfor %} +urlComponents.queryItems = queryItems +let url = urlComponents.url! +'''; + final String kTemplateFormData = ''' let multipartFormData = MultipartFormData() {% for param in formData %} {% if param.type == 'text' %}multipartFormData.append(Data("{{param.value}}".utf8), withName: "{{param.name}}") {% elif param.type == 'file' %} @@ -32,8 +41,6 @@ let textData = textString.data(using: .utf8)\n '''; final String kTemplateRequest = """ -let url = "{{url}}" - {% if hasFormData %} AF.upload(multipartFormData: multipartFormData, to: url, method: .{{method}}{% if hasHeaders %}, headers: {{headers}}{% endif %}) {% elif hasBody %} @@ -60,9 +67,37 @@ dispatchMain() try { String result = kTemplateStart; - var rec = - getValidRequestUri(requestModel.url, requestModel.enabledParams); + // Extract base URL and query parameters + var rec = getValidRequestUri(requestModel.url, requestModel.enabledParams); Uri? uri = rec.$1; + if (uri == null) return null; + + // Get base URL without query parameters + String baseUrl = uri.replace(query: '').toString(); + if (baseUrl.endsWith('?')) { + baseUrl = baseUrl.substring(0, baseUrl.length - 1); + } + + // Handle query parameters using URLComponents + var queryParamsList = >[]; + requestModel.enabledParamsMap.forEach((key, values) { + for (var value in values) { + queryParamsList.add({ + 'name': key, + 'value': value, + }); + } + }); + + if (queryParamsList.isNotEmpty) { + var templateQueryItems = jj.Template(kTemplateQueryItems); + result += templateQueryItems.render({ + "baseUrl": baseUrl, + "queryParams": queryParamsList, + }); + } else { + result += 'let url = "$baseUrl"\n'; + } var headers = requestModel.enabledHeadersMap; @@ -105,7 +140,7 @@ dispatchMain() hasBody = true; hasJsonData = true; } - // Handle text data + // Handle text data else if (requestModel.hasTextData) { var templateTextData = jj.Template(kTemplateTextData); result += templateTextData.render({ @@ -131,7 +166,6 @@ dispatchMain() var templateRequest = jj.Template(kTemplateRequest); result += templateRequest.render({ - "url": uri.toString(), "method": requestModel.method.name.toLowerCase(), "headers": headersString, "hasHeaders": hasHeaders, diff --git a/lib/codegen/swift/urlsession.dart b/lib/codegen/swift/urlsession.dart index cbd351cdc..f1ff56904 100644 --- a/lib/codegen/swift/urlsession.dart +++ b/lib/codegen/swift/urlsession.dart @@ -128,7 +128,7 @@ semaphore.wait() var params = requestModel.enabledParamsMap.entries.expand((entry) { - var values = entry.value is Iterable ? entry.value : [entry.value]; + var values = entry.value; return values.map((value) { return {'key': entry.key, 'value': value}; From 54ddb0918ed171e7962c3822eff7ed8c27d14656 Mon Sep 17 00:00:00 2001 From: Nikhil Date: Sun, 18 May 2025 18:38:48 +0530 Subject: [PATCH 24/42] updated test model (reqres API key) --- test/models/http_request_models.dart | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/test/models/http_request_models.dart b/test/models/http_request_models.dart index 10b84edaf..93bcbf0c1 100644 --- a/test/models/http_request_models.dart +++ b/test/models/http_request_models.dart @@ -15,7 +15,7 @@ const httpRequestModelGet2 = HttpRequestModel( ], ); -/// GET request model with override query params +/// GET request model with query param having multiple values const httpRequestModelGet3 = HttpRequestModel( url: 'https://api.apidash.dev/country/data?code=US', method: HTTPVerb.get, @@ -336,6 +336,9 @@ const httpRequestModelPost10 = HttpRequestModel( const httpRequestModelPut1 = HttpRequestModel( method: HTTPVerb.put, url: 'https://reqres.in/api/users/2', + headers:[ + NameValueModel(name: 'x-api-key', value: 'reqres-free-v1') + ], bodyContentType: ContentType.json, body: r"""{ "name": "morpheus", @@ -348,6 +351,9 @@ const httpRequestModelPatch1 = HttpRequestModel( method: HTTPVerb.patch, url: 'https://reqres.in/api/users/2', bodyContentType: ContentType.json, + headers:[ + NameValueModel(name: 'x-api-key', value: 'reqres-free-v1') + ], body: r"""{ "name": "marfeus", "job": "accountant" @@ -357,6 +363,9 @@ const httpRequestModelPatch1 = HttpRequestModel( /// Basic DELETE request model const httpRequestModelDelete1 = HttpRequestModel( method: HTTPVerb.delete, + headers:[ + NameValueModel(name: 'x-api-key', value: 'reqres-free-v1') + ], url: 'https://reqres.in/api/users/2', ); @@ -365,6 +374,9 @@ const httpRequestModelDelete2 = HttpRequestModel( method: HTTPVerb.delete, url: 'https://reqres.in/api/users/2', bodyContentType: ContentType.json, + headers:[ + NameValueModel(name: 'x-api-key', value: 'reqres-free-v1') + ], body: r"""{ "name": "marfeus", "job": "accountant" From ac5c1da9f8e23ee39c49832f16805e056f719c8b Mon Sep 17 00:00:00 2001 From: Nikhil Date: Sun, 18 May 2025 18:39:26 +0530 Subject: [PATCH 25/42] updated C curl tests --- test/codegen/c_curl_codegen_test.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/codegen/c_curl_codegen_test.dart b/test/codegen/c_curl_codegen_test.dart index 3ca5cfc5f..6ec7a7951 100644 --- a/test/codegen/c_curl_codegen_test.dart +++ b/test/codegen/c_curl_codegen_test.dart @@ -147,7 +147,7 @@ int main() { CURLcode res; curl = curl_easy_init(); if(curl) { - curl_easy_setopt(curl, CURLOPT_URL, "https://api.apidash.dev/country/data?code=IND"); + curl_easy_setopt(curl, CURLOPT_URL, "https://api.apidash.dev/country/data?code=US&code=IND"); struct ResponseData response_data = {0}; curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback); curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response_data); From e1fa273f41a207aeeb8f6daa3440a4913b3d6a24 Mon Sep 17 00:00:00 2001 From: Nikhil Date: Sun, 18 May 2025 18:39:34 +0530 Subject: [PATCH 26/42] updated har tests --- test/codegen/har_codegen_test.dart | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/test/codegen/har_codegen_test.dart b/test/codegen/har_codegen_test.dart index 74311853e..e9c789cd5 100644 --- a/test/codegen/har_codegen_test.dart +++ b/test/codegen/har_codegen_test.dart @@ -50,9 +50,13 @@ void main() { test('GET 3', () { const expectedCode = r"""{ "method": "GET", - "url": "https://api.apidash.dev/country/data?code=IND", + "url": "https://api.apidash.dev/country/data?code=US&code=IND", "httpVersion": "HTTP/1.1", "queryString": [ + { + "name": "code", + "value": "US" + }, { "name": "code", "value": "IND" @@ -668,6 +672,10 @@ void main() { { "name": "Content-Type", "value": "application/json" + }, + { + "name": "x-api-key", + "value": "reqres-free-v1" } ], "postData": { @@ -696,6 +704,10 @@ void main() { { "name": "Content-Type", "value": "application/json" + }, + { + "name": "x-api-key", + "value": "reqres-free-v1" } ], "postData": { @@ -720,7 +732,12 @@ void main() { "url": "https://reqres.in/api/users/2", "httpVersion": "HTTP/1.1", "queryString": [], - "headers": [] + "headers": [ + { + "name": "x-api-key", + "value": "reqres-free-v1" + } + ] }"""; expect( codeGen.getCode( @@ -741,6 +758,10 @@ void main() { { "name": "Content-Type", "value": "application/json" + }, + { + "name": "x-api-key", + "value": "reqres-free-v1" } ], "postData": { From f87ef8c1073817920cc709d29778186318d4e257 Mon Sep 17 00:00:00 2001 From: Nikhil Date: Sun, 18 May 2025 18:40:54 +0530 Subject: [PATCH 27/42] updated csharp tests --- .../csharp_http_client_codegen_test.dart | 182 ++++++++++++++++-- .../csharp_rest_sharp_codgen_test.dart | 6 + 2 files changed, 168 insertions(+), 20 deletions(-) diff --git a/test/codegen/csharp_http_client_codegen_test.dart b/test/codegen/csharp_http_client_codegen_test.dart index 64aa4bc94..813cece19 100644 --- a/test/codegen/csharp_http_client_codegen_test.dart +++ b/test/codegen/csharp_http_client_codegen_test.dart @@ -9,8 +9,11 @@ void main() { group('Get Request', () { test('GET 1', () { - const expectedCode = r'''using System; + const expectedCode = r''' +using System; using System.Net.Http; +using System.Collections.Generic; +using System.Linq; string uri = "https://api.apidash.dev"; @@ -33,11 +36,20 @@ using (var request = new HttpRequestMessage(HttpMethod.Get, uri)) }); test('GET 2', () { - const expectedCode = r'''using System; + const expectedCode = r''' +using System; using System.Net.Http; +using System.Collections.Generic; +using System.Linq; + +string baseUri = "https://api.apidash.dev/country/data"; -string uri = "https://api.apidash.dev/country/data?code=US"; +var query = new Dictionary>(); + query["code"] = new List(); + query["code"].Add("US"); +var queryString = string.Join("&", query.SelectMany(kv => kv.Value.Select(v => string.Format("{0}={1}", kv.Key, v)))); +string uri = string.Format("{0}?{1}", baseUri, queryString); using (var client = new HttpClient()) using (var request = new HttpRequestMessage(HttpMethod.Get, uri)) { @@ -59,9 +71,18 @@ using (var request = new HttpRequestMessage(HttpMethod.Get, uri)) test('GET 3', () { const expectedCode = r'''using System; using System.Net.Http; +using System.Collections.Generic; +using System.Linq; -string uri = "https://api.apidash.dev/country/data?code=IND"; +string baseUri = "https://api.apidash.dev/country/data"; +var query = new Dictionary>(); + query["code"] = new List(); + query["code"].Add("IND"); + query["code"].Add("US"); + +var queryString = string.Join("&", query.SelectMany(kv => kv.Value.Select(v => string.Format("{0}={1}", kv.Key, v)))); +string uri = string.Format("{0}?{1}", baseUri, queryString); using (var client = new HttpClient()) using (var request = new HttpRequestMessage(HttpMethod.Get, uri)) { @@ -81,11 +102,28 @@ using (var request = new HttpRequestMessage(HttpMethod.Get, uri)) }); test('GET 4', () { - const expectedCode = r'''using System; + const expectedCode = r''' +using System; using System.Net.Http; - -string uri = "https://api.apidash.dev/humanize/social?num=8700000&digits=3&system=SS&add_space=true&trailing_zeros=true"; - +using System.Collections.Generic; +using System.Linq; + +string baseUri = "https://api.apidash.dev/humanize/social"; + +var query = new Dictionary>(); + query["num"] = new List(); + query["num"].Add("8700000"); + query["digits"] = new List(); + query["digits"].Add("3"); + query["system"] = new List(); + query["system"].Add("SS"); + query["add_space"] = new List(); + query["add_space"].Add("true"); + query["trailing_zeros"] = new List(); + query["trailing_zeros"].Add("true"); + +var queryString = string.Join("&", query.SelectMany(kv => kv.Value.Select(v => string.Format("{0}={1}", kv.Key, v)))); +string uri = string.Format("{0}?{1}", baseUri, queryString); using (var client = new HttpClient()) using (var request = new HttpRequestMessage(HttpMethod.Get, uri)) { @@ -105,8 +143,11 @@ using (var request = new HttpRequestMessage(HttpMethod.Get, uri)) }); test('GET 5', () { - const expectedCode = r'''using System; + const expectedCode = r''' +using System; using System.Net.Http; +using System.Collections.Generic; +using System.Linq; string uri = "https://api.github.com/repos/foss42/apidash"; @@ -131,11 +172,20 @@ using (var request = new HttpRequestMessage(HttpMethod.Get, uri)) }); test('GET 6', () { - const expectedCode = r'''using System; + const expectedCode = r''' +using System; using System.Net.Http; +using System.Collections.Generic; +using System.Linq; -string uri = "https://api.github.com/repos/foss42/apidash?raw=true"; +string baseUri = "https://api.github.com/repos/foss42/apidash"; +var query = new Dictionary>(); + query["raw"] = new List(); + query["raw"].Add("true"); + +var queryString = string.Join("&", query.SelectMany(kv => kv.Value.Select(v => string.Format("{0}={1}", kv.Key, v)))); +string uri = string.Format("{0}?{1}", baseUri, queryString); using (var client = new HttpClient()) using (var request = new HttpRequestMessage(HttpMethod.Get, uri)) { @@ -157,8 +207,11 @@ using (var request = new HttpRequestMessage(HttpMethod.Get, uri)) }); test('GET 7', () { - const expectedCode = r'''using System; + const expectedCode = r''' +using System; using System.Net.Http; +using System.Collections.Generic; +using System.Linq; string uri = "https://api.apidash.dev"; @@ -181,11 +234,20 @@ using (var request = new HttpRequestMessage(HttpMethod.Get, uri)) }); test('GET 8', () { - const expectedCode = r'''using System; + const expectedCode = r''' +using System; using System.Net.Http; +using System.Collections.Generic; +using System.Linq; -string uri = "https://api.github.com/repos/foss42/apidash?raw=true"; +string baseUri = "https://api.github.com/repos/foss42/apidash"; +var query = new Dictionary>(); + query["raw"] = new List(); + query["raw"].Add("true"); + +var queryString = string.Join("&", query.SelectMany(kv => kv.Value.Select(v => string.Format("{0}={1}", kv.Key, v)))); +string uri = string.Format("{0}?{1}", baseUri, queryString); using (var client = new HttpClient()) using (var request = new HttpRequestMessage(HttpMethod.Get, uri)) { @@ -207,11 +269,22 @@ using (var request = new HttpRequestMessage(HttpMethod.Get, uri)) }); test('GET 9', () { - const expectedCode = r'''using System; + const expectedCode = r''' +using System; using System.Net.Http; +using System.Collections.Generic; +using System.Linq; + +string baseUri = "https://api.apidash.dev/humanize/social"; -string uri = "https://api.apidash.dev/humanize/social?num=8700000&add_space=true"; +var query = new Dictionary>(); + query["num"] = new List(); + query["num"].Add("8700000"); + query["add_space"] = new List(); + query["add_space"].Add("true"); +var queryString = string.Join("&", query.SelectMany(kv => kv.Value.Select(v => string.Format("{0}={1}", kv.Key, v)))); +string uri = string.Format("{0}?{1}", baseUri, queryString); using (var client = new HttpClient()) using (var request = new HttpRequestMessage(HttpMethod.Get, uri)) { @@ -233,6 +306,8 @@ using (var request = new HttpRequestMessage(HttpMethod.Get, uri)) test('GET 10', () { const expectedCode = r'''using System; using System.Net.Http; +using System.Collections.Generic; +using System.Linq; string uri = "https://api.apidash.dev/humanize/social"; @@ -259,9 +334,19 @@ using (var request = new HttpRequestMessage(HttpMethod.Get, uri)) test('GET 11', () { const expectedCode = r'''using System; using System.Net.Http; +using System.Collections.Generic; +using System.Linq; -string uri = "https://api.apidash.dev/humanize/social?num=8700000&digits=3"; +string baseUri = "https://api.apidash.dev/humanize/social"; +var query = new Dictionary>(); + query["num"] = new List(); + query["num"].Add("8700000"); + query["digits"] = new List(); + query["digits"].Add("3"); + +var queryString = string.Join("&", query.SelectMany(kv => kv.Value.Select(v => string.Format("{0}={1}", kv.Key, v)))); +string uri = string.Format("{0}?{1}", baseUri, queryString); using (var client = new HttpClient()) using (var request = new HttpRequestMessage(HttpMethod.Get, uri)) { @@ -285,6 +370,8 @@ using (var request = new HttpRequestMessage(HttpMethod.Get, uri)) test('GET 12', () { const expectedCode = r'''using System; using System.Net.Http; +using System.Collections.Generic; +using System.Linq; string uri = "https://api.apidash.dev/humanize/social"; @@ -311,6 +398,8 @@ using (var request = new HttpRequestMessage(HttpMethod.Get, uri)) test('HEAD 1', () { const expectedCode = r'''using System; using System.Net.Http; +using System.Collections.Generic; +using System.Linq; string uri = "https://api.apidash.dev"; @@ -335,6 +424,8 @@ using (var request = new HttpRequestMessage(HttpMethod.Head, uri)) test('HEAD 2', () { const expectedCode = r'''using System; using System.Net.Http; +using System.Collections.Generic; +using System.Linq; string uri = "http://api.apidash.dev"; @@ -361,6 +452,8 @@ using (var request = new HttpRequestMessage(HttpMethod.Head, uri)) test('POST 1', () { const expectedCode = r'''using System; using System.Net.Http; +using System.Collections.Generic; +using System.Linq; string uri = "https://api.apidash.dev/case/lower"; @@ -393,6 +486,8 @@ using (var request = new HttpRequestMessage(HttpMethod.Post, uri)) test('POST 2', () { const expectedCode = r'''using System; using System.Net.Http; +using System.Collections.Generic; +using System.Linq; string uri = "https://api.apidash.dev/case/lower"; @@ -430,6 +525,8 @@ using (var request = new HttpRequestMessage(HttpMethod.Post, uri)) test('POST 3', () { const expectedCode = r'''using System; using System.Net.Http; +using System.Collections.Generic; +using System.Linq; string uri = "https://api.apidash.dev/case/lower"; @@ -464,6 +561,8 @@ using (var request = new HttpRequestMessage(HttpMethod.Post, uri)) test('POST 4', () { const expectedCode = r'''using System; using System.Net.Http; +using System.Collections.Generic; +using System.Linq; using System.IO; string uri = "https://api.apidash.dev/io/form"; @@ -497,6 +596,8 @@ using (var request = new HttpRequestMessage(HttpMethod.Post, uri)) test('POST 5', () { const expectedCode = r'''using System; using System.Net.Http; +using System.Collections.Generic; +using System.Linq; using System.IO; string uri = "https://api.apidash.dev/io/form"; @@ -532,6 +633,8 @@ using (var request = new HttpRequestMessage(HttpMethod.Post, uri)) test('POST 6', () { const expectedCode = r'''using System; using System.Net.Http; +using System.Collections.Generic; +using System.Linq; using System.IO; string uri = "https://api.apidash.dev/io/img"; @@ -566,8 +669,11 @@ using (var request = new HttpRequestMessage(HttpMethod.Post, uri)) }); test('POST 7', () { - const expectedCode = r'''using System; + const expectedCode = r''' +using System; using System.Net.Http; +using System.Collections.Generic; +using System.Linq; using System.IO; string uri = "https://api.apidash.dev/io/img"; @@ -604,10 +710,20 @@ using (var request = new HttpRequestMessage(HttpMethod.Post, uri)) test('POST 8', () { const expectedCode = r'''using System; using System.Net.Http; +using System.Collections.Generic; +using System.Linq; using System.IO; -string uri = "https://api.apidash.dev/io/form?size=2&len=3"; +string baseUri = "https://api.apidash.dev/io/form"; + +var query = new Dictionary>(); + query["size"] = new List(); + query["size"].Add("2"); + query["len"] = new List(); + query["len"].Add("3"); +var queryString = string.Join("&", query.SelectMany(kv => kv.Value.Select(v => string.Format("{0}={1}", kv.Key, v)))); +string uri = string.Format("{0}?{1}", baseUri, queryString); using (var client = new HttpClient()) using (var request = new HttpRequestMessage(HttpMethod.Post, uri)) { @@ -637,10 +753,20 @@ using (var request = new HttpRequestMessage(HttpMethod.Post, uri)) test('POST 9', () { const expectedCode = r'''using System; using System.Net.Http; +using System.Collections.Generic; +using System.Linq; using System.IO; -string uri = "https://api.apidash.dev/io/img?size=2&len=3"; +string baseUri = "https://api.apidash.dev/io/img"; +var query = new Dictionary>(); + query["size"] = new List(); + query["size"].Add("2"); + query["len"] = new List(); + query["len"].Add("3"); + +var queryString = string.Join("&", query.SelectMany(kv => kv.Value.Select(v => string.Format("{0}={1}", kv.Key, v)))); +string uri = string.Format("{0}?{1}", baseUri, queryString); using (var client = new HttpClient()) using (var request = new HttpRequestMessage(HttpMethod.Post, uri)) { @@ -678,12 +804,16 @@ using (var request = new HttpRequestMessage(HttpMethod.Post, uri)) test('PUT 1', () { const expectedCode = r'''using System; using System.Net.Http; +using System.Collections.Generic; +using System.Linq; string uri = "https://reqres.in/api/users/2"; using (var client = new HttpClient()) using (var request = new HttpRequestMessage(HttpMethod.Put, uri)) { + request.Headers.Add("x-api-key", "reqres-free-v1"); + var payload = """ { "name": "morpheus", @@ -713,12 +843,16 @@ using (var request = new HttpRequestMessage(HttpMethod.Put, uri)) test('PATCH 1', () { const expectedCode = r'''using System; using System.Net.Http; +using System.Collections.Generic; +using System.Linq; string uri = "https://reqres.in/api/users/2"; using (var client = new HttpClient()) using (var request = new HttpRequestMessage(HttpMethod.Patch, uri)) { + request.Headers.Add("x-api-key", "reqres-free-v1"); + var payload = """ { "name": "marfeus", @@ -748,12 +882,16 @@ using (var request = new HttpRequestMessage(HttpMethod.Patch, uri)) test('DELETE 1', () { const expectedCode = r'''using System; using System.Net.Http; +using System.Collections.Generic; +using System.Linq; string uri = "https://reqres.in/api/users/2"; using (var client = new HttpClient()) using (var request = new HttpRequestMessage(HttpMethod.Delete, uri)) { + request.Headers.Add("x-api-key", "reqres-free-v1"); + HttpResponseMessage response = await client.SendAsync(request); Console.WriteLine((int)response.StatusCode); @@ -772,12 +910,16 @@ using (var request = new HttpRequestMessage(HttpMethod.Delete, uri)) test('DELETE 2', () { const expectedCode = r'''using System; using System.Net.Http; +using System.Collections.Generic; +using System.Linq; string uri = "https://reqres.in/api/users/2"; using (var client = new HttpClient()) using (var request = new HttpRequestMessage(HttpMethod.Delete, uri)) { + request.Headers.Add("x-api-key", "reqres-free-v1"); + var payload = """ { "name": "marfeus", diff --git a/test/codegen/csharp_rest_sharp_codgen_test.dart b/test/codegen/csharp_rest_sharp_codgen_test.dart index 0615aac03..9a882ef54 100644 --- a/test/codegen/csharp_rest_sharp_codgen_test.dart +++ b/test/codegen/csharp_rest_sharp_codgen_test.dart @@ -93,6 +93,7 @@ class Program var request = new RestRequest("/country/data", Method.Get); request.AddQueryParameter("code", "IND"); + request.AddQueryParameter("code", "US"); var response = await client.ExecuteAsync(request); Console.WriteLine("Status Code: " + (int)response.StatusCode); @@ -912,6 +913,7 @@ class Program var request = new RestRequest("/api/users/2", Method.Put); + request.AddHeader("x-api-key", "reqres-free-v1"); request.AddHeader("Content-Type", "application/json"); var jsonBody = new { @@ -956,6 +958,7 @@ class Program var request = new RestRequest("/api/users/2", Method.Patch); + request.AddHeader("x-api-key", "reqres-free-v1"); request.AddHeader("Content-Type", "application/json"); var jsonBody = new { @@ -1000,6 +1003,8 @@ class Program var request = new RestRequest("/api/users/2", Method.Delete); + request.AddHeader("x-api-key", "reqres-free-v1"); + var response = await client.ExecuteAsync(request); Console.WriteLine("Status Code: " + (int)response.StatusCode); Console.WriteLine("Response Content: " + response.Content); @@ -1033,6 +1038,7 @@ class Program var request = new RestRequest("/api/users/2", Method.Delete); + request.AddHeader("x-api-key", "reqres-free-v1"); request.AddHeader("Content-Type", "application/json"); var jsonBody = new { From 18ae60ce49d7e4b741304963beb70d2d32ceb2e3 Mon Sep 17 00:00:00 2001 From: Nikhil Date: Sun, 18 May 2025 18:41:43 +0530 Subject: [PATCH 28/42] curl updated tests --- test/codegen/curl_codegen_test.dart | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/test/codegen/curl_codegen_test.dart b/test/codegen/curl_codegen_test.dart index c4f37465a..2bba703ef 100644 --- a/test/codegen/curl_codegen_test.dart +++ b/test/codegen/curl_codegen_test.dart @@ -33,7 +33,7 @@ void main() { test('GET 3', () { const expectedCode = - r"""curl --url 'https://api.apidash.dev/country/data?code=IND'"""; + r"""curl --url 'https://api.apidash.dev/country/data?code=US&code=IND'"""; expect( codeGen.getCode( CodegenLanguage.curl, @@ -331,6 +331,7 @@ void main() { const expectedCode = r"""curl --request PUT \ --url 'https://reqres.in/api/users/2' \ --header 'Content-Type: application/json' \ + --header 'x-api-key: reqres-free-v1' \ --data '{ "name": "morpheus", "job": "zion resident" @@ -350,6 +351,7 @@ void main() { const expectedCode = r"""curl --request PATCH \ --url 'https://reqres.in/api/users/2' \ --header 'Content-Type: application/json' \ + --header 'x-api-key: reqres-free-v1' \ --data '{ "name": "marfeus", "job": "accountant" @@ -367,7 +369,8 @@ 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' \ + --header 'x-api-key: reqres-free-v1'"""; expect( codeGen.getCode( CodegenLanguage.curl, @@ -381,6 +384,7 @@ void main() { const expectedCode = r"""curl --request DELETE \ --url 'https://reqres.in/api/users/2' \ --header 'Content-Type: application/json' \ + --header 'x-api-key: reqres-free-v1' \ --data '{ "name": "marfeus", "job": "accountant" From 3007d6f63d880b6c420272dc001979b35b309f3c Mon Sep 17 00:00:00 2001 From: Nikhil Date: Sun, 18 May 2025 18:41:52 +0530 Subject: [PATCH 29/42] updated go tests --- test/codegen/go_http_codegen_test.dart | 96 ++++++++++++++------------ 1 file changed, 51 insertions(+), 45 deletions(-) diff --git a/test/codegen/go_http_codegen_test.dart b/test/codegen/go_http_codegen_test.dart index d9b47eef0..d294538fa 100644 --- a/test/codegen/go_http_codegen_test.dart +++ b/test/codegen/go_http_codegen_test.dart @@ -57,11 +57,11 @@ import ( func main() { client := &http.Client{} url, _ := url.Parse("https://api.apidash.dev/country/data") - query := url.Query() - - query.Set("code", "US") +query := url.Query() + +query.Add("code", "US") - url.RawQuery = query.Encode() +url.RawQuery = query.Encode() req, _ := http.NewRequest("GET", url.String(), nil) response, err := client.Do(req) @@ -96,12 +96,13 @@ import ( func main() { client := &http.Client{} - url, _ := url.Parse("https://api.apidash.dev/country/data?code=US") - query := url.Query() - - query.Set("code", "IND") + url, _ := url.Parse("https://api.apidash.dev/country/data") +query := url.Query() + +query.Add("code", "IND") +query.Add("code", "US") - url.RawQuery = query.Encode() +url.RawQuery = query.Encode() req, _ := http.NewRequest("GET", url.String(), nil) response, err := client.Do(req) @@ -137,15 +138,15 @@ import ( func main() { client := &http.Client{} url, _ := url.Parse("https://api.apidash.dev/humanize/social") - query := url.Query() - - query.Set("num", "8700000") - query.Set("digits", "3") - query.Set("system", "SS") - query.Set("add_space", "true") - query.Set("trailing_zeros", "true") +query := url.Query() + +query.Add("num", "8700000") +query.Add("digits", "3") +query.Add("system", "SS") +query.Add("add_space", "true") +query.Add("trailing_zeros", "true") - url.RawQuery = query.Encode() +url.RawQuery = query.Encode() req, _ := http.NewRequest("GET", url.String(), nil) response, err := client.Do(req) @@ -218,11 +219,11 @@ import ( func main() { client := &http.Client{} url, _ := url.Parse("https://api.github.com/repos/foss42/apidash") - query := url.Query() - - query.Set("raw", "true") +query := url.Query() - url.RawQuery = query.Encode() +query.Add("raw", "true") + +url.RawQuery = query.Encode() req, _ := http.NewRequest("GET", url.String(), nil) req.Header.Set("User-Agent", "Test Agent") @@ -295,11 +296,11 @@ import ( func main() { client := &http.Client{} url, _ := url.Parse("https://api.github.com/repos/foss42/apidash") - query := url.Query() - - query.Set("raw", "true") +query := url.Query() - url.RawQuery = query.Encode() +query.Add("raw", "true") + +url.RawQuery = query.Encode() req, _ := http.NewRequest("GET", url.String(), nil) req.Header.Set("User-Agent", "Test Agent") @@ -337,12 +338,12 @@ import ( func main() { client := &http.Client{} url, _ := url.Parse("https://api.apidash.dev/humanize/social") - query := url.Query() - - query.Set("num", "8700000") - query.Set("add_space", "true") +query := url.Query() + +query.Add("num", "8700000") +query.Add("add_space", "true") - url.RawQuery = query.Encode() +url.RawQuery = query.Encode() req, _ := http.NewRequest("GET", url.String(), nil) response, err := client.Do(req) @@ -415,12 +416,12 @@ import ( func main() { client := &http.Client{} url, _ := url.Parse("https://api.apidash.dev/humanize/social") - query := url.Query() - - query.Set("num", "8700000") - query.Set("digits", "3") +query := url.Query() + +query.Add("num", "8700000") +query.Add("digits", "3") - url.RawQuery = query.Encode() +url.RawQuery = query.Encode() req, _ := http.NewRequest("GET", url.String(), nil) req.Header.Set("User-Agent", "Test Agent") @@ -907,12 +908,12 @@ func main() { writer.WriteField("times", "3") writer.Close() - query := url.Query() - - query.Set("size", "2") - query.Set("len", "3") +query := url.Query() + +query.Add("size", "2") +query.Add("len", "3") - url.RawQuery = query.Encode() +url.RawQuery = query.Encode() req, _ := http.NewRequest("POST", url.String(), payload) req.Header.Set("Content-Type", writer.FormDataContentType()) @@ -966,12 +967,12 @@ func main() { writer.Close() - query := url.Query() - - query.Set("size", "2") - query.Set("len", "3") +query := url.Query() - url.RawQuery = query.Encode() +query.Add("size", "2") +query.Add("len", "3") + +url.RawQuery = query.Encode() req, _ := http.NewRequest("POST", url.String(), payload) req.Header.Set("User-Agent", "Test Agent") @@ -1019,6 +1020,7 @@ func main() { }`)) req, _ := http.NewRequest("PUT", url.String(), payload) + req.Header.Set("x-api-key", "reqres-free-v1") req.Header.Set("Content-Type", "application/json") response, err := client.Do(req) @@ -1063,6 +1065,7 @@ func main() { }`)) req, _ := http.NewRequest("PATCH", url.String(), payload) + req.Header.Set("x-api-key", "reqres-free-v1") req.Header.Set("Content-Type", "application/json") response, err := client.Do(req) @@ -1102,6 +1105,8 @@ func main() { url, _ := url.Parse("https://reqres.in/api/users/2") req, _ := http.NewRequest("DELETE", url.String(), nil) + req.Header.Set("x-api-key", "reqres-free-v1") + response, err := client.Do(req) if err != nil { fmt.Println(err) @@ -1142,6 +1147,7 @@ func main() { }`)) req, _ := http.NewRequest("DELETE", url.String(), payload) + req.Header.Set("x-api-key", "reqres-free-v1") req.Header.Set("Content-Type", "application/json") response, err := client.Do(req) From 2239911ecd3f771dee665e5a46921501d5d9b241 Mon Sep 17 00:00:00 2001 From: Nikhil Date: Sun, 18 May 2025 18:42:20 +0530 Subject: [PATCH 30/42] updated dart tests --- test/codegen/dart_dio_codegen_test.dart | 59 +++++++++++++------- test/codegen/dart_http_codegen_test.dart | 71 ++++++++++++++++-------- 2 files changed, 88 insertions(+), 42 deletions(-) diff --git a/test/codegen/dart_dio_codegen_test.dart b/test/codegen/dart_dio_codegen_test.dart index a12426e44..3caa57d71 100644 --- a/test/codegen/dart_dio_codegen_test.dart +++ b/test/codegen/dart_dio_codegen_test.dart @@ -40,7 +40,9 @@ void main() async { void main() async { try { - final queryParams = {'code': 'US'}; + final queryParams = { + 'code': ['US'] + }; final response = await dio.Dio().get( 'https://api.apidash.dev/country/data', queryParameters: queryParams, @@ -71,9 +73,14 @@ void main() async { void main() async { try { - final queryParams = {'code': 'IND'}; + final queryParams = { + 'code': [ + 'IND', + 'US', + ] + }; final response = await dio.Dio().get( - 'https://api.apidash.dev/country/data?code=US', + 'https://api.apidash.dev/country/data', queryParameters: queryParams, ); print(response.statusCode); @@ -103,11 +110,11 @@ void main() async { void main() async { try { final queryParams = { - 'num': '8700000', - 'digits': '3', - 'system': 'SS', - 'add_space': 'true', - 'trailing_zeros': 'true', + 'num': ['8700000'], + 'digits': ['3'], + 'system': ['SS'], + 'add_space': ['true'], + 'trailing_zeros': ['true'], }; final response = await dio.Dio().get( 'https://api.apidash.dev/humanize/social', @@ -170,7 +177,9 @@ void main() async { void main() async { try { - final queryParams = {'raw': 'true'}; + final queryParams = { + 'raw': ['true'] + }; final headers = {'User-Agent': 'Test Agent'}; final response = await dio.Dio().get( 'https://api.github.com/repos/foss42/apidash', @@ -230,7 +239,9 @@ void main() async { void main() async { try { - final queryParams = {'raw': 'true'}; + final queryParams = { + 'raw': ['true'] + }; final headers = {'User-Agent': 'Test Agent'}; final response = await dio.Dio().get( 'https://api.github.com/repos/foss42/apidash', @@ -264,8 +275,8 @@ void main() async { void main() async { try { final queryParams = { - 'num': '8700000', - 'add_space': 'true', + 'num': ['8700000'], + 'add_space': ['true'], }; final response = await dio.Dio().get( 'https://api.apidash.dev/humanize/social', @@ -329,8 +340,8 @@ void main() async { void main() async { try { final queryParams = { - 'num': '8700000', - 'digits': '3', + 'num': ['8700000'], + 'digits': ['3'], }; final headers = {'User-Agent': 'Test Agent'}; final response = await dio.Dio().get( @@ -777,8 +788,8 @@ void main() async { void main() async { try { final queryParams = { - 'size': '2', - 'len': '3', + 'size': ['2'], + 'len': ['3'], }; final data = dio.FormData(); final List> formDataList = [ @@ -835,8 +846,8 @@ void main() async { void main() async { try { final queryParams = { - 'size': '2', - 'len': '3', + 'size': ['2'], + 'len': ['3'], }; final headers = { 'User-Agent': 'Test Agent', @@ -902,12 +913,14 @@ import 'dart:convert' as convert; void main() async { try { + final headers = {'x-api-key': 'reqres-free-v1'}; final data = convert.json.decode(r'''{ "name": "morpheus", "job": "zion resident" }'''); final response = await dio.Dio().put( 'https://reqres.in/api/users/2', + options: dio.Options(headers: headers), data: data, ); print(response.statusCode); @@ -939,12 +952,14 @@ import 'dart:convert' as convert; void main() async { try { + final headers = {'x-api-key': 'reqres-free-v1'}; final data = convert.json.decode(r'''{ "name": "marfeus", "job": "accountant" }'''); final response = await dio.Dio().patch( 'https://reqres.in/api/users/2', + options: dio.Options(headers: headers), data: data, ); print(response.statusCode); @@ -975,7 +990,11 @@ void main() async { void main() async { try { - final response = await dio.Dio().delete('https://reqres.in/api/users/2'); + final headers = {'x-api-key': 'reqres-free-v1'}; + final response = await dio.Dio().delete( + 'https://reqres.in/api/users/2', + options: dio.Options(headers: headers), + ); print(response.statusCode); print(response.data); } on dio.DioException catch (e, s) { @@ -1003,12 +1022,14 @@ import 'dart:convert' as convert; void main() async { try { + final headers = {'x-api-key': 'reqres-free-v1'}; final data = convert.json.decode(r'''{ "name": "marfeus", "job": "accountant" }'''); final response = await dio.Dio().delete( 'https://reqres.in/api/users/2', + options: dio.Options(headers: headers), data: data, ); print(response.statusCode); diff --git a/test/codegen/dart_http_codegen_test.dart b/test/codegen/dart_http_codegen_test.dart index 77ebc2000..f3704594a 100644 --- a/test/codegen/dart_http_codegen_test.dart +++ b/test/codegen/dart_http_codegen_test.dart @@ -41,7 +41,9 @@ void main() async { void main() async { var uri = Uri.parse('https://api.apidash.dev/country/data'); - var queryParams = {'code': 'US'}; + var queryParams = { + 'code': ['US'] + }; uri = uri.replace(queryParameters: queryParams); final response = await http.get(uri); @@ -70,10 +72,15 @@ void main() async { const expectedCode = r"""import 'package:http/http.dart' as http; void main() async { - var uri = Uri.parse('https://api.apidash.dev/country/data?code=US'); + var uri = Uri.parse('https://api.apidash.dev/country/data'); - var queryParams = {'code': 'IND'}; - var urlQueryParams = Map.from(uri.queryParameters); + var queryParams = { + 'code': [ + 'IND', + 'US', + ] + }; + var urlQueryParams = Map.from(uri.queryParameters); urlQueryParams.addAll(queryParams); uri = uri.replace(queryParameters: urlQueryParams); @@ -105,11 +112,11 @@ void main() async { var uri = Uri.parse('https://api.apidash.dev/humanize/social'); var queryParams = { - 'num': '8700000', - 'digits': '3', - 'system': 'SS', - 'add_space': 'true', - 'trailing_zeros': 'true', + 'num': ['8700000'], + 'digits': ['3'], + 'system': ['SS'], + 'add_space': ['true'], + 'trailing_zeros': ['true'], }; uri = uri.replace(queryParameters: queryParams); @@ -172,7 +179,9 @@ void main() async { void main() async { var uri = Uri.parse('https://api.github.com/repos/foss42/apidash'); - var queryParams = {'raw': 'true'}; + var queryParams = { + 'raw': ['true'] + }; uri = uri.replace(queryParameters: queryParams); var headers = {'User-Agent': 'Test Agent'}; @@ -234,7 +243,9 @@ void main() async { void main() async { var uri = Uri.parse('https://api.github.com/repos/foss42/apidash'); - var queryParams = {'raw': 'true'}; + var queryParams = { + 'raw': ['true'] + }; uri = uri.replace(queryParameters: queryParams); var headers = {'User-Agent': 'Test Agent'}; @@ -270,8 +281,8 @@ void main() async { var uri = Uri.parse('https://api.apidash.dev/humanize/social'); var queryParams = { - 'num': '8700000', - 'add_space': 'true', + 'num': ['8700000'], + 'add_space': ['true'], }; uri = uri.replace(queryParameters: queryParams); @@ -335,8 +346,8 @@ void main() async { var uri = Uri.parse('https://api.apidash.dev/humanize/social'); var queryParams = { - 'num': '8700000', - 'digits': '3', + 'num': ['8700000'], + 'digits': ['3'], }; uri = uri.replace(queryParameters: queryParams); @@ -821,8 +832,8 @@ void main() async { var uri = Uri.parse('https://api.apidash.dev/io/form'); var queryParams = { - 'size': '2', - 'len': '3', + 'size': ['2'], + 'len': ['3'], }; uri = uri.replace(queryParameters: queryParams); @@ -888,8 +899,8 @@ void main() async { var uri = Uri.parse('https://api.apidash.dev/io/img'); var queryParams = { - 'size': '2', - 'len': '3', + 'size': ['2'], + 'len': ['3'], }; uri = uri.replace(queryParameters: queryParams); @@ -967,7 +978,10 @@ void main() async { "job": "zion resident" }'''; - var headers = {'content-type': 'application/json'}; + var headers = { + 'x-api-key': 'reqres-free-v1', + 'content-type': 'application/json', + }; final response = await http.put( uri, @@ -1007,7 +1021,10 @@ void main() async { "job": "accountant" }'''; - var headers = {'content-type': 'application/json'}; + var headers = { + 'x-api-key': 'reqres-free-v1', + 'content-type': 'application/json', + }; final response = await http.patch( uri, @@ -1042,7 +1059,12 @@ void main() async { void main() async { var uri = Uri.parse('https://reqres.in/api/users/2'); - final response = await http.delete(uri); + var headers = {'x-api-key': 'reqres-free-v1'}; + + final response = await http.delete( + uri, + headers: headers, + ); int statusCode = response.statusCode; if (statusCode >= 200 && statusCode < 300) { @@ -1074,7 +1096,10 @@ void main() async { "job": "accountant" }'''; - var headers = {'content-type': 'application/json'}; + var headers = { + 'x-api-key': 'reqres-free-v1', + 'content-type': 'application/json', + }; final response = await http.delete( uri, From 857307db869fec4d42b95db08b3d56a40aa51a31 Mon Sep 17 00:00:00 2001 From: Nikhil Date: Wed, 21 May 2025 14:39:08 +0530 Subject: [PATCH 31/42] updated java test --- lib/codegen/java/async_http_client.dart | 2 +- ... java_async_http_client_codegen_test.dart} | 58 ++-- .../codegen/java_httpclient_codegen_test.dart | 11 +- test/codegen/java_okhttp_codegen_test.dart | 123 +++++---- test/codegen/java_unirest_codegen_test.dart | 252 ++++++++---------- 5 files changed, 220 insertions(+), 226 deletions(-) rename test/codegen/{java_async_http_client_codegen.dart => java_async_http_client_codegen_test.dart} (96%) diff --git a/lib/codegen/java/async_http_client.dart b/lib/codegen/java/async_http_client.dart index e4060995e..da4e3d066 100644 --- a/lib/codegen/java/async_http_client.dart +++ b/lib/codegen/java/async_http_client.dart @@ -36,7 +36,7 @@ public class Main { '''; final String kTemplateRequestCreation = ''' - BoundRequestBuilder requestBuilder = asyncHttpClient.prepare("{{ method|upper }}", url); + BoundRequestBuilder requestBuilder = asyncHttpClient.prepare("{{ method|upper }}", url);\n '''; final String kTemplateUrlQueryParam = ''' diff --git a/test/codegen/java_async_http_client_codegen.dart b/test/codegen/java_async_http_client_codegen_test.dart similarity index 96% rename from test/codegen/java_async_http_client_codegen.dart rename to test/codegen/java_async_http_client_codegen_test.dart index 9de7a1194..3f2b726f6 100644 --- a/test/codegen/java_async_http_client_codegen.dart +++ b/test/codegen/java_async_http_client_codegen_test.dart @@ -58,8 +58,8 @@ public class Main { try (AsyncHttpClient asyncHttpClient = Dsl.asyncHttpClient()) { String url = "https://api.apidash.dev/country/data"; BoundRequestBuilder requestBuilder = asyncHttpClient.prepare("GET", url); - requestBuilder - .addQueryParam("code", "US"); + + requestBuilder.addQueryParam("code", "US"); Future whenResponse = requestBuilder.execute(); Response response = whenResponse.get(); InputStream is = response.getResponseBodyAsStream(); @@ -96,8 +96,9 @@ public class Main { try (AsyncHttpClient asyncHttpClient = Dsl.asyncHttpClient()) { String url = "https://api.apidash.dev/country/data"; BoundRequestBuilder requestBuilder = asyncHttpClient.prepare("GET", url); - requestBuilder - .addQueryParam("code", "IND"); + + requestBuilder.addQueryParam("code", "IND"); + requestBuilder.addQueryParam("code", "US"); Future whenResponse = requestBuilder.execute(); Response response = whenResponse.get(); InputStream is = response.getResponseBodyAsStream(); @@ -134,12 +135,12 @@ public class Main { try (AsyncHttpClient asyncHttpClient = Dsl.asyncHttpClient()) { String url = "https://api.apidash.dev/humanize/social"; BoundRequestBuilder requestBuilder = asyncHttpClient.prepare("GET", url); - requestBuilder - .addQueryParam("num", "8700000") - .addQueryParam("digits", "3") - .addQueryParam("system", "SS") - .addQueryParam("add_space", "true") - .addQueryParam("trailing_zeros", "true"); + + requestBuilder.addQueryParam("num", "8700000"); + requestBuilder.addQueryParam("digits", "3"); + requestBuilder.addQueryParam("system", "SS"); + requestBuilder.addQueryParam("add_space", "true"); + requestBuilder.addQueryParam("trailing_zeros", "true"); Future whenResponse = requestBuilder.execute(); Response response = whenResponse.get(); InputStream is = response.getResponseBodyAsStream(); @@ -214,8 +215,8 @@ public class Main { try (AsyncHttpClient asyncHttpClient = Dsl.asyncHttpClient()) { String url = "https://api.github.com/repos/foss42/apidash"; BoundRequestBuilder requestBuilder = asyncHttpClient.prepare("GET", url); - requestBuilder - .addQueryParam("raw", "true"); + + requestBuilder.addQueryParam("raw", "true"); requestBuilder .addHeader("User-Agent", "Test Agent"); Future whenResponse = requestBuilder.execute(); @@ -290,8 +291,8 @@ public class Main { try (AsyncHttpClient asyncHttpClient = Dsl.asyncHttpClient()) { String url = "https://api.github.com/repos/foss42/apidash"; BoundRequestBuilder requestBuilder = asyncHttpClient.prepare("GET", url); - requestBuilder - .addQueryParam("raw", "true"); + + requestBuilder.addQueryParam("raw", "true"); requestBuilder .addHeader("User-Agent", "Test Agent"); Future whenResponse = requestBuilder.execute(); @@ -330,9 +331,9 @@ public class Main { try (AsyncHttpClient asyncHttpClient = Dsl.asyncHttpClient()) { String url = "https://api.apidash.dev/humanize/social"; BoundRequestBuilder requestBuilder = asyncHttpClient.prepare("GET", url); - requestBuilder - .addQueryParam("num", "8700000") - .addQueryParam("add_space", "true"); + + requestBuilder.addQueryParam("num", "8700000"); + requestBuilder.addQueryParam("add_space", "true"); Future whenResponse = requestBuilder.execute(); Response response = whenResponse.get(); InputStream is = response.getResponseBodyAsStream(); @@ -407,9 +408,9 @@ public class Main { try (AsyncHttpClient asyncHttpClient = Dsl.asyncHttpClient()) { String url = "https://api.apidash.dev/humanize/social"; BoundRequestBuilder requestBuilder = asyncHttpClient.prepare("GET", url); - requestBuilder - .addQueryParam("num", "8700000") - .addQueryParam("digits", "3"); + + requestBuilder.addQueryParam("num", "8700000"); + requestBuilder.addQueryParam("digits", "3"); requestBuilder .addHeader("User-Agent", "Test Agent"); Future whenResponse = requestBuilder.execute(); @@ -953,9 +954,9 @@ public class Main { try (AsyncHttpClient asyncHttpClient = Dsl.asyncHttpClient()) { String url = "https://api.apidash.dev/io/form"; BoundRequestBuilder requestBuilder = asyncHttpClient.prepare("POST", url); - requestBuilder - .addQueryParam("size", "2") - .addQueryParam("len", "3"); + + requestBuilder.addQueryParam("size", "2"); + requestBuilder.addQueryParam("len", "3"); Map params = new HashMap<>() { { @@ -1012,9 +1013,9 @@ public class Main { try (AsyncHttpClient asyncHttpClient = Dsl.asyncHttpClient()) { String url = "https://api.apidash.dev/io/img"; BoundRequestBuilder requestBuilder = asyncHttpClient.prepare("POST", url); - requestBuilder - .addQueryParam("size", "2") - .addQueryParam("len", "3"); + + requestBuilder.addQueryParam("size", "2"); + requestBuilder.addQueryParam("len", "3"); requestBuilder .addHeader("User-Agent", "Test Agent") .addHeader("Keep-Alive", "true"); @@ -1092,6 +1093,7 @@ public class Main { }"""; BoundRequestBuilder requestBuilder = asyncHttpClient.prepare("PUT", url); requestBuilder + .addHeader("x-api-key", "reqres-free-v1") .addHeader("Content-Type", "application/json"); requestBuilder.setBody(bodyContent); Future whenResponse = requestBuilder.execute(); @@ -1138,6 +1140,7 @@ public class Main { }"""; BoundRequestBuilder requestBuilder = asyncHttpClient.prepare("PATCH", url); requestBuilder + .addHeader("x-api-key", "reqres-free-v1") .addHeader("Content-Type", "application/json"); requestBuilder.setBody(bodyContent); Future whenResponse = requestBuilder.execute(); @@ -1178,6 +1181,8 @@ public class Main { try (AsyncHttpClient asyncHttpClient = Dsl.asyncHttpClient()) { String url = "https://reqres.in/api/users/2"; BoundRequestBuilder requestBuilder = asyncHttpClient.prepare("DELETE", url); + requestBuilder + .addHeader("x-api-key", "reqres-free-v1"); Future whenResponse = requestBuilder.execute(); Response response = whenResponse.get(); InputStream is = response.getResponseBodyAsStream(); @@ -1220,6 +1225,7 @@ public class Main { }"""; BoundRequestBuilder requestBuilder = asyncHttpClient.prepare("DELETE", url); requestBuilder + .addHeader("x-api-key", "reqres-free-v1") .addHeader("Content-Type", "application/json"); requestBuilder.setBody(bodyContent); Future whenResponse = requestBuilder.execute(); diff --git a/test/codegen/java_httpclient_codegen_test.dart b/test/codegen/java_httpclient_codegen_test.dart index 5374a7030..08e6e95eb 100644 --- a/test/codegen/java_httpclient_codegen_test.dart +++ b/test/codegen/java_httpclient_codegen_test.dart @@ -73,8 +73,7 @@ public class Main { expectedCode); }); test('GET3', () { - const expectedCode = r''' -import java.net.URI; + const expectedCode = r'''import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; @@ -84,7 +83,7 @@ public class Main { public static void main(String[] args) { try { HttpClient client = HttpClient.newHttpClient(); - URI uri = URI.create("https://api.apidash.dev/country/data?code=IND"); + URI uri = URI.create("https://api.apidash.dev/country/data?code=US&code=IND"); HttpRequest.Builder requestBuilder = HttpRequest.newBuilder(uri).GET(); HttpResponse response = client.send(requestBuilder.build(), HttpResponse.BodyHandlers.ofString()); @@ -1034,6 +1033,7 @@ public class Main { }"""); HttpRequest.Builder requestBuilder = HttpRequest.newBuilder(uri).PUT(bodyPublisher); requestBuilder = requestBuilder.headers( + "x-api-key", "reqres-free-v1", "Content-Type", "application/json" ); HttpResponse response = client.send(requestBuilder.build(), HttpResponse.BodyHandlers.ofString()); @@ -1076,6 +1076,7 @@ public class Main { }"""); HttpRequest.Builder requestBuilder = HttpRequest.newBuilder(uri).method("PATCH", bodyPublisher); requestBuilder = requestBuilder.headers( + "x-api-key", "reqres-free-v1", "Content-Type", "application/json" ); HttpResponse response = client.send(requestBuilder.build(), HttpResponse.BodyHandlers.ofString()); @@ -1113,6 +1114,9 @@ public class Main { URI uri = URI.create("https://reqres.in/api/users/2"); HttpRequest.Builder requestBuilder = HttpRequest.newBuilder(uri).method("DELETE", HttpRequest.BodyPublishers.noBody()); + requestBuilder = requestBuilder.headers( + "x-api-key", "reqres-free-v1" + ); HttpResponse response = client.send(requestBuilder.build(), HttpResponse.BodyHandlers.ofString()); System.out.println("Response body: " + response.body()); System.out.println("Response code: " + response.statusCode()); @@ -1150,6 +1154,7 @@ public class Main { }"""); HttpRequest.Builder requestBuilder = HttpRequest.newBuilder(uri).method("DELETE", bodyPublisher); requestBuilder = requestBuilder.headers( + "x-api-key", "reqres-free-v1", "Content-Type", "application/json" ); HttpResponse response = client.send(requestBuilder.build(), HttpResponse.BodyHandlers.ofString()); diff --git a/test/codegen/java_okhttp_codegen_test.dart b/test/codegen/java_okhttp_codegen_test.dart index e83d8b82c..56e7d66e7 100644 --- a/test/codegen/java_okhttp_codegen_test.dart +++ b/test/codegen/java_okhttp_codegen_test.dart @@ -57,11 +57,11 @@ import java.io.IOException; public class Main { public static void main(String[] args) { OkHttpClient client = new OkHttpClient().newBuilder().build(); - - HttpUrl url = HttpUrl.parse("https://api.apidash.dev/country/data").newBuilder() - .addQueryParameter("code", "US") - .build(); - + HttpUrl.Builder urlBuilder = HttpUrl.parse("https://api.apidash.dev/country/data").newBuilder(); + + urlBuilder.addQueryParameter("code", "US"); + HttpUrl url = urlBuilder.build(); + Request request = new Request.Builder() .url(url) .get() @@ -98,11 +98,12 @@ import java.io.IOException; public class Main { public static void main(String[] args) { OkHttpClient client = new OkHttpClient().newBuilder().build(); - - HttpUrl url = HttpUrl.parse("https://api.apidash.dev/country/data").newBuilder() - .addQueryParameter("code", "IND") - .build(); - + HttpUrl.Builder urlBuilder = HttpUrl.parse("https://api.apidash.dev/country/data").newBuilder(); + + urlBuilder.addQueryParameter("code", "IND"); + urlBuilder.addQueryParameter("code", "US"); + HttpUrl url = urlBuilder.build(); + Request request = new Request.Builder() .url(url) .get() @@ -139,15 +140,15 @@ import java.io.IOException; public class Main { public static void main(String[] args) { OkHttpClient client = new OkHttpClient().newBuilder().build(); - - HttpUrl url = HttpUrl.parse("https://api.apidash.dev/humanize/social").newBuilder() - .addQueryParameter("num", "8700000") - .addQueryParameter("digits", "3") - .addQueryParameter("system", "SS") - .addQueryParameter("add_space", "true") - .addQueryParameter("trailing_zeros", "true") - .build(); - + HttpUrl.Builder urlBuilder = HttpUrl.parse("https://api.apidash.dev/humanize/social").newBuilder(); + + urlBuilder.addQueryParameter("num", "8700000"); + urlBuilder.addQueryParameter("digits", "3"); + urlBuilder.addQueryParameter("system", "SS"); + urlBuilder.addQueryParameter("add_space", "true"); + urlBuilder.addQueryParameter("trailing_zeros", "true"); + HttpUrl url = urlBuilder.build(); + Request request = new Request.Builder() .url(url) .get() @@ -223,11 +224,11 @@ import java.io.IOException; public class Main { public static void main(String[] args) { OkHttpClient client = new OkHttpClient().newBuilder().build(); - - HttpUrl url = HttpUrl.parse("https://api.github.com/repos/foss42/apidash").newBuilder() - .addQueryParameter("raw", "true") - .build(); - + HttpUrl.Builder urlBuilder = HttpUrl.parse("https://api.github.com/repos/foss42/apidash").newBuilder(); + + urlBuilder.addQueryParameter("raw", "true"); + HttpUrl url = urlBuilder.build(); + Request request = new Request.Builder() .url(url) .addHeader("User-Agent", "Test Agent") @@ -303,11 +304,11 @@ import java.io.IOException; public class Main { public static void main(String[] args) { OkHttpClient client = new OkHttpClient().newBuilder().build(); - - HttpUrl url = HttpUrl.parse("https://api.github.com/repos/foss42/apidash").newBuilder() - .addQueryParameter("raw", "true") - .build(); - + HttpUrl.Builder urlBuilder = HttpUrl.parse("https://api.github.com/repos/foss42/apidash").newBuilder(); + + urlBuilder.addQueryParameter("raw", "true"); + HttpUrl url = urlBuilder.build(); + Request request = new Request.Builder() .url(url) .addHeader("User-Agent", "Test Agent") @@ -345,12 +346,12 @@ import java.io.IOException; public class Main { public static void main(String[] args) { OkHttpClient client = new OkHttpClient().newBuilder().build(); - - HttpUrl url = HttpUrl.parse("https://api.apidash.dev/humanize/social").newBuilder() - .addQueryParameter("num", "8700000") - .addQueryParameter("add_space", "true") - .build(); - + HttpUrl.Builder urlBuilder = HttpUrl.parse("https://api.apidash.dev/humanize/social").newBuilder(); + + urlBuilder.addQueryParameter("num", "8700000"); + urlBuilder.addQueryParameter("add_space", "true"); + HttpUrl url = urlBuilder.build(); + Request request = new Request.Builder() .url(url) .get() @@ -426,12 +427,12 @@ import java.io.IOException; public class Main { public static void main(String[] args) { OkHttpClient client = new OkHttpClient().newBuilder().build(); - - HttpUrl url = HttpUrl.parse("https://api.apidash.dev/humanize/social").newBuilder() - .addQueryParameter("num", "8700000") - .addQueryParameter("digits", "3") - .build(); - + HttpUrl.Builder urlBuilder = HttpUrl.parse("https://api.apidash.dev/humanize/social").newBuilder(); + + urlBuilder.addQueryParameter("num", "8700000"); + urlBuilder.addQueryParameter("digits", "3"); + HttpUrl url = urlBuilder.build(); + Request request = new Request.Builder() .url(url) .addHeader("User-Agent", "Test Agent") @@ -590,7 +591,7 @@ public class Main { OkHttpClient client = new OkHttpClient().newBuilder().build(); String url = "https://api.apidash.dev/case/lower"; - + MediaType mediaType = MediaType.parse("text/plain"); RequestBody body = RequestBody.create("{\n\"text\": \"I LOVE Flutter\"\n}", mediaType); @@ -634,7 +635,7 @@ public class Main { OkHttpClient client = new OkHttpClient().newBuilder().build(); String url = "https://api.apidash.dev/case/lower"; - + MediaType mediaType = MediaType.parse("application/json"); RequestBody body = RequestBody.create("{\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}", mediaType); @@ -678,7 +679,7 @@ public class Main { OkHttpClient client = new OkHttpClient().newBuilder().build(); String url = "https://api.apidash.dev/case/lower"; - + MediaType mediaType = MediaType.parse("application/json"); RequestBody body = RequestBody.create("{\n\"text\": \"I LOVE Flutter\"\n}", mediaType); @@ -901,12 +902,12 @@ import java.io.IOException; public class Main { public static void main(String[] args) { OkHttpClient client = new OkHttpClient().newBuilder().build(); - - HttpUrl url = HttpUrl.parse("https://api.apidash.dev/io/form").newBuilder() - .addQueryParameter("size", "2") - .addQueryParameter("len", "3") - .build(); - RequestBody body = new MultipartBody.Builder().setType(MultipartBody.FORM) + HttpUrl.Builder urlBuilder = HttpUrl.parse("https://api.apidash.dev/io/form").newBuilder(); + + urlBuilder.addQueryParameter("size", "2"); + urlBuilder.addQueryParameter("len", "3"); + HttpUrl url = urlBuilder.build(); + RequestBody body = new MultipartBody.Builder().setType(MultipartBody.FORM) .addFormDataPart("text","API") .addFormDataPart("sep","|") .addFormDataPart("times","3") @@ -950,12 +951,12 @@ import java.io.IOException; public class Main { public static void main(String[] args) { OkHttpClient client = new OkHttpClient().newBuilder().build(); - - HttpUrl url = HttpUrl.parse("https://api.apidash.dev/io/img").newBuilder() - .addQueryParameter("size", "2") - .addQueryParameter("len", "3") - .build(); - RequestBody body = new MultipartBody.Builder().setType(MultipartBody.FORM) + HttpUrl.Builder urlBuilder = HttpUrl.parse("https://api.apidash.dev/io/img").newBuilder(); + + urlBuilder.addQueryParameter("size", "2"); + urlBuilder.addQueryParameter("len", "3"); + HttpUrl url = urlBuilder.build(); + RequestBody body = new MultipartBody.Builder().setType(MultipartBody.FORM) .addFormDataPart("token","xyz") .addFormDataPart("imfile",null,RequestBody.create(MediaType.parse("application/octet-stream"),new File("/Documents/up/1.png"))) .build(); @@ -1003,13 +1004,14 @@ public class Main { OkHttpClient client = new OkHttpClient().newBuilder().build(); String url = "https://reqres.in/api/users/2"; - + MediaType mediaType = MediaType.parse("application/json"); RequestBody body = RequestBody.create("{\n\"name\": \"morpheus\",\n\"job\": \"zion resident\"\n}", mediaType); Request request = new Request.Builder() .url(url) + .addHeader("x-api-key", "reqres-free-v1") .put(body) .build(); @@ -1049,13 +1051,14 @@ public class Main { OkHttpClient client = new OkHttpClient().newBuilder().build(); String url = "https://reqres.in/api/users/2"; - + MediaType mediaType = MediaType.parse("application/json"); RequestBody body = RequestBody.create("{\n\"name\": \"marfeus\",\n\"job\": \"accountant\"\n}", mediaType); Request request = new Request.Builder() .url(url) + .addHeader("x-api-key", "reqres-free-v1") .patch(body) .build(); @@ -1096,6 +1099,7 @@ public class Main { Request request = new Request.Builder() .url(url) + .addHeader("x-api-key", "reqres-free-v1") .delete() .build(); @@ -1133,13 +1137,14 @@ public class Main { OkHttpClient client = new OkHttpClient().newBuilder().build(); String url = "https://reqres.in/api/users/2"; - + MediaType mediaType = MediaType.parse("application/json"); RequestBody body = RequestBody.create("{\n\"name\": \"marfeus\",\n\"job\": \"accountant\"\n}", mediaType); Request request = new Request.Builder() .url(url) + .addHeader("x-api-key", "reqres-free-v1") .delete(body) .build(); diff --git a/test/codegen/java_unirest_codegen_test.dart b/test/codegen/java_unirest_codegen_test.dart index a0acf5e4d..53ee803f6 100644 --- a/test/codegen/java_unirest_codegen_test.dart +++ b/test/codegen/java_unirest_codegen_test.dart @@ -9,14 +9,13 @@ void main() { group('GET Request', () { test('GET 1', () { - const expectedCode = r"""import kong.unirest.core.*; + const expectedCode = r"""import kong.unirest.*; public class Main { public static void main(String[] args) { final String requestURL = "https://api.apidash.dev"; - HttpResponse response = Unirest - .get(requestURL) - .asJson(); + HttpResponse response = Unirest.get(requestURL) + .asJson(); System.out.println(response.getStatus()); System.out.println(response.getBody()); } @@ -32,15 +31,14 @@ public class Main { }); test('GET 2', () { - const expectedCode = r"""import kong.unirest.core.*; + const expectedCode = r"""import kong.unirest.*; public class Main { public static void main(String[] args) { final String requestURL = "https://api.apidash.dev/country/data"; - HttpResponse response = Unirest - .get(requestURL) - .queryString("code", "US") - .asJson(); + HttpResponse response = Unirest.get(requestURL) + .queryString("code", "US") + .asJson(); System.out.println(response.getStatus()); System.out.println(response.getBody()); } @@ -56,15 +54,15 @@ public class Main { }); test('GET 3', () { - const expectedCode = r"""import kong.unirest.core.*; + const expectedCode = r"""import kong.unirest.*; public class Main { public static void main(String[] args) { final String requestURL = "https://api.apidash.dev/country/data"; - HttpResponse response = Unirest - .get(requestURL) - .queryString("code", "IND") - .asJson(); + HttpResponse response = Unirest.get(requestURL) + .queryString("code", "IND") + .queryString("code", "US") + .asJson(); System.out.println(response.getStatus()); System.out.println(response.getBody()); } @@ -80,19 +78,18 @@ public class Main { }); test('GET 4', () { - const expectedCode = r"""import kong.unirest.core.*; + const expectedCode = r"""import kong.unirest.*; public class Main { public static void main(String[] args) { final String requestURL = "https://api.apidash.dev/humanize/social"; - HttpResponse response = Unirest - .get(requestURL) - .queryString("num", "8700000") - .queryString("digits", "3") - .queryString("system", "SS") - .queryString("add_space", "true") - .queryString("trailing_zeros", "true") - .asJson(); + HttpResponse response = Unirest.get(requestURL) + .queryString("num", "8700000") + .queryString("digits", "3") + .queryString("system", "SS") + .queryString("add_space", "true") + .queryString("trailing_zeros", "true") + .asJson(); System.out.println(response.getStatus()); System.out.println(response.getBody()); } @@ -108,15 +105,14 @@ public class Main { }); test('GET 5', () { - const expectedCode = r"""import kong.unirest.core.*; + const expectedCode = r"""import kong.unirest.*; public class Main { public static void main(String[] args) { final String requestURL = "https://api.github.com/repos/foss42/apidash"; - HttpResponse response = Unirest - .get(requestURL) + HttpResponse response = Unirest.get(requestURL) .header("User-Agent", "Test Agent") - .asJson(); + .asJson(); System.out.println(response.getStatus()); System.out.println(response.getBody()); } @@ -132,16 +128,15 @@ public class Main { }); test('GET 6', () { - const expectedCode = r"""import kong.unirest.core.*; + const expectedCode = r"""import kong.unirest.*; public class Main { public static void main(String[] args) { final String requestURL = "https://api.github.com/repos/foss42/apidash"; - HttpResponse response = Unirest - .get(requestURL) + HttpResponse response = Unirest.get(requestURL) .header("User-Agent", "Test Agent") - .queryString("raw", "true") - .asJson(); + .queryString("raw", "true") + .asJson(); System.out.println(response.getStatus()); System.out.println(response.getBody()); } @@ -157,14 +152,13 @@ public class Main { }); test('GET 7', () { - const expectedCode = r"""import kong.unirest.core.*; + const expectedCode = r"""import kong.unirest.*; public class Main { public static void main(String[] args) { final String requestURL = "https://api.apidash.dev"; - HttpResponse response = Unirest - .get(requestURL) - .asJson(); + HttpResponse response = Unirest.get(requestURL) + .asJson(); System.out.println(response.getStatus()); System.out.println(response.getBody()); } @@ -180,16 +174,15 @@ public class Main { }); test('GET 8', () { - const expectedCode = r"""import kong.unirest.core.*; + const expectedCode = r"""import kong.unirest.*; public class Main { public static void main(String[] args) { final String requestURL = "https://api.github.com/repos/foss42/apidash"; - HttpResponse response = Unirest - .get(requestURL) + HttpResponse response = Unirest.get(requestURL) .header("User-Agent", "Test Agent") - .queryString("raw", "true") - .asJson(); + .queryString("raw", "true") + .asJson(); System.out.println(response.getStatus()); System.out.println(response.getBody()); } @@ -205,16 +198,15 @@ public class Main { }); test('GET 9', () { - const expectedCode = r"""import kong.unirest.core.*; + const expectedCode = r"""import kong.unirest.*; public class Main { public static void main(String[] args) { final String requestURL = "https://api.apidash.dev/humanize/social"; - HttpResponse response = Unirest - .get(requestURL) - .queryString("num", "8700000") - .queryString("add_space", "true") - .asJson(); + HttpResponse response = Unirest.get(requestURL) + .queryString("num", "8700000") + .queryString("add_space", "true") + .asJson(); System.out.println(response.getStatus()); System.out.println(response.getBody()); } @@ -230,15 +222,14 @@ public class Main { }); test('GET 10', () { - const expectedCode = r"""import kong.unirest.core.*; + const expectedCode = r"""import kong.unirest.*; public class Main { public static void main(String[] args) { final String requestURL = "https://api.apidash.dev/humanize/social"; - HttpResponse response = Unirest - .get(requestURL) + HttpResponse response = Unirest.get(requestURL) .header("User-Agent", "Test Agent") - .asJson(); + .asJson(); System.out.println(response.getStatus()); System.out.println(response.getBody()); } @@ -254,17 +245,16 @@ public class Main { }); test('GET 11', () { - const expectedCode = r"""import kong.unirest.core.*; + const expectedCode = r"""import kong.unirest.*; public class Main { public static void main(String[] args) { final String requestURL = "https://api.apidash.dev/humanize/social"; - HttpResponse response = Unirest - .get(requestURL) + HttpResponse response = Unirest.get(requestURL) .header("User-Agent", "Test Agent") - .queryString("num", "8700000") - .queryString("digits", "3") - .asJson(); + .queryString("num", "8700000") + .queryString("digits", "3") + .asJson(); System.out.println(response.getStatus()); System.out.println(response.getBody()); } @@ -280,14 +270,13 @@ public class Main { }); test('GET 12', () { - const expectedCode = r"""import kong.unirest.core.*; + const expectedCode = r"""import kong.unirest.*; public class Main { public static void main(String[] args) { final String requestURL = "https://api.apidash.dev/humanize/social"; - HttpResponse response = Unirest - .get(requestURL) - .asJson(); + HttpResponse response = Unirest.get(requestURL) + .asJson(); System.out.println(response.getStatus()); System.out.println(response.getBody()); } @@ -305,14 +294,13 @@ public class Main { group('HEAD Request', () { test('HEAD 1', () { - const expectedCode = r"""import kong.unirest.core.*; + const expectedCode = r"""import kong.unirest.*; public class Main { public static void main(String[] args) { final String requestURL = "https://api.apidash.dev"; - HttpResponse response = Unirest - .head(requestURL) - .asJson(); + HttpResponse response = Unirest.head(requestURL) + .asJson(); System.out.println(response.getStatus()); System.out.println(response.getBody()); } @@ -328,14 +316,13 @@ public class Main { }); test('HEAD 2', () { - const expectedCode = r"""import kong.unirest.core.*; + const expectedCode = r"""import kong.unirest.*; public class Main { public static void main(String[] args) { final String requestURL = "http://api.apidash.dev"; - HttpResponse response = Unirest - .head(requestURL) - .asJson(); + HttpResponse response = Unirest.head(requestURL) + .asJson(); System.out.println(response.getStatus()); System.out.println(response.getBody()); } @@ -353,7 +340,7 @@ public class Main { group('POST Request', () { test('POST 1', () { - const expectedCode = r'''import kong.unirest.core.*; + const expectedCode = r'''import kong.unirest.*; public class Main { public static void main(String[] args) { @@ -362,11 +349,10 @@ public class Main { { "text": "I LOVE Flutter" }"""; - HttpResponse response = Unirest - .post(requestURL) + HttpResponse response = Unirest.post(requestURL) .header("Content-Type", "text/plain") - .body(requestBody) - .asJson(); + .body(requestBody) + .asJson(); System.out.println(response.getStatus()); System.out.println(response.getBody()); } @@ -382,7 +368,7 @@ public class Main { }); test('POST 2', () { - const expectedCode = r'''import kong.unirest.core.*; + const expectedCode = r'''import kong.unirest.*; public class Main { public static void main(String[] args) { @@ -396,11 +382,10 @@ public class Main { "no": 1.2, "arr": ["null", "true", "false", null] }"""; - HttpResponse response = Unirest - .post(requestURL) + HttpResponse response = Unirest.post(requestURL) .header("Content-Type", "application/json") - .body(requestBody) - .asJson(); + .body(requestBody) + .asJson(); System.out.println(response.getStatus()); System.out.println(response.getBody()); } @@ -416,7 +401,7 @@ public class Main { }); test('POST 3', () { - const expectedCode = r'''import kong.unirest.core.*; + const expectedCode = r'''import kong.unirest.*; public class Main { public static void main(String[] args) { @@ -425,12 +410,11 @@ public class Main { { "text": "I LOVE Flutter" }"""; - HttpResponse response = Unirest - .post(requestURL) + HttpResponse response = Unirest.post(requestURL) .header("User-Agent", "Test Agent") .header("Content-Type", "application/json") - .body(requestBody) - .asJson(); + .body(requestBody) + .asJson(); System.out.println(response.getStatus()); System.out.println(response.getBody()); } @@ -445,17 +429,16 @@ public class Main { expectedCode); }); test('POST 4', () { - const expectedCode = r"""import kong.unirest.core.*; + const expectedCode = r"""import kong.unirest.*; public class Main { public static void main(String[] args) { final String requestURL = "https://api.apidash.dev/io/form"; - HttpResponse response = Unirest - .post(requestURL) - .field("text", "API") + HttpResponse response = Unirest.post(requestURL) + .field("text", "API") .field("sep", "|") .field("times", "3") - .asJson(); + .asJson(); System.out.println(response.getStatus()); System.out.println(response.getBody()); } @@ -471,18 +454,17 @@ public class Main { }); test('POST 5', () { - const expectedCode = r"""import kong.unirest.core.*; + const expectedCode = r"""import kong.unirest.*; public class Main { public static void main(String[] args) { final String requestURL = "https://api.apidash.dev/io/form"; - HttpResponse response = Unirest - .post(requestURL) + HttpResponse response = Unirest.post(requestURL) .header("User-Agent", "Test Agent") - .field("text", "API") + .field("text", "API") .field("sep", "|") .field("times", "3") - .asJson(); + .asJson(); System.out.println(response.getStatus()); System.out.println(response.getBody()); } @@ -497,18 +479,17 @@ public class Main { expectedCode); }); test('POST 6', () { - const expectedCode = r"""import kong.unirest.core.*; + const expectedCode = r"""import kong.unirest.*; import java.io.File; public class Main { public static void main(String[] args) { final String requestURL = "https://api.apidash.dev/io/img"; - HttpResponse response = Unirest - .post(requestURL) - .field("token", "xyz") + HttpResponse response = Unirest.post(requestURL) + .field("token", "xyz") .field("imfile", new File("/Documents/up/1.png")) - .asJson(); + .asJson(); System.out.println(response.getStatus()); System.out.println(response.getBody()); } @@ -523,18 +504,17 @@ public class Main { expectedCode); }); test('POST 7', () { - const expectedCode = r"""import kong.unirest.core.*; + const expectedCode = r"""import kong.unirest.*; import java.io.File; public class Main { public static void main(String[] args) { final String requestURL = "https://api.apidash.dev/io/img"; - HttpResponse response = Unirest - .post(requestURL) - .field("token", "xyz") + HttpResponse response = Unirest.post(requestURL) + .field("token", "xyz") .field("imfile", new File("/Documents/up/1.png")) - .asJson(); + .asJson(); System.out.println(response.getStatus()); System.out.println(response.getBody()); } @@ -549,19 +529,18 @@ public class Main { expectedCode); }); test('POST 8', () { - const expectedCode = r"""import kong.unirest.core.*; + const expectedCode = r"""import kong.unirest.*; public class Main { public static void main(String[] args) { final String requestURL = "https://api.apidash.dev/io/form"; - HttpResponse response = Unirest - .post(requestURL) - .queryString("size", "2") - .queryString("len", "3") - .field("text", "API") + HttpResponse response = Unirest.post(requestURL) + .queryString("size", "2") + .queryString("len", "3") + .field("text", "API") .field("sep", "|") .field("times", "3") - .asJson(); + .asJson(); System.out.println(response.getStatus()); System.out.println(response.getBody()); } @@ -576,22 +555,21 @@ public class Main { expectedCode); }); test('POST 9', () { - const expectedCode = r"""import kong.unirest.core.*; + const expectedCode = r"""import kong.unirest.*; import java.io.File; public class Main { public static void main(String[] args) { final String requestURL = "https://api.apidash.dev/io/img"; - HttpResponse response = Unirest - .post(requestURL) + HttpResponse response = Unirest.post(requestURL) .header("User-Agent", "Test Agent") .header("Keep-Alive", "true") - .queryString("size", "2") - .queryString("len", "3") - .field("token", "xyz") + .queryString("size", "2") + .queryString("len", "3") + .field("token", "xyz") .field("imfile", new File("/Documents/up/1.png")) - .asJson(); + .asJson(); System.out.println(response.getStatus()); System.out.println(response.getBody()); } @@ -609,7 +587,7 @@ public class Main { group('PUT Request', () { test('PUT 1', () { - const expectedCode = r'''import kong.unirest.core.*; + const expectedCode = r'''import kong.unirest.*; public class Main { public static void main(String[] args) { @@ -619,11 +597,11 @@ public class Main { "name": "morpheus", "job": "zion resident" }"""; - HttpResponse response = Unirest - .put(requestURL) + HttpResponse response = Unirest.put(requestURL) + .header("x-api-key", "reqres-free-v1") .header("Content-Type", "application/json") - .body(requestBody) - .asJson(); + .body(requestBody) + .asJson(); System.out.println(response.getStatus()); System.out.println(response.getBody()); } @@ -641,7 +619,7 @@ public class Main { group('PATCH Request', () { test('PATCH 1', () { - const expectedCode = r'''import kong.unirest.core.*; + const expectedCode = r'''import kong.unirest.*; public class Main { public static void main(String[] args) { @@ -651,11 +629,11 @@ public class Main { "name": "marfeus", "job": "accountant" }"""; - HttpResponse response = Unirest - .patch(requestURL) + HttpResponse response = Unirest.patch(requestURL) + .header("x-api-key", "reqres-free-v1") .header("Content-Type", "application/json") - .body(requestBody) - .asJson(); + .body(requestBody) + .asJson(); System.out.println(response.getStatus()); System.out.println(response.getBody()); } @@ -673,14 +651,14 @@ public class Main { group('DELETE Request', () { test('DELETE 1', () { - const expectedCode = r"""import kong.unirest.core.*; + const expectedCode = r"""import kong.unirest.*; public class Main { public static void main(String[] args) { final String requestURL = "https://reqres.in/api/users/2"; - HttpResponse response = Unirest - .delete(requestURL) - .asJson(); + HttpResponse response = Unirest.delete(requestURL) + .header("x-api-key", "reqres-free-v1") + .asJson(); System.out.println(response.getStatus()); System.out.println(response.getBody()); } @@ -696,7 +674,7 @@ public class Main { }); test('DELETE 2', () { - const expectedCode = r'''import kong.unirest.core.*; + const expectedCode = r'''import kong.unirest.*; public class Main { public static void main(String[] args) { @@ -706,11 +684,11 @@ public class Main { "name": "marfeus", "job": "accountant" }"""; - HttpResponse response = Unirest - .delete(requestURL) + HttpResponse response = Unirest.delete(requestURL) + .header("x-api-key", "reqres-free-v1") .header("Content-Type", "application/json") - .body(requestBody) - .asJson(); + .body(requestBody) + .asJson(); System.out.println(response.getStatus()); System.out.println(response.getBody()); } From 21cc9aaf7376fab419e69d08bd428876aeef97ed Mon Sep 17 00:00:00 2001 From: Nikhil Date: Wed, 21 May 2025 16:37:13 +0530 Subject: [PATCH 32/42] updated js tests --- test/codegen/js_axios_codegen_test.dart | 95 ++++++++++++++------ test/codegen/js_fetch_codegen_test.dart | 113 ++++++++++++------------ test/models/http_request_models.dart | 2 +- 3 files changed, 126 insertions(+), 84 deletions(-) diff --git a/test/codegen/js_axios_codegen_test.dart b/test/codegen/js_axios_codegen_test.dart index 647b3d2d2..eeb98b75c 100644 --- a/test/codegen/js_axios_codegen_test.dart +++ b/test/codegen/js_axios_codegen_test.dart @@ -37,7 +37,9 @@ axios(config) url: 'https://api.apidash.dev/country/data', method: 'get', params: { - "code": "US" + "code": [ + "US" + ] } }; @@ -64,7 +66,10 @@ axios(config) url: 'https://api.apidash.dev/country/data', method: 'get', params: { - "code": "IND" + "code": [ + "IND", + "US" + ] } }; @@ -91,11 +96,21 @@ axios(config) url: 'https://api.apidash.dev/humanize/social', method: 'get', 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" + ] } }; @@ -149,7 +164,9 @@ axios(config) url: 'https://api.github.com/repos/foss42/apidash', method: 'get', params: { - "raw": "true" + "raw": [ + "true" + ] }, headers: { "User-Agent": "Test Agent" @@ -203,7 +220,9 @@ axios(config) url: 'https://api.github.com/repos/foss42/apidash', method: 'get', params: { - "raw": "true" + "raw": [ + "true" + ] }, headers: { "User-Agent": "Test Agent" @@ -233,8 +252,12 @@ axios(config) url: 'https://api.apidash.dev/humanize/social', method: 'get', params: { - "num": "8700000", - "add_space": "true" + "num": [ + "8700000" + ], + "add_space": [ + "true" + ] } }; @@ -288,8 +311,12 @@ axios(config) url: 'https://api.apidash.dev/humanize/social', method: 'get', params: { - "num": "8700000", - "digits": "3" + "num": [ + "8700000" + ], + "digits": [ + "3" + ] }, headers: { "User-Agent": "Test Agent" @@ -609,8 +636,12 @@ axios(config) url: 'https://api.apidash.dev/io/form', method: 'post', params: { - "size": "2", - "len": "3" + "size": [ + "2" + ], + "len": [ + "3" + ] }, headers: { "Content-Type": "multipart/form-data" @@ -647,8 +678,12 @@ const config = { url: 'https://api.apidash.dev/io/img', method: 'post', params: { - "size": "2", - "len": "3" + "size": [ + "2" + ], + "len": [ + "3" + ] }, headers: { "Content-Type": "multipart/form-data", @@ -682,11 +717,13 @@ axios(config) group('PUT Request', () { test('PUT 1', () { - const expectedCode = r"""const config = { + const expectedCode = r""" +const config = { url: 'https://reqres.in/api/users/2', method: 'put', headers: { - "Content-Type": "application/json" + "Content-Type": "application/json", + "x-api-key": "reqres-free-v1" }, data: "{\n\"name\": \"morpheus\",\n\"job\": \"zion resident\"\n}" }; @@ -712,11 +749,13 @@ axios(config) group('PATCH Request', () { test('PATCH 1', () { - const expectedCode = r"""const config = { + const expectedCode = r""" +const config = { url: 'https://reqres.in/api/users/2', method: 'patch', headers: { - "Content-Type": "application/json" + "Content-Type": "application/json", + "x-api-key": "reqres-free-v1" }, data: "{\n\"name\": \"marfeus\",\n\"job\": \"accountant\"\n}" }; @@ -742,9 +781,13 @@ axios(config) group('DELETE Request', () { test('DELETE 1', () { - const expectedCode = r"""const config = { + const expectedCode = r""" +const config = { url: 'https://reqres.in/api/users/2', - method: 'delete' + method: 'delete', + headers: { + "x-api-key": "reqres-free-v1" + } }; axios(config) @@ -766,11 +809,13 @@ axios(config) }); test('DELETE 2', () { - const expectedCode = r"""const config = { + const expectedCode = r""" +const config = { url: 'https://reqres.in/api/users/2', method: 'delete', headers: { - "Content-Type": "application/json" + "Content-Type": "application/json", + "x-api-key": "reqres-free-v1" }, data: "{\n\"name\": \"marfeus\",\n\"job\": \"accountant\"\n}" }; diff --git a/test/codegen/js_fetch_codegen_test.dart b/test/codegen/js_fetch_codegen_test.dart index 7235d4839..db4696e41 100644 --- a/test/codegen/js_fetch_codegen_test.dart +++ b/test/codegen/js_fetch_codegen_test.dart @@ -9,8 +9,7 @@ void main() { group('GET Request', () { test('GET 1', () { - const expectedCode = r"""const url = 'https://api.apidash.dev'; - + const expectedCode = r"""const url = new URL('https://api.apidash.dev'); const options = { method: 'GET' }; @@ -38,8 +37,8 @@ fetch(url, options) test('GET 2', () { const expectedCode = - r"""const url = 'https://api.apidash.dev/country/data?code=US'; - + r"""const url = new URL('https://api.apidash.dev/country/data'); +url.searchParams.append('code', 'US'); const options = { method: 'GET' }; @@ -67,8 +66,9 @@ fetch(url, options) test('GET 3', () { const expectedCode = - r"""const url = 'https://api.apidash.dev/country/data?code=IND'; - + r"""const url = new URL('https://api.apidash.dev/country/data'); +url.searchParams.append('code', 'IND'); +url.searchParams.append('code', 'US'); const options = { method: 'GET' }; @@ -96,8 +96,12 @@ fetch(url, options) test('GET 4', () { const expectedCode = - r"""const url = 'https://api.apidash.dev/humanize/social?num=8700000&digits=3&system=SS&add_space=true&trailing_zeros=true'; - + r"""const url = new URL('https://api.apidash.dev/humanize/social'); +url.searchParams.append('num', '8700000'); +url.searchParams.append('digits', '3'); +url.searchParams.append('system', 'SS'); +url.searchParams.append('add_space', 'true'); +url.searchParams.append('trailing_zeros', 'true'); const options = { method: 'GET' }; @@ -125,8 +129,7 @@ fetch(url, options) test('GET 5', () { const expectedCode = - r"""const url = 'https://api.github.com/repos/foss42/apidash'; - + r"""const url = new URL('https://api.github.com/repos/foss42/apidash'); const options = { method: 'GET', headers: { @@ -157,8 +160,8 @@ fetch(url, options) test('GET 6', () { const expectedCode = - r"""const url = 'https://api.github.com/repos/foss42/apidash?raw=true'; - + r"""const url = new URL('https://api.github.com/repos/foss42/apidash'); +url.searchParams.append('raw', 'true'); const options = { method: 'GET', headers: { @@ -188,8 +191,7 @@ fetch(url, options) }); test('GET 7', () { - const expectedCode = r"""const url = 'https://api.apidash.dev'; - + const expectedCode = r"""const url = new URL('https://api.apidash.dev'); const options = { method: 'GET' }; @@ -217,8 +219,8 @@ fetch(url, options) test('GET 8', () { const expectedCode = - r"""const url = 'https://api.github.com/repos/foss42/apidash?raw=true'; - + r"""const url = new URL('https://api.github.com/repos/foss42/apidash'); +url.searchParams.append('raw', 'true'); const options = { method: 'GET', headers: { @@ -249,8 +251,9 @@ fetch(url, options) test('GET 9', () { const expectedCode = - r"""const url = 'https://api.apidash.dev/humanize/social?num=8700000&add_space=true'; - + r"""const url = new URL('https://api.apidash.dev/humanize/social'); +url.searchParams.append('num', '8700000'); +url.searchParams.append('add_space', 'true'); const options = { method: 'GET' }; @@ -278,8 +281,7 @@ fetch(url, options) test('GET 10', () { const expectedCode = - r"""const url = 'https://api.apidash.dev/humanize/social'; - + r"""const url = new URL('https://api.apidash.dev/humanize/social'); const options = { method: 'GET', headers: { @@ -310,8 +312,9 @@ fetch(url, options) test('GET 11', () { const expectedCode = - r"""const url = 'https://api.apidash.dev/humanize/social?num=8700000&digits=3'; - + r"""const url = new URL('https://api.apidash.dev/humanize/social'); +url.searchParams.append('num', '8700000'); +url.searchParams.append('digits', '3'); const options = { method: 'GET', headers: { @@ -342,8 +345,7 @@ fetch(url, options) test('GET 12', () { const expectedCode = - r"""const url = 'https://api.apidash.dev/humanize/social'; - + r"""const url = new URL('https://api.apidash.dev/humanize/social'); const options = { method: 'GET' }; @@ -372,8 +374,7 @@ fetch(url, options) group('HEAD Request', () { test('HEAD 1', () { - const expectedCode = r"""const url = 'https://api.apidash.dev'; - + const expectedCode = r"""const url = new URL('https://api.apidash.dev'); const options = { method: 'HEAD' }; @@ -400,8 +401,7 @@ fetch(url, options) }); test('HEAD 2', () { - const expectedCode = r"""const url = 'http://api.apidash.dev'; - + const expectedCode = r"""const url = new URL('http://api.apidash.dev'); const options = { method: 'HEAD' }; @@ -430,8 +430,7 @@ fetch(url, options) group('POST Request', () { test('POST 1', () { - const expectedCode = r"""const url = 'https://api.apidash.dev/case/lower'; - + const expectedCode = r"""const url = new URL('https://api.apidash.dev/case/lower'); const options = { method: 'POST', headers: { @@ -462,8 +461,7 @@ fetch(url, options) }); test('POST 2', () { - const expectedCode = r"""const url = 'https://api.apidash.dev/case/lower'; - + const expectedCode = r"""const url = new URL('https://api.apidash.dev/case/lower'); const options = { method: 'POST', headers: { @@ -494,8 +492,7 @@ fetch(url, options) }); test('POST 3', () { - const expectedCode = r"""const url = 'https://api.apidash.dev/case/lower'; - + const expectedCode = r"""const url = new URL('https://api.apidash.dev/case/lower'); const options = { method: 'POST', headers: { @@ -531,8 +528,7 @@ payload.append("text", "API") payload.append("sep", "|") payload.append("times", "3") -const url = 'https://api.apidash.dev/io/form'; - +const url = new URL('https://api.apidash.dev/io/form'); const options = { method: 'POST', body: payload @@ -565,8 +561,7 @@ payload.append("text", "API") payload.append("sep", "|") payload.append("times", "3") -const url = 'https://api.apidash.dev/io/form'; - +const url = new URL('https://api.apidash.dev/io/form'); const options = { method: 'POST', headers: { @@ -603,8 +598,7 @@ const payload = new FormData(); payload.append("token", "xyz") payload.append("imfile", fileInput1.files[0]) -const url = 'https://api.apidash.dev/io/img'; - +const url = new URL('https://api.apidash.dev/io/img'); const options = { method: 'POST', body: payload @@ -638,8 +632,7 @@ const payload = new FormData(); payload.append("token", "xyz") payload.append("imfile", fileInput1.files[0]) -const url = 'https://api.apidash.dev/io/img'; - +const url = new URL('https://api.apidash.dev/io/img'); const options = { method: 'POST', body: payload @@ -671,8 +664,9 @@ payload.append("text", "API") payload.append("sep", "|") payload.append("times", "3") -const url = 'https://api.apidash.dev/io/form?size=2&len=3'; - +const url = new URL('https://api.apidash.dev/io/form'); +url.searchParams.append('size', '2'); +url.searchParams.append('len', '3'); const options = { method: 'POST', body: payload @@ -706,8 +700,9 @@ const payload = new FormData(); payload.append("token", "xyz") payload.append("imfile", fileInput1.files[0]) -const url = 'https://api.apidash.dev/io/img?size=2&len=3'; - +const url = new URL('https://api.apidash.dev/io/img'); +url.searchParams.append('size', '2'); +url.searchParams.append('len', '3'); const options = { method: 'POST', headers: { @@ -741,12 +736,12 @@ fetch(url, options) group('PUT Request', () { test('PUT 1', () { - const expectedCode = r"""const url = 'https://reqres.in/api/users/2'; - + const expectedCode = r"""const url = new URL('https://reqres.in/api/users/2'); const options = { method: 'PUT', headers: { - "Content-Type": "application/json" + "Content-Type": "application/json", + "x-api-key": "reqres-free-v1" }, body: "{\n\"name\": \"morpheus\",\n\"job\": \"zion resident\"\n}" }; @@ -775,12 +770,12 @@ fetch(url, options) group('PATCH Request', () { test('PATCH 1', () { - const expectedCode = r"""const url = 'https://reqres.in/api/users/2'; - + const expectedCode = r"""const url = new URL('https://reqres.in/api/users/2'); const options = { method: 'PATCH', headers: { - "Content-Type": "application/json" + "Content-Type": "application/json", + "x-api-key": "reqres-free-v1" }, body: "{\n\"name\": \"marfeus\",\n\"job\": \"accountant\"\n}" }; @@ -809,10 +804,12 @@ fetch(url, options) group('DELETE Request', () { test('DELETE 1', () { - const expectedCode = r"""const url = 'https://reqres.in/api/users/2'; - + const expectedCode = r"""const url = new URL('https://reqres.in/api/users/2'); const options = { - method: 'DELETE' + method: 'DELETE', + headers: { + "x-api-key": "reqres-free-v1" + } }; fetch(url, options) @@ -837,12 +834,12 @@ fetch(url, options) }); test('DELETE 2', () { - const expectedCode = r"""const url = 'https://reqres.in/api/users/2'; - + const expectedCode = r"""const url = new URL('https://reqres.in/api/users/2'); const options = { method: 'DELETE', headers: { - "Content-Type": "application/json" + "Content-Type": "application/json", + "x-api-key": "reqres-free-v1" }, body: "{\n\"name\": \"marfeus\",\n\"job\": \"accountant\"\n}" }; diff --git a/test/models/http_request_models.dart b/test/models/http_request_models.dart index 93bcbf0c1..ca1ad239c 100644 --- a/test/models/http_request_models.dart +++ b/test/models/http_request_models.dart @@ -15,7 +15,7 @@ const httpRequestModelGet2 = HttpRequestModel( ], ); -/// GET request model with query param having multiple values +/// GET request model with query param having multiple values (The code should handle both paramaters) const httpRequestModelGet3 = HttpRequestModel( url: 'https://api.apidash.dev/country/data?code=US', method: HTTPVerb.get, From f1d6673dc3a7eacc79d5cd7f86353abe9eb1f121 Mon Sep 17 00:00:00 2001 From: Nikhil Date: Thu, 22 May 2025 06:29:54 +0530 Subject: [PATCH 33/42] updated julia tests --- test/codegen/julia_http_codegen_test.dart | 97 ++++++++++++----------- 1 file changed, 52 insertions(+), 45 deletions(-) diff --git a/test/codegen/julia_http_codegen_test.dart b/test/codegen/julia_http_codegen_test.dart index ef4c3896a..7be9c51a3 100644 --- a/test/codegen/julia_http_codegen_test.dart +++ b/test/codegen/julia_http_codegen_test.dart @@ -15,7 +15,7 @@ url = "https://api.apidash.dev" response = HTTP.request("GET", url, status_exception=false) -println("Status Code: $(response.status) $(HTTP.StatusCodes.statustext(response.status))") +println("Status Code: $(response.status)") println("Response Body: \n$(String(response.body))") """; expect( @@ -32,12 +32,12 @@ println("Response Body: \n$(String(response.body))") url = "https://api.apidash.dev/country/data" params = Dict( - "code" => "US", + "code" =>["US"], ) response = HTTP.request("GET", url, query=params, status_exception=false) -println("Status Code: $(response.status) $(HTTP.StatusCodes.statustext(response.status))") +println("Status Code: $(response.status)") println("Response Body: \n$(String(response.body))") """; expect( @@ -54,12 +54,12 @@ println("Response Body: \n$(String(response.body))") url = "https://api.apidash.dev/country/data" params = Dict( - "code" => "IND", + "code" =>["IND","US"], ) response = HTTP.request("GET", url, query=params, status_exception=false) -println("Status Code: $(response.status) $(HTTP.StatusCodes.statustext(response.status))") +println("Status Code: $(response.status)") println("Response Body: \n$(String(response.body))") """; expect( @@ -76,16 +76,16 @@ println("Response Body: \n$(String(response.body))") url = "https://api.apidash.dev/humanize/social" params = Dict( - "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 = HTTP.request("GET", url, query=params, status_exception=false) -println("Status Code: $(response.status) $(HTTP.StatusCodes.statustext(response.status))") +println("Status Code: $(response.status)") println("Response Body: \n$(String(response.body))") """; expect( @@ -108,7 +108,7 @@ headers = Dict( response = HTTP.request("GET", url, headers=headers, status_exception=false) -println("Status Code: $(response.status) $(HTTP.StatusCodes.statustext(response.status))") +println("Status Code: $(response.status)") println("Response Body: \n$(String(response.body))") """; expect( @@ -126,7 +126,7 @@ println("Response Body: \n$(String(response.body))") url = "https://api.github.com/repos/foss42/apidash" params = Dict( - "raw" => "true", + "raw" =>["true"], ) headers = Dict( @@ -135,7 +135,7 @@ headers = Dict( response = HTTP.request("GET", url, headers=headers, query=params, status_exception=false) -println("Status Code: $(response.status) $(HTTP.StatusCodes.statustext(response.status))") +println("Status Code: $(response.status)") println("Response Body: \n$(String(response.body))") """; expect( @@ -154,7 +154,7 @@ url = "https://api.apidash.dev" response = HTTP.request("GET", url, status_exception=false) -println("Status Code: $(response.status) $(HTTP.StatusCodes.statustext(response.status))") +println("Status Code: $(response.status)") println("Response Body: \n$(String(response.body))") """; expect( @@ -172,7 +172,7 @@ println("Response Body: \n$(String(response.body))") url = "https://api.github.com/repos/foss42/apidash" params = Dict( - "raw" => "true", + "raw" =>["true"], ) headers = Dict( @@ -181,7 +181,7 @@ headers = Dict( response = HTTP.request("GET", url, headers=headers, query=params, status_exception=false) -println("Status Code: $(response.status) $(HTTP.StatusCodes.statustext(response.status))") +println("Status Code: $(response.status)") println("Response Body: \n$(String(response.body))") """; expect( @@ -199,13 +199,13 @@ println("Response Body: \n$(String(response.body))") url = "https://api.apidash.dev/humanize/social" params = Dict( - "num" => "8700000", - "add_space" => "true", + "num" =>["8700000"], + "add_space" =>["true"], ) response = HTTP.request("GET", url, query=params, status_exception=false) -println("Status Code: $(response.status) $(HTTP.StatusCodes.statustext(response.status))") +println("Status Code: $(response.status)") println("Response Body: \n$(String(response.body))") """; expect( @@ -228,7 +228,7 @@ headers = Dict( response = HTTP.request("GET", url, headers=headers, status_exception=false) -println("Status Code: $(response.status) $(HTTP.StatusCodes.statustext(response.status))") +println("Status Code: $(response.status)") println("Response Body: \n$(String(response.body))") """; expect( @@ -246,8 +246,8 @@ println("Response Body: \n$(String(response.body))") url = "https://api.apidash.dev/humanize/social" params = Dict( - "num" => "8700000", - "digits" => "3", + "num" =>["8700000"], + "digits" =>["3"], ) headers = Dict( @@ -256,7 +256,7 @@ headers = Dict( response = HTTP.request("GET", url, headers=headers, query=params, status_exception=false) -println("Status Code: $(response.status) $(HTTP.StatusCodes.statustext(response.status))") +println("Status Code: $(response.status)") println("Response Body: \n$(String(response.body))") """; expect( @@ -275,7 +275,7 @@ url = "https://api.apidash.dev/humanize/social" response = HTTP.request("GET", url, status_exception=false) -println("Status Code: $(response.status) $(HTTP.StatusCodes.statustext(response.status))") +println("Status Code: $(response.status)") println("Response Body: \n$(String(response.body))") """; expect( @@ -296,7 +296,7 @@ url = "https://api.apidash.dev" response = HTTP.request("HEAD", url, status_exception=false) -println("Status Code: $(response.status) $(HTTP.StatusCodes.statustext(response.status))") +println("Status Code: $(response.status)") println("Response Body: \n$(String(response.body))") """; expect( @@ -315,7 +315,7 @@ url = "http://api.apidash.dev" response = HTTP.request("HEAD", url, status_exception=false) -println("Status Code: $(response.status) $(HTTP.StatusCodes.statustext(response.status))") +println("Status Code: $(response.status)") println("Response Body: \n$(String(response.body))") """; expect( @@ -344,7 +344,7 @@ headers = Dict( response = HTTP.request("POST", url, headers=headers, body=payload, status_exception=false) -println("Status Code: $(response.status) $(HTTP.StatusCodes.statustext(response.status))") +println("Status Code: $(response.status)") println("Response Body: \n$(String(response.body))") '''; expect( @@ -376,7 +376,7 @@ headers = Dict( response = HTTP.request("POST", url, headers=headers, body=payload, status_exception=false) -println("Status Code: $(response.status) $(HTTP.StatusCodes.statustext(response.status))") +println("Status Code: $(response.status)") println("Response Body: \n$(String(response.body))") '''; expect( @@ -403,7 +403,7 @@ headers = Dict( response = HTTP.request("POST", url, headers=headers, body=payload, status_exception=false) -println("Status Code: $(response.status) $(HTTP.StatusCodes.statustext(response.status))") +println("Status Code: $(response.status)") println("Response Body: \n$(String(response.body))") '''; expect( @@ -430,7 +430,7 @@ payload = HTTP.Form(data) response = HTTP.request("POST", url, body=payload, status_exception=false) -println("Status Code: $(response.status) $(HTTP.StatusCodes.statustext(response.status))") +println("Status Code: $(response.status)") println("Response Body: \n$(String(response.body))") """; expect( @@ -461,7 +461,7 @@ headers = Dict( response = HTTP.request("POST", url, headers=headers, body=payload, status_exception=false) -println("Status Code: $(response.status) $(HTTP.StatusCodes.statustext(response.status))") +println("Status Code: $(response.status)") println("Response Body: \n$(String(response.body))") """; expect( @@ -486,7 +486,7 @@ payload = HTTP.Form(data) response = HTTP.request("POST", url, body=payload, status_exception=false) -println("Status Code: $(response.status) $(HTTP.StatusCodes.statustext(response.status))") +println("Status Code: $(response.status)") println("Response Body: \n$(String(response.body))") """; expect( @@ -511,7 +511,7 @@ payload = HTTP.Form(data) response = HTTP.request("POST", url, body=payload, status_exception=false) -println("Status Code: $(response.status) $(HTTP.StatusCodes.statustext(response.status))") +println("Status Code: $(response.status)") println("Response Body: \n$(String(response.body))") """; expect( @@ -528,8 +528,8 @@ println("Response Body: \n$(String(response.body))") url = "https://api.apidash.dev/io/form" params = Dict( - "size" => "2", - "len" => "3", + "size" =>["2"], + "len" =>["3"], ) data = Dict( @@ -542,7 +542,7 @@ payload = HTTP.Form(data) response = HTTP.request("POST", url, body=payload, query=params, status_exception=false) -println("Status Code: $(response.status) $(HTTP.StatusCodes.statustext(response.status))") +println("Status Code: $(response.status)") println("Response Body: \n$(String(response.body))") """; expect( @@ -559,8 +559,8 @@ println("Response Body: \n$(String(response.body))") url = "https://api.apidash.dev/io/img" params = Dict( - "size" => "2", - "len" => "3", + "size" =>["2"], + "len" =>["3"], ) data = Dict( @@ -577,7 +577,7 @@ headers = Dict( response = HTTP.request("POST", url, headers=headers, body=payload, query=params, status_exception=false) -println("Status Code: $(response.status) $(HTTP.StatusCodes.statustext(response.status))") +println("Status Code: $(response.status)") println("Response Body: \n$(String(response.body))") """; expect( @@ -601,12 +601,13 @@ payload = """{ }""" headers = Dict( + "x-api-key" => "reqres-free-v1", "content-type" => "application/json", ) response = HTTP.request("PUT", url, headers=headers, body=payload, status_exception=false) -println("Status Code: $(response.status) $(HTTP.StatusCodes.statustext(response.status))") +println("Status Code: $(response.status)") println("Response Body: \n$(String(response.body))") '''; expect( @@ -630,12 +631,13 @@ payload = """{ }""" headers = Dict( + "x-api-key" => "reqres-free-v1", "content-type" => "application/json", ) response = HTTP.request("PATCH", url, headers=headers, body=payload, status_exception=false) -println("Status Code: $(response.status) $(HTTP.StatusCodes.statustext(response.status))") +println("Status Code: $(response.status)") println("Response Body: \n$(String(response.body))") '''; expect( @@ -653,9 +655,13 @@ println("Response Body: \n$(String(response.body))") url = "https://reqres.in/api/users/2" -response = HTTP.request("DELETE", url, status_exception=false) +headers = Dict( + "x-api-key" => "reqres-free-v1", +) + +response = HTTP.request("DELETE", url, headers=headers, status_exception=false) -println("Status Code: $(response.status) $(HTTP.StatusCodes.statustext(response.status))") +println("Status Code: $(response.status)") println("Response Body: \n$(String(response.body))") """; expect( @@ -677,12 +683,13 @@ payload = """{ }""" headers = Dict( + "x-api-key" => "reqres-free-v1", "content-type" => "application/json", ) response = HTTP.request("DELETE", url, headers=headers, body=payload, status_exception=false) -println("Status Code: $(response.status) $(HTTP.StatusCodes.statustext(response.status))") +println("Status Code: $(response.status)") println("Response Body: \n$(String(response.body))") '''; expect( From 857e0c12ec40b77674819ff21dca0f4fa2ba1c32 Mon Sep 17 00:00:00 2001 From: Nikhil Date: Thu, 22 May 2025 06:57:13 +0530 Subject: [PATCH 34/42] updated kotlin tests --- test/codegen/kotlin_okhttp_codegen_test.dart | 57 +++++++++++--------- 1 file changed, 31 insertions(+), 26 deletions(-) diff --git a/test/codegen/kotlin_okhttp_codegen_test.dart b/test/codegen/kotlin_okhttp_codegen_test.dart index cc9871bb0..f2f58c4d0 100644 --- a/test/codegen/kotlin_okhttp_codegen_test.dart +++ b/test/codegen/kotlin_okhttp_codegen_test.dart @@ -46,8 +46,8 @@ fun main() { val client = OkHttpClient() val url = "https://api.apidash.dev/country/data".toHttpUrl().newBuilder() - .addQueryParameter("code", "US") - .build() + .addQueryParameter("code", "US") + .build() val request = Request.Builder() .url(url) @@ -78,8 +78,9 @@ fun main() { val client = OkHttpClient() val url = "https://api.apidash.dev/country/data".toHttpUrl().newBuilder() - .addQueryParameter("code", "IND") - .build() + .addQueryParameter("code", "IND") + .addQueryParameter("code", "US") + .build() val request = Request.Builder() .url(url) @@ -110,12 +111,12 @@ fun main() { val client = OkHttpClient() val url = "https://api.apidash.dev/humanize/social".toHttpUrl().newBuilder() - .addQueryParameter("num", "8700000") - .addQueryParameter("digits", "3") - .addQueryParameter("system", "SS") - .addQueryParameter("add_space", "true") - .addQueryParameter("trailing_zeros", "true") - .build() + .addQueryParameter("num", "8700000") + .addQueryParameter("digits", "3") + .addQueryParameter("system", "SS") + .addQueryParameter("add_space", "true") + .addQueryParameter("trailing_zeros", "true") + .build() val request = Request.Builder() .url(url) @@ -176,8 +177,8 @@ fun main() { val client = OkHttpClient() val url = "https://api.github.com/repos/foss42/apidash".toHttpUrl().newBuilder() - .addQueryParameter("raw", "true") - .build() + .addQueryParameter("raw", "true") + .build() val request = Request.Builder() .url(url) @@ -238,8 +239,8 @@ fun main() { val client = OkHttpClient() val url = "https://api.github.com/repos/foss42/apidash".toHttpUrl().newBuilder() - .addQueryParameter("raw", "true") - .build() + .addQueryParameter("raw", "true") + .build() val request = Request.Builder() .url(url) @@ -271,9 +272,9 @@ fun main() { val client = OkHttpClient() val url = "https://api.apidash.dev/humanize/social".toHttpUrl().newBuilder() - .addQueryParameter("num", "8700000") - .addQueryParameter("add_space", "true") - .build() + .addQueryParameter("num", "8700000") + .addQueryParameter("add_space", "true") + .build() val request = Request.Builder() .url(url) @@ -334,9 +335,9 @@ fun main() { val client = OkHttpClient() val url = "https://api.apidash.dev/humanize/social".toHttpUrl().newBuilder() - .addQueryParameter("num", "8700000") - .addQueryParameter("digits", "3") - .build() + .addQueryParameter("num", "8700000") + .addQueryParameter("digits", "3") + .build() val request = Request.Builder() .url(url) @@ -712,9 +713,9 @@ fun main() { val client = OkHttpClient() val url = "https://api.apidash.dev/io/form".toHttpUrl().newBuilder() - .addQueryParameter("size", "2") - .addQueryParameter("len", "3") - .build() + .addQueryParameter("size", "2") + .addQueryParameter("len", "3") + .build() val body = MultipartBody.Builder().setType(MultipartBody.FORM).addFormDataPart("text","API") .addFormDataPart("sep","|") .addFormDataPart("times","3") @@ -751,9 +752,9 @@ fun main() { val client = OkHttpClient() val url = "https://api.apidash.dev/io/img".toHttpUrl().newBuilder() - .addQueryParameter("size", "2") - .addQueryParameter("len", "3") - .build() + .addQueryParameter("size", "2") + .addQueryParameter("len", "3") + .build() val body = MultipartBody.Builder().setType(MultipartBody.FORM).addFormDataPart("token","xyz") .addFormDataPart("imfile",File("Documents/up/1.png").name,File("Documents/up/1.png").asRequestBody("application/octet-stream".toMediaType())) @@ -802,6 +803,7 @@ fun main() { val request = Request.Builder() .url(url) + .addHeader("x-api-key", "reqres-free-v1") .put(body) .build() @@ -842,6 +844,7 @@ fun main() { val request = Request.Builder() .url(url) + .addHeader("x-api-key", "reqres-free-v1") .patch(body) .build() @@ -873,6 +876,7 @@ fun main() { val request = Request.Builder() .url(url) + .addHeader("x-api-key", "reqres-free-v1") .delete() .build() @@ -911,6 +915,7 @@ fun main() { val request = Request.Builder() .url(url) + .addHeader("x-api-key", "reqres-free-v1") .delete(body) .build() From f2ca3ea9256ce3725fd3f8194d54dbe72864fc83 Mon Sep 17 00:00:00 2001 From: Nikhil Date: Thu, 22 May 2025 11:51:08 +0530 Subject: [PATCH 35/42] updated nodejs test and codegen --- lib/codegen/js/axios.dart | 7 +- test/codegen/nodejs_axios_codegen_test.dart | 164 ++++++++++++++------ test/codegen/nodejs_fetch_codegen_test.dart | 113 +++++++------- 3 files changed, 176 insertions(+), 108 deletions(-) diff --git a/lib/codegen/js/axios.dart b/lib/codegen/js/axios.dart index 11338791a..75c6db3a1 100644 --- a/lib/codegen/js/axios.dart +++ b/lib/codegen/js/axios.dart @@ -8,10 +8,10 @@ class AxiosCodeGen { final bool isNodeJs; String kStringImportNode = """import axios from 'axios'; +import qs from 'qs'; {%if hasFileInFormData -%} import fs from 'fs' {% endif %} - """; String kTemplateStart = """const config = { @@ -20,7 +20,10 @@ import fs from 'fs' """; String kTemplateParams = """, - params: {{params}} + params: {{params}}, + paramsSerializer: (params) => { + return qs.stringify(params, { arrayFormat: 'repeat' }); + } """; String kTemplateHeader = """, diff --git a/test/codegen/nodejs_axios_codegen_test.dart b/test/codegen/nodejs_axios_codegen_test.dart index 3237072a9..9688a5ea1 100644 --- a/test/codegen/nodejs_axios_codegen_test.dart +++ b/test/codegen/nodejs_axios_codegen_test.dart @@ -10,7 +10,7 @@ void main() { group('GET Request', () { test('GET 1', () { const expectedCode = r"""import axios from 'axios'; - +import qs from 'qs'; const config = { url: 'https://api.apidash.dev', method: 'get' @@ -36,12 +36,17 @@ axios(config) test('GET 2', () { const expectedCode = r"""import axios from 'axios'; - +import qs from 'qs'; const config = { url: 'https://api.apidash.dev/country/data', method: 'get', params: { - "code": "US" + "code": [ + "US" + ] + }, + paramsSerializer: (params) => { + return qs.stringify(params, { arrayFormat: 'repeat' }); } }; @@ -65,12 +70,18 @@ axios(config) test('GET 3', () { const expectedCode = r"""import axios from 'axios'; - +import qs from 'qs'; const config = { url: 'https://api.apidash.dev/country/data', method: 'get', params: { - "code": "IND" + "code": [ + "IND", + "US" + ] + }, + paramsSerializer: (params) => { + return qs.stringify(params, { arrayFormat: 'repeat' }); } }; @@ -94,16 +105,29 @@ axios(config) test('GET 4', () { const expectedCode = r"""import axios from 'axios'; - +import qs from 'qs'; const config = { url: 'https://api.apidash.dev/humanize/social', method: 'get', 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" + ] + }, + paramsSerializer: (params) => { + return qs.stringify(params, { arrayFormat: 'repeat' }); } }; @@ -127,7 +151,7 @@ axios(config) test('GET 5', () { const expectedCode = r"""import axios from 'axios'; - +import qs from 'qs'; const config = { url: 'https://api.github.com/repos/foss42/apidash', method: 'get', @@ -156,12 +180,17 @@ axios(config) test('GET 6', () { const expectedCode = r"""import axios from 'axios'; - +import qs from 'qs'; const config = { url: 'https://api.github.com/repos/foss42/apidash', method: 'get', params: { - "raw": "true" + "raw": [ + "true" + ] + }, + paramsSerializer: (params) => { + return qs.stringify(params, { arrayFormat: 'repeat' }); }, headers: { "User-Agent": "Test Agent" @@ -188,7 +217,7 @@ axios(config) test('GET 7', () { const expectedCode = r"""import axios from 'axios'; - +import qs from 'qs'; const config = { url: 'https://api.apidash.dev', method: 'get' @@ -214,12 +243,17 @@ axios(config) test('GET 8', () { const expectedCode = r"""import axios from 'axios'; - +import qs from 'qs'; const config = { url: 'https://api.github.com/repos/foss42/apidash', method: 'get', params: { - "raw": "true" + "raw": [ + "true" + ] + }, + paramsSerializer: (params) => { + return qs.stringify(params, { arrayFormat: 'repeat' }); }, headers: { "User-Agent": "Test Agent" @@ -246,13 +280,20 @@ axios(config) test('GET 9', () { const expectedCode = r"""import axios from 'axios'; - +import qs from 'qs'; const config = { url: 'https://api.apidash.dev/humanize/social', method: 'get', params: { - "num": "8700000", - "add_space": "true" + "num": [ + "8700000" + ], + "add_space": [ + "true" + ] + }, + paramsSerializer: (params) => { + return qs.stringify(params, { arrayFormat: 'repeat' }); } }; @@ -276,7 +317,7 @@ axios(config) test('GET 10', () { const expectedCode = r"""import axios from 'axios'; - +import qs from 'qs'; const config = { url: 'https://api.apidash.dev/humanize/social', method: 'get', @@ -305,13 +346,20 @@ axios(config) test('GET 11', () { const expectedCode = r"""import axios from 'axios'; - +import qs from 'qs'; const config = { url: 'https://api.apidash.dev/humanize/social', method: 'get', params: { - "num": "8700000", - "digits": "3" + "num": [ + "8700000" + ], + "digits": [ + "3" + ] + }, + paramsSerializer: (params) => { + return qs.stringify(params, { arrayFormat: 'repeat' }); }, headers: { "User-Agent": "Test Agent" @@ -338,7 +386,7 @@ axios(config) test('GET 12', () { const expectedCode = r"""import axios from 'axios'; - +import qs from 'qs'; const config = { url: 'https://api.apidash.dev/humanize/social', method: 'get' @@ -366,7 +414,7 @@ axios(config) group('HEAD Request', () { test('HEAD 1', () { const expectedCode = r"""import axios from 'axios'; - +import qs from 'qs'; const config = { url: 'https://api.apidash.dev', method: 'head' @@ -392,7 +440,7 @@ axios(config) test('HEAD 2', () { const expectedCode = r"""import axios from 'axios'; - +import qs from 'qs'; const config = { url: 'http://api.apidash.dev', method: 'head' @@ -420,7 +468,7 @@ axios(config) group('POST Request', () { test('POST 1', () { const expectedCode = r"""import axios from 'axios'; - +import qs from 'qs'; const config = { url: 'https://api.apidash.dev/case/lower', method: 'post', @@ -450,7 +498,7 @@ axios(config) test('POST 2', () { const expectedCode = r"""import axios from 'axios'; - +import qs from 'qs'; const config = { url: 'https://api.apidash.dev/case/lower', method: 'post', @@ -480,7 +528,7 @@ axios(config) test('POST 3', () { const expectedCode = r"""import axios from 'axios'; - +import qs from 'qs'; const config = { url: 'https://api.apidash.dev/case/lower', method: 'post', @@ -510,7 +558,7 @@ axios(config) }); test('POST 4', () { const expectedCode = r"""import axios from 'axios'; - +import qs from 'qs'; const config = { url: 'https://api.apidash.dev/io/form', method: 'post', @@ -544,7 +592,7 @@ axios(config) test('POST 5', () { const expectedCode = r"""import axios from 'axios'; - +import qs from 'qs'; const config = { url: 'https://api.apidash.dev/io/form', method: 'post', @@ -578,8 +626,8 @@ axios(config) }); test('POST 6', () { const expectedCode = r"""import axios from 'axios'; +import qs from 'qs'; import fs from 'fs' - const config = { url: 'https://api.apidash.dev/io/img', method: 'post', @@ -611,8 +659,8 @@ axios(config) }); test('POST 7', () { const expectedCode = r"""import axios from 'axios'; +import qs from 'qs'; import fs from 'fs' - const config = { url: 'https://api.apidash.dev/io/img', method: 'post', @@ -644,13 +692,20 @@ axios(config) }); test('POST 8', () { const expectedCode = r"""import axios from 'axios'; - +import qs from 'qs'; const config = { url: 'https://api.apidash.dev/io/form', method: 'post', params: { - "size": "2", - "len": "3" + "size": [ + "2" + ], + "len": [ + "3" + ] + }, + paramsSerializer: (params) => { + return qs.stringify(params, { arrayFormat: 'repeat' }); }, headers: { "Content-Type": "multipart/form-data" @@ -681,14 +736,21 @@ axios(config) }); test('POST 9', () { const expectedCode = r"""import axios from 'axios'; +import qs from 'qs'; import fs from 'fs' - const config = { url: 'https://api.apidash.dev/io/img', method: 'post', params: { - "size": "2", - "len": "3" + "size": [ + "2" + ], + "len": [ + "3" + ] + }, + paramsSerializer: (params) => { + return qs.stringify(params, { arrayFormat: 'repeat' }); }, headers: { "Content-Type": "multipart/form-data", @@ -723,12 +785,13 @@ axios(config) group('PUT Request', () { test('PUT 1', () { const expectedCode = r"""import axios from 'axios'; - +import qs from 'qs'; const config = { url: 'https://reqres.in/api/users/2', method: 'put', headers: { - "Content-Type": "application/json" + "Content-Type": "application/json", + "x-api-key": "reqres-free-v1" }, data: "{\n\"name\": \"morpheus\",\n\"job\": \"zion resident\"\n}" }; @@ -755,12 +818,13 @@ axios(config) group('PATCH Request', () { test('PATCH 1', () { const expectedCode = r"""import axios from 'axios'; - +import qs from 'qs'; const config = { url: 'https://reqres.in/api/users/2', method: 'patch', headers: { - "Content-Type": "application/json" + "Content-Type": "application/json", + "x-api-key": "reqres-free-v1" }, data: "{\n\"name\": \"marfeus\",\n\"job\": \"accountant\"\n}" }; @@ -787,10 +851,13 @@ axios(config) group('DELETE Request', () { test('DELETE 1', () { const expectedCode = r"""import axios from 'axios'; - +import qs from 'qs'; const config = { url: 'https://reqres.in/api/users/2', - method: 'delete' + method: 'delete', + headers: { + "x-api-key": "reqres-free-v1" + } }; axios(config) @@ -813,12 +880,13 @@ axios(config) test('DELETE 2', () { const expectedCode = r"""import axios from 'axios'; - +import qs from 'qs'; const config = { url: 'https://reqres.in/api/users/2', method: 'delete', headers: { - "Content-Type": "application/json" + "Content-Type": "application/json", + "x-api-key": "reqres-free-v1" }, data: "{\n\"name\": \"marfeus\",\n\"job\": \"accountant\"\n}" }; diff --git a/test/codegen/nodejs_fetch_codegen_test.dart b/test/codegen/nodejs_fetch_codegen_test.dart index 4dea18fff..73db633fb 100644 --- a/test/codegen/nodejs_fetch_codegen_test.dart +++ b/test/codegen/nodejs_fetch_codegen_test.dart @@ -11,8 +11,7 @@ void main() { test('GET 1', () { const expectedCode = r"""import fetch from 'node-fetch' -const url = 'https://api.apidash.dev'; - +const url = new URL('https://api.apidash.dev'); const options = { method: 'GET' }; @@ -41,8 +40,8 @@ fetch(url, options) test('GET 2', () { const expectedCode = r"""import fetch from 'node-fetch' -const url = 'https://api.apidash.dev/country/data?code=US'; - +const url = new URL('https://api.apidash.dev/country/data'); +url.searchParams.append('code', 'US'); const options = { method: 'GET' }; @@ -71,8 +70,9 @@ fetch(url, options) test('GET 3', () { const expectedCode = r"""import fetch from 'node-fetch' -const url = 'https://api.apidash.dev/country/data?code=IND'; - +const url = new URL('https://api.apidash.dev/country/data'); +url.searchParams.append('code', 'IND'); +url.searchParams.append('code', 'US'); const options = { method: 'GET' }; @@ -101,8 +101,12 @@ fetch(url, options) test('GET 4', () { const expectedCode = r"""import fetch from 'node-fetch' -const url = 'https://api.apidash.dev/humanize/social?num=8700000&digits=3&system=SS&add_space=true&trailing_zeros=true'; - +const url = new URL('https://api.apidash.dev/humanize/social'); +url.searchParams.append('num', '8700000'); +url.searchParams.append('digits', '3'); +url.searchParams.append('system', 'SS'); +url.searchParams.append('add_space', 'true'); +url.searchParams.append('trailing_zeros', 'true'); const options = { method: 'GET' }; @@ -131,8 +135,7 @@ fetch(url, options) test('GET 5', () { const expectedCode = r"""import fetch from 'node-fetch' -const url = 'https://api.github.com/repos/foss42/apidash'; - +const url = new URL('https://api.github.com/repos/foss42/apidash'); const options = { method: 'GET', headers: { @@ -164,8 +167,8 @@ fetch(url, options) test('GET 6', () { const expectedCode = r"""import fetch from 'node-fetch' -const url = 'https://api.github.com/repos/foss42/apidash?raw=true'; - +const url = new URL('https://api.github.com/repos/foss42/apidash'); +url.searchParams.append('raw', 'true'); const options = { method: 'GET', headers: { @@ -197,8 +200,7 @@ fetch(url, options) test('GET 7', () { const expectedCode = r"""import fetch from 'node-fetch' -const url = 'https://api.apidash.dev'; - +const url = new URL('https://api.apidash.dev'); const options = { method: 'GET' }; @@ -227,8 +229,8 @@ fetch(url, options) test('GET 8', () { const expectedCode = r"""import fetch from 'node-fetch' -const url = 'https://api.github.com/repos/foss42/apidash?raw=true'; - +const url = new URL('https://api.github.com/repos/foss42/apidash'); +url.searchParams.append('raw', 'true'); const options = { method: 'GET', headers: { @@ -260,8 +262,9 @@ fetch(url, options) test('GET 9', () { const expectedCode = r"""import fetch from 'node-fetch' -const url = 'https://api.apidash.dev/humanize/social?num=8700000&add_space=true'; - +const url = new URL('https://api.apidash.dev/humanize/social'); +url.searchParams.append('num', '8700000'); +url.searchParams.append('add_space', 'true'); const options = { method: 'GET' }; @@ -290,8 +293,7 @@ fetch(url, options) test('GET 10', () { const expectedCode = r"""import fetch from 'node-fetch' -const url = 'https://api.apidash.dev/humanize/social'; - +const url = new URL('https://api.apidash.dev/humanize/social'); const options = { method: 'GET', headers: { @@ -323,8 +325,9 @@ fetch(url, options) test('GET 11', () { const expectedCode = r"""import fetch from 'node-fetch' -const url = 'https://api.apidash.dev/humanize/social?num=8700000&digits=3'; - +const url = new URL('https://api.apidash.dev/humanize/social'); +url.searchParams.append('num', '8700000'); +url.searchParams.append('digits', '3'); const options = { method: 'GET', headers: { @@ -356,8 +359,7 @@ fetch(url, options) test('GET 12', () { const expectedCode = r"""import fetch from 'node-fetch' -const url = 'https://api.apidash.dev/humanize/social'; - +const url = new URL('https://api.apidash.dev/humanize/social'); const options = { method: 'GET' }; @@ -388,8 +390,7 @@ fetch(url, options) test('HEAD 1', () { const expectedCode = r"""import fetch from 'node-fetch' -const url = 'https://api.apidash.dev'; - +const url = new URL('https://api.apidash.dev'); const options = { method: 'HEAD' }; @@ -418,8 +419,7 @@ fetch(url, options) test('HEAD 2', () { const expectedCode = r"""import fetch from 'node-fetch' -const url = 'http://api.apidash.dev'; - +const url = new URL('http://api.apidash.dev'); const options = { method: 'HEAD' }; @@ -450,8 +450,7 @@ fetch(url, options) test('POST 1', () { const expectedCode = r"""import fetch from 'node-fetch' -const url = 'https://api.apidash.dev/case/lower'; - +const url = new URL('https://api.apidash.dev/case/lower'); const options = { method: 'POST', headers: { @@ -484,8 +483,7 @@ fetch(url, options) test('POST 2', () { const expectedCode = r"""import fetch from 'node-fetch' -const url = 'https://api.apidash.dev/case/lower'; - +const url = new URL('https://api.apidash.dev/case/lower'); const options = { method: 'POST', headers: { @@ -518,8 +516,7 @@ fetch(url, options) test('POST 3', () { const expectedCode = r"""import fetch from 'node-fetch' -const url = 'https://api.apidash.dev/case/lower'; - +const url = new URL('https://api.apidash.dev/case/lower'); const options = { method: 'POST', headers: { @@ -558,8 +555,7 @@ payload.append("text", "API") payload.append("sep", "|") payload.append("times", "3") -const url = 'https://api.apidash.dev/io/form'; - +const url = new URL('https://api.apidash.dev/io/form'); const options = { method: 'POST', body: payload @@ -593,8 +589,7 @@ payload.append("text", "API") payload.append("sep", "|") payload.append("times", "3") -const url = 'https://api.apidash.dev/io/form'; - +const url = new URL('https://api.apidash.dev/io/form'); const options = { method: 'POST', headers: { @@ -629,8 +624,7 @@ const payload = new FormData(); payload.append("token", "xyz") payload.append("imfile", fileFromSync("/Documents/up/1.png")) -const url = 'https://api.apidash.dev/io/img'; - +const url = new URL('https://api.apidash.dev/io/img'); const options = { method: 'POST', body: payload @@ -662,8 +656,7 @@ const payload = new FormData(); payload.append("token", "xyz") payload.append("imfile", fileFromSync("/Documents/up/1.png")) -const url = 'https://api.apidash.dev/io/img'; - +const url = new URL('https://api.apidash.dev/io/img'); const options = { method: 'POST', body: payload @@ -696,8 +689,9 @@ payload.append("text", "API") payload.append("sep", "|") payload.append("times", "3") -const url = 'https://api.apidash.dev/io/form?size=2&len=3'; - +const url = new URL('https://api.apidash.dev/io/form'); +url.searchParams.append('size', '2'); +url.searchParams.append('len', '3'); const options = { method: 'POST', body: payload @@ -729,8 +723,9 @@ const payload = new FormData(); payload.append("token", "xyz") payload.append("imfile", fileFromSync("/Documents/up/1.png")) -const url = 'https://api.apidash.dev/io/img?size=2&len=3'; - +const url = new URL('https://api.apidash.dev/io/img'); +url.searchParams.append('size', '2'); +url.searchParams.append('len', '3'); const options = { method: 'POST', headers: { @@ -764,12 +759,12 @@ fetch(url, options) test('PUT 1', () { const expectedCode = r"""import fetch from 'node-fetch' -const url = 'https://reqres.in/api/users/2'; - +const url = new URL('https://reqres.in/api/users/2'); const options = { method: 'PUT', headers: { - "Content-Type": "application/json" + "Content-Type": "application/json", + "x-api-key": "reqres-free-v1" }, body: "{\n\"name\": \"morpheus\",\n\"job\": \"zion resident\"\n}" }; @@ -800,12 +795,12 @@ fetch(url, options) test('PATCH 1', () { const expectedCode = r"""import fetch from 'node-fetch' -const url = 'https://reqres.in/api/users/2'; - +const url = new URL('https://reqres.in/api/users/2'); const options = { method: 'PATCH', headers: { - "Content-Type": "application/json" + "Content-Type": "application/json", + "x-api-key": "reqres-free-v1" }, body: "{\n\"name\": \"marfeus\",\n\"job\": \"accountant\"\n}" }; @@ -836,10 +831,12 @@ fetch(url, options) test('DELETE 1', () { const expectedCode = r"""import fetch from 'node-fetch' -const url = 'https://reqres.in/api/users/2'; - +const url = new URL('https://reqres.in/api/users/2'); const options = { - method: 'DELETE' + method: 'DELETE', + headers: { + "x-api-key": "reqres-free-v1" + } }; fetch(url, options) @@ -866,12 +863,12 @@ fetch(url, options) test('DELETE 2', () { const expectedCode = r"""import fetch from 'node-fetch' -const url = 'https://reqres.in/api/users/2'; - +const url = new URL('https://reqres.in/api/users/2'); const options = { method: 'DELETE', headers: { - "Content-Type": "application/json" + "Content-Type": "application/json", + "x-api-key": "reqres-free-v1" }, body: "{\n\"name\": \"marfeus\",\n\"job\": \"accountant\"\n}" }; From cc6c49c5e46c120cce34b7e0f714815e6b1045fc Mon Sep 17 00:00:00 2001 From: Nikhil Date: Fri, 30 May 2025 04:30:10 +0530 Subject: [PATCH 36/42] updated php tests --- lib/codegen/php/curl.dart | 9 +- lib/codegen/php/guzzle.dart | 9 +- lib/codegen/php/http_plug.dart | 6 +- test/codegen/php_curl_codegen_test.dart | 177 ++++++++++++----- test/codegen/php_guzzle_codegen_test.dart | 124 ++++++++---- test/codegen/php_http_plug_codegen_test.dart | 199 +++++++++++-------- 6 files changed, 353 insertions(+), 171 deletions(-) diff --git a/lib/codegen/php/curl.dart b/lib/codegen/php/curl.dart index b7eab3fa3..9c9f52f08 100644 --- a/lib/codegen/php/curl.dart +++ b/lib/codegen/php/curl.dart @@ -37,7 +37,14 @@ $request_body = '{{body}}'; $queryParams = [ {{params}} ]; -$uri .= '?' . http_build_query($queryParams, '', '&'); +$queryParts = []; +foreach ($queryParams as $key => $values) { + foreach ((array) $values as $value) { + $queryParts[] = urlencode($key) . '=' . urlencode($value); + } +} +$queryString = implode('&', $queryParts); +$uri .= '?' . $queryString; '''; diff --git a/lib/codegen/php/guzzle.dart b/lib/codegen/php/guzzle.dart index 9a6697bf2..d6237889f 100644 --- a/lib/codegen/php/guzzle.dart +++ b/lib/codegen/php/guzzle.dart @@ -24,7 +24,14 @@ String kTemplateParams = """ \$queryParams = [ {{params}} ]; -\$queryParamsStr = '?' . http_build_query(\$queryParams, '','&'); +\$queryParts = []; +foreach (\$queryParams as \$key => \$values) { + foreach ((array)\$values as \$value) { + \$queryParts[] = urlencode(\$key) . '=' . urlencode(\$value); + } +} +\$queryParamsStr = '?' . implode('&', \$queryParts); + """; diff --git a/lib/codegen/php/http_plug.dart b/lib/codegen/php/http_plug.dart index f6e6d5b73..cabd0e250 100644 --- a/lib/codegen/php/http_plug.dart +++ b/lib/codegen/php/http_plug.dart @@ -22,7 +22,11 @@ use Http\\Discovery\\Psr18ClientDiscovery; \$queryParams = [ {{params}} ]; - \$uri .= '?' . http_build_query(\$queryParams,'','&'); + \$queryString = http_build_query(\$queryParams, '', '&', PHP_QUERY_RFC3986); + \$queryString = preg_replace('/%5B[0-9]+%5D/', '', \$queryString); + + \$uri .= '?'.\$queryString; + """; diff --git a/test/codegen/php_curl_codegen_test.dart b/test/codegen/php_curl_codegen_test.dart index d9917f48f..55f822dd6 100644 --- a/test/codegen/php_curl_codegen_test.dart +++ b/test/codegen/php_curl_codegen_test.dart @@ -23,9 +23,9 @@ curl_setopt_array($request, [ $response = curl_exec($request); +$httpCode = curl_getinfo($request, CURLINFO_HTTP_CODE); curl_close($request); -$httpCode = curl_getinfo($request, CURLINFO_HTTP_CODE); echo "Status Code: " . $httpCode . "\n"; echo $response . "\n"; '''; @@ -43,9 +43,16 @@ echo $response . "\n"; $uri = 'https://api.apidash.dev/country/data'; $queryParams = [ - 'code' => 'US', +'code' => ['US'] ]; -$uri .= '?' . http_build_query($queryParams); +$queryParts = []; +foreach ($queryParams as $key => $values) { + foreach ((array) $values as $value) { + $queryParts[] = urlencode($key) . '=' . urlencode($value); + } +} +$queryString = implode('&', $queryParts); +$uri .= '?' . $queryString; $request = curl_init($uri); @@ -57,9 +64,9 @@ curl_setopt_array($request, [ $response = curl_exec($request); +$httpCode = curl_getinfo($request, CURLINFO_HTTP_CODE); curl_close($request); -$httpCode = curl_getinfo($request, CURLINFO_HTTP_CODE); echo "Status Code: " . $httpCode . "\n"; echo $response . "\n"; '''; @@ -77,9 +84,16 @@ echo $response . "\n"; $uri = 'https://api.apidash.dev/country/data'; $queryParams = [ - 'code' => 'IND', +'code' => ['IND', 'US'] ]; -$uri .= '?' . http_build_query($queryParams); +$queryParts = []; +foreach ($queryParams as $key => $values) { + foreach ((array) $values as $value) { + $queryParts[] = urlencode($key) . '=' . urlencode($value); + } +} +$queryString = implode('&', $queryParts); +$uri .= '?' . $queryString; $request = curl_init($uri); @@ -91,9 +105,9 @@ curl_setopt_array($request, [ $response = curl_exec($request); +$httpCode = curl_getinfo($request, CURLINFO_HTTP_CODE); curl_close($request); -$httpCode = curl_getinfo($request, CURLINFO_HTTP_CODE); echo "Status Code: " . $httpCode . "\n"; echo $response . "\n"; '''; @@ -111,13 +125,20 @@ echo $response . "\n"; $uri = 'https://api.apidash.dev/humanize/social'; $queryParams = [ - 'num' => '8700000', - 'digits' => '3', - 'system' => 'SS', - 'add_space' => 'true', - 'trailing_zeros' => 'true', +'num' => ['8700000'], +'digits' => ['3'], +'system' => ['SS'], +'add_space' => ['true'], +'trailing_zeros' => ['true'] ]; -$uri .= '?' . http_build_query($queryParams); +$queryParts = []; +foreach ($queryParams as $key => $values) { + foreach ((array) $values as $value) { + $queryParts[] = urlencode($key) . '=' . urlencode($value); + } +} +$queryString = implode('&', $queryParts); +$uri .= '?' . $queryString; $request = curl_init($uri); @@ -129,9 +150,9 @@ curl_setopt_array($request, [ $response = curl_exec($request); +$httpCode = curl_getinfo($request, CURLINFO_HTTP_CODE); curl_close($request); -$httpCode = curl_getinfo($request, CURLINFO_HTTP_CODE); echo "Status Code: " . $httpCode . "\n"; echo $response . "\n"; '''; @@ -164,9 +185,9 @@ curl_setopt_array($request, [ $response = curl_exec($request); +$httpCode = curl_getinfo($request, CURLINFO_HTTP_CODE); curl_close($request); -$httpCode = curl_getinfo($request, CURLINFO_HTTP_CODE); echo "Status Code: " . $httpCode . "\n"; echo $response . "\n"; '''; @@ -185,9 +206,16 @@ echo $response . "\n"; $uri = 'https://api.github.com/repos/foss42/apidash'; $queryParams = [ - 'raw' => 'true', +'raw' => ['true'] ]; -$uri .= '?' . http_build_query($queryParams); +$queryParts = []; +foreach ($queryParams as $key => $values) { + foreach ((array) $values as $value) { + $queryParts[] = urlencode($key) . '=' . urlencode($value); + } +} +$queryString = implode('&', $queryParts); +$uri .= '?' . $queryString; $headers = [ 'User-Agent: Test Agent', @@ -204,9 +232,9 @@ curl_setopt_array($request, [ $response = curl_exec($request); +$httpCode = curl_getinfo($request, CURLINFO_HTTP_CODE); curl_close($request); -$httpCode = curl_getinfo($request, CURLINFO_HTTP_CODE); echo "Status Code: " . $httpCode . "\n"; echo $response . "\n"; '''; @@ -234,9 +262,9 @@ curl_setopt_array($request, [ $response = curl_exec($request); +$httpCode = curl_getinfo($request, CURLINFO_HTTP_CODE); curl_close($request); -$httpCode = curl_getinfo($request, CURLINFO_HTTP_CODE); echo "Status Code: " . $httpCode . "\n"; echo $response . "\n"; '''; @@ -255,9 +283,16 @@ echo $response . "\n"; $uri = 'https://api.github.com/repos/foss42/apidash'; $queryParams = [ - 'raw' => 'true', +'raw' => ['true'] ]; -$uri .= '?' . http_build_query($queryParams); +$queryParts = []; +foreach ($queryParams as $key => $values) { + foreach ((array) $values as $value) { + $queryParts[] = urlencode($key) . '=' . urlencode($value); + } +} +$queryString = implode('&', $queryParts); +$uri .= '?' . $queryString; $headers = [ 'User-Agent: Test Agent', @@ -274,9 +309,9 @@ curl_setopt_array($request, [ $response = curl_exec($request); +$httpCode = curl_getinfo($request, CURLINFO_HTTP_CODE); curl_close($request); -$httpCode = curl_getinfo($request, CURLINFO_HTTP_CODE); echo "Status Code: " . $httpCode . "\n"; echo $response . "\n"; '''; @@ -295,10 +330,17 @@ echo $response . "\n"; $uri = 'https://api.apidash.dev/humanize/social'; $queryParams = [ - 'num' => '8700000', - 'add_space' => 'true', +'num' => ['8700000'], +'add_space' => ['true'] ]; -$uri .= '?' . http_build_query($queryParams); +$queryParts = []; +foreach ($queryParams as $key => $values) { + foreach ((array) $values as $value) { + $queryParts[] = urlencode($key) . '=' . urlencode($value); + } +} +$queryString = implode('&', $queryParts); +$uri .= '?' . $queryString; $request = curl_init($uri); @@ -310,9 +352,9 @@ curl_setopt_array($request, [ $response = curl_exec($request); +$httpCode = curl_getinfo($request, CURLINFO_HTTP_CODE); curl_close($request); -$httpCode = curl_getinfo($request, CURLINFO_HTTP_CODE); echo "Status Code: " . $httpCode . "\n"; echo $response . "\n"; '''; @@ -345,9 +387,9 @@ curl_setopt_array($request, [ $response = curl_exec($request); +$httpCode = curl_getinfo($request, CURLINFO_HTTP_CODE); curl_close($request); -$httpCode = curl_getinfo($request, CURLINFO_HTTP_CODE); echo "Status Code: " . $httpCode . "\n"; echo $response . "\n"; '''; @@ -366,10 +408,17 @@ echo $response . "\n"; $uri = 'https://api.apidash.dev/humanize/social'; $queryParams = [ - 'num' => '8700000', - 'digits' => '3', +'num' => ['8700000'], +'digits' => ['3'] ]; -$uri .= '?' . http_build_query($queryParams); +$queryParts = []; +foreach ($queryParams as $key => $values) { + foreach ((array) $values as $value) { + $queryParts[] = urlencode($key) . '=' . urlencode($value); + } +} +$queryString = implode('&', $queryParts); +$uri .= '?' . $queryString; $headers = [ 'User-Agent: Test Agent', @@ -386,9 +435,9 @@ curl_setopt_array($request, [ $response = curl_exec($request); +$httpCode = curl_getinfo($request, CURLINFO_HTTP_CODE); curl_close($request); -$httpCode = curl_getinfo($request, CURLINFO_HTTP_CODE); echo "Status Code: " . $httpCode . "\n"; echo $response . "\n"; '''; @@ -416,9 +465,9 @@ curl_setopt_array($request, [ $response = curl_exec($request); +$httpCode = curl_getinfo($request, CURLINFO_HTTP_CODE); curl_close($request); -$httpCode = curl_getinfo($request, CURLINFO_HTTP_CODE); echo "Status Code: " . $httpCode . "\n"; echo $response . "\n"; '''; @@ -448,9 +497,9 @@ curl_setopt_array($request, [ $response = curl_exec($request); +$httpCode = curl_getinfo($request, CURLINFO_HTTP_CODE); curl_close($request); -$httpCode = curl_getinfo($request, CURLINFO_HTTP_CODE); echo "Status Code: " . $httpCode . "\n"; echo $response . "\n"; '''; @@ -478,9 +527,9 @@ curl_setopt_array($request, [ $response = curl_exec($request); +$httpCode = curl_getinfo($request, CURLINFO_HTTP_CODE); curl_close($request); -$httpCode = curl_getinfo($request, CURLINFO_HTTP_CODE); echo "Status Code: " . $httpCode . "\n"; echo $response . "\n"; '''; @@ -520,9 +569,9 @@ curl_setopt_array($request, [ $response = curl_exec($request); +$httpCode = curl_getinfo($request, CURLINFO_HTTP_CODE); curl_close($request); -$httpCode = curl_getinfo($request, CURLINFO_HTTP_CODE); echo "Status Code: " . $httpCode . "\n"; echo $response . "\n"; '''; @@ -565,9 +614,9 @@ curl_setopt_array($request, [ $response = curl_exec($request); +$httpCode = curl_getinfo($request, CURLINFO_HTTP_CODE); curl_close($request); -$httpCode = curl_getinfo($request, CURLINFO_HTTP_CODE); echo "Status Code: " . $httpCode . "\n"; echo $response . "\n"; '''; @@ -605,9 +654,9 @@ curl_setopt_array($request, [ $response = curl_exec($request); +$httpCode = curl_getinfo($request, CURLINFO_HTTP_CODE); curl_close($request); -$httpCode = curl_getinfo($request, CURLINFO_HTTP_CODE); echo "Status Code: " . $httpCode . "\n"; echo $response . "\n"; '''; @@ -642,9 +691,9 @@ curl_setopt_array($request, [ $response = curl_exec($request); +$httpCode = curl_getinfo($request, CURLINFO_HTTP_CODE); curl_close($request); -$httpCode = curl_getinfo($request, CURLINFO_HTTP_CODE); echo "Status Code: " . $httpCode . "\n"; echo $response . "\n"; '''; @@ -684,9 +733,9 @@ curl_setopt_array($request, [ $response = curl_exec($request); +$httpCode = curl_getinfo($request, CURLINFO_HTTP_CODE); curl_close($request); -$httpCode = curl_getinfo($request, CURLINFO_HTTP_CODE); echo "Status Code: " . $httpCode . "\n"; echo $response . "\n"; '''; @@ -719,9 +768,9 @@ curl_setopt_array($request, [ $response = curl_exec($request); +$httpCode = curl_getinfo($request, CURLINFO_HTTP_CODE); curl_close($request); -$httpCode = curl_getinfo($request, CURLINFO_HTTP_CODE); echo "Status Code: " . $httpCode . "\n"; echo $response . "\n"; '''; @@ -754,9 +803,9 @@ curl_setopt_array($request, [ $response = curl_exec($request); +$httpCode = curl_getinfo($request, CURLINFO_HTTP_CODE); curl_close($request); -$httpCode = curl_getinfo($request, CURLINFO_HTTP_CODE); echo "Status Code: " . $httpCode . "\n"; echo $response . "\n"; '''; @@ -780,10 +829,17 @@ $request_body = [ ]; $queryParams = [ - 'size' => '2', - 'len' => '3', +'size' => ['2'], +'len' => ['3'] ]; -$uri .= '?' . http_build_query($queryParams); +$queryParts = []; +foreach ($queryParams as $key => $values) { + foreach ((array) $values as $value) { + $queryParts[] = urlencode($key) . '=' . urlencode($value); + } +} +$queryString = implode('&', $queryParts); +$uri .= '?' . $queryString; $request = curl_init($uri); @@ -796,9 +852,9 @@ curl_setopt_array($request, [ $response = curl_exec($request); +$httpCode = curl_getinfo($request, CURLINFO_HTTP_CODE); curl_close($request); -$httpCode = curl_getinfo($request, CURLINFO_HTTP_CODE); echo "Status Code: " . $httpCode . "\n"; echo $response . "\n"; '''; @@ -821,10 +877,17 @@ $request_body = [ ]; $queryParams = [ - 'size' => '2', - 'len' => '3', +'size' => ['2'], +'len' => ['3'] ]; -$uri .= '?' . http_build_query($queryParams); +$queryParts = []; +foreach ($queryParams as $key => $values) { + foreach ((array) $values as $value) { + $queryParts[] = urlencode($key) . '=' . urlencode($value); + } +} +$queryString = implode('&', $queryParts); +$uri .= '?' . $queryString; $headers = [ 'User-Agent: Test Agent', @@ -843,9 +906,9 @@ curl_setopt_array($request, [ $response = curl_exec($request); +$httpCode = curl_getinfo($request, CURLINFO_HTTP_CODE); curl_close($request); -$httpCode = curl_getinfo($request, CURLINFO_HTTP_CODE); echo "Status Code: " . $httpCode . "\n"; echo $response . "\n"; '''; @@ -870,6 +933,7 @@ $request_body = '{ }'; $headers = [ + 'x-api-key: reqres-free-v1', 'Content-Type: application/json', ]; @@ -885,9 +949,9 @@ curl_setopt_array($request, [ $response = curl_exec($request); +$httpCode = curl_getinfo($request, CURLINFO_HTTP_CODE); curl_close($request); -$httpCode = curl_getinfo($request, CURLINFO_HTTP_CODE); echo "Status Code: " . $httpCode . "\n"; echo $response . "\n"; '''; @@ -912,6 +976,7 @@ $request_body = '{ }'; $headers = [ + 'x-api-key: reqres-free-v1', 'Content-Type: application/json', ]; @@ -927,9 +992,9 @@ curl_setopt_array($request, [ $response = curl_exec($request); +$httpCode = curl_getinfo($request, CURLINFO_HTTP_CODE); curl_close($request); -$httpCode = curl_getinfo($request, CURLINFO_HTTP_CODE); echo "Status Code: " . $httpCode . "\n"; echo $response . "\n"; '''; @@ -948,19 +1013,24 @@ echo $response . "\n"; $uri = 'https://reqres.in/api/users/2'; +$headers = [ + 'x-api-key: reqres-free-v1', +]; + $request = curl_init($uri); curl_setopt_array($request, [ CURLOPT_RETURNTRANSFER => 1, CURLOPT_CUSTOMREQUEST => 'DELETE', + CURLOPT_HTTPHEADER => $headers, CURLOPT_FOLLOWLOCATION => true, ]); $response = curl_exec($request); +$httpCode = curl_getinfo($request, CURLINFO_HTTP_CODE); curl_close($request); -$httpCode = curl_getinfo($request, CURLINFO_HTTP_CODE); echo "Status Code: " . $httpCode . "\n"; echo $response . "\n"; '''; @@ -983,6 +1053,7 @@ $request_body = '{ }'; $headers = [ + 'x-api-key: reqres-free-v1', 'Content-Type: application/json', ]; @@ -998,9 +1069,9 @@ curl_setopt_array($request, [ $response = curl_exec($request); +$httpCode = curl_getinfo($request, CURLINFO_HTTP_CODE); curl_close($request); -$httpCode = curl_getinfo($request, CURLINFO_HTTP_CODE); echo "Status Code: " . $httpCode . "\n"; echo $response . "\n"; '''; diff --git a/test/codegen/php_guzzle_codegen_test.dart b/test/codegen/php_guzzle_codegen_test.dart index 8f64782ed..5f1e64816 100644 --- a/test/codegen/php_guzzle_codegen_test.dart +++ b/test/codegen/php_guzzle_codegen_test.dart @@ -42,10 +42,15 @@ use GuzzleHttp\Psr7\Request; $queryParams = [ -'code' => 'US' +'code' => ['US'] ]; -$queryParamsStr = '?' . http_build_query($queryParams); - +$queryParts = []; +foreach ($queryParams as $key => $values) { + foreach ((array)$values as $value) { + $queryParts[] = urlencode($key) . '=' . urlencode($value); + } +} +$queryParamsStr = '?' . implode('&', $queryParts); $client = new Client(); $request = new Request('get', 'https://api.apidash.dev/country/data'. $queryParamsStr); @@ -72,10 +77,15 @@ use GuzzleHttp\Psr7\Request; $queryParams = [ -'code' => 'IND' +'code' => ['IND', 'US'] ]; -$queryParamsStr = '?' . http_build_query($queryParams); - +$queryParts = []; +foreach ($queryParams as $key => $values) { + foreach ((array)$values as $value) { + $queryParts[] = urlencode($key) . '=' . urlencode($value); + } +} +$queryParamsStr = '?' . implode('&', $queryParts); $client = new Client(); $request = new Request('get', 'https://api.apidash.dev/country/data'. $queryParamsStr); @@ -102,14 +112,19 @@ use GuzzleHttp\Psr7\Request; $queryParams = [ -'num' => '8700000', -'digits' => '3', -'system' => 'SS', -'add_space' => 'true', -'trailing_zeros' => 'true' +'num' => ['8700000'], +'digits' => ['3'], +'system' => ['SS'], +'add_space' => ['true'], +'trailing_zeros' => ['true'] ]; -$queryParamsStr = '?' . http_build_query($queryParams); - +$queryParts = []; +foreach ($queryParams as $key => $values) { + foreach ((array)$values as $value) { + $queryParts[] = urlencode($key) . '=' . urlencode($value); + } +} +$queryParamsStr = '?' . implode('&', $queryParts); $client = new Client(); $request = new Request('get', 'https://api.apidash.dev/humanize/social'. $queryParamsStr); @@ -165,10 +180,15 @@ use GuzzleHttp\Psr7\Request; $queryParams = [ -'raw' => 'true' +'raw' => ['true'] ]; -$queryParamsStr = '?' . http_build_query($queryParams); - +$queryParts = []; +foreach ($queryParams as $key => $values) { + foreach ((array)$values as $value) { + $queryParts[] = urlencode($key) . '=' . urlencode($value); + } +} +$queryParamsStr = '?' . implode('&', $queryParts); $headers = [ 'User-Agent' => 'Test Agent' ]; @@ -224,10 +244,15 @@ use GuzzleHttp\Psr7\Request; $queryParams = [ -'raw' => 'true' +'raw' => ['true'] ]; -$queryParamsStr = '?' . http_build_query($queryParams); - +$queryParts = []; +foreach ($queryParams as $key => $values) { + foreach ((array)$values as $value) { + $queryParts[] = urlencode($key) . '=' . urlencode($value); + } +} +$queryParamsStr = '?' . implode('&', $queryParts); $headers = [ 'User-Agent' => 'Test Agent' ]; @@ -258,11 +283,16 @@ use GuzzleHttp\Psr7\Request; $queryParams = [ -'num' => '8700000', -'add_space' => 'true' +'num' => ['8700000'], +'add_space' => ['true'] ]; -$queryParamsStr = '?' . http_build_query($queryParams); - +$queryParts = []; +foreach ($queryParams as $key => $values) { + foreach ((array)$values as $value) { + $queryParts[] = urlencode($key) . '=' . urlencode($value); + } +} +$queryParamsStr = '?' . implode('&', $queryParts); $client = new Client(); $request = new Request('get', 'https://api.apidash.dev/humanize/social'. $queryParamsStr); @@ -318,11 +348,16 @@ use GuzzleHttp\Psr7\Request; $queryParams = [ -'num' => '8700000', -'digits' => '3' +'num' => ['8700000'], +'digits' => ['3'] ]; -$queryParamsStr = '?' . http_build_query($queryParams); - +$queryParts = []; +foreach ($queryParams as $key => $values) { + foreach ((array)$values as $value) { + $queryParts[] = urlencode($key) . '=' . urlencode($value); + } +} +$queryParamsStr = '?' . implode('&', $queryParts); $headers = [ 'User-Agent' => 'Test Agent' ]; @@ -727,11 +762,16 @@ $body = new MultipartStream([ ]); $queryParams = [ -'size' => '2', -'len' => '3' +'size' => ['2'], +'len' => ['3'] ]; -$queryParamsStr = '?' . http_build_query($queryParams); - +$queryParts = []; +foreach ($queryParams as $key => $values) { + foreach ((array)$values as $value) { + $queryParts[] = urlencode($key) . '=' . urlencode($value); + } +} +$queryParamsStr = '?' . implode('&', $queryParts); $headers = [ 'Content-Type' => 'multipart/form-data; boundary=' . $body->getBoundary() ]; @@ -773,11 +813,16 @@ $body = new MultipartStream([ ]); $queryParams = [ -'size' => '2', -'len' => '3' +'size' => ['2'], +'len' => ['3'] ]; -$queryParamsStr = '?' . http_build_query($queryParams); - +$queryParts = []; +foreach ($queryParams as $key => $values) { + foreach ((array)$values as $value) { + $queryParts[] = urlencode($key) . '=' . urlencode($value); + } +} +$queryParamsStr = '?' . implode('&', $queryParts); $headers = [ 'User-Agent' => 'Test Agent', 'Keep-Alive' => 'true', @@ -812,6 +857,7 @@ use GuzzleHttp\Psr7\Request; $headers = [ +'x-api-key' => 'reqres-free-v1', 'Content-Type' => 'application/json' ]; @@ -850,6 +896,7 @@ use GuzzleHttp\Psr7\Request; $headers = [ +'x-api-key' => 'reqres-free-v1', 'Content-Type' => 'application/json' ]; @@ -887,9 +934,13 @@ use GuzzleHttp\Client; use GuzzleHttp\Psr7\Request; +$headers = [ +'x-api-key' => 'reqres-free-v1' +]; + $client = new Client(); -$request = new Request('delete', 'https://reqres.in/api/users/2'); +$request = new Request('delete', 'https://reqres.in/api/users/2', $headers); $res = $client->sendAsync($request)->wait(); echo $res->getStatusCode() . "\n"; @@ -913,6 +964,7 @@ use GuzzleHttp\Psr7\Request; $headers = [ +'x-api-key' => 'reqres-free-v1', 'Content-Type' => 'application/json' ]; diff --git a/test/codegen/php_http_plug_codegen_test.dart b/test/codegen/php_http_plug_codegen_test.dart index 1c9f4d6dc..fc6a82728 100644 --- a/test/codegen/php_http_plug_codegen_test.dart +++ b/test/codegen/php_http_plug_codegen_test.dart @@ -34,19 +34,23 @@ echo $response->getBody(); expectedCode); }); test('GET2', () { - const expectedCode = r''' - "US" -]; -$uri .= '?' . http_build_query($queryParams); -$request = Psr17FactoryDiscovery::findRequestFactory()->createRequest('GET', $uri); + $queryParams = [ + 'code' => ['US'] + ]; + $queryString = http_build_query($queryParams, '', '&', PHP_QUERY_RFC3986); + $queryString = preg_replace('/%5B[0-9]+%5D/', '', $queryString); + + $uri .= '?'.$queryString; + + + $request = Psr17FactoryDiscovery::findRequestFactory()->createRequest('GET', $uri); $client = Psr18ClientDiscovery::find(); $response = $client->sendRequest($request); @@ -63,19 +67,23 @@ echo $response->getBody(); expectedCode); }); test('GET3', () { - const expectedCode = r''' - "IND" -]; -$uri .= '?' . http_build_query($queryParams); -$request = Psr17FactoryDiscovery::findRequestFactory()->createRequest('GET', $uri); + $queryParams = [ + 'code' => ['IND', 'US'] + ]; + $queryString = http_build_query($queryParams, '', '&', PHP_QUERY_RFC3986); + $queryString = preg_replace('/%5B[0-9]+%5D/', '', $queryString); + + $uri .= '?'.$queryString; + + + $request = Psr17FactoryDiscovery::findRequestFactory()->createRequest('GET', $uri); $client = Psr18ClientDiscovery::find(); $response = $client->sendRequest($request); @@ -92,23 +100,27 @@ echo $response->getBody(); expectedCode); }); test('GET4', () { - const expectedCode = r''' - "8700000", - "digits" => "3", - "system" => "SS", - "add_space" => "true", - "trailing_zeros" => "true" -]; -$uri .= '?' . http_build_query($queryParams); -$request = Psr17FactoryDiscovery::findRequestFactory()->createRequest('GET', $uri); + $queryParams = [ + 'num' => ['8700000'], +'digits' => ['3'], +'system' => ['SS'], +'add_space' => ['true'], +'trailing_zeros' => ['true'] + ]; + $queryString = http_build_query($queryParams, '', '&', PHP_QUERY_RFC3986); + $queryString = preg_replace('/%5B[0-9]+%5D/', '', $queryString); + + $uri .= '?'.$queryString; + + + $request = Psr17FactoryDiscovery::findRequestFactory()->createRequest('GET', $uri); $client = Psr18ClientDiscovery::find(); $response = $client->sendRequest($request); @@ -156,19 +168,23 @@ echo $response->getBody(); expectedCode); }); test('GET6', () { - const expectedCode = r''' - "true" -]; -$uri .= '?' . http_build_query($queryParams); -$request = Psr17FactoryDiscovery::findRequestFactory()->createRequest('GET', $uri); + $queryParams = [ + 'raw' => ['true'] + ]; + $queryString = http_build_query($queryParams, '', '&', PHP_QUERY_RFC3986); + $queryString = preg_replace('/%5B[0-9]+%5D/', '', $queryString); + + $uri .= '?'.$queryString; + + + $request = Psr17FactoryDiscovery::findRequestFactory()->createRequest('GET', $uri); $headers = [ 'User-Agent' => 'Test Agent', ]; @@ -216,19 +232,23 @@ echo $response->getBody(); expectedCode); }); test('GET8', () { - const expectedCode = r''' - "true" -]; -$uri .= '?' . http_build_query($queryParams); -$request = Psr17FactoryDiscovery::findRequestFactory()->createRequest('GET', $uri); + $queryParams = [ + 'raw' => ['true'] + ]; + $queryString = http_build_query($queryParams, '', '&', PHP_QUERY_RFC3986); + $queryString = preg_replace('/%5B[0-9]+%5D/', '', $queryString); + + $uri .= '?'.$queryString; + + + $request = Psr17FactoryDiscovery::findRequestFactory()->createRequest('GET', $uri); $headers = [ 'User-Agent' => 'Test Agent', ]; @@ -251,20 +271,24 @@ echo $response->getBody(); expectedCode); }); test('GET9', () { - const expectedCode = r''' - "8700000", - "add_space" => "true" -]; -$uri .= '?' . http_build_query($queryParams); -$request = Psr17FactoryDiscovery::findRequestFactory()->createRequest('GET', $uri); + $queryParams = [ + 'num' => ['8700000'], +'add_space' => ['true'] + ]; + $queryString = http_build_query($queryParams, '', '&', PHP_QUERY_RFC3986); + $queryString = preg_replace('/%5B[0-9]+%5D/', '', $queryString); + + $uri .= '?'.$queryString; + + + $request = Psr17FactoryDiscovery::findRequestFactory()->createRequest('GET', $uri); $client = Psr18ClientDiscovery::find(); $response = $client->sendRequest($request); @@ -312,20 +336,24 @@ echo $response->getBody(); expectedCode); }); test('GET11', () { - const expectedCode = r''' - "8700000", - "digits" => "3" -]; -$uri .= '?' . http_build_query($queryParams); -$request = Psr17FactoryDiscovery::findRequestFactory()->createRequest('GET', $uri); + $queryParams = [ + 'num' => ['8700000'], +'digits' => ['3'] + ]; + $queryString = http_build_query($queryParams, '', '&', PHP_QUERY_RFC3986); + $queryString = preg_replace('/%5B[0-9]+%5D/', '', $queryString); + + $uri .= '?'.$queryString; + + + $request = Psr17FactoryDiscovery::findRequestFactory()->createRequest('GET', $uri); $headers = [ 'User-Agent' => 'Test Agent', ]; @@ -698,20 +726,24 @@ echo $response->getBody(); expectedCode); }); test('POST8', () { - const expectedCode = r''' - "2", - "len" => "3" -]; -$uri .= '?' . http_build_query($queryParams); -$request = Psr17FactoryDiscovery::findRequestFactory()->createRequest('POST', $uri); + $queryParams = [ + 'size' => ['2'], +'len' => ['3'] + ]; + $queryString = http_build_query($queryParams, '', '&', PHP_QUERY_RFC3986); + $queryString = preg_replace('/%5B[0-9]+%5D/', '', $queryString); + + $uri .= '?'.$queryString; + + + $request = Psr17FactoryDiscovery::findRequestFactory()->createRequest('POST', $uri); $builder = new MultipartStreamBuilder(); $builder->addResource('text', 'API'); $builder->addResource('sep', '|'); @@ -740,20 +772,24 @@ echo $response->getBody(); expectedCode); }); test('POST9', () { - const expectedCode = r''' - "2", - "len" => "3" -]; -$uri .= '?' . http_build_query($queryParams); -$request = Psr17FactoryDiscovery::findRequestFactory()->createRequest('POST', $uri); + $queryParams = [ + 'size' => ['2'], +'len' => ['3'] + ]; + $queryString = http_build_query($queryParams, '', '&', PHP_QUERY_RFC3986); + $queryString = preg_replace('/%5B[0-9]+%5D/', '', $queryString); + + $uri .= '?'.$queryString; + + + $request = Psr17FactoryDiscovery::findRequestFactory()->createRequest('POST', $uri); $builder = new MultipartStreamBuilder(); $builder->addResource('token', 'xyz'); @@ -787,8 +823,7 @@ echo $response->getBody(); group('PUT Request', () { test('PUT1', () { - const expectedCode = r''' -withBody(Psr17FactoryDiscovery::findStreamFactory()->createStream($body)); $headers = [ + 'x-api-key' => 'reqres-free-v1', 'Content-Type' => 'application/json', ]; foreach ($headers as $name => $value) { @@ -829,8 +865,7 @@ echo $response->getBody(); group('PATCH Request', () { test('PATCH1', () { - const expectedCode = r''' -withBody(Psr17FactoryDiscovery::findStreamFactory()->createStream($body)); $headers = [ + 'x-api-key' => 'reqres-free-v1', 'Content-Type' => 'application/json', ]; foreach ($headers as $name => $value) { @@ -871,8 +907,7 @@ echo $response->getBody(); group('DELETE Request', () { test('DELETE1', () { - const expectedCode = r''' -createRequest('DELETE', $uri); +$headers = [ + 'x-api-key' => 'reqres-free-v1', +]; +foreach ($headers as $name => $value) { + $request = $request->withHeader($name, $value); +} $client = Psr18ClientDiscovery::find(); $response = $client->sendRequest($request); @@ -896,8 +937,7 @@ echo $response->getBody(); expectedCode); }); test('DELETE2', () { - const expectedCode = r''' -withBody(Psr17FactoryDiscovery::findStreamFactory()->createStream($body)); $headers = [ + 'x-api-key' => 'reqres-free-v1', 'Content-Type' => 'application/json', ]; foreach ($headers as $name => $value) { From 0bd511d6d28d9bb63ec6a876de552280d2c8f3e8 Mon Sep 17 00:00:00 2001 From: Nikhil Date: Thu, 5 Jun 2025 05:06:09 +0530 Subject: [PATCH 37/42] updated python tests --- .../python_http_client_codegen_test.dart | 96 +++++++------------ .../codegen/python_requests_codegen_test.dart | 94 +++++++----------- 2 files changed, 73 insertions(+), 117 deletions(-) diff --git a/test/codegen/python_http_client_codegen_test.dart b/test/codegen/python_http_client_codegen_test.dart index 3dc6068b3..6221a8a69 100644 --- a/test/codegen/python_http_client_codegen_test.dart +++ b/test/codegen/python_http_client_codegen_test.dart @@ -31,11 +31,8 @@ print(data.decode("utf-8")) test('GET 2', () { const expectedCode = r"""import http.client from urllib.parse import urlencode - -queryParams = { - "code": "US" -} -queryParamsStr = '?' + urlencode(queryParams) +params = { 'code': ['US'] } +queryParamsStr = '?' + urlencode(params,doseq=True) conn = http.client.HTTPSConnection("api.apidash.dev") conn.request("GET", "/country/data" + queryParamsStr) @@ -57,11 +54,8 @@ print(data.decode("utf-8")) test('GET 3', () { const expectedCode = r"""import http.client from urllib.parse import urlencode - -queryParams = { - "code": "IND" -} -queryParamsStr = '?' + urlencode(queryParams) +params = { 'code': ['IND', 'US'] } +queryParamsStr = '?' + urlencode(params,doseq=True) conn = http.client.HTTPSConnection("api.apidash.dev") conn.request("GET", "/country/data" + queryParamsStr) @@ -83,15 +77,12 @@ print(data.decode("utf-8")) test('GET 4', () { const expectedCode = r"""import http.client from urllib.parse import urlencode - -queryParams = { - "num": "8700000", - "digits": "3", - "system": "SS", - "add_space": "true", - "trailing_zeros": "true" -} -queryParamsStr = '?' + urlencode(queryParams) +params = { 'num': ['8700000'], +'digits': ['3'], +'system': ['SS'], +'add_space': ['true'], +'trailing_zeros': ['true'] } +queryParamsStr = '?' + urlencode(params,doseq=True) conn = http.client.HTTPSConnection("api.apidash.dev") conn.request("GET", "/humanize/social" + queryParamsStr) @@ -138,11 +129,8 @@ print(data.decode("utf-8")) test('GET 6', () { const expectedCode = r"""import http.client from urllib.parse import urlencode - -queryParams = { - "raw": "true" -} -queryParamsStr = '?' + urlencode(queryParams) +params = { 'raw': ['true'] } +queryParamsStr = '?' + urlencode(params,doseq=True) headers = { "User-Agent": "Test Agent" @@ -189,11 +177,8 @@ print(data.decode("utf-8")) test('GET 8', () { const expectedCode = r"""import http.client from urllib.parse import urlencode - -queryParams = { - "raw": "true" -} -queryParamsStr = '?' + urlencode(queryParams) +params = { 'raw': ['true'] } +queryParamsStr = '?' + urlencode(params,doseq=True) headers = { "User-Agent": "Test Agent" @@ -220,12 +205,9 @@ print(data.decode("utf-8")) test('GET 9', () { const expectedCode = r"""import http.client from urllib.parse import urlencode - -queryParams = { - "num": "8700000", - "add_space": "true" -} -queryParamsStr = '?' + urlencode(queryParams) +params = { 'num': ['8700000'], +'add_space': ['true'] } +queryParamsStr = '?' + urlencode(params,doseq=True) conn = http.client.HTTPSConnection("api.apidash.dev") conn.request("GET", "/humanize/social" + queryParamsStr) @@ -272,20 +254,12 @@ print(data.decode("utf-8")) test('GET 11', () { const expectedCode = r"""import http.client from urllib.parse import urlencode - -queryParams = { - "num": "8700000", - "digits": "3" -} -queryParamsStr = '?' + urlencode(queryParams) - -headers = { - "User-Agent": "Test Agent" -} +params = { 'num': ['8700000'], +'digits': ['3'] } +queryParamsStr = '?' + urlencode(params,doseq=True) conn = http.client.HTTPSConnection("api.apidash.dev") -conn.request("GET", "/humanize/social" + queryParamsStr, - headers= headers) +conn.request("GET", "/humanize/social" + queryParamsStr) res = conn.getresponse() data = res.read() @@ -663,12 +637,9 @@ print(data.decode("utf-8")) import mimetypes from codecs import encode from urllib.parse import urlencode - -queryParams = { - "size": "2", - "len": "3" -} -queryParamsStr = '?' + urlencode(queryParams) +params = { 'size': ['2'], +'len': ['3'] } +queryParamsStr = '?' + urlencode(params,doseq=True) headers = { "content-type": "multipart/form-data; boundary=a990b150-7683-1f0c-814d-a1b3d90cd6b3" @@ -719,12 +690,9 @@ print(data.decode("utf-8")) import mimetypes from codecs import encode from urllib.parse import urlencode - -queryParams = { - "size": "2", - "len": "3" -} -queryParamsStr = '?' + urlencode(queryParams) +params = { 'size': ['2'], +'len': ['3'] } +queryParamsStr = '?' + urlencode(params,doseq=True) headers = { "User-Agent": "Test Agent", @@ -783,6 +751,7 @@ body = r'''{ }''' headers = { + "x-api-key": "reqres-free-v1", "content-type": "application/json" } @@ -816,6 +785,7 @@ body = r'''{ }''' headers = { + "x-api-key": "reqres-free-v1", "content-type": "application/json" } @@ -843,8 +813,13 @@ print(data.decode("utf-8")) test('DELETE 1', () { const expectedCode = r"""import http.client +headers = { + "x-api-key": "reqres-free-v1" +} + conn = http.client.HTTPSConnection("reqres.in") -conn.request("DELETE", "/api/users/2") +conn.request("DELETE", "/api/users/2", + headers= headers) res = conn.getresponse() data = res.read() @@ -869,6 +844,7 @@ body = r'''{ }''' headers = { + "x-api-key": "reqres-free-v1", "content-type": "application/json" } diff --git a/test/codegen/python_requests_codegen_test.dart b/test/codegen/python_requests_codegen_test.dart index 11b11428b..fcd268e01 100644 --- a/test/codegen/python_requests_codegen_test.dart +++ b/test/codegen/python_requests_codegen_test.dart @@ -31,11 +31,7 @@ print('Response Body:', response.text) const expectedCode = r"""import requests url = 'https://api.apidash.dev/country/data' - -params = { - "code": "US" -} - +params = { 'code': ['US'] } response = requests.get(url, params=params) print('Status Code:', response.status_code) @@ -54,11 +50,7 @@ print('Response Body:', response.text) const expectedCode = r"""import requests url = 'https://api.apidash.dev/country/data' - -params = { - "code": "IND" -} - +params = { 'code': ['IND', 'US'] } response = requests.get(url, params=params) print('Status Code:', response.status_code) @@ -77,15 +69,11 @@ print('Response Body:', response.text) const expectedCode = r"""import requests url = 'https://api.apidash.dev/humanize/social' - -params = { - "num": "8700000", - "digits": "3", - "system": "SS", - "add_space": "true", - "trailing_zeros": "true" -} - +params = { 'num': ['8700000'], +'digits': ['3'], +'system': ['SS'], +'add_space': ['true'], +'trailing_zeros': ['true'] } response = requests.get(url, params=params) print('Status Code:', response.status_code) @@ -127,11 +115,7 @@ print('Response Body:', response.text) const expectedCode = r"""import requests url = 'https://api.github.com/repos/foss42/apidash' - -params = { - "raw": "true" -} - +params = { 'raw': ['true'] } headers = { "User-Agent": "Test Agent" } @@ -173,11 +157,7 @@ print('Response Body:', response.text) const expectedCode = r"""import requests url = 'https://api.github.com/repos/foss42/apidash' - -params = { - "raw": "true" -} - +params = { 'raw': ['true'] } headers = { "User-Agent": "Test Agent" } @@ -200,12 +180,8 @@ print('Response Body:', response.text) const expectedCode = r"""import requests url = 'https://api.apidash.dev/humanize/social' - -params = { - "num": "8700000", - "add_space": "true" -} - +params = { 'num': ['8700000'], +'add_space': ['true'] } response = requests.get(url, params=params) print('Status Code:', response.status_code) @@ -247,12 +223,8 @@ print('Response Body:', response.text) const expectedCode = r"""import requests url = 'https://api.apidash.dev/humanize/social' - -params = { - "num": "8700000", - "digits": "3" -} - +params = { 'num': ['8700000'], +'digits': ['3'] } headers = { "User-Agent": "Test Agent" } @@ -538,12 +510,8 @@ print('Response Body:', response.text) from requests_toolbelt.multipart.encoder import MultipartEncoder url = 'https://api.apidash.dev/io/form' - -params = { - "size": "2", - "len": "3" -} - +params = { 'size': ['2'], +'len': ['3'] } payload = MultipartEncoder({ "text": "API", "sep": "|", @@ -573,12 +541,8 @@ print('Response Body:', response.text) from requests_toolbelt.multipart.encoder import MultipartEncoder url = 'https://api.apidash.dev/io/img' - -params = { - "size": "2", - "len": "3" -} - +params = { 'size': ['2'], +'len': ['3'] } payload = MultipartEncoder({ "token": "xyz", "imfile": ("1.png", open("/Documents/up/1.png", "rb")), @@ -616,7 +580,11 @@ payload = { "job": "zion resident" } -response = requests.put(url, json=payload) +headers = { + "x-api-key": "reqres-free-v1" +} + +response = requests.put(url, json=payload, headers=headers) print('Status Code:', response.status_code) print('Response Body:', response.text) @@ -642,7 +610,11 @@ payload = { "job": "accountant" } -response = requests.patch(url, json=payload) +headers = { + "x-api-key": "reqres-free-v1" +} + +response = requests.patch(url, json=payload, headers=headers) print('Status Code:', response.status_code) print('Response Body:', response.text) @@ -663,7 +635,11 @@ print('Response Body:', response.text) url = 'https://reqres.in/api/users/2' -response = requests.delete(url) +headers = { + "x-api-key": "reqres-free-v1" +} + +response = requests.delete(url, headers=headers) print('Status Code:', response.status_code) print('Response Body:', response.text) @@ -687,7 +663,11 @@ payload = { "job": "accountant" } -response = requests.delete(url, json=payload) +headers = { + "x-api-key": "reqres-free-v1" +} + +response = requests.delete(url, json=payload, headers=headers) print('Status Code:', response.status_code) print('Response Body:', response.text) From 34c8eb1f359be9e782e451e8f95b0f8bf32b71dd Mon Sep 17 00:00:00 2001 From: Nikhil Date: Thu, 5 Jun 2025 05:06:31 +0530 Subject: [PATCH 38/42] updated ruby-net --- lib/codegen/ruby/net_http.dart | 1 + test/codegen/ruby_net_http_codegen_test.dart | 170 +++++++++++++++++-- 2 files changed, 154 insertions(+), 17 deletions(-) diff --git a/lib/codegen/ruby/net_http.dart b/lib/codegen/ruby/net_http.dart index e58957372..c5b114694 100644 --- a/lib/codegen/ruby/net_http.dart +++ b/lib/codegen/ruby/net_http.dart @@ -6,6 +6,7 @@ class RubyNetHttpCodeGen { require "net/http" url = URI("{{url}}") + """; String kTemplateRequestParams = """ diff --git a/test/codegen/ruby_net_http_codegen_test.dart b/test/codegen/ruby_net_http_codegen_test.dart index 33f854247..d4e476180 100644 --- a/test/codegen/ruby_net_http_codegen_test.dart +++ b/test/codegen/ruby_net_http_codegen_test.dart @@ -19,7 +19,9 @@ request = Net::HTTP::Get.new(url) response = https.request(request) puts "Response Code: #{response.code}" + puts "Response Body: #{response.body}" + """; expect( codeGen.getCode( @@ -34,14 +36,21 @@ puts "Response Body: #{response.body}" const expectedCode = r"""require "uri" require "net/http" -url = URI("https://api.apidash.dev/country/data?code=US") +url = URI("https://api.apidash.dev/country/data") + +params = { + "code" => ["US"], +} +url.query = URI.encode_www_form(params) https = Net::HTTP.new(url.host, url.port) https.use_ssl = true request = Net::HTTP::Get.new(url) response = https.request(request) puts "Response Code: #{response.code}" + puts "Response Body: #{response.body}" + """; expect( codeGen.getCode( @@ -56,14 +65,21 @@ puts "Response Body: #{response.body}" const expectedCode = r"""require "uri" require "net/http" -url = URI("https://api.apidash.dev/country/data?code=IND") +url = URI("https://api.apidash.dev/country/data") + +params = { + "code" => ["IND", "US"], +} +url.query = URI.encode_www_form(params) https = Net::HTTP.new(url.host, url.port) https.use_ssl = true request = Net::HTTP::Get.new(url) response = https.request(request) puts "Response Code: #{response.code}" + puts "Response Body: #{response.body}" + """; expect( codeGen.getCode( @@ -78,14 +94,25 @@ puts "Response Body: #{response.body}" const expectedCode = r"""require "uri" require "net/http" -url = URI("https://api.apidash.dev/humanize/social?num=8700000&digits=3&system=SS&add_space=true&trailing_zeros=true") +url = URI("https://api.apidash.dev/humanize/social") + +params = { + "num" => ["8700000"], + "digits" => ["3"], + "system" => ["SS"], + "add_space" => ["true"], + "trailing_zeros" => ["true"], +} +url.query = URI.encode_www_form(params) https = Net::HTTP.new(url.host, url.port) https.use_ssl = true request = Net::HTTP::Get.new(url) response = https.request(request) puts "Response Code: #{response.code}" + puts "Response Body: #{response.body}" + """; expect( codeGen.getCode( @@ -105,10 +132,13 @@ https = Net::HTTP.new(url.host, url.port) https.use_ssl = true request = Net::HTTP::Get.new(url) request["User-Agent"] = "Test Agent" + response = https.request(request) puts "Response Code: #{response.code}" + puts "Response Body: #{response.body}" + """; expect( codeGen.getCode( @@ -123,15 +153,23 @@ puts "Response Body: #{response.body}" const expectedCode = r"""require "uri" require "net/http" -url = URI("https://api.github.com/repos/foss42/apidash?raw=true") +url = URI("https://api.github.com/repos/foss42/apidash") + +params = { + "raw" => ["true"], +} +url.query = URI.encode_www_form(params) https = Net::HTTP.new(url.host, url.port) https.use_ssl = true request = Net::HTTP::Get.new(url) request["User-Agent"] = "Test Agent" + response = https.request(request) puts "Response Code: #{response.code}" + puts "Response Body: #{response.body}" + """; expect( codeGen.getCode( @@ -153,7 +191,9 @@ request = Net::HTTP::Get.new(url) response = https.request(request) puts "Response Code: #{response.code}" + puts "Response Body: #{response.body}" + """; expect( codeGen.getCode( @@ -168,15 +208,23 @@ puts "Response Body: #{response.body}" const expectedCode = r"""require "uri" require "net/http" -url = URI("https://api.github.com/repos/foss42/apidash?raw=true") +url = URI("https://api.github.com/repos/foss42/apidash") + +params = { + "raw" => ["true"], +} +url.query = URI.encode_www_form(params) https = Net::HTTP.new(url.host, url.port) https.use_ssl = true request = Net::HTTP::Get.new(url) request["User-Agent"] = "Test Agent" + response = https.request(request) puts "Response Code: #{response.code}" + puts "Response Body: #{response.body}" + """; expect( codeGen.getCode( @@ -191,14 +239,22 @@ puts "Response Body: #{response.body}" const expectedCode = r"""require "uri" require "net/http" -url = URI("https://api.apidash.dev/humanize/social?num=8700000&add_space=true") +url = URI("https://api.apidash.dev/humanize/social") + +params = { + "num" => ["8700000"], + "add_space" => ["true"], +} +url.query = URI.encode_www_form(params) https = Net::HTTP.new(url.host, url.port) https.use_ssl = true request = Net::HTTP::Get.new(url) response = https.request(request) puts "Response Code: #{response.code}" + puts "Response Body: #{response.body}" + """; expect( codeGen.getCode( @@ -218,10 +274,13 @@ https = Net::HTTP.new(url.host, url.port) https.use_ssl = true request = Net::HTTP::Get.new(url) request["User-Agent"] = "Test Agent" + response = https.request(request) puts "Response Code: #{response.code}" + puts "Response Body: #{response.body}" + """; expect( codeGen.getCode( @@ -236,15 +295,24 @@ puts "Response Body: #{response.body}" const expectedCode = r"""require "uri" require "net/http" -url = URI("https://api.apidash.dev/humanize/social?num=8700000&digits=3") +url = URI("https://api.apidash.dev/humanize/social") + +params = { + "num" => ["8700000"], + "digits" => ["3"], +} +url.query = URI.encode_www_form(params) https = Net::HTTP.new(url.host, url.port) https.use_ssl = true request = Net::HTTP::Get.new(url) request["User-Agent"] = "Test Agent" + response = https.request(request) puts "Response Code: #{response.code}" + puts "Response Body: #{response.body}" + """; expect( codeGen.getCode( @@ -266,7 +334,9 @@ request = Net::HTTP::Get.new(url) response = https.request(request) puts "Response Code: #{response.code}" + puts "Response Body: #{response.body}" + """; expect( codeGen.getCode( @@ -290,7 +360,9 @@ request = Net::HTTP::Head.new(url) response = https.request(request) puts "Response Code: #{response.code}" -puts "Response Body: #{response.to_hash}" + +puts "Response Headers: #{response.to_hash}" + """; expect( codeGen.getCode( @@ -312,7 +384,9 @@ request = Net::HTTP::Head.new(url) response = https.request(request) puts "Response Code: #{response.code}" -puts "Response Body: #{response.to_hash}" + +puts "Response Headers: #{response.to_hash}" + """; expect( codeGen.getCode( @@ -334,6 +408,7 @@ https = Net::HTTP.new(url.host, url.port) https.use_ssl = true request = Net::HTTP::Post.new(url) request["Content-Type"] = "text/plain" + request.body = < ["2"], + "len" => ["3"], +} +url.query = URI.encode_www_form(params) https = Net::HTTP.new(url.host, url.port) https.use_ssl = true request = Net::HTTP::Post.new(url) -form_data = [["text", "API"],["sep", "|"],["times", "3"]] +form_data = [["text", "API"], ["sep", "|"], ["times", "3"]] request.set_form form_data, 'multipart/form-data' + response = https.request(request) puts "Response Code: #{response.code}" + puts "Response Body: #{response.body}" + """; expect( codeGen.getCode( @@ -538,18 +644,29 @@ puts "Response Body: #{response.body}" const expectedCode = r"""require "uri" require "net/http" -url = URI("https://api.apidash.dev/io/img?size=2&len=3") +url = URI("https://api.apidash.dev/io/img") + +params = { + "size" => ["2"], + "len" => ["3"], +} +url.query = URI.encode_www_form(params) https = Net::HTTP.new(url.host, url.port) https.use_ssl = true request = Net::HTTP::Post.new(url) request["User-Agent"] = "Test Agent" + request["Keep-Alive"] = "true" -form_data = [["token", "xyz"],["imfile", File.open("/Documents/up/1.png")]] + +form_data = [["token", "xyz"], ["imfile", File.open("/Documents/up/1.png")]] request.set_form form_data, 'multipart/form-data' + response = https.request(request) puts "Response Code: #{response.code}" + puts "Response Body: #{response.body}" + """; expect( codeGen.getCode( @@ -570,7 +687,10 @@ url = URI("https://reqres.in/api/users/2") https = Net::HTTP.new(url.host, url.port) https.use_ssl = true request = Net::HTTP::Put.new(url) +request["x-api-key"] = "reqres-free-v1" + request["Content-Type"] = "application/json" + request.body = < Date: Thu, 5 Jun 2025 05:06:42 +0530 Subject: [PATCH 39/42] updated ruby-faraday --- test/codegen/ruby_faraday_codegen_test.dart | 58 ++++++++++++--------- 1 file changed, 32 insertions(+), 26 deletions(-) diff --git a/test/codegen/ruby_faraday_codegen_test.dart b/test/codegen/ruby_faraday_codegen_test.dart index e34f1d40b..5badeae7b 100644 --- a/test/codegen/ruby_faraday_codegen_test.dart +++ b/test/codegen/ruby_faraday_codegen_test.dart @@ -45,8 +45,8 @@ end response = conn.get(REQUEST_URL) do |req| req.params = { - "code" => "US", - } + "code" => ["US"], + } end puts "Status Code: #{response.status}" @@ -73,8 +73,8 @@ end response = conn.get(REQUEST_URL) do |req| req.params = { - "code" => "IND", - } + "code" => ["IND", "US"], + } end puts "Status Code: #{response.status}" @@ -101,12 +101,12 @@ end response = conn.get(REQUEST_URL) do |req| req.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"], + } end puts "Status Code: #{response.status}" @@ -164,8 +164,8 @@ response = conn.get(REQUEST_URL) do |req| "User-Agent" => "Test Agent", } req.params = { - "raw" => "true", - } + "raw" => ["true"], + } end puts "Status Code: #{response.status}" @@ -220,8 +220,8 @@ response = conn.get(REQUEST_URL) do |req| "User-Agent" => "Test Agent", } req.params = { - "raw" => "true", - } + "raw" => ["true"], + } end puts "Status Code: #{response.status}" @@ -248,9 +248,9 @@ end response = conn.get(REQUEST_URL) do |req| req.params = { - "num" => "8700000", - "add_space" => "true", - } + "num" => ["8700000"], + "add_space" => ["true"], + } end puts "Status Code: #{response.status}" @@ -308,9 +308,9 @@ response = conn.get(REQUEST_URL) do |req| "User-Agent" => "Test Agent", } req.params = { - "num" => "8700000", - "digits" => "3", - } + "num" => ["8700000"], + "digits" => ["3"], + } end puts "Status Code: #{response.status}" @@ -655,9 +655,9 @@ end response = conn.post(REQUEST_URL, PAYLOAD) do |req| req.params = { - "size" => "2", - "len" => "3", - } + "size" => ["2"], + "len" => ["3"], + } end puts "Status Code: #{response.status}" @@ -694,9 +694,9 @@ response = conn.post(REQUEST_URL, PAYLOAD) do |req| "Keep-Alive" => "true", } req.params = { - "size" => "2", - "len" => "3", - } + "size" => ["2"], + "len" => ["3"], + } end puts "Status Code: #{response.status}" @@ -732,6 +732,7 @@ end response = conn.put(REQUEST_URL, PAYLOAD) do |req| req.headers = { + "x-api-key" => "reqres-free-v1", "Content-Type" => "application/json", } end @@ -769,6 +770,7 @@ end response = conn.patch(REQUEST_URL, PAYLOAD) do |req| req.headers = { + "x-api-key" => "reqres-free-v1", "Content-Type" => "application/json", } end @@ -798,6 +800,9 @@ conn = Faraday.new do |faraday| end response = conn.delete(REQUEST_URL) do |req| + req.headers = { + "x-api-key" => "reqres-free-v1", + } end puts "Status Code: #{response.status}" @@ -831,6 +836,7 @@ end response = conn.delete(REQUEST_URL) do |req| req.headers = { + "x-api-key" => "reqres-free-v1", "Content-Type" => "application/json", } req.body = PAYLOAD From 0198c55f592995fbb844dfbe4f984aaa7c9692ba Mon Sep 17 00:00:00 2001 From: Nikhil Date: Wed, 9 Jul 2025 05:18:36 +0530 Subject: [PATCH 40/42] updated tests for rust --- lib/codegen/rust/actix.dart | 6 +- lib/codegen/rust/hyper.dart | 1 + test/codegen/rust_actix_codegen_test.dart | 282 +++++++------ test/codegen/rust_curl_codegen_test.dart | 364 ++++++++++------ test/codegen/rust_hyper_codegen_test.dart | 436 ++++++++++---------- test/codegen/rust_reqwest_codegen_test.dart | 73 ++-- test/codegen/rust_ureq_codegen_test.dart | 15 +- 7 files changed, 666 insertions(+), 511 deletions(-) diff --git a/lib/codegen/rust/actix.dart b/lib/codegen/rust/actix.dart index e9485aa1f..91c1625fd 100644 --- a/lib/codegen/rust/actix.dart +++ b/lib/codegen/rust/actix.dart @@ -39,9 +39,9 @@ String kTemplateParams = """ let payload = serde_json::json!({{body}}); """; - - String kTemplateHeaders = - """\n {% for key, val in headers -%}.insert_header(("{{key}}", "{{val}}")){% if not loop.last %}{{ '\n ' }}{% endif %}{%- endfor -%}"""; +String kTemplateHeaders = + """ +\n {% for key, val in headers -%}request = request.insert_header(("{{key}}", "{{val}}"));{{ '\n ' }}{%- endfor -%}"""; String kTemplateFormHeaderContentType = ''' multipart/form-data; boundary={{boundary}}'''; diff --git a/lib/codegen/rust/hyper.dart b/lib/codegen/rust/hyper.dart index f88f46689..ec730e483 100644 --- a/lib/codegen/rust/hyper.dart +++ b/lib/codegen/rust/hyper.dart @@ -23,6 +23,7 @@ async fn main() -> Result<(), Box> { final String kTemplateParams = """ {% for key, values in params %}{% for val in values %} url.query_pairs_mut().append_pair("{{ key }}", "{{ val }}");{% endfor %}{% endfor %} + """; final String kTemplateMethod = """ diff --git a/test/codegen/rust_actix_codegen_test.dart b/test/codegen/rust_actix_codegen_test.dart index 730296ad8..dd4a7f7c0 100644 --- a/test/codegen/rust_actix_codegen_test.dart +++ b/test/codegen/rust_actix_codegen_test.dart @@ -13,10 +13,8 @@ void main() { async fn main() -> Result<(), Box> { let url = "https://api.apidash.dev"; let client = awc::Client::default(); - - let mut response = client - .get(url) - .send() + let mut request = client.get(url); + let mut response = request.send() .await .unwrap(); @@ -42,12 +40,12 @@ async fn main() -> Result<(), Box> { async fn main() -> Result<(), Box> { let url = "https://api.apidash.dev/country/data"; let client = awc::Client::default(); - - let mut response = client - .get(url) - .query(&[("code", "US")]) - .unwrap() - .send() + let mut request = client.get(url); + let query_params = [ + ("code", "US"), + ]; + request = request.query(&query_params).unwrap(); + let mut response = request.send() .await .unwrap(); @@ -73,12 +71,13 @@ async fn main() -> Result<(), Box> { async fn main() -> Result<(), Box> { let url = "https://api.apidash.dev/country/data"; let client = awc::Client::default(); - - let mut response = client - .get(url) - .query(&[("code", "IND")]) - .unwrap() - .send() + let mut request = client.get(url); + let query_params = [ + ("code", "IND"), + ("code", "US"), + ]; + request = request.query(&query_params).unwrap(); + let mut response = request.send() .await .unwrap(); @@ -104,12 +103,16 @@ async fn main() -> Result<(), Box> { async fn main() -> Result<(), Box> { let url = "https://api.apidash.dev/humanize/social"; let client = awc::Client::default(); - - let mut response = client - .get(url) - .query(&[("num", "8700000"), ("digits", "3"), ("system", "SS"), ("add_space", "true"), ("trailing_zeros", "true")]) - .unwrap() - .send() + let mut request = client.get(url); + let query_params = [ + ("num", "8700000"), + ("digits", "3"), + ("system", "SS"), + ("add_space", "true"), + ("trailing_zeros", "true"), + ]; + request = request.query(&query_params).unwrap(); + let mut response = request.send() .await .unwrap(); @@ -135,11 +138,10 @@ async fn main() -> Result<(), Box> { async fn main() -> Result<(), Box> { let url = "https://api.github.com/repos/foss42/apidash"; let client = awc::Client::default(); - - let mut response = client - .get(url) - .insert_header(("User-Agent", "Test Agent")) - .send() + let mut request = client.get(url); + request = request.insert_header(("User-Agent", "Test Agent")); + + let mut response = request.send() .await .unwrap(); @@ -165,13 +167,14 @@ async fn main() -> Result<(), Box> { async fn main() -> Result<(), Box> { let url = "https://api.github.com/repos/foss42/apidash"; let client = awc::Client::default(); - - let mut response = client - .get(url) - .query(&[("raw", "true")]) - .unwrap() - .insert_header(("User-Agent", "Test Agent")) - .send() + let mut request = client.get(url); + let query_params = [ + ("raw", "true"), + ]; + request = request.query(&query_params).unwrap(); + request = request.insert_header(("User-Agent", "Test Agent")); + + let mut response = request.send() .await .unwrap(); @@ -197,10 +200,8 @@ async fn main() -> Result<(), Box> { async fn main() -> Result<(), Box> { let url = "https://api.apidash.dev"; let client = awc::Client::default(); - - let mut response = client - .get(url) - .send() + let mut request = client.get(url); + let mut response = request.send() .await .unwrap(); @@ -226,13 +227,14 @@ async fn main() -> Result<(), Box> { async fn main() -> Result<(), Box> { let url = "https://api.github.com/repos/foss42/apidash"; let client = awc::Client::default(); - - let mut response = client - .get(url) - .query(&[("raw", "true")]) - .unwrap() - .insert_header(("User-Agent", "Test Agent")) - .send() + let mut request = client.get(url); + let query_params = [ + ("raw", "true"), + ]; + request = request.query(&query_params).unwrap(); + request = request.insert_header(("User-Agent", "Test Agent")); + + let mut response = request.send() .await .unwrap(); @@ -258,12 +260,13 @@ async fn main() -> Result<(), Box> { async fn main() -> Result<(), Box> { let url = "https://api.apidash.dev/humanize/social"; let client = awc::Client::default(); - - let mut response = client - .get(url) - .query(&[("num", "8700000"), ("add_space", "true")]) - .unwrap() - .send() + let mut request = client.get(url); + let query_params = [ + ("num", "8700000"), + ("add_space", "true"), + ]; + request = request.query(&query_params).unwrap(); + let mut response = request.send() .await .unwrap(); @@ -289,11 +292,10 @@ async fn main() -> Result<(), Box> { async fn main() -> Result<(), Box> { let url = "https://api.apidash.dev/humanize/social"; let client = awc::Client::default(); - - let mut response = client - .get(url) - .insert_header(("User-Agent", "Test Agent")) - .send() + let mut request = client.get(url); + request = request.insert_header(("User-Agent", "Test Agent")); + + let mut response = request.send() .await .unwrap(); @@ -319,13 +321,15 @@ async fn main() -> Result<(), Box> { async fn main() -> Result<(), Box> { let url = "https://api.apidash.dev/humanize/social"; let client = awc::Client::default(); - - let mut response = client - .get(url) - .query(&[("num", "8700000"), ("digits", "3")]) - .unwrap() - .insert_header(("User-Agent", "Test Agent")) - .send() + let mut request = client.get(url); + let query_params = [ + ("num", "8700000"), + ("digits", "3"), + ]; + request = request.query(&query_params).unwrap(); + request = request.insert_header(("User-Agent", "Test Agent")); + + let mut response = request.send() .await .unwrap(); @@ -351,10 +355,8 @@ async fn main() -> Result<(), Box> { async fn main() -> Result<(), Box> { let url = "https://api.apidash.dev/humanize/social"; let client = awc::Client::default(); - - let mut response = client - .get(url) - .send() + let mut request = client.get(url); + let mut response = request.send() .await .unwrap(); @@ -382,10 +384,8 @@ async fn main() -> Result<(), Box> { async fn main() -> Result<(), Box> { let url = "https://api.apidash.dev"; let client = awc::Client::default(); - - let mut response = client - .head(url) - .send() + let mut request = client.head(url); + let mut response = request.send() .await .unwrap(); @@ -411,10 +411,8 @@ async fn main() -> Result<(), Box> { async fn main() -> Result<(), Box> { let url = "http://api.apidash.dev"; let client = awc::Client::default(); - - let mut response = client - .head(url) - .send() + let mut request = client.head(url); + let mut response = request.send() .await .unwrap(); @@ -442,15 +440,14 @@ async fn main() -> Result<(), Box> { async fn main() -> Result<(), Box> { let url = "https://api.apidash.dev/case/lower"; let client = awc::Client::default(); - + let mut request = client.post(url); let payload = r#"{ "text": "I LOVE Flutter" }"#; - let mut response = client - .post(url) - .insert_header(("content-type", "text/plain")) - .send_body(payload) + request = request.insert_header(("content-type", "text/plain")); + + let mut response = request.send_body(payload) .await .unwrap(); @@ -476,7 +473,7 @@ async fn main() -> Result<(), Box> { async fn main() -> Result<(), Box> { let url = "https://api.apidash.dev/case/lower"; let client = awc::Client::default(); - + let mut request = client.post(url); let payload = serde_json::json!({ "text": "I LOVE Flutter", "flag": null, @@ -486,9 +483,7 @@ async fn main() -> Result<(), Box> { "arr": ["null", "true", "false", null] }); - let mut response = client - .post(url) - .send_json(&payload) + let mut response = request.send_json(&payload) .await .unwrap(); @@ -514,15 +509,14 @@ async fn main() -> Result<(), Box> { async fn main() -> Result<(), Box> { let url = "https://api.apidash.dev/case/lower"; let client = awc::Client::default(); - + let mut request = client.post(url); let payload = serde_json::json!({ "text": "I LOVE Flutter" }); - let mut response = client - .post(url) - .insert_header(("User-Agent", "Test Agent")) - .send_json(&payload) + request = request.insert_header(("User-Agent", "Test Agent")); + + let mut response = request.send_json(&payload) .await .unwrap(); @@ -549,7 +543,7 @@ async fn main() -> Result<(), Box> { async fn main() -> Result<(), Box> { let url = "https://api.apidash.dev/io/form"; let client = awc::Client::default(); - + let mut request = client.post(url); struct FormDataItem { name: String, value: String, @@ -604,10 +598,9 @@ async fn main() -> Result<(), Box> { } let payload = build_data_list(form_data_items); - let mut response = client - .post(url) - .insert_header(("content-type", "multipart/form-data; boundary=test")) - .send_body(payload) + request = request.insert_header(("content-type", "multipart/form-data; boundary=test")); + + let mut response = request.send_body(payload) .await .unwrap(); @@ -634,7 +627,7 @@ async fn main() -> Result<(), Box> { async fn main() -> Result<(), Box> { let url = "https://api.apidash.dev/io/form"; let client = awc::Client::default(); - + let mut request = client.post(url); struct FormDataItem { name: String, value: String, @@ -689,11 +682,10 @@ async fn main() -> Result<(), Box> { } let payload = build_data_list(form_data_items); - let mut response = client - .post(url) - .insert_header(("User-Agent", "Test Agent")) - .insert_header(("content-type", "multipart/form-data; boundary=test")) - .send_body(payload) + request = request.insert_header(("User-Agent", "Test Agent")); + request = request.insert_header(("content-type", "multipart/form-data; boundary=test")); + + let mut response = request.send_body(payload) .await .unwrap(); @@ -717,7 +709,7 @@ async fn main() -> Result<(), Box> { async fn main() -> Result<(), Box> { let url = "https://api.apidash.dev/io/img"; let client = awc::Client::default(); - + let mut request = client.post(url); struct FormDataItem { name: String, value: String, @@ -767,10 +759,9 @@ async fn main() -> Result<(), Box> { } let payload = build_data_list(form_data_items); - let mut response = client - .post(url) - .insert_header(("content-type", "multipart/form-data; boundary=test")) - .send_body(payload) + request = request.insert_header(("content-type", "multipart/form-data; boundary=test")); + + let mut response = request.send_body(payload) .await .unwrap(); @@ -794,7 +785,7 @@ async fn main() -> Result<(), Box> { async fn main() -> Result<(), Box> { let url = "https://api.apidash.dev/io/img"; let client = awc::Client::default(); - + let mut request = client.post(url); struct FormDataItem { name: String, value: String, @@ -844,10 +835,9 @@ async fn main() -> Result<(), Box> { } let payload = build_data_list(form_data_items); - let mut response = client - .post(url) - .insert_header(("content-type", "multipart/form-data; boundary=test")) - .send_body(payload) + request = request.insert_header(("content-type", "multipart/form-data; boundary=test")); + + let mut response = request.send_body(payload) .await .unwrap(); @@ -871,7 +861,7 @@ async fn main() -> Result<(), Box> { async fn main() -> Result<(), Box> { let url = "https://api.apidash.dev/io/form"; let client = awc::Client::default(); - + let mut request = client.post(url); struct FormDataItem { name: String, value: String, @@ -925,13 +915,15 @@ async fn main() -> Result<(), Box> { data_list } - let payload = build_data_list(form_data_items); - let mut response = client - .post(url) - .query(&[("size", "2"), ("len", "3")]) - .unwrap() - .insert_header(("content-type", "multipart/form-data; boundary=test")) - .send_body(payload) + let payload = build_data_list(form_data_items); + let query_params = [ + ("size", "2"), + ("len", "3"), + ]; + request = request.query(&query_params).unwrap(); + request = request.insert_header(("content-type", "multipart/form-data; boundary=test")); + + let mut response = request.send_body(payload) .await .unwrap(); @@ -955,7 +947,7 @@ async fn main() -> Result<(), Box> { async fn main() -> Result<(), Box> { let url = "https://api.apidash.dev/io/img"; let client = awc::Client::default(); - + let mut request = client.post(url); struct FormDataItem { name: String, value: String, @@ -1004,15 +996,17 @@ async fn main() -> Result<(), Box> { data_list } - let payload = build_data_list(form_data_items); - let mut response = client - .post(url) - .query(&[("size", "2"), ("len", "3")]) - .unwrap() - .insert_header(("User-Agent", "Test Agent")) - .insert_header(("Keep-Alive", "true")) - .insert_header(("content-type", "multipart/form-data; boundary=test")) - .send_body(payload) + let payload = build_data_list(form_data_items); + let query_params = [ + ("size", "2"), + ("len", "3"), + ]; + request = request.query(&query_params).unwrap(); + request = request.insert_header(("User-Agent", "Test Agent")); + request = request.insert_header(("Keep-Alive", "true")); + request = request.insert_header(("content-type", "multipart/form-data; boundary=test")); + + let mut response = request.send_body(payload) .await .unwrap(); @@ -1038,15 +1032,15 @@ async fn main() -> Result<(), Box> { async fn main() -> Result<(), Box> { let url = "https://reqres.in/api/users/2"; let client = awc::Client::default(); - + let mut request = client.put(url); let payload = serde_json::json!({ "name": "morpheus", "job": "zion resident" }); - let mut response = client - .put(url) - .send_json(&payload) + request = request.insert_header(("x-api-key", "reqres-free-v1")); + + let mut response = request.send_json(&payload) .await .unwrap(); @@ -1074,15 +1068,15 @@ async fn main() -> Result<(), Box> { async fn main() -> Result<(), Box> { let url = "https://reqres.in/api/users/2"; let client = awc::Client::default(); - + let mut request = client.patch(url); let payload = serde_json::json!({ "name": "marfeus", "job": "accountant" }); - let mut response = client - .patch(url) - .send_json(&payload) + request = request.insert_header(("x-api-key", "reqres-free-v1")); + + let mut response = request.send_json(&payload) .await .unwrap(); @@ -1110,10 +1104,10 @@ async fn main() -> Result<(), Box> { async fn main() -> Result<(), Box> { let url = "https://reqres.in/api/users/2"; let client = awc::Client::default(); - - let mut response = client - .delete(url) - .send() + let mut request = client.delete(url); + request = request.insert_header(("x-api-key", "reqres-free-v1")); + + let mut response = request.send() .await .unwrap(); @@ -1139,15 +1133,15 @@ async fn main() -> Result<(), Box> { async fn main() -> Result<(), Box> { let url = "https://reqres.in/api/users/2"; let client = awc::Client::default(); - + let mut request = client.delete(url); let payload = serde_json::json!({ "name": "marfeus", "job": "accountant" }); - let mut response = client - .delete(url) - .send_json(&payload) + request = request.insert_header(("x-api-key", "reqres-free-v1")); + + let mut response = request.send_json(&payload) .await .unwrap(); diff --git a/test/codegen/rust_curl_codegen_test.dart b/test/codegen/rust_curl_codegen_test.dart index f90028308..2d0836903 100644 --- a/test/codegen/rust_curl_codegen_test.dart +++ b/test/codegen/rust_curl_codegen_test.dart @@ -9,16 +9,20 @@ void main() { group('GET Request', () { test('GET1', () { - const expectedCode = r""" -use curl::easy::Easy; + const expectedCode = r"""use curl::easy::Easy; fn main() { let mut easy = Easy::new(); let mut data = Vec::new(); - easy.url("https://api.apidash.dev").unwrap(); + let base_url = "https://api.apidash.dev"; + + let url = base_url.to_string(); + + easy.get(true).unwrap(); { + easy.url(&url).unwrap(); let mut transfer = easy.transfer(); transfer.write_function(|new_data| { data.extend_from_slice(new_data); @@ -28,7 +32,6 @@ fn main() { } let response_body = String::from_utf8_lossy(&data); - println!("Response body: {}", response_body); println!("Response code: {}", easy.response_code().unwrap()); }"""; @@ -41,16 +44,24 @@ fn main() { expectedCode); }); test('GET2', () { - const expectedCode = r""" -use curl::easy::Easy; + const expectedCode = r"""use curl::easy::Easy; fn main() { let mut easy = Easy::new(); let mut data = Vec::new(); - easy.url("https://api.apidash.dev/country/data?code=US").unwrap(); + let base_url = "https://api.apidash.dev/country/data"; + + let params: Vec<(&str, Vec<&str>)> = vec![ + ("code", vec!["US", ]), + ]; + let query_string: String = params.iter().flat_map(|(key, values)| values.iter().map(move |val| format!("{}={}", key, val))) .collect::>().join("&"); + let url = format!("{}?{}", base_url, query_string); + + easy.get(true).unwrap(); { + easy.url(&url).unwrap(); let mut transfer = easy.transfer(); transfer.write_function(|new_data| { data.extend_from_slice(new_data); @@ -60,7 +71,6 @@ fn main() { } let response_body = String::from_utf8_lossy(&data); - println!("Response body: {}", response_body); println!("Response code: {}", easy.response_code().unwrap()); }"""; @@ -73,16 +83,24 @@ fn main() { expectedCode); }); test('GET3', () { - const expectedCode = r""" -use curl::easy::Easy; + const expectedCode = r"""use curl::easy::Easy; fn main() { let mut easy = Easy::new(); let mut data = Vec::new(); - easy.url("https://api.apidash.dev/country/data?code=IND").unwrap(); + let base_url = "https://api.apidash.dev/country/data"; + + let params: Vec<(&str, Vec<&str>)> = vec![ + ("code", vec!["IND", "US", ]), + ]; + let query_string: String = params.iter().flat_map(|(key, values)| values.iter().map(move |val| format!("{}={}", key, val))) .collect::>().join("&"); + let url = format!("{}?{}", base_url, query_string); + + easy.get(true).unwrap(); { + easy.url(&url).unwrap(); let mut transfer = easy.transfer(); transfer.write_function(|new_data| { data.extend_from_slice(new_data); @@ -92,7 +110,6 @@ fn main() { } let response_body = String::from_utf8_lossy(&data); - println!("Response body: {}", response_body); println!("Response code: {}", easy.response_code().unwrap()); }"""; @@ -105,16 +122,28 @@ fn main() { expectedCode); }); test('GET4', () { - const expectedCode = r""" -use curl::easy::Easy; + const expectedCode = r"""use curl::easy::Easy; fn main() { let mut easy = Easy::new(); let mut data = Vec::new(); - easy.url("https://api.apidash.dev/humanize/social?num=8700000&digits=3&system=SS&add_space=true&trailing_zeros=true").unwrap(); + let base_url = "https://api.apidash.dev/humanize/social"; + + let params: Vec<(&str, Vec<&str>)> = vec![ + ("num", vec!["8700000", ]), + ("digits", vec!["3", ]), + ("system", vec!["SS", ]), + ("add_space", vec!["true", ]), + ("trailing_zeros", vec!["true", ]), + ]; + let query_string: String = params.iter().flat_map(|(key, values)| values.iter().map(move |val| format!("{}={}", key, val))) .collect::>().join("&"); + let url = format!("{}?{}", base_url, query_string); + + easy.get(true).unwrap(); { + easy.url(&url).unwrap(); let mut transfer = easy.transfer(); transfer.write_function(|new_data| { data.extend_from_slice(new_data); @@ -124,7 +153,6 @@ fn main() { } let response_body = String::from_utf8_lossy(&data); - println!("Response body: {}", response_body); println!("Response code: {}", easy.response_code().unwrap()); }"""; @@ -137,14 +165,17 @@ fn main() { expectedCode); }); test('GET5', () { - const expectedCode = r""" -use curl::easy::Easy; + const expectedCode = r"""use curl::easy::Easy; use curl::easy::List; fn main() { let mut easy = Easy::new(); let mut data = Vec::new(); - easy.url("https://api.github.com/repos/foss42/apidash").unwrap(); + let base_url = "https://api.github.com/repos/foss42/apidash"; + + let url = base_url.to_string(); + + easy.get(true).unwrap(); let mut list = List::new(); @@ -152,6 +183,7 @@ fn main() { easy.http_headers(list).unwrap(); { + easy.url(&url).unwrap(); let mut transfer = easy.transfer(); transfer.write_function(|new_data| { data.extend_from_slice(new_data); @@ -161,7 +193,6 @@ fn main() { } let response_body = String::from_utf8_lossy(&data); - println!("Response body: {}", response_body); println!("Response code: {}", easy.response_code().unwrap()); }"""; @@ -174,14 +205,21 @@ fn main() { expectedCode); }); test('GET6', () { - const expectedCode = r""" -use curl::easy::Easy; + const expectedCode = r"""use curl::easy::Easy; use curl::easy::List; fn main() { let mut easy = Easy::new(); let mut data = Vec::new(); - easy.url("https://api.github.com/repos/foss42/apidash?raw=true").unwrap(); + let base_url = "https://api.github.com/repos/foss42/apidash"; + + let params: Vec<(&str, Vec<&str>)> = vec![ + ("raw", vec!["true", ]), + ]; + let query_string: String = params.iter().flat_map(|(key, values)| values.iter().map(move |val| format!("{}={}", key, val))) .collect::>().join("&"); + let url = format!("{}?{}", base_url, query_string); + + easy.get(true).unwrap(); let mut list = List::new(); @@ -189,6 +227,7 @@ fn main() { easy.http_headers(list).unwrap(); { + easy.url(&url).unwrap(); let mut transfer = easy.transfer(); transfer.write_function(|new_data| { data.extend_from_slice(new_data); @@ -198,7 +237,6 @@ fn main() { } let response_body = String::from_utf8_lossy(&data); - println!("Response body: {}", response_body); println!("Response code: {}", easy.response_code().unwrap()); }"""; @@ -211,16 +249,20 @@ fn main() { expectedCode); }); test('GET7', () { - const expectedCode = r""" -use curl::easy::Easy; + const expectedCode = r"""use curl::easy::Easy; fn main() { let mut easy = Easy::new(); let mut data = Vec::new(); - easy.url("https://api.apidash.dev").unwrap(); + let base_url = "https://api.apidash.dev"; + + let url = base_url.to_string(); + + easy.get(true).unwrap(); { + easy.url(&url).unwrap(); let mut transfer = easy.transfer(); transfer.write_function(|new_data| { data.extend_from_slice(new_data); @@ -230,7 +272,6 @@ fn main() { } let response_body = String::from_utf8_lossy(&data); - println!("Response body: {}", response_body); println!("Response code: {}", easy.response_code().unwrap()); }"""; @@ -243,14 +284,21 @@ fn main() { expectedCode); }); test('GET8', () { - const expectedCode = r""" -use curl::easy::Easy; + const expectedCode = r"""use curl::easy::Easy; use curl::easy::List; fn main() { let mut easy = Easy::new(); let mut data = Vec::new(); - easy.url("https://api.github.com/repos/foss42/apidash?raw=true").unwrap(); + let base_url = "https://api.github.com/repos/foss42/apidash"; + + let params: Vec<(&str, Vec<&str>)> = vec![ + ("raw", vec!["true", ]), + ]; + let query_string: String = params.iter().flat_map(|(key, values)| values.iter().map(move |val| format!("{}={}", key, val))) .collect::>().join("&"); + let url = format!("{}?{}", base_url, query_string); + + easy.get(true).unwrap(); let mut list = List::new(); @@ -258,6 +306,7 @@ fn main() { easy.http_headers(list).unwrap(); { + easy.url(&url).unwrap(); let mut transfer = easy.transfer(); transfer.write_function(|new_data| { data.extend_from_slice(new_data); @@ -267,7 +316,6 @@ fn main() { } let response_body = String::from_utf8_lossy(&data); - println!("Response body: {}", response_body); println!("Response code: {}", easy.response_code().unwrap()); }"""; @@ -280,16 +328,25 @@ fn main() { expectedCode); }); test('GET9', () { - const expectedCode = r""" -use curl::easy::Easy; + const expectedCode = r"""use curl::easy::Easy; fn main() { let mut easy = Easy::new(); let mut data = Vec::new(); - easy.url("https://api.apidash.dev/humanize/social?num=8700000&add_space=true").unwrap(); + let base_url = "https://api.apidash.dev/humanize/social"; + + let params: Vec<(&str, Vec<&str>)> = vec![ + ("num", vec!["8700000", ]), + ("add_space", vec!["true", ]), + ]; + let query_string: String = params.iter().flat_map(|(key, values)| values.iter().map(move |val| format!("{}={}", key, val))) .collect::>().join("&"); + let url = format!("{}?{}", base_url, query_string); + + easy.get(true).unwrap(); { + easy.url(&url).unwrap(); let mut transfer = easy.transfer(); transfer.write_function(|new_data| { data.extend_from_slice(new_data); @@ -299,7 +356,6 @@ fn main() { } let response_body = String::from_utf8_lossy(&data); - println!("Response body: {}", response_body); println!("Response code: {}", easy.response_code().unwrap()); }"""; @@ -312,14 +368,17 @@ fn main() { expectedCode); }); test('GET10', () { - const expectedCode = r""" -use curl::easy::Easy; + const expectedCode = r"""use curl::easy::Easy; use curl::easy::List; fn main() { let mut easy = Easy::new(); let mut data = Vec::new(); - easy.url("https://api.apidash.dev/humanize/social").unwrap(); + let base_url = "https://api.apidash.dev/humanize/social"; + + let url = base_url.to_string(); + + easy.get(true).unwrap(); let mut list = List::new(); @@ -327,6 +386,7 @@ fn main() { easy.http_headers(list).unwrap(); { + easy.url(&url).unwrap(); let mut transfer = easy.transfer(); transfer.write_function(|new_data| { data.extend_from_slice(new_data); @@ -336,7 +396,6 @@ fn main() { } let response_body = String::from_utf8_lossy(&data); - println!("Response body: {}", response_body); println!("Response code: {}", easy.response_code().unwrap()); }"""; @@ -349,14 +408,22 @@ fn main() { expectedCode); }); test('GET11', () { - const expectedCode = r""" -use curl::easy::Easy; + const expectedCode = r"""use curl::easy::Easy; use curl::easy::List; fn main() { let mut easy = Easy::new(); let mut data = Vec::new(); - easy.url("https://api.apidash.dev/humanize/social?num=8700000&digits=3").unwrap(); + let base_url = "https://api.apidash.dev/humanize/social"; + + let params: Vec<(&str, Vec<&str>)> = vec![ + ("num", vec!["8700000", ]), + ("digits", vec!["3", ]), + ]; + let query_string: String = params.iter().flat_map(|(key, values)| values.iter().map(move |val| format!("{}={}", key, val))) .collect::>().join("&"); + let url = format!("{}?{}", base_url, query_string); + + easy.get(true).unwrap(); let mut list = List::new(); @@ -364,6 +431,7 @@ fn main() { easy.http_headers(list).unwrap(); { + easy.url(&url).unwrap(); let mut transfer = easy.transfer(); transfer.write_function(|new_data| { data.extend_from_slice(new_data); @@ -373,7 +441,6 @@ fn main() { } let response_body = String::from_utf8_lossy(&data); - println!("Response body: {}", response_body); println!("Response code: {}", easy.response_code().unwrap()); }"""; @@ -386,16 +453,20 @@ fn main() { expectedCode); }); test('GET12', () { - const expectedCode = r""" -use curl::easy::Easy; + const expectedCode = r"""use curl::easy::Easy; fn main() { let mut easy = Easy::new(); let mut data = Vec::new(); - easy.url("https://api.apidash.dev/humanize/social").unwrap(); + let base_url = "https://api.apidash.dev/humanize/social"; + + let url = base_url.to_string(); + + easy.get(true).unwrap(); { + easy.url(&url).unwrap(); let mut transfer = easy.transfer(); transfer.write_function(|new_data| { data.extend_from_slice(new_data); @@ -405,7 +476,6 @@ fn main() { } let response_body = String::from_utf8_lossy(&data); - println!("Response body: {}", response_body); println!("Response code: {}", easy.response_code().unwrap()); }"""; @@ -421,16 +491,20 @@ fn main() { group('HEAD Request', () { test('HEAD1', () { - const expectedCode = r""" -use curl::easy::Easy; + const expectedCode = r"""use curl::easy::Easy; fn main() { let mut easy = Easy::new(); let mut data = Vec::new(); - easy.url("https://api.apidash.dev").unwrap(); + let base_url = "https://api.apidash.dev"; + + let url = base_url.to_string(); + + easy.nobody(true).unwrap(); { + easy.url(&url).unwrap(); let mut transfer = easy.transfer(); transfer.write_function(|new_data| { data.extend_from_slice(new_data); @@ -440,7 +514,6 @@ fn main() { } let response_body = String::from_utf8_lossy(&data); - println!("Response body: {}", response_body); println!("Response code: {}", easy.response_code().unwrap()); }"""; @@ -453,16 +526,20 @@ fn main() { expectedCode); }); test('HEAD2', () { - const expectedCode = r""" -use curl::easy::Easy; + const expectedCode = r"""use curl::easy::Easy; fn main() { let mut easy = Easy::new(); let mut data = Vec::new(); - easy.url("https://api.apidash.dev").unwrap(); + let base_url = "https://api.apidash.dev"; + + let url = base_url.to_string(); + + easy.nobody(true).unwrap(); { + easy.url(&url).unwrap(); let mut transfer = easy.transfer(); transfer.write_function(|new_data| { data.extend_from_slice(new_data); @@ -472,7 +549,6 @@ fn main() { } let response_body = String::from_utf8_lossy(&data); - println!("Response body: {}", response_body); println!("Response code: {}", easy.response_code().unwrap()); }"""; @@ -488,14 +564,17 @@ fn main() { group('POST Request', () { test('POST1', () { - const expectedCode = r""" -use curl::easy::Easy; + const expectedCode = r"""use curl::easy::Easy; use curl::easy::List; fn main() { let mut easy = Easy::new(); let mut data = Vec::new(); - easy.url("https://api.apidash.dev/case/lower").unwrap(); + let base_url = "https://api.apidash.dev/case/lower"; + + let url = base_url.to_string(); + + easy.post(true).unwrap(); easy.post_fields_copy(r#"{ @@ -507,6 +586,7 @@ fn main() { easy.http_headers(list).unwrap(); { + easy.url(&url).unwrap(); let mut transfer = easy.transfer(); transfer.write_function(|new_data| { data.extend_from_slice(new_data); @@ -516,7 +596,6 @@ fn main() { } let response_body = String::from_utf8_lossy(&data); - println!("Response body: {}", response_body); println!("Response code: {}", easy.response_code().unwrap()); }"""; @@ -529,15 +608,18 @@ fn main() { expectedCode); }); test('POST2', () { - const expectedCode = r""" -use curl::easy::Easy; + const expectedCode = r"""use curl::easy::Easy; use serde_json::json; use curl::easy::List; fn main() { let mut easy = Easy::new(); let mut data = Vec::new(); - easy.url("https://api.apidash.dev/case/lower").unwrap(); + let base_url = "https://api.apidash.dev/case/lower"; + + let url = base_url.to_string(); + + easy.post(true).unwrap(); easy.post_fields_copy(json!({ @@ -554,6 +636,7 @@ fn main() { easy.http_headers(list).unwrap(); { + easy.url(&url).unwrap(); let mut transfer = easy.transfer(); transfer.write_function(|new_data| { data.extend_from_slice(new_data); @@ -563,7 +646,6 @@ fn main() { } let response_body = String::from_utf8_lossy(&data); - println!("Response body: {}", response_body); println!("Response code: {}", easy.response_code().unwrap()); }"""; @@ -576,15 +658,18 @@ fn main() { expectedCode); }); test('POST3', () { - const expectedCode = r""" -use curl::easy::Easy; + const expectedCode = r"""use curl::easy::Easy; use serde_json::json; use curl::easy::List; fn main() { let mut easy = Easy::new(); let mut data = Vec::new(); - easy.url("https://api.apidash.dev/case/lower").unwrap(); + let base_url = "https://api.apidash.dev/case/lower"; + + let url = base_url.to_string(); + + easy.post(true).unwrap(); easy.post_fields_copy(json!({ @@ -597,6 +682,7 @@ fn main() { easy.http_headers(list).unwrap(); { + easy.url(&url).unwrap(); let mut transfer = easy.transfer(); transfer.write_function(|new_data| { data.extend_from_slice(new_data); @@ -606,7 +692,6 @@ fn main() { } let response_body = String::from_utf8_lossy(&data); - println!("Response body: {}", response_body); println!("Response code: {}", easy.response_code().unwrap()); }"""; @@ -619,13 +704,16 @@ fn main() { expectedCode); }); test('POST4', () { - const expectedCode = r""" -use curl::easy::Easy; + const expectedCode = r"""use curl::easy::Easy; fn main() { let mut easy = Easy::new(); let mut data = Vec::new(); - easy.url("https://api.apidash.dev/io/form").unwrap(); + let base_url = "https://api.apidash.dev/io/form"; + + let url = base_url.to_string(); + + easy.post(true).unwrap(); let mut form = curl::easy::Form::new(); @@ -642,8 +730,8 @@ fn main() { .contents(b"3") .add().unwrap(); - easy.httppost(form).unwrap(); - { + easy.httppost(form).unwrap(); { + easy.url(&url).unwrap(); let mut transfer = easy.transfer(); transfer.write_function(|new_data| { data.extend_from_slice(new_data); @@ -653,7 +741,6 @@ fn main() { } let response_body = String::from_utf8_lossy(&data); - println!("Response body: {}", response_body); println!("Response code: {}", easy.response_code().unwrap()); }"""; @@ -666,14 +753,17 @@ fn main() { expectedCode); }); test('POST5', () { - const expectedCode = r""" -use curl::easy::Easy; + const expectedCode = r"""use curl::easy::Easy; use curl::easy::List; fn main() { let mut easy = Easy::new(); let mut data = Vec::new(); - easy.url("https://api.apidash.dev/io/form").unwrap(); + let base_url = "https://api.apidash.dev/io/form"; + + let url = base_url.to_string(); + + easy.post(true).unwrap(); let mut form = curl::easy::Form::new(); @@ -690,12 +780,12 @@ fn main() { .contents(b"3") .add().unwrap(); - easy.httppost(form).unwrap(); - let mut list = List::new(); + easy.httppost(form).unwrap(); let mut list = List::new(); list.append("User-Agent: Test Agent").unwrap(); easy.http_headers(list).unwrap(); { + easy.url(&url).unwrap(); let mut transfer = easy.transfer(); transfer.write_function(|new_data| { data.extend_from_slice(new_data); @@ -705,7 +795,6 @@ fn main() { } let response_body = String::from_utf8_lossy(&data); - println!("Response body: {}", response_body); println!("Response code: {}", easy.response_code().unwrap()); }"""; @@ -718,13 +807,16 @@ fn main() { expectedCode); }); test('POST6', () { - const expectedCode = r""" -use curl::easy::Easy; + const expectedCode = r"""use curl::easy::Easy; fn main() { let mut easy = Easy::new(); let mut data = Vec::new(); - easy.url("https://api.apidash.dev/io/img").unwrap(); + let base_url = "https://api.apidash.dev/io/img"; + + let url = base_url.to_string(); + + easy.post(true).unwrap(); let mut form = curl::easy::Form::new(); @@ -737,8 +829,8 @@ fn main() { .file("/Documents/up/1.png") .add().unwrap(); - easy.httppost(form).unwrap(); - { + easy.httppost(form).unwrap(); { + easy.url(&url).unwrap(); let mut transfer = easy.transfer(); transfer.write_function(|new_data| { data.extend_from_slice(new_data); @@ -748,7 +840,6 @@ fn main() { } let response_body = String::from_utf8_lossy(&data); - println!("Response body: {}", response_body); println!("Response code: {}", easy.response_code().unwrap()); }"""; @@ -761,13 +852,16 @@ fn main() { expectedCode); }); test('POST7', () { - const expectedCode = r""" -use curl::easy::Easy; + const expectedCode = r"""use curl::easy::Easy; fn main() { let mut easy = Easy::new(); let mut data = Vec::new(); - easy.url("https://api.apidash.dev/io/img").unwrap(); + let base_url = "https://api.apidash.dev/io/img"; + + let url = base_url.to_string(); + + easy.post(true).unwrap(); let mut form = curl::easy::Form::new(); @@ -780,8 +874,8 @@ fn main() { .file("/Documents/up/1.png") .add().unwrap(); - easy.httppost(form).unwrap(); - { + easy.httppost(form).unwrap(); { + easy.url(&url).unwrap(); let mut transfer = easy.transfer(); transfer.write_function(|new_data| { data.extend_from_slice(new_data); @@ -791,7 +885,6 @@ fn main() { } let response_body = String::from_utf8_lossy(&data); - println!("Response body: {}", response_body); println!("Response code: {}", easy.response_code().unwrap()); }"""; @@ -804,13 +897,21 @@ fn main() { expectedCode); }); test('POST8', () { - const expectedCode = r""" -use curl::easy::Easy; + const expectedCode = r"""use curl::easy::Easy; fn main() { let mut easy = Easy::new(); let mut data = Vec::new(); - easy.url("https://api.apidash.dev/io/form?size=2&len=3").unwrap(); + let base_url = "https://api.apidash.dev/io/form"; + + let params: Vec<(&str, Vec<&str>)> = vec![ + ("size", vec!["2", ]), + ("len", vec!["3", ]), + ]; + let query_string: String = params.iter().flat_map(|(key, values)| values.iter().map(move |val| format!("{}={}", key, val))) .collect::>().join("&"); + let url = format!("{}?{}", base_url, query_string); + + easy.post(true).unwrap(); let mut form = curl::easy::Form::new(); @@ -827,8 +928,8 @@ fn main() { .contents(b"3") .add().unwrap(); - easy.httppost(form).unwrap(); - { + easy.httppost(form).unwrap(); { + easy.url(&url).unwrap(); let mut transfer = easy.transfer(); transfer.write_function(|new_data| { data.extend_from_slice(new_data); @@ -838,7 +939,6 @@ fn main() { } let response_body = String::from_utf8_lossy(&data); - println!("Response body: {}", response_body); println!("Response code: {}", easy.response_code().unwrap()); }"""; @@ -851,14 +951,22 @@ fn main() { expectedCode); }); test('POST9', () { - const expectedCode = r""" -use curl::easy::Easy; + const expectedCode = r"""use curl::easy::Easy; use curl::easy::List; fn main() { let mut easy = Easy::new(); let mut data = Vec::new(); - easy.url("https://api.apidash.dev/io/img?size=2&len=3").unwrap(); + let base_url = "https://api.apidash.dev/io/img"; + + let params: Vec<(&str, Vec<&str>)> = vec![ + ("size", vec!["2", ]), + ("len", vec!["3", ]), + ]; + let query_string: String = params.iter().flat_map(|(key, values)| values.iter().map(move |val| format!("{}={}", key, val))) .collect::>().join("&"); + let url = format!("{}?{}", base_url, query_string); + + easy.post(true).unwrap(); let mut form = curl::easy::Form::new(); @@ -871,13 +979,13 @@ fn main() { .file("/Documents/up/1.png") .add().unwrap(); - easy.httppost(form).unwrap(); - let mut list = List::new(); + easy.httppost(form).unwrap(); let mut list = List::new(); list.append("User-Agent: Test Agent").unwrap(); list.append("Keep-Alive: true").unwrap(); easy.http_headers(list).unwrap(); { + easy.url(&url).unwrap(); let mut transfer = easy.transfer(); transfer.write_function(|new_data| { data.extend_from_slice(new_data); @@ -887,7 +995,6 @@ fn main() { } let response_body = String::from_utf8_lossy(&data); - println!("Response body: {}", response_body); println!("Response code: {}", easy.response_code().unwrap()); }"""; @@ -903,15 +1010,18 @@ fn main() { group('PUT Request', () { test('PUT1', () { - const expectedCode = r""" -use curl::easy::Easy; + const expectedCode = r"""use curl::easy::Easy; use serde_json::json; use curl::easy::List; fn main() { let mut easy = Easy::new(); let mut data = Vec::new(); - easy.url("https://reqres.in/api/users/2").unwrap(); + let base_url = "https://reqres.in/api/users/2"; + + let url = base_url.to_string(); + + easy.put(true).unwrap(); easy.post_fields_copy(json!({ @@ -920,10 +1030,12 @@ fn main() { }).to_string().as_bytes()).unwrap(); let mut list = List::new(); + list.append("x-api-key: reqres-free-v1").unwrap(); list.append("Content-Type: application/json").unwrap(); easy.http_headers(list).unwrap(); { + easy.url(&url).unwrap(); let mut transfer = easy.transfer(); transfer.write_function(|new_data| { data.extend_from_slice(new_data); @@ -933,7 +1045,6 @@ fn main() { } let response_body = String::from_utf8_lossy(&data); - println!("Response body: {}", response_body); println!("Response code: {}", easy.response_code().unwrap()); }"""; @@ -949,15 +1060,18 @@ fn main() { group('PATCH Request', () { test('PATCH1', () { - const expectedCode = r""" -use curl::easy::Easy; + const expectedCode = r"""use curl::easy::Easy; use serde_json::json; use curl::easy::List; fn main() { let mut easy = Easy::new(); let mut data = Vec::new(); - easy.url("https://reqres.in/api/users/2").unwrap(); + let base_url = "https://reqres.in/api/users/2"; + + let url = base_url.to_string(); + + easy.custom_request("PATCH").unwrap(); easy.post_fields_copy(json!({ @@ -966,10 +1080,12 @@ fn main() { }).to_string().as_bytes()).unwrap(); let mut list = List::new(); + list.append("x-api-key: reqres-free-v1").unwrap(); list.append("Content-Type: application/json").unwrap(); easy.http_headers(list).unwrap(); { + easy.url(&url).unwrap(); let mut transfer = easy.transfer(); transfer.write_function(|new_data| { data.extend_from_slice(new_data); @@ -979,7 +1095,6 @@ fn main() { } let response_body = String::from_utf8_lossy(&data); - println!("Response body: {}", response_body); println!("Response code: {}", easy.response_code().unwrap()); }"""; @@ -995,16 +1110,25 @@ fn main() { group('DELETE Request', () { test('DELETE1', () { - const expectedCode = r""" -use curl::easy::Easy; + const expectedCode = r"""use curl::easy::Easy; +use curl::easy::List; fn main() { let mut easy = Easy::new(); let mut data = Vec::new(); - easy.url("https://reqres.in/api/users/2").unwrap(); + let base_url = "https://reqres.in/api/users/2"; + + let url = base_url.to_string(); + + easy.custom_request("DELETE").unwrap(); + let mut list = List::new(); + list.append("x-api-key: reqres-free-v1").unwrap(); + easy.http_headers(list).unwrap(); + { + easy.url(&url).unwrap(); let mut transfer = easy.transfer(); transfer.write_function(|new_data| { data.extend_from_slice(new_data); @@ -1014,7 +1138,6 @@ fn main() { } let response_body = String::from_utf8_lossy(&data); - println!("Response body: {}", response_body); println!("Response code: {}", easy.response_code().unwrap()); }"""; @@ -1035,7 +1158,11 @@ use curl::easy::List; fn main() { let mut easy = Easy::new(); let mut data = Vec::new(); - easy.url("https://reqres.in/api/users/2").unwrap(); + let base_url = "https://reqres.in/api/users/2"; + + let url = base_url.to_string(); + + easy.custom_request("DELETE").unwrap(); easy.post_fields_copy(json!({ @@ -1044,10 +1171,12 @@ fn main() { }).to_string().as_bytes()).unwrap(); let mut list = List::new(); + list.append("x-api-key: reqres-free-v1").unwrap(); list.append("Content-Type: application/json").unwrap(); easy.http_headers(list).unwrap(); { + easy.url(&url).unwrap(); let mut transfer = easy.transfer(); transfer.write_function(|new_data| { data.extend_from_slice(new_data); @@ -1057,7 +1186,6 @@ fn main() { } let response_body = String::from_utf8_lossy(&data); - println!("Response body: {}", response_body); println!("Response code: {}", easy.response_code().unwrap()); }"""; diff --git a/test/codegen/rust_hyper_codegen_test.dart b/test/codegen/rust_hyper_codegen_test.dart index f252bdce5..84a2a78b0 100644 --- a/test/codegen/rust_hyper_codegen_test.dart +++ b/test/codegen/rust_hyper_codegen_test.dart @@ -8,20 +8,19 @@ void main() { final codeGen = Codegen(); group('GET Request', () { test('GET1', () { - const expectedCode = r""" -use hyper::{Body, Client, Request, Uri}; + const expectedCode = r"""use hyper::{Body, Client, Request}; use hyper_tls::HttpsConnector; use tokio; +use url::Url; #[tokio::main] async fn main() -> Result<(), Box> { let https = HttpsConnector::new(); let client = Client::builder().build::<_, hyper::Body>(https); - let url = "https://api.apidash.dev".parse::().unwrap(); - let req_builder = Request::builder() - .method("GET") - .uri(url) - .body(Body::empty())?; + let mut url = Url::parse("https://api.apidash.dev")?; + let req_builder = Request::builder() + .method("GET").uri(url.as_str()) + .body(Body::empty())?; let res = client.request(req_builder).await?; let status = res.status(); @@ -44,20 +43,21 @@ async fn main() -> Result<(), Box> { expectedCode); }); test('GET2', () { - const expectedCode = r""" -use hyper::{Body, Client, Request, Uri}; + const expectedCode = r"""use hyper::{Body, Client, Request}; use hyper_tls::HttpsConnector; use tokio; +use url::Url; #[tokio::main] async fn main() -> Result<(), Box> { let https = HttpsConnector::new(); let client = Client::builder().build::<_, hyper::Body>(https); - let url = "https://api.apidash.dev/country/data?code=US".parse::().unwrap(); - let req_builder = Request::builder() - .method("GET") - .uri(url) - .body(Body::empty())?; + let mut url = Url::parse("https://api.apidash.dev/country/data")?; + + url.query_pairs_mut().append_pair("code", "US"); + let req_builder = Request::builder() + .method("GET").uri(url.as_str()) + .body(Body::empty())?; let res = client.request(req_builder).await?; let status = res.status(); @@ -81,20 +81,22 @@ async fn main() -> Result<(), Box> { }); test('GET3', () { - const expectedCode = r""" -use hyper::{Body, Client, Request, Uri}; + const expectedCode = r"""use hyper::{Body, Client, Request}; use hyper_tls::HttpsConnector; use tokio; +use url::Url; #[tokio::main] async fn main() -> Result<(), Box> { let https = HttpsConnector::new(); let client = Client::builder().build::<_, hyper::Body>(https); - let url = "https://api.apidash.dev/country/data?code=IND".parse::().unwrap(); - let req_builder = Request::builder() - .method("GET") - .uri(url) - .body(Body::empty())?; + let mut url = Url::parse("https://api.apidash.dev/country/data")?; + + url.query_pairs_mut().append_pair("code", "IND"); + url.query_pairs_mut().append_pair("code", "US"); + let req_builder = Request::builder() + .method("GET").uri(url.as_str()) + .body(Body::empty())?; let res = client.request(req_builder).await?; let status = res.status(); @@ -118,20 +120,25 @@ async fn main() -> Result<(), Box> { }); test('GET4', () { - const expectedCode = r""" -use hyper::{Body, Client, Request, Uri}; + const expectedCode = r"""use hyper::{Body, Client, Request}; use hyper_tls::HttpsConnector; use tokio; +use url::Url; #[tokio::main] async fn main() -> Result<(), Box> { let https = HttpsConnector::new(); let client = Client::builder().build::<_, hyper::Body>(https); - let url = "https://api.apidash.dev/humanize/social?num=8700000&digits=3&system=SS&add_space=true&trailing_zeros=true".parse::().unwrap(); - let req_builder = Request::builder() - .method("GET") - .uri(url) - .body(Body::empty())?; + let mut url = Url::parse("https://api.apidash.dev/humanize/social")?; + + url.query_pairs_mut().append_pair("num", "8700000"); + url.query_pairs_mut().append_pair("digits", "3"); + url.query_pairs_mut().append_pair("system", "SS"); + url.query_pairs_mut().append_pair("add_space", "true"); + url.query_pairs_mut().append_pair("trailing_zeros", "true"); + let req_builder = Request::builder() + .method("GET").uri(url.as_str()) + .body(Body::empty())?; let res = client.request(req_builder).await?; let status = res.status(); @@ -155,22 +162,21 @@ async fn main() -> Result<(), Box> { }); test('GET5', () { - const expectedCode = r""" -use hyper::{Body, Client, Request, Uri}; + const expectedCode = r"""use hyper::{Body, Client, Request}; use hyper_tls::HttpsConnector; use tokio; +use url::Url; #[tokio::main] async fn main() -> Result<(), Box> { let https = HttpsConnector::new(); let client = Client::builder().build::<_, hyper::Body>(https); - let url = "https://api.github.com/repos/foss42/apidash".parse::().unwrap(); - let req_builder = Request::builder() - .method("GET") - .uri(url) - .header("User-Agent", "Test Agent") - - .body(Body::empty())?; + let mut url = Url::parse("https://api.github.com/repos/foss42/apidash")?; + let req_builder = Request::builder() + .method("GET").uri(url.as_str()) + .header("User-Agent", "Test Agent") + + .body(Body::empty())?; let res = client.request(req_builder).await?; let status = res.status(); @@ -194,22 +200,23 @@ async fn main() -> Result<(), Box> { }); test('GET6', () { - const expectedCode = r""" -use hyper::{Body, Client, Request, Uri}; + const expectedCode = r"""use hyper::{Body, Client, Request}; use hyper_tls::HttpsConnector; use tokio; +use url::Url; #[tokio::main] async fn main() -> Result<(), Box> { let https = HttpsConnector::new(); let client = Client::builder().build::<_, hyper::Body>(https); - let url = "https://api.github.com/repos/foss42/apidash?raw=true".parse::().unwrap(); - let req_builder = Request::builder() - .method("GET") - .uri(url) - .header("User-Agent", "Test Agent") + let mut url = Url::parse("https://api.github.com/repos/foss42/apidash")?; - .body(Body::empty())?; + url.query_pairs_mut().append_pair("raw", "true"); + let req_builder = Request::builder() + .method("GET").uri(url.as_str()) + .header("User-Agent", "Test Agent") + + .body(Body::empty())?; let res = client.request(req_builder).await?; let status = res.status(); @@ -233,20 +240,19 @@ async fn main() -> Result<(), Box> { }); test('GET7', () { - const expectedCode = r""" -use hyper::{Body, Client, Request, Uri}; + const expectedCode = r"""use hyper::{Body, Client, Request}; use hyper_tls::HttpsConnector; use tokio; +use url::Url; #[tokio::main] async fn main() -> Result<(), Box> { let https = HttpsConnector::new(); let client = Client::builder().build::<_, hyper::Body>(https); - let url = "https://api.apidash.dev".parse::().unwrap(); - let req_builder = Request::builder() - .method("GET") - .uri(url) - .body(Body::empty())?; + let mut url = Url::parse("https://api.apidash.dev")?; + let req_builder = Request::builder() + .method("GET").uri(url.as_str()) + .body(Body::empty())?; let res = client.request(req_builder).await?; let status = res.status(); @@ -270,22 +276,23 @@ async fn main() -> Result<(), Box> { }); test('GET8', () { - const expectedCode = r""" -use hyper::{Body, Client, Request, Uri}; + const expectedCode = r"""use hyper::{Body, Client, Request}; use hyper_tls::HttpsConnector; use tokio; +use url::Url; #[tokio::main] async fn main() -> Result<(), Box> { let https = HttpsConnector::new(); let client = Client::builder().build::<_, hyper::Body>(https); - let url = "https://api.github.com/repos/foss42/apidash?raw=true".parse::().unwrap(); - let req_builder = Request::builder() - .method("GET") - .uri(url) - .header("User-Agent", "Test Agent") + let mut url = Url::parse("https://api.github.com/repos/foss42/apidash")?; - .body(Body::empty())?; + url.query_pairs_mut().append_pair("raw", "true"); + let req_builder = Request::builder() + .method("GET").uri(url.as_str()) + .header("User-Agent", "Test Agent") + + .body(Body::empty())?; let res = client.request(req_builder).await?; let status = res.status(); @@ -308,20 +315,22 @@ async fn main() -> Result<(), Box> { expectedCode); }); test('GET9', () { - const expectedCode = r""" -use hyper::{Body, Client, Request, Uri}; + const expectedCode = r"""use hyper::{Body, Client, Request}; use hyper_tls::HttpsConnector; use tokio; +use url::Url; #[tokio::main] async fn main() -> Result<(), Box> { let https = HttpsConnector::new(); let client = Client::builder().build::<_, hyper::Body>(https); - let url = "https://api.apidash.dev/humanize/social?num=8700000&add_space=true".parse::().unwrap(); - let req_builder = Request::builder() - .method("GET") - .uri(url) - .body(Body::empty())?; + let mut url = Url::parse("https://api.apidash.dev/humanize/social")?; + + url.query_pairs_mut().append_pair("num", "8700000"); + url.query_pairs_mut().append_pair("add_space", "true"); + let req_builder = Request::builder() + .method("GET").uri(url.as_str()) + .body(Body::empty())?; let res = client.request(req_builder).await?; let status = res.status(); @@ -345,22 +354,21 @@ async fn main() -> Result<(), Box> { }); test('GET10', () { - const expectedCode = r""" -use hyper::{Body, Client, Request, Uri}; + const expectedCode = r"""use hyper::{Body, Client, Request}; use hyper_tls::HttpsConnector; use tokio; +use url::Url; #[tokio::main] async fn main() -> Result<(), Box> { let https = HttpsConnector::new(); let client = Client::builder().build::<_, hyper::Body>(https); - let url = "https://api.apidash.dev/humanize/social".parse::().unwrap(); - let req_builder = Request::builder() - .method("GET") - .uri(url) - .header("User-Agent", "Test Agent") - - .body(Body::empty())?; + let mut url = Url::parse("https://api.apidash.dev/humanize/social")?; + let req_builder = Request::builder() + .method("GET").uri(url.as_str()) + .header("User-Agent", "Test Agent") + + .body(Body::empty())?; let res = client.request(req_builder).await?; let status = res.status(); @@ -384,22 +392,24 @@ async fn main() -> Result<(), Box> { }); test('GET11', () { - const expectedCode = r""" -use hyper::{Body, Client, Request, Uri}; + const expectedCode = r"""use hyper::{Body, Client, Request}; use hyper_tls::HttpsConnector; use tokio; +use url::Url; #[tokio::main] async fn main() -> Result<(), Box> { let https = HttpsConnector::new(); let client = Client::builder().build::<_, hyper::Body>(https); - let url = "https://api.apidash.dev/humanize/social?num=8700000&digits=3".parse::().unwrap(); - let req_builder = Request::builder() - .method("GET") - .uri(url) - .header("User-Agent", "Test Agent") + let mut url = Url::parse("https://api.apidash.dev/humanize/social")?; - .body(Body::empty())?; + url.query_pairs_mut().append_pair("num", "8700000"); + url.query_pairs_mut().append_pair("digits", "3"); + let req_builder = Request::builder() + .method("GET").uri(url.as_str()) + .header("User-Agent", "Test Agent") + + .body(Body::empty())?; let res = client.request(req_builder).await?; let status = res.status(); @@ -423,20 +433,19 @@ async fn main() -> Result<(), Box> { }); test('GET12', () { - const expectedCode = r""" -use hyper::{Body, Client, Request, Uri}; + const expectedCode = r"""use hyper::{Body, Client, Request}; use hyper_tls::HttpsConnector; use tokio; +use url::Url; #[tokio::main] async fn main() -> Result<(), Box> { let https = HttpsConnector::new(); let client = Client::builder().build::<_, hyper::Body>(https); - let url = "https://api.apidash.dev/humanize/social".parse::().unwrap(); - let req_builder = Request::builder() - .method("GET") - .uri(url) - .body(Body::empty())?; + let mut url = Url::parse("https://api.apidash.dev/humanize/social")?; + let req_builder = Request::builder() + .method("GET").uri(url.as_str()) + .body(Body::empty())?; let res = client.request(req_builder).await?; let status = res.status(); @@ -462,20 +471,19 @@ async fn main() -> Result<(), Box> { group('HEAD Request', () { test('HEAD1', () { - const expectedCode = """ -use hyper::{Body, Client, Request, Uri}; + const expectedCode = """use hyper::{Body, Client, Request}; use hyper_tls::HttpsConnector; use tokio; +use url::Url; #[tokio::main] async fn main() -> Result<(), Box> { let https = HttpsConnector::new(); let client = Client::builder().build::<_, hyper::Body>(https); - let url = "https://api.apidash.dev".parse::().unwrap(); - let req_builder = Request::builder() - .method("HEAD") - .uri(url) - .body(Body::empty())?; + let mut url = Url::parse("https://api.apidash.dev")?; + let req_builder = Request::builder() + .method("HEAD").uri(url.as_str()) + .body(Body::empty())?; let res = client.request(req_builder).await?; let status = res.status(); @@ -499,20 +507,19 @@ async fn main() -> Result<(), Box> { }); test('HEAD2', () { - const expectedCode = """ -use hyper::{Body, Client, Request, Uri}; + const expectedCode = """use hyper::{Body, Client, Request}; use hyper::client::HttpConnector; use tokio; +use url::Url; #[tokio::main] async fn main() -> Result<(), Box> { let http = HttpConnector::new(); let client = Client::builder().build::<_, hyper::Body>(http); - let url = "http://api.apidash.dev".parse::().unwrap(); - let req_builder = Request::builder() - .method("HEAD") - .uri(url) - .body(Body::empty())?; + let mut url = Url::parse("http://api.apidash.dev")?; + let req_builder = Request::builder() + .method("HEAD").uri(url.as_str()) + .body(Body::empty())?; let res = client.request(req_builder).await?; let status = res.status(); @@ -538,20 +545,19 @@ async fn main() -> Result<(), Box> { group('POST Request', () { test('POST1', () { - const expectedCode = r""" -use hyper::{Body, Client, Request, Uri}; + const expectedCode = r"""use hyper::{Body, Client, Request}; use hyper_tls::HttpsConnector; use tokio; +use url::Url; #[tokio::main] async fn main() -> Result<(), Box> { let https = HttpsConnector::new(); let client = Client::builder().build::<_, hyper::Body>(https); - let url = "https://api.apidash.dev/case/lower".parse::().unwrap(); - let req_builder = Request::builder() - .method("POST") - .uri(url) - .body(Body::from(r#"{ + let mut url = Url::parse("https://api.apidash.dev/case/lower")?; + let req_builder = Request::builder() + .method("POST").uri(url.as_str()) + .body(Body::from(r#"{ "text": "I LOVE Flutter" }"#))?; let res = client.request(req_builder).await?; @@ -575,21 +581,20 @@ async fn main() -> Result<(), Box> { expectedCode); }); test('POST2', () { - const expectedCode = r""" -use hyper::{Body, Client, Request, Uri}; + const expectedCode = r"""use hyper::{Body, Client, Request}; use hyper_tls::HttpsConnector; use serde_json::json; use tokio; +use url::Url; #[tokio::main] async fn main() -> Result<(), Box> { let https = HttpsConnector::new(); let client = Client::builder().build::<_, hyper::Body>(https); - let url = "https://api.apidash.dev/case/lower".parse::().unwrap(); - let req_builder = Request::builder() - .method("POST") - .uri(url) - .body(Body::from(json!({ + let mut url = Url::parse("https://api.apidash.dev/case/lower")?; + let req_builder = Request::builder() + .method("POST").uri(url.as_str()) + .body(Body::from(json!({ "text": "I LOVE Flutter", "flag": null, "male": true, @@ -618,23 +623,22 @@ async fn main() -> Result<(), Box> { expectedCode); }); test('POST3', () { - const expectedCode = r""" -use hyper::{Body, Client, Request, Uri}; + const expectedCode = r"""use hyper::{Body, Client, Request}; use hyper_tls::HttpsConnector; use serde_json::json; use tokio; +use url::Url; #[tokio::main] async fn main() -> Result<(), Box> { let https = HttpsConnector::new(); let client = Client::builder().build::<_, hyper::Body>(https); - let url = "https://api.apidash.dev/case/lower".parse::().unwrap(); - let req_builder = Request::builder() - .method("POST") - .uri(url) - .header("User-Agent", "Test Agent") - - .body(Body::from(json!({ + let mut url = Url::parse("https://api.apidash.dev/case/lower")?; + let req_builder = Request::builder() + .method("POST").uri(url.as_str()) + .header("User-Agent", "Test Agent") + + .body(Body::from(json!({ "text": "I LOVE Flutter" }).to_string()))?; let res = client.request(req_builder).await?; @@ -658,28 +662,27 @@ async fn main() -> Result<(), Box> { expectedCode); }); test('POST4', () { - const expectedCode = r""" -extern crate hyper_multipart_rfc7578 as hyper_multipart; -use hyper::{Body, Client, Request, Uri}; + const expectedCode = r"""extern crate hyper_multipart_rfc7578 as hyper_multipart; +use hyper::{Body, Client, Request}; use hyper_tls::HttpsConnector; use hyper_multipart::client::multipart; use tokio; +use url::Url; #[tokio::main] async fn main() -> Result<(), Box> { let https = HttpsConnector::new(); let client = Client::builder().build::<_, hyper::Body>(https); - let url = "https://api.apidash.dev/io/form".parse::().unwrap(); - let req_builder = Request::builder() - .method("POST") - .uri(url); + let mut url = Url::parse("https://api.apidash.dev/io/form")?; + let req_builder = Request::builder() + .method("POST") + .uri(url.as_str()); let mut form = multipart::Form::default(); form.add_text("text", "API"); form.add_text("sep", "|"); form.add_text("times", "3"); let req = form.set_body_convert::(req_builder).unwrap(); - let res = client.request(req).await?; let status = res.status(); let body_bytes = hyper::body::to_bytes(res).await?; @@ -687,7 +690,7 @@ async fn main() -> Result<(), Box> { println!("Response Status: {}", status); println!("Response: {:?}", body); - + Ok(()) } @@ -702,30 +705,28 @@ async fn main() -> Result<(), Box> { expectedCode); }); test('POST5', () { - const expectedCode = r""" -extern crate hyper_multipart_rfc7578 as hyper_multipart; -use hyper::{Body, Client, Request, Uri}; + const expectedCode = r"""extern crate hyper_multipart_rfc7578 as hyper_multipart; +use hyper::{Body, Client, Request}; use hyper_tls::HttpsConnector; use hyper_multipart::client::multipart; use tokio; +use url::Url; #[tokio::main] async fn main() -> Result<(), Box> { let https = HttpsConnector::new(); let client = Client::builder().build::<_, hyper::Body>(https); - let url = "https://api.apidash.dev/io/form".parse::().unwrap(); - let req_builder = Request::builder() - .method("POST") - .uri(url) - .header("User-Agent", "Test Agent"); - + let mut url = Url::parse("https://api.apidash.dev/io/form")?; + let req_builder = Request::builder() + .method("POST").uri(url.as_str()) + .header("User-Agent", "Test Agent"); + let mut form = multipart::Form::default(); form.add_text("text", "API"); form.add_text("sep", "|"); form.add_text("times", "3"); let req = form.set_body_convert::(req_builder).unwrap(); - let res = client.request(req).await?; let status = res.status(); let body_bytes = hyper::body::to_bytes(res).await?; @@ -733,7 +734,7 @@ async fn main() -> Result<(), Box> { println!("Response Status: {}", status); println!("Response: {:?}", body); - + Ok(()) } @@ -748,27 +749,26 @@ async fn main() -> Result<(), Box> { expectedCode); }); test('POST6', () { - const expectedCode = r""" -extern crate hyper_multipart_rfc7578 as hyper_multipart; -use hyper::{Body, Client, Request, Uri}; + const expectedCode = r"""extern crate hyper_multipart_rfc7578 as hyper_multipart; +use hyper::{Body, Client, Request}; use hyper_tls::HttpsConnector; use hyper_multipart::client::multipart; use tokio; +use url::Url; #[tokio::main] async fn main() -> Result<(), Box> { let https = HttpsConnector::new(); let client = Client::builder().build::<_, hyper::Body>(https); - let url = "https://api.apidash.dev/io/img".parse::().unwrap(); - let req_builder = Request::builder() - .method("POST") - .uri(url); + let mut url = Url::parse("https://api.apidash.dev/io/img")?; + let req_builder = Request::builder() + .method("POST") + .uri(url.as_str()); let mut form = multipart::Form::default(); form.add_text("token", "xyz"); form.add_file("imfile", r"/Documents/up/1.png").unwrap(); let req = form.set_body_convert::(req_builder).unwrap(); - let res = client.request(req).await?; let status = res.status(); let body_bytes = hyper::body::to_bytes(res).await?; @@ -776,7 +776,7 @@ async fn main() -> Result<(), Box> { println!("Response Status: {}", status); println!("Response: {:?}", body); - + Ok(()) } @@ -791,27 +791,26 @@ async fn main() -> Result<(), Box> { expectedCode); }); test('POST7', () { - const expectedCode = r""" -extern crate hyper_multipart_rfc7578 as hyper_multipart; -use hyper::{Body, Client, Request, Uri}; + const expectedCode = r"""extern crate hyper_multipart_rfc7578 as hyper_multipart; +use hyper::{Body, Client, Request}; use hyper_tls::HttpsConnector; use hyper_multipart::client::multipart; use tokio; +use url::Url; #[tokio::main] async fn main() -> Result<(), Box> { let https = HttpsConnector::new(); let client = Client::builder().build::<_, hyper::Body>(https); - let url = "https://api.apidash.dev/io/img".parse::().unwrap(); - let req_builder = Request::builder() - .method("POST") - .uri(url); + let mut url = Url::parse("https://api.apidash.dev/io/img")?; + let req_builder = Request::builder() + .method("POST") + .uri(url.as_str()); let mut form = multipart::Form::default(); form.add_text("token", "xyz"); form.add_file("imfile", r"/Documents/up/1.png").unwrap(); let req = form.set_body_convert::(req_builder).unwrap(); - let res = client.request(req).await?; let status = res.status(); let body_bytes = hyper::body::to_bytes(res).await?; @@ -819,7 +818,7 @@ async fn main() -> Result<(), Box> { println!("Response Status: {}", status); println!("Response: {:?}", body); - + Ok(()) } @@ -834,28 +833,30 @@ async fn main() -> Result<(), Box> { expectedCode); }); test('POST8', () { - const expectedCode = r""" -extern crate hyper_multipart_rfc7578 as hyper_multipart; -use hyper::{Body, Client, Request, Uri}; + const expectedCode = r"""extern crate hyper_multipart_rfc7578 as hyper_multipart; +use hyper::{Body, Client, Request}; use hyper_tls::HttpsConnector; use hyper_multipart::client::multipart; use tokio; +use url::Url; #[tokio::main] async fn main() -> Result<(), Box> { let https = HttpsConnector::new(); let client = Client::builder().build::<_, hyper::Body>(https); - let url = "https://api.apidash.dev/io/form?size=2&len=3".parse::().unwrap(); - let req_builder = Request::builder() - .method("POST") - .uri(url); + let mut url = Url::parse("https://api.apidash.dev/io/form")?; + + url.query_pairs_mut().append_pair("size", "2"); + url.query_pairs_mut().append_pair("len", "3"); + let req_builder = Request::builder() + .method("POST") + .uri(url.as_str()); let mut form = multipart::Form::default(); form.add_text("text", "API"); form.add_text("sep", "|"); form.add_text("times", "3"); let req = form.set_body_convert::(req_builder).unwrap(); - let res = client.request(req).await?; let status = res.status(); let body_bytes = hyper::body::to_bytes(res).await?; @@ -863,7 +864,7 @@ async fn main() -> Result<(), Box> { println!("Response Status: {}", status); println!("Response: {:?}", body); - + Ok(()) } @@ -878,31 +879,32 @@ async fn main() -> Result<(), Box> { expectedCode); }); test('POST9', () { - const expectedCode = r""" -extern crate hyper_multipart_rfc7578 as hyper_multipart; -use hyper::{Body, Client, Request, Uri}; + const expectedCode = r"""extern crate hyper_multipart_rfc7578 as hyper_multipart; +use hyper::{Body, Client, Request}; use hyper_tls::HttpsConnector; use hyper_multipart::client::multipart; use tokio; +use url::Url; #[tokio::main] async fn main() -> Result<(), Box> { let https = HttpsConnector::new(); let client = Client::builder().build::<_, hyper::Body>(https); - let url = "https://api.apidash.dev/io/img?size=2&len=3".parse::().unwrap(); - let req_builder = Request::builder() - .method("POST") - .uri(url) - .header("User-Agent", "Test Agent") + let mut url = Url::parse("https://api.apidash.dev/io/img")?; - .header("Keep-Alive", "true"); - + url.query_pairs_mut().append_pair("size", "2"); + url.query_pairs_mut().append_pair("len", "3"); + let req_builder = Request::builder() + .method("POST").uri(url.as_str()) + .header("User-Agent", "Test Agent") + + .header("Keep-Alive", "true"); + let mut form = multipart::Form::default(); form.add_text("token", "xyz"); form.add_file("imfile", r"/Documents/up/1.png").unwrap(); let req = form.set_body_convert::(req_builder).unwrap(); - let res = client.request(req).await?; let status = res.status(); let body_bytes = hyper::body::to_bytes(res).await?; @@ -910,7 +912,7 @@ async fn main() -> Result<(), Box> { println!("Response Status: {}", status); println!("Response: {:?}", body); - + Ok(()) } @@ -928,21 +930,22 @@ async fn main() -> Result<(), Box> { group('PUT Request', () { test('PUT1', () { - const expectedCode = """ -use hyper::{Body, Client, Request, Uri}; + const expectedCode = """use hyper::{Body, Client, Request}; use hyper_tls::HttpsConnector; use serde_json::json; use tokio; +use url::Url; #[tokio::main] async fn main() -> Result<(), Box> { let https = HttpsConnector::new(); let client = Client::builder().build::<_, hyper::Body>(https); - let url = "https://reqres.in/api/users/2".parse::().unwrap(); - let req_builder = Request::builder() - .method("PUT") - .uri(url) - .body(Body::from(json!({ + let mut url = Url::parse("https://reqres.in/api/users/2")?; + let req_builder = Request::builder() + .method("PUT").uri(url.as_str()) + .header("x-api-key", "reqres-free-v1") + + .body(Body::from(json!({ "name": "morpheus", "job": "zion resident" }).to_string()))?; @@ -970,21 +973,22 @@ async fn main() -> Result<(), Box> { group('PATCH Request', () { test('PATCH1', () { - const expectedCode = """ -use hyper::{Body, Client, Request, Uri}; + const expectedCode = """use hyper::{Body, Client, Request}; use hyper_tls::HttpsConnector; use serde_json::json; use tokio; +use url::Url; #[tokio::main] async fn main() -> Result<(), Box> { let https = HttpsConnector::new(); let client = Client::builder().build::<_, hyper::Body>(https); - let url = "https://reqres.in/api/users/2".parse::().unwrap(); - let req_builder = Request::builder() - .method("PATCH") - .uri(url) - .body(Body::from(json!({ + let mut url = Url::parse("https://reqres.in/api/users/2")?; + let req_builder = Request::builder() + .method("PATCH").uri(url.as_str()) + .header("x-api-key", "reqres-free-v1") + + .body(Body::from(json!({ "name": "marfeus", "job": "accountant" }).to_string()))?; @@ -1012,20 +1016,21 @@ async fn main() -> Result<(), Box> { group('DELETE Request', () { test('DELETE1', () { - const expectedCode = r""" -use hyper::{Body, Client, Request, Uri}; + const expectedCode = r"""use hyper::{Body, Client, Request}; use hyper_tls::HttpsConnector; use tokio; +use url::Url; #[tokio::main] async fn main() -> Result<(), Box> { let https = HttpsConnector::new(); let client = Client::builder().build::<_, hyper::Body>(https); - let url = "https://reqres.in/api/users/2".parse::().unwrap(); - let req_builder = Request::builder() - .method("DELETE") - .uri(url) - .body(Body::empty())?; + let mut url = Url::parse("https://reqres.in/api/users/2")?; + let req_builder = Request::builder() + .method("DELETE").uri(url.as_str()) + .header("x-api-key", "reqres-free-v1") + + .body(Body::empty())?; let res = client.request(req_builder).await?; let status = res.status(); @@ -1048,21 +1053,22 @@ async fn main() -> Result<(), Box> { expectedCode); }); test('DELETE2', () { - const expectedCode = r""" -use hyper::{Body, Client, Request, Uri}; + const expectedCode = r"""use hyper::{Body, Client, Request}; use hyper_tls::HttpsConnector; use serde_json::json; use tokio; +use url::Url; #[tokio::main] async fn main() -> Result<(), Box> { let https = HttpsConnector::new(); let client = Client::builder().build::<_, hyper::Body>(https); - let url = "https://reqres.in/api/users/2".parse::().unwrap(); - let req_builder = Request::builder() - .method("DELETE") - .uri(url) - .body(Body::from(json!({ + let mut url = Url::parse("https://reqres.in/api/users/2")?; + let req_builder = Request::builder() + .method("DELETE").uri(url.as_str()) + .header("x-api-key", "reqres-free-v1") + + .body(Body::from(json!({ "name": "marfeus", "job": "accountant" }).to_string()))?; diff --git a/test/codegen/rust_reqwest_codegen_test.dart b/test/codegen/rust_reqwest_codegen_test.dart index 0f2a19ee4..127a6f8a4 100644 --- a/test/codegen/rust_reqwest_codegen_test.dart +++ b/test/codegen/rust_reqwest_codegen_test.dart @@ -38,10 +38,12 @@ void main() { r"""fn main() -> Result<(), Box> { let client = reqwest::blocking::Client::new(); let url = "https://api.apidash.dev/country/data"; - + let query_params = [ + ("code", "US"), + ]; let response = client .get(url) - .query(&[("code", "US")]) + .query(&query_params) .send()?; println!("Status Code: {}", response.status()); @@ -64,10 +66,13 @@ void main() { r"""fn main() -> Result<(), Box> { let client = reqwest::blocking::Client::new(); let url = "https://api.apidash.dev/country/data"; - + let query_params = [ + ("code", "IND"), + ("code", "US"), + ]; let response = client .get(url) - .query(&[("code", "IND")]) + .query(&query_params) .send()?; println!("Status Code: {}", response.status()); @@ -90,10 +95,16 @@ void main() { r"""fn main() -> Result<(), Box> { let client = reqwest::blocking::Client::new(); let url = "https://api.apidash.dev/humanize/social"; - + let query_params = [ + ("num", "8700000"), + ("digits", "3"), + ("system", "SS"), + ("add_space", "true"), + ("trailing_zeros", "true"), + ]; let response = client .get(url) - .query(&[("num", "8700000"), ("digits", "3"), ("system", "SS"), ("add_space", "true"), ("trailing_zeros", "true")]) + .query(&query_params) .send()?; println!("Status Code: {}", response.status()); @@ -142,10 +153,12 @@ void main() { r"""fn main() -> Result<(), Box> { let client = reqwest::blocking::Client::new(); let url = "https://api.github.com/repos/foss42/apidash"; - + let query_params = [ + ("raw", "true"), + ]; let response = client .get(url) - .query(&[("raw", "true")]) + .query(&query_params) .header("User-Agent", "Test Agent") .send()?; @@ -194,10 +207,12 @@ void main() { r"""fn main() -> Result<(), Box> { let client = reqwest::blocking::Client::new(); let url = "https://api.github.com/repos/foss42/apidash"; - + let query_params = [ + ("raw", "true"), + ]; let response = client .get(url) - .query(&[("raw", "true")]) + .query(&query_params) .header("User-Agent", "Test Agent") .send()?; @@ -221,10 +236,13 @@ void main() { r"""fn main() -> Result<(), Box> { let client = reqwest::blocking::Client::new(); let url = "https://api.apidash.dev/humanize/social"; - + let query_params = [ + ("num", "8700000"), + ("add_space", "true"), + ]; let response = client .get(url) - .query(&[("num", "8700000"), ("add_space", "true")]) + .query(&query_params) .send()?; println!("Status Code: {}", response.status()); @@ -273,10 +291,13 @@ void main() { r"""fn main() -> Result<(), Box> { let client = reqwest::blocking::Client::new(); let url = "https://api.apidash.dev/humanize/social"; - + let query_params = [ + ("num", "8700000"), + ("digits", "3"), + ]; let response = client .get(url) - .query(&[("num", "8700000"), ("digits", "3")]) + .query(&query_params) .header("User-Agent", "Test Agent") .send()?; @@ -383,7 +404,6 @@ void main() { let payload = r#"{ "text": "I LOVE Flutter" }"#; - let response = client .post(url) .header("content-type", "text/plain") @@ -419,7 +439,6 @@ void main() { "no": 1.2, "arr": ["null", "true", "false", null] }); - let response = client .post(url) .json(&payload) @@ -449,7 +468,6 @@ void main() { let payload = serde_json::json!({ "text": "I LOVE Flutter" }); - let response = client .post(url) .header("User-Agent", "Test Agent") @@ -726,10 +744,13 @@ void main() { } else if item.field_type == "file" { form = form.file(item.name, &item.value)?; } - } + } let query_params = [ + ("size", "2"), + ("len", "3"), + ]; let response = client .post(url) - .query(&[("size", "2"), ("len", "3")]) + .query(&query_params) .multipart(form) .send()?; @@ -778,10 +799,13 @@ void main() { } else if item.field_type == "file" { form = form.file(item.name, &item.value)?; } - } + } let query_params = [ + ("size", "2"), + ("len", "3"), + ]; let response = client .post(url) - .query(&[("size", "2"), ("len", "3")]) + .query(&query_params) .header("User-Agent", "Test Agent") .header("Keep-Alive", "true") .multipart(form) @@ -812,9 +836,9 @@ void main() { "name": "morpheus", "job": "zion resident" }); - let response = client .put(url) + .header("x-api-key", "reqres-free-v1") .json(&payload) .send()?; @@ -845,9 +869,9 @@ void main() { "name": "marfeus", "job": "accountant" }); - let response = client .patch(url) + .header("x-api-key", "reqres-free-v1") .json(&payload) .send()?; @@ -876,6 +900,7 @@ void main() { let response = client .delete(url) + .header("x-api-key", "reqres-free-v1") .send()?; println!("Status Code: {}", response.status()); @@ -903,9 +928,9 @@ void main() { "name": "marfeus", "job": "accountant" }); - let response = client .delete(url) + .header("x-api-key", "reqres-free-v1") .json(&payload) .send()?; diff --git a/test/codegen/rust_ureq_codegen_test.dart b/test/codegen/rust_ureq_codegen_test.dart index 9bf736b8c..56031db51 100644 --- a/test/codegen/rust_ureq_codegen_test.dart +++ b/test/codegen/rust_ureq_codegen_test.dart @@ -57,6 +57,7 @@ fn main() -> Result<(), ureq::Error> { let url = "https://api.apidash.dev/country/data"; let response = ureq::get(url) .query("code", "IND") + .query("code", "US") .call()?; println!("Response Status: {}", response.status()); @@ -331,7 +332,6 @@ fn main() -> Result<(), ureq::Error> { let payload = r#"{ "text": "I LOVE Flutter" }"#; - let response = ureq::post(url) .header("content-type", "text/plain") .send(payload)?; @@ -866,6 +866,7 @@ fn main() -> Result<(), ureq::Error> { }); let response = ureq::put(url) + .header("x-api-key", "reqres-free-v1") .send_json(payload)?; println!("Response Status: {}", response.status()); @@ -886,8 +887,7 @@ fn main() -> Result<(), ureq::Error> { group('PATCH Request', () { test('PATCH 1', () { - const expectedCode = r''' -use serde_json::json; + const expectedCode = r'''use serde_json::json; fn main() -> Result<(), ureq::Error> { let url = "https://reqres.in/api/users/2"; @@ -897,6 +897,7 @@ fn main() -> Result<(), ureq::Error> { }); let response = ureq::patch(url) + .header("x-api-key", "reqres-free-v1") .send_json(payload)?; println!("Response Status: {}", response.status()); @@ -917,10 +918,10 @@ fn main() -> Result<(), ureq::Error> { group('DELETE Request', () { test('DELETE 1', () { - const expectedCode = r""" -fn main() -> Result<(), ureq::Error> { + const expectedCode = r"""fn main() -> Result<(), ureq::Error> { let url = "https://reqres.in/api/users/2"; let response = ureq::delete(url) + .header("x-api-key", "reqres-free-v1") .call()?; println!("Response Status: {}", response.status()); @@ -939,8 +940,7 @@ fn main() -> Result<(), ureq::Error> { }); test('DELETE 2', () { - const expectedCode = r''' -use serde_json::json; + const expectedCode = r'''use serde_json::json; fn main() -> Result<(), ureq::Error> { let url = "https://reqres.in/api/users/2"; @@ -950,6 +950,7 @@ fn main() -> Result<(), ureq::Error> { }); let response = ureq::delete(url) + .header("x-api-key", "reqres-free-v1") .send_json(payload)?; println!("Response Status: {}", response.status()); From 0b4e71f17453e7b53bb002411a5089ab0fd8687b Mon Sep 17 00:00:00 2001 From: Nikhil Date: Sun, 13 Jul 2025 01:22:45 +0530 Subject: [PATCH 41/42] updated swift tests --- lib/codegen/swift/urlsession.dart | 13 +- .../codegen/swift_alamofire_codegen_test.dart | 212 ++++---- test/codegen/swift_urlsession_test.dart | 483 +++++++++++++----- 3 files changed, 459 insertions(+), 249 deletions(-) diff --git a/lib/codegen/swift/urlsession.dart b/lib/codegen/swift/urlsession.dart index f1ff56904..4b627599b 100644 --- a/lib/codegen/swift/urlsession.dart +++ b/lib/codegen/swift/urlsession.dart @@ -83,15 +83,10 @@ request.httpBody = postData let semaphore = DispatchSemaphore(value: 0) -let semaphore = DispatchSemaphore(value: 0) - let task = URLSession.shared.dataTask(with: request) { data, response, error in - defer { semaphore.signal() } - - defer { semaphore.signal() } + defer { semaphore.signal() } if let error = error { - print("Error: \\(error.localizedDescription)") print("Error: \\(error.localizedDescription)") return } @@ -101,15 +96,12 @@ let task = URLSession.shared.dataTask(with: request) { data, response, error in } if let responseString = String(data: data, encoding: .utf8) { print("Response: \\(responseString)") - print("Response: \\(responseString)") } } task.resume() -semaphore.wait() - semaphore.wait() """; @@ -118,9 +110,6 @@ semaphore.wait() try { String result = kTemplateStart; - if (requestModel.hasFormData) { - result += kTemplateFormDataImport; - } var rec = getValidRequestUri(requestModel.url, requestModel.enabledParams); diff --git a/test/codegen/swift_alamofire_codegen_test.dart b/test/codegen/swift_alamofire_codegen_test.dart index c5c5f0037..385146421 100644 --- a/test/codegen/swift_alamofire_codegen_test.dart +++ b/test/codegen/swift_alamofire_codegen_test.dart @@ -17,7 +17,6 @@ import Foundation import Alamofire let url = "https://api.apidash.dev" - AF.request(url, method: .get) .responseData { response in @@ -44,12 +43,14 @@ dispatchMain()"""; }); test('GET 2', () { - const expectedCode = r""" -import Foundation + const expectedCode = r"""import Foundation import Alamofire -let url = "https://api.apidash.dev/country/data?code=US" - +var urlComponents = URLComponents(string: "https://api.apidash.dev/country/data")! +var queryItems = [URLQueryItem]() +queryItems.append(URLQueryItem(name: "code", value: "US")) +urlComponents.queryItems = queryItems +let url = urlComponents.url! AF.request(url, method: .get) .responseData { response in @@ -76,12 +77,15 @@ dispatchMain()"""; }); test('GET 3', () { - const expectedCode = r""" -import Foundation + const expectedCode = r"""import Foundation import Alamofire -let url = "https://api.apidash.dev/country/data?code=IND" - +var urlComponents = URLComponents(string: "https://api.apidash.dev/country/data")! +var queryItems = [URLQueryItem]() +queryItems.append(URLQueryItem(name: "code", value: "IND")) +queryItems.append(URLQueryItem(name: "code", value: "US")) +urlComponents.queryItems = queryItems +let url = urlComponents.url! AF.request(url, method: .get) .responseData { response in @@ -108,12 +112,18 @@ dispatchMain()"""; }); test('GET 4', () { - const expectedCode = r""" -import Foundation + const expectedCode = r"""import Foundation import Alamofire -let url = "https://api.apidash.dev/humanize/social?num=8700000&digits=3&system=SS&add_space=true&trailing_zeros=true" - - +var urlComponents = URLComponents(string: "https://api.apidash.dev/humanize/social")! +var queryItems = [URLQueryItem]() +queryItems.append(URLQueryItem(name: "num", value: "8700000")) +queryItems.append(URLQueryItem(name: "digits", value: "3")) +queryItems.append(URLQueryItem(name: "system", value: "SS")) +queryItems.append(URLQueryItem(name: "add_space", value: "true")) +queryItems.append(URLQueryItem(name: "trailing_zeros", value: "true")) + +urlComponents.queryItems = queryItems +let url = urlComponents.url! AF.request(url, method: .get) .responseData { response in @@ -145,7 +155,6 @@ import Foundation import Alamofire let url = "https://api.github.com/repos/foss42/apidash" - AF.request(url, method: .get, headers: ["User-Agent": "Test Agent"]) .responseData { response in @@ -172,12 +181,14 @@ dispatchMain()"""; }); test('GET 6', () { - const expectedCode = r""" -import Foundation + const expectedCode = r"""import Foundation import Alamofire -let url = "https://api.github.com/repos/foss42/apidash?raw=true" - +var urlComponents = URLComponents(string: "https://api.github.com/repos/foss42/apidash")! +var queryItems = [URLQueryItem]() +queryItems.append(URLQueryItem(name: "raw", value: "true")) +urlComponents.queryItems = queryItems +let url = urlComponents.url! AF.request(url, method: .get, headers: ["User-Agent": "Test Agent"]) .responseData { response in @@ -204,12 +215,10 @@ dispatchMain()"""; }); test('GET 7', () { - const expectedCode = r""" -import Foundation + const expectedCode = r"""import Foundation import Alamofire let url = "https://api.apidash.dev" - AF.request(url, method: .get) .responseData { response in @@ -236,12 +245,14 @@ dispatchMain()"""; }); test('GET 8', () { - const expectedCode = r""" -import Foundation + const expectedCode = r"""import Foundation import Alamofire -let url = "https://api.github.com/repos/foss42/apidash?raw=true" - +var urlComponents = URLComponents(string: "https://api.github.com/repos/foss42/apidash")! +var queryItems = [URLQueryItem]() +queryItems.append(URLQueryItem(name: "raw", value: "true")) +urlComponents.queryItems = queryItems +let url = urlComponents.url! AF.request(url, method: .get, headers: ["User-Agent": "Test Agent"]) .responseData { response in @@ -268,12 +279,15 @@ dispatchMain()"""; }); test('GET 9', () { - const expectedCode = r""" -import Foundation + const expectedCode = r"""import Foundation import Alamofire -let url = "https://api.apidash.dev/humanize/social?num=8700000&add_space=true" - +var urlComponents = URLComponents(string: "https://api.apidash.dev/humanize/social")! +var queryItems = [URLQueryItem]() +queryItems.append(URLQueryItem(name: "num", value: "8700000")) +queryItems.append(URLQueryItem(name: "add_space", value: "true")) +urlComponents.queryItems = queryItems +let url = urlComponents.url! AF.request(url, method: .get) .responseData { response in @@ -300,12 +314,10 @@ dispatchMain()"""; }); test('GET 10', () { - const expectedCode = r""" -import Foundation + const expectedCode = r"""import Foundation import Alamofire let url = "https://api.apidash.dev/humanize/social" - AF.request(url, method: .get, headers: ["User-Agent": "Test Agent"]) .responseData { response in @@ -332,12 +344,15 @@ dispatchMain()"""; }); test('GET 11', () { - const expectedCode = r""" -import Foundation + const expectedCode = r"""import Foundation import Alamofire -let url = "https://api.apidash.dev/humanize/social?num=8700000&digits=3" - +var urlComponents = URLComponents(string: "https://api.apidash.dev/humanize/social")! +var queryItems = [URLQueryItem]() +queryItems.append(URLQueryItem(name: "num", value: "8700000")) +queryItems.append(URLQueryItem(name: "digits", value: "3")) +urlComponents.queryItems = queryItems +let url = urlComponents.url! AF.request(url, method: .get, headers: ["User-Agent": "Test Agent"]) .responseData { response in @@ -364,12 +379,10 @@ dispatchMain()"""; }); test('GET 12', () { - const expectedCode = r""" -import Foundation + const expectedCode = r"""import Foundation import Alamofire let url = "https://api.apidash.dev/humanize/social" - AF.request(url, method: .get) .responseData { response in @@ -402,12 +415,10 @@ dispatchMain()"""; 'HTTPVerb.head', () { test('HEAD 1', () { - const expectedCode = r""" -import Foundation + const expectedCode = r"""import Foundation import Alamofire let url = "https://api.apidash.dev" - AF.request(url, method: .head) .responseData { response in @@ -434,12 +445,10 @@ dispatchMain()"""; }); test('HEAD 2', () { - const expectedCode = r""" -import Foundation + const expectedCode = r"""import Foundation import Alamofire let url = "https://api.apidash.dev" - AF.request(url, method: .head) .responseData { response in @@ -472,15 +481,13 @@ dispatchMain()"""; "HTTPVerb.post", () { test('POST 1', () { - const expectedCode = r''' -import Foundation + const expectedCode = r'''import Foundation import Alamofire +let url = "https://api.apidash.dev/case/lower" let textString = """ {\n\"text\": \"I LOVE Flutter\"\n} """ let textData = textString.data(using: .utf8) -let url = "https://api.apidash.dev/case/lower" - AF.upload(textData!, to: url, method: .post, headers: ["Content-Type": "text/plain"]) @@ -507,15 +514,13 @@ dispatchMain()'''; expectedCode); }); test('POST 2', () { - const expectedCode = r''' -import Foundation + const expectedCode = r'''import Foundation import Alamofire +let url = "https://api.apidash.dev/case/lower" let jsonString = """ {\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 jsonData = jsonString.data(using: .utf8) -let url = "https://api.apidash.dev/case/lower" - AF.upload(jsonData!, to: url, method: .post, headers: ["Content-Type": "application/json"]) @@ -543,15 +548,13 @@ dispatchMain()'''; }); test('POST 3', () { - const expectedCode = r''' -import Foundation + const expectedCode = r'''import Foundation import Alamofire +let url = "https://api.apidash.dev/case/lower" let jsonString = """ {\n\"text\": \"I LOVE Flutter\"\n} """ let jsonData = jsonString.data(using: .utf8) -let url = "https://api.apidash.dev/case/lower" - AF.upload(jsonData!, to: url, method: .post, headers: ["User-Agent": "Test Agent", "Content-Type": "application/json"]) @@ -579,15 +582,13 @@ dispatchMain()'''; }); test('POST 4', () { - const expectedCode = r""" -import Foundation + const expectedCode = r"""import Foundation import Alamofire +let url = "https://api.apidash.dev/io/form" let multipartFormData = MultipartFormData() multipartFormData.append(Data("API".utf8), withName: "text") multipartFormData.append(Data("|".utf8), withName: "sep") multipartFormData.append(Data("3".utf8), withName: "times") -let url = "https://api.apidash.dev/io/form" - AF.upload(multipartFormData: multipartFormData, to: url, method: .post) @@ -615,15 +616,13 @@ dispatchMain()"""; }); test('POST 5', () { - const expectedCode = r""" -import Foundation + const expectedCode = r"""import Foundation import Alamofire +let url = "https://api.apidash.dev/io/form" let multipartFormData = MultipartFormData() multipartFormData.append(Data("API".utf8), withName: "text") multipartFormData.append(Data("|".utf8), withName: "sep") multipartFormData.append(Data("3".utf8), withName: "times") -let url = "https://api.apidash.dev/io/form" - AF.upload(multipartFormData: multipartFormData, to: url, method: .post, headers: ["User-Agent": "Test Agent"]) @@ -652,17 +651,15 @@ dispatchMain()"""; test('POST 6', () { - const expectedCode = r""" -import Foundation + const expectedCode = r"""import Foundation import Alamofire +let url = "https://api.apidash.dev/io/img" let multipartFormData = MultipartFormData() multipartFormData.append(Data("xyz".utf8), withName: "token") let fileURL = URL(fileURLWithPath: "/Documents/up/1.png") multipartFormData.append(fileURL, withName: "imfile", fileName: "1.png", mimeType: "application/octet-stream") -let url = "https://api.apidash.dev/io/img" - AF.upload(multipartFormData: multipartFormData, to: url, method: .post) @@ -693,17 +690,15 @@ dispatchMain()"""; test('POST 7', () { - const expectedCode = r""" -import Foundation + const expectedCode = r"""import Foundation import Alamofire +let url = "https://api.apidash.dev/io/img" let multipartFormData = MultipartFormData() multipartFormData.append(Data("xyz".utf8), withName: "token") let fileURL = URL(fileURLWithPath: "/Documents/up/1.png") multipartFormData.append(fileURL, withName: "imfile", fileName: "1.png", mimeType: "application/octet-stream") -let url = "https://api.apidash.dev/io/img" - AF.upload(multipartFormData: multipartFormData, to: url, method: .post) @@ -730,15 +725,18 @@ dispatchMain()"""; expectedCode); }); test('POST 8', () { - const expectedCode = r""" -import Foundation + const expectedCode = r"""import Foundation import Alamofire -let multipartFormData = MultipartFormData() +var urlComponents = URLComponents(string: "https://api.apidash.dev/io/form")! +var queryItems = [URLQueryItem]() +queryItems.append(URLQueryItem(name: "size", value: "2")) +queryItems.append(URLQueryItem(name: "len", value: "3")) + +urlComponents.queryItems = queryItems +let url = urlComponents.url!let multipartFormData = MultipartFormData() multipartFormData.append(Data("API".utf8), withName: "text") multipartFormData.append(Data("|".utf8), withName: "sep") multipartFormData.append(Data("3".utf8), withName: "times") -let url = "https://api.apidash.dev/io/form?size=2&len=3" - AF.upload(multipartFormData: multipartFormData, to: url, method: .post) @@ -765,17 +763,20 @@ dispatchMain()"""; expectedCode); }); test('POST 9', () { - const expectedCode = r""" -import Foundation + const expectedCode = r"""import Foundation import Alamofire -let multipartFormData = MultipartFormData() +var urlComponents = URLComponents(string: "https://api.apidash.dev/io/img")! +var queryItems = [URLQueryItem]() +queryItems.append(URLQueryItem(name: "size", value: "2")) +queryItems.append(URLQueryItem(name: "len", value: "3")) + +urlComponents.queryItems = queryItems +let url = urlComponents.url!let multipartFormData = MultipartFormData() multipartFormData.append(Data("xyz".utf8), withName: "token") let fileURL = URL(fileURLWithPath: "/Documents/up/1.png") multipartFormData.append(fileURL, withName: "imfile", fileName: "1.png", mimeType: "application/octet-stream") -let url = "https://api.apidash.dev/io/img?size=2&len=3" - AF.upload(multipartFormData: multipartFormData, to: url, method: .post, headers: ["User-Agent": "Test Agent", "Keep-Alive": "true"]) @@ -802,15 +803,18 @@ dispatchMain()"""; expectedCode); }); test('POST 10', () { - const expectedCode = r''' -import Foundation + const expectedCode = r'''import Foundation import Alamofire -let jsonString = """ +var urlComponents = URLComponents(string: "https://api.apidash.dev/case/lower")! +var queryItems = [URLQueryItem]() +queryItems.append(URLQueryItem(name: "size", value: "2")) +queryItems.append(URLQueryItem(name: "len", value: "3")) + +urlComponents.queryItems = queryItems +let url = urlComponents.url!let jsonString = """ {\n\"text\": \"I LOVE Flutter\"\n} """ let jsonData = jsonString.data(using: .utf8) -let url = "https://api.apidash.dev/case/lower?size=2&len=3" - AF.upload(jsonData!, to: url, method: .post, headers: ["Content-Type": "application/json; charset=utf-8"]) @@ -844,17 +848,15 @@ dispatchMain()'''; 'HTTPVerb.put', () { test('PUT 1', () { - const expectedCode = r''' -import Foundation + const expectedCode = r'''import Foundation import Alamofire +let url = "https://reqres.in/api/users/2" let jsonString = """ {\n\"name\": \"morpheus\",\n\"job\": \"zion resident\"\n} """ let jsonData = jsonString.data(using: .utf8) -let url = "https://reqres.in/api/users/2" - -AF.upload(jsonData!, to: url, method: .put, headers: ["Content-Type": "application/json"]) +AF.upload(jsonData!, to: url, method: .put, headers: ["x-api-key": "reqres-free-v1", "Content-Type": "application/json"]) .responseData { response in switch response.result { @@ -886,17 +888,15 @@ dispatchMain()'''; 'HTTPVerb.patch', () { test('PATCH 1', () { - const expectedCode = r''' -import Foundation + const expectedCode = r'''import Foundation import Alamofire +let url = "https://reqres.in/api/users/2" let jsonString = """ {\n\"name\": \"marfeus\",\n\"job\": \"accountant\"\n} """ let jsonData = jsonString.data(using: .utf8) -let url = "https://reqres.in/api/users/2" - -AF.upload(jsonData!, to: url, method: .patch, headers: ["Content-Type": "application/json"]) +AF.upload(jsonData!, to: url, method: .patch, headers: ["x-api-key": "reqres-free-v1", "Content-Type": "application/json"]) .responseData { response in switch response.result { @@ -928,13 +928,11 @@ dispatchMain()'''; 'HTTPVerb.delete', () { test('DELETE 1', () { - const expectedCode = r""" -import Foundation + const expectedCode = r"""import Foundation import Alamofire let url = "https://reqres.in/api/users/2" - -AF.request(url, method: .delete) +AF.request(url, method: .delete, headers: ["x-api-key": "reqres-free-v1"]) .responseData { response in switch response.result { @@ -960,17 +958,15 @@ dispatchMain()"""; }); test('DELETE 2', () { - const expectedCode = r''' -import Foundation + const expectedCode = r'''import Foundation import Alamofire +let url = "https://reqres.in/api/users/2" let jsonString = """ {\n\"name\": \"marfeus\",\n\"job\": \"accountant\"\n} """ let jsonData = jsonString.data(using: .utf8) -let url = "https://reqres.in/api/users/2" - -AF.upload(jsonData!, to: url, method: .delete, headers: ["Content-Type": "application/json"]) +AF.upload(jsonData!, to: url, method: .delete, headers: ["x-api-key": "reqres-free-v1", "Content-Type": "application/json"]) .responseData { response in switch response.result { diff --git a/test/codegen/swift_urlsession_test.dart b/test/codegen/swift_urlsession_test.dart index b5114d5ef..6c7796494 100644 --- a/test/codegen/swift_urlsession_test.dart +++ b/test/codegen/swift_urlsession_test.dart @@ -12,15 +12,21 @@ void main() { 'HTTPVerb.get', () { test('GET 1', () { - const expectedCode = r""" -import Foundation + const expectedCode = r"""import Foundation -var request = URLRequest(url: URL(string: "https://api.apidash.dev")!) +var urlComponents = URLComponents(string: "https://api.apidash.dev")! +var queryItems = [URLQueryItem]() + + + +urlComponents.queryItems = queryItems +let requestUrl = urlComponents.url! +var request = URLRequest(url: requestUrl) request.httpMethod = "GET" let semaphore = DispatchSemaphore(value: 0) let task = URLSession.shared.dataTask(with: request) { data, response, error in - defer { semaphore.signal() } + defer { semaphore.signal() } if let error = error { print("Error: \(error.localizedDescription)") @@ -35,6 +41,7 @@ let task = URLSession.shared.dataTask(with: request) { data, response, error in } } + task.resume() semaphore.wait() @@ -50,15 +57,22 @@ semaphore.wait() }); test('GET 2', () { - const expectedCode = r""" -import Foundation + const expectedCode = r"""import Foundation + +var urlComponents = URLComponents(string: "https://api.apidash.dev/country/data")! +var queryItems = [URLQueryItem]() -var request = URLRequest(url: URL(string: "https://api.apidash.dev/country/data?code=US")!) + +queryItems.append(URLQueryItem(name: "code", value: "US")) + +urlComponents.queryItems = queryItems +let requestUrl = urlComponents.url! +var request = URLRequest(url: requestUrl) request.httpMethod = "GET" let semaphore = DispatchSemaphore(value: 0) let task = URLSession.shared.dataTask(with: request) { data, response, error in - defer { semaphore.signal() } + defer { semaphore.signal() } if let error = error { print("Error: \(error.localizedDescription)") @@ -73,6 +87,7 @@ let task = URLSession.shared.dataTask(with: request) { data, response, error in } } + task.resume() semaphore.wait() @@ -88,15 +103,23 @@ semaphore.wait() }); test('GET 3', () { - const expectedCode = r""" -import Foundation + const expectedCode = r"""import Foundation + +var urlComponents = URLComponents(string: "https://api.apidash.dev/country/data")! +var queryItems = [URLQueryItem]() + -var request = URLRequest(url: URL(string: "https://api.apidash.dev/country/data?code=IND")!) +queryItems.append(URLQueryItem(name: "code", value: "IND")) +queryItems.append(URLQueryItem(name: "code", value: "US")) + +urlComponents.queryItems = queryItems +let requestUrl = urlComponents.url! +var request = URLRequest(url: requestUrl) request.httpMethod = "GET" let semaphore = DispatchSemaphore(value: 0) let task = URLSession.shared.dataTask(with: request) { data, response, error in - defer { semaphore.signal() } + defer { semaphore.signal() } if let error = error { print("Error: \(error.localizedDescription)") @@ -111,6 +134,7 @@ let task = URLSession.shared.dataTask(with: request) { data, response, error in } } + task.resume() semaphore.wait() @@ -126,15 +150,26 @@ semaphore.wait() }); test('GET 4', () { - const expectedCode = r""" -import Foundation + const expectedCode = r"""import Foundation + +var urlComponents = URLComponents(string: "https://api.apidash.dev/humanize/social")! +var queryItems = [URLQueryItem]() + + +queryItems.append(URLQueryItem(name: "num", value: "8700000")) +queryItems.append(URLQueryItem(name: "digits", value: "3")) +queryItems.append(URLQueryItem(name: "system", value: "SS")) +queryItems.append(URLQueryItem(name: "add_space", value: "true")) +queryItems.append(URLQueryItem(name: "trailing_zeros", value: "true")) -var request = URLRequest(url: URL(string: "https://api.apidash.dev/humanize/social?num=8700000&digits=3&system=SS&add_space=true&trailing_zeros=true")!) +urlComponents.queryItems = queryItems +let requestUrl = urlComponents.url! +var request = URLRequest(url: requestUrl) request.httpMethod = "GET" let semaphore = DispatchSemaphore(value: 0) let task = URLSession.shared.dataTask(with: request) { data, response, error in - defer { semaphore.signal() } + defer { semaphore.signal() } if let error = error { print("Error: \(error.localizedDescription)") @@ -149,6 +184,7 @@ let task = URLSession.shared.dataTask(with: request) { data, response, error in } } + task.resume() semaphore.wait() @@ -164,18 +200,24 @@ semaphore.wait() }); test('GET 5', () { - const expectedCode = r""" -import Foundation + const expectedCode = r"""import Foundation + +var urlComponents = URLComponents(string: "https://api.github.com/repos/foss42/apidash")! +var queryItems = [URLQueryItem]() + -var request = URLRequest(url: URL(string: "https://api.github.com/repos/foss42/apidash")!) -request.httpMethod = "GET" +urlComponents.queryItems = queryItems +let requestUrl = urlComponents.url! +var request = URLRequest(url: requestUrl) +request.httpMethod = "GET" request.addValue("Test Agent", forHTTPHeaderField: "User-Agent") + let semaphore = DispatchSemaphore(value: 0) let task = URLSession.shared.dataTask(with: request) { data, response, error in - defer { semaphore.signal() } + defer { semaphore.signal() } if let error = error { print("Error: \(error.localizedDescription)") @@ -190,6 +232,7 @@ let task = URLSession.shared.dataTask(with: request) { data, response, error in } } + task.resume() semaphore.wait() @@ -205,18 +248,25 @@ semaphore.wait() }); test('GET 6', () { - const expectedCode = r""" -import Foundation + const expectedCode = r"""import Foundation + +var urlComponents = URLComponents(string: "https://api.github.com/repos/foss42/apidash")! +var queryItems = [URLQueryItem]() -var request = URLRequest(url: URL(string: "https://api.github.com/repos/foss42/apidash?raw=true")!) -request.httpMethod = "GET" +queryItems.append(URLQueryItem(name: "raw", value: "true")) + +urlComponents.queryItems = queryItems +let requestUrl = urlComponents.url! +var request = URLRequest(url: requestUrl) +request.httpMethod = "GET" request.addValue("Test Agent", forHTTPHeaderField: "User-Agent") + let semaphore = DispatchSemaphore(value: 0) let task = URLSession.shared.dataTask(with: request) { data, response, error in - defer { semaphore.signal() } + defer { semaphore.signal() } if let error = error { print("Error: \(error.localizedDescription)") @@ -231,6 +281,7 @@ let task = URLSession.shared.dataTask(with: request) { data, response, error in } } + task.resume() semaphore.wait() @@ -246,15 +297,21 @@ semaphore.wait() }); test('GET 7', () { - const expectedCode = r""" -import Foundation + const expectedCode = r"""import Foundation + +var urlComponents = URLComponents(string: "https://api.apidash.dev")! +var queryItems = [URLQueryItem]() -var request = URLRequest(url: URL(string: "https://api.apidash.dev")!) + + +urlComponents.queryItems = queryItems +let requestUrl = urlComponents.url! +var request = URLRequest(url: requestUrl) request.httpMethod = "GET" let semaphore = DispatchSemaphore(value: 0) let task = URLSession.shared.dataTask(with: request) { data, response, error in - defer { semaphore.signal() } + defer { semaphore.signal() } if let error = error { print("Error: \(error.localizedDescription)") @@ -269,6 +326,7 @@ let task = URLSession.shared.dataTask(with: request) { data, response, error in } } + task.resume() semaphore.wait() @@ -284,18 +342,25 @@ semaphore.wait() }); test('GET 8', () { - const expectedCode = r""" -import Foundation + const expectedCode = r"""import Foundation + +var urlComponents = URLComponents(string: "https://api.github.com/repos/foss42/apidash")! +var queryItems = [URLQueryItem]() -var request = URLRequest(url: URL(string: "https://api.github.com/repos/foss42/apidash?raw=true")!) -request.httpMethod = "GET" +queryItems.append(URLQueryItem(name: "raw", value: "true")) + +urlComponents.queryItems = queryItems +let requestUrl = urlComponents.url! +var request = URLRequest(url: requestUrl) +request.httpMethod = "GET" request.addValue("Test Agent", forHTTPHeaderField: "User-Agent") + let semaphore = DispatchSemaphore(value: 0) let task = URLSession.shared.dataTask(with: request) { data, response, error in - defer { semaphore.signal() } + defer { semaphore.signal() } if let error = error { print("Error: \(error.localizedDescription)") @@ -310,6 +375,7 @@ let task = URLSession.shared.dataTask(with: request) { data, response, error in } } + task.resume() semaphore.wait() @@ -325,15 +391,23 @@ semaphore.wait() }); test('GET 9', () { - const expectedCode = r""" -import Foundation + const expectedCode = r"""import Foundation -var request = URLRequest(url: URL(string: "https://api.apidash.dev/humanize/social?num=8700000&add_space=true")!) +var urlComponents = URLComponents(string: "https://api.apidash.dev/humanize/social")! +var queryItems = [URLQueryItem]() + + +queryItems.append(URLQueryItem(name: "num", value: "8700000")) +queryItems.append(URLQueryItem(name: "add_space", value: "true")) + +urlComponents.queryItems = queryItems +let requestUrl = urlComponents.url! +var request = URLRequest(url: requestUrl) request.httpMethod = "GET" let semaphore = DispatchSemaphore(value: 0) let task = URLSession.shared.dataTask(with: request) { data, response, error in - defer { semaphore.signal() } + defer { semaphore.signal() } if let error = error { print("Error: \(error.localizedDescription)") @@ -348,6 +422,7 @@ let task = URLSession.shared.dataTask(with: request) { data, response, error in } } + task.resume() semaphore.wait() @@ -363,18 +438,24 @@ semaphore.wait() }); test('GET 10', () { - const expectedCode = r""" -import Foundation + const expectedCode = r"""import Foundation -var request = URLRequest(url: URL(string: "https://api.apidash.dev/humanize/social")!) -request.httpMethod = "GET" +var urlComponents = URLComponents(string: "https://api.apidash.dev/humanize/social")! +var queryItems = [URLQueryItem]() + + +urlComponents.queryItems = queryItems +let requestUrl = urlComponents.url! +var request = URLRequest(url: requestUrl) +request.httpMethod = "GET" request.addValue("Test Agent", forHTTPHeaderField: "User-Agent") + let semaphore = DispatchSemaphore(value: 0) let task = URLSession.shared.dataTask(with: request) { data, response, error in - defer { semaphore.signal() } + defer { semaphore.signal() } if let error = error { print("Error: \(error.localizedDescription)") @@ -389,6 +470,7 @@ let task = URLSession.shared.dataTask(with: request) { data, response, error in } } + task.resume() semaphore.wait() @@ -404,18 +486,26 @@ semaphore.wait() }); test('GET 11', () { - const expectedCode = r""" -import Foundation + const expectedCode = r"""import Foundation -var request = URLRequest(url: URL(string: "https://api.apidash.dev/humanize/social?num=8700000&digits=3")!) -request.httpMethod = "GET" +var urlComponents = URLComponents(string: "https://api.apidash.dev/humanize/social")! +var queryItems = [URLQueryItem]() + + +queryItems.append(URLQueryItem(name: "num", value: "8700000")) +queryItems.append(URLQueryItem(name: "digits", value: "3")) +urlComponents.queryItems = queryItems +let requestUrl = urlComponents.url! +var request = URLRequest(url: requestUrl) +request.httpMethod = "GET" request.addValue("Test Agent", forHTTPHeaderField: "User-Agent") + let semaphore = DispatchSemaphore(value: 0) let task = URLSession.shared.dataTask(with: request) { data, response, error in - defer { semaphore.signal() } + defer { semaphore.signal() } if let error = error { print("Error: \(error.localizedDescription)") @@ -430,6 +520,7 @@ let task = URLSession.shared.dataTask(with: request) { data, response, error in } } + task.resume() semaphore.wait() @@ -445,15 +536,21 @@ semaphore.wait() }); test('GET 12', () { - const expectedCode = r""" -import Foundation + const expectedCode = r"""import Foundation + +var urlComponents = URLComponents(string: "https://api.apidash.dev/humanize/social")! +var queryItems = [URLQueryItem]() + + -var request = URLRequest(url: URL(string: "https://api.apidash.dev/humanize/social")!) +urlComponents.queryItems = queryItems +let requestUrl = urlComponents.url! +var request = URLRequest(url: requestUrl) request.httpMethod = "GET" let semaphore = DispatchSemaphore(value: 0) let task = URLSession.shared.dataTask(with: request) { data, response, error in - defer { semaphore.signal() } + defer { semaphore.signal() } if let error = error { print("Error: \(error.localizedDescription)") @@ -468,6 +565,7 @@ let task = URLSession.shared.dataTask(with: request) { data, response, error in } } + task.resume() semaphore.wait() @@ -488,15 +586,21 @@ semaphore.wait() 'HTTPVerb.head', () { test('HEAD 1', () { - const expectedCode = r""" -import Foundation + const expectedCode = r"""import Foundation + +var urlComponents = URLComponents(string: "https://api.apidash.dev")! +var queryItems = [URLQueryItem]() + -var request = URLRequest(url: URL(string: "https://api.apidash.dev")!) + +urlComponents.queryItems = queryItems +let requestUrl = urlComponents.url! +var request = URLRequest(url: requestUrl) request.httpMethod = "HEAD" let semaphore = DispatchSemaphore(value: 0) let task = URLSession.shared.dataTask(with: request) { data, response, error in - defer { semaphore.signal() } + defer { semaphore.signal() } if let error = error { print("Error: \(error.localizedDescription)") @@ -511,6 +615,7 @@ let task = URLSession.shared.dataTask(with: request) { data, response, error in } } + task.resume() semaphore.wait() @@ -526,15 +631,21 @@ semaphore.wait() }); test('HEAD 2', () { - const expectedCode = r""" -import Foundation + const expectedCode = r"""import Foundation -var request = URLRequest(url: URL(string: "https://api.apidash.dev")!) +var urlComponents = URLComponents(string: "https://api.apidash.dev")! +var queryItems = [URLQueryItem]() + + + +urlComponents.queryItems = queryItems +let requestUrl = urlComponents.url! +var request = URLRequest(url: requestUrl) request.httpMethod = "HEAD" let semaphore = DispatchSemaphore(value: 0) let task = URLSession.shared.dataTask(with: request) { data, response, error in - defer { semaphore.signal() } + defer { semaphore.signal() } if let error = error { print("Error: \(error.localizedDescription)") @@ -549,6 +660,7 @@ let task = URLSession.shared.dataTask(with: request) { data, response, error in } } + task.resume() semaphore.wait() @@ -569,25 +681,31 @@ semaphore.wait() "HTTPVerb.post", () { test('POST 1', () { - const expectedCode = r''' -import Foundation + const expectedCode = r'''import Foundation let postData = """ { "text": "I LOVE Flutter" } """.data(using: .utf8) -var request = URLRequest(url: URL(string: "https://api.apidash.dev/case/lower")!) -request.httpMethod = "POST" +var urlComponents = URLComponents(string: "https://api.apidash.dev/case/lower")! +var queryItems = [URLQueryItem]() -request.addValue("application/json", forHTTPHeaderField: "Content-Type") + + +urlComponents.queryItems = queryItems +let requestUrl = urlComponents.url! +var request = URLRequest(url: requestUrl) +request.httpMethod = "POST" +request.addValue("text/plain", forHTTPHeaderField: "Content-Type") request.httpBody = postData + let semaphore = DispatchSemaphore(value: 0) let task = URLSession.shared.dataTask(with: request) { data, response, error in - defer { semaphore.signal() } + defer { semaphore.signal() } if let error = error { print("Error: \(error.localizedDescription)") @@ -602,6 +720,7 @@ let task = URLSession.shared.dataTask(with: request) { data, response, error in } } + task.resume() semaphore.wait() @@ -616,8 +735,7 @@ semaphore.wait() expectedCode); }); test('POST 2', () { - const expectedCode = r''' -import Foundation + const expectedCode = r'''import Foundation let postData = """ { @@ -629,17 +747,24 @@ let postData = """ "arr": ["null", "true", "false", null] } """.data(using: .utf8) -var request = URLRequest(url: URL(string: "https://api.apidash.dev/case/lower")!) -request.httpMethod = "POST" +var urlComponents = URLComponents(string: "https://api.apidash.dev/case/lower")! +var queryItems = [URLQueryItem]() + + +urlComponents.queryItems = queryItems +let requestUrl = urlComponents.url! +var request = URLRequest(url: requestUrl) +request.httpMethod = "POST" request.addValue("application/json", forHTTPHeaderField: "Content-Type") request.httpBody = postData + let semaphore = DispatchSemaphore(value: 0) let task = URLSession.shared.dataTask(with: request) { data, response, error in - defer { semaphore.signal() } + defer { semaphore.signal() } if let error = error { print("Error: \(error.localizedDescription)") @@ -654,6 +779,7 @@ let task = URLSession.shared.dataTask(with: request) { data, response, error in } } + task.resume() semaphore.wait() @@ -669,27 +795,33 @@ semaphore.wait() }); test('POST 3', () { - const expectedCode = r''' -import Foundation + const expectedCode = r'''import Foundation let postData = """ { "text": "I LOVE Flutter" } """.data(using: .utf8) -var request = URLRequest(url: URL(string: "https://api.apidash.dev/case/lower")!) -request.httpMethod = "POST" +var urlComponents = URLComponents(string: "https://api.apidash.dev/case/lower")! +var queryItems = [URLQueryItem]() + + +urlComponents.queryItems = queryItems +let requestUrl = urlComponents.url! +var request = URLRequest(url: requestUrl) +request.httpMethod = "POST" request.addValue("Test Agent", forHTTPHeaderField: "User-Agent") request.addValue("application/json", forHTTPHeaderField: "Content-Type") request.httpBody = postData + let semaphore = DispatchSemaphore(value: 0) let task = URLSession.shared.dataTask(with: request) { data, response, error in - defer { semaphore.signal() } + defer { semaphore.signal() } if let error = error { print("Error: \(error.localizedDescription)") @@ -704,6 +836,7 @@ let task = URLSession.shared.dataTask(with: request) { data, response, error in } } + task.resume() semaphore.wait() @@ -719,8 +852,7 @@ semaphore.wait() }); test('POST 4', () { - const expectedCode = r""" -import Foundation + const expectedCode = r"""import Foundation import MultipartFormData @@ -752,16 +884,23 @@ let multipartFormData = try! MultipartFormData(boundary: boundary) { } -var request = URLRequest(url: URL(string: "https://api.apidash.dev/io/form")!) -request.httpMethod = "POST" +var urlComponents = URLComponents(string: "https://api.apidash.dev/io/form")! +var queryItems = [URLQueryItem]() + + +urlComponents.queryItems = queryItems +let requestUrl = urlComponents.url! +var request = URLRequest(url: requestUrl) +request.httpMethod = "POST" request.addValue("multipart/form-data; boundary=\(boundary.stringValue)", forHTTPHeaderField: "Content-Type") request.httpBody = try! multipartFormData.encode() + let semaphore = DispatchSemaphore(value: 0) let task = URLSession.shared.dataTask(with: request) { data, response, error in - defer { semaphore.signal() } + defer { semaphore.signal() } if let error = error { print("Error: \(error.localizedDescription)") @@ -776,6 +915,7 @@ let task = URLSession.shared.dataTask(with: request) { data, response, error in } } + task.resume() semaphore.wait() @@ -791,8 +931,7 @@ semaphore.wait() }); test('POST 5', () { - const expectedCode = r""" -import Foundation + const expectedCode = r"""import Foundation import MultipartFormData @@ -824,18 +963,25 @@ let multipartFormData = try! MultipartFormData(boundary: boundary) { } -var request = URLRequest(url: URL(string: "https://api.apidash.dev/io/form")!) -request.httpMethod = "POST" +var urlComponents = URLComponents(string: "https://api.apidash.dev/io/form")! +var queryItems = [URLQueryItem]() + + +urlComponents.queryItems = queryItems +let requestUrl = urlComponents.url! +var request = URLRequest(url: requestUrl) +request.httpMethod = "POST" request.addValue("Test Agent", forHTTPHeaderField: "User-Agent") request.addValue("multipart/form-data; boundary=\(boundary.stringValue)", forHTTPHeaderField: "Content-Type") request.httpBody = try! multipartFormData.encode() + let semaphore = DispatchSemaphore(value: 0) let task = URLSession.shared.dataTask(with: request) { data, response, error in - defer { semaphore.signal() } + defer { semaphore.signal() } if let error = error { print("Error: \(error.localizedDescription)") @@ -850,6 +996,7 @@ let task = URLSession.shared.dataTask(with: request) { data, response, error in } } + task.resume() semaphore.wait() @@ -864,8 +1011,7 @@ semaphore.wait() expectedCode); }); test('POST 6', () { - const expectedCode = r''' -import Foundation + const expectedCode = r'''import Foundation import MultipartFormData @@ -890,16 +1036,23 @@ let multipartFormData = try! MultipartFormData(boundary: boundary) { } -var request = URLRequest(url: URL(string: "https://api.apidash.dev/io/img")!) -request.httpMethod = "POST" +var urlComponents = URLComponents(string: "https://api.apidash.dev/io/img")! +var queryItems = [URLQueryItem]() + + +urlComponents.queryItems = queryItems +let requestUrl = urlComponents.url! +var request = URLRequest(url: requestUrl) +request.httpMethod = "POST" request.addValue("multipart/form-data; boundary=\(boundary.stringValue)", forHTTPHeaderField: "Content-Type") request.httpBody = try! multipartFormData.encode() + let semaphore = DispatchSemaphore(value: 0) let task = URLSession.shared.dataTask(with: request) { data, response, error in - defer { semaphore.signal() } + defer { semaphore.signal() } if let error = error { print("Error: \(error.localizedDescription)") @@ -914,6 +1067,7 @@ let task = URLSession.shared.dataTask(with: request) { data, response, error in } } + task.resume() semaphore.wait() @@ -928,8 +1082,7 @@ semaphore.wait() expectedCode); }); test('POST 7', () { - const expectedCode = r""" -import Foundation + const expectedCode = r"""import Foundation import MultipartFormData @@ -954,16 +1107,23 @@ let multipartFormData = try! MultipartFormData(boundary: boundary) { } -var request = URLRequest(url: URL(string: "https://api.apidash.dev/io/img")!) -request.httpMethod = "POST" +var urlComponents = URLComponents(string: "https://api.apidash.dev/io/img")! +var queryItems = [URLQueryItem]() + + +urlComponents.queryItems = queryItems +let requestUrl = urlComponents.url! +var request = URLRequest(url: requestUrl) +request.httpMethod = "POST" request.addValue("multipart/form-data; boundary=\(boundary.stringValue)", forHTTPHeaderField: "Content-Type") request.httpBody = try! multipartFormData.encode() + let semaphore = DispatchSemaphore(value: 0) let task = URLSession.shared.dataTask(with: request) { data, response, error in - defer { semaphore.signal() } + defer { semaphore.signal() } if let error = error { print("Error: \(error.localizedDescription)") @@ -978,6 +1138,7 @@ let task = URLSession.shared.dataTask(with: request) { data, response, error in } } + task.resume() semaphore.wait() @@ -992,8 +1153,7 @@ semaphore.wait() expectedCode); }); test('POST 8', () { - const expectedCode = r""" -import Foundation + const expectedCode = r"""import Foundation import MultipartFormData @@ -1025,16 +1185,25 @@ let multipartFormData = try! MultipartFormData(boundary: boundary) { } -var request = URLRequest(url: URL(string: "https://api.apidash.dev/io/form?size=2&len=3")!) -request.httpMethod = "POST" +var urlComponents = URLComponents(string: "https://api.apidash.dev/io/form")! +var queryItems = [URLQueryItem]() + + +queryItems.append(URLQueryItem(name: "size", value: "2")) +queryItems.append(URLQueryItem(name: "len", value: "3")) +urlComponents.queryItems = queryItems +let requestUrl = urlComponents.url! +var request = URLRequest(url: requestUrl) +request.httpMethod = "POST" request.addValue("multipart/form-data; boundary=\(boundary.stringValue)", forHTTPHeaderField: "Content-Type") request.httpBody = try! multipartFormData.encode() + let semaphore = DispatchSemaphore(value: 0) let task = URLSession.shared.dataTask(with: request) { data, response, error in - defer { semaphore.signal() } + defer { semaphore.signal() } if let error = error { print("Error: \(error.localizedDescription)") @@ -1049,6 +1218,7 @@ let task = URLSession.shared.dataTask(with: request) { data, response, error in } } + task.resume() semaphore.wait() @@ -1063,8 +1233,7 @@ semaphore.wait() expectedCode); }); test('POST 9', () { - const expectedCode = r""" -import Foundation + const expectedCode = r"""import Foundation import MultipartFormData @@ -1089,9 +1258,17 @@ let multipartFormData = try! MultipartFormData(boundary: boundary) { } -var request = URLRequest(url: URL(string: "https://api.apidash.dev/io/img?size=2&len=3")!) -request.httpMethod = "POST" +var urlComponents = URLComponents(string: "https://api.apidash.dev/io/img")! +var queryItems = [URLQueryItem]() + +queryItems.append(URLQueryItem(name: "size", value: "2")) +queryItems.append(URLQueryItem(name: "len", value: "3")) + +urlComponents.queryItems = queryItems +let requestUrl = urlComponents.url! +var request = URLRequest(url: requestUrl) +request.httpMethod = "POST" request.addValue("Test Agent", forHTTPHeaderField: "User-Agent") request.addValue("true", forHTTPHeaderField: "Keep-Alive") @@ -1099,10 +1276,11 @@ request.addValue("true", forHTTPHeaderField: "Keep-Alive") request.addValue("multipart/form-data; boundary=\(boundary.stringValue)", forHTTPHeaderField: "Content-Type") request.httpBody = try! multipartFormData.encode() + let semaphore = DispatchSemaphore(value: 0) let task = URLSession.shared.dataTask(with: request) { data, response, error in - defer { semaphore.signal() } + defer { semaphore.signal() } if let error = error { print("Error: \(error.localizedDescription)") @@ -1117,6 +1295,7 @@ let task = URLSession.shared.dataTask(with: request) { data, response, error in } } + task.resume() semaphore.wait() @@ -1131,25 +1310,33 @@ semaphore.wait() expectedCode); }); test('POST 10', () { - const expectedCode = r''' -import Foundation + const expectedCode = r'''import Foundation let postData = """ { "text": "I LOVE Flutter" } """.data(using: .utf8) -var request = URLRequest(url: URL(string: "https://api.apidash.dev/case/lower?size=2&len=3")!) -request.httpMethod = "POST" +var urlComponents = URLComponents(string: "https://api.apidash.dev/case/lower")! +var queryItems = [URLQueryItem]() -request.addValue("application/json", forHTTPHeaderField: "Content-Type") + +queryItems.append(URLQueryItem(name: "size", value: "2")) +queryItems.append(URLQueryItem(name: "len", value: "3")) + +urlComponents.queryItems = queryItems +let requestUrl = urlComponents.url! +var request = URLRequest(url: requestUrl) +request.httpMethod = "POST" +request.addValue("application/json; charset=utf-8", forHTTPHeaderField: "Content-Type") request.httpBody = postData + let semaphore = DispatchSemaphore(value: 0) let task = URLSession.shared.dataTask(with: request) { data, response, error in - defer { semaphore.signal() } + defer { semaphore.signal() } if let error = error { print("Error: \(error.localizedDescription)") @@ -1164,6 +1351,7 @@ let task = URLSession.shared.dataTask(with: request) { data, response, error in } } + task.resume() semaphore.wait() @@ -1184,8 +1372,7 @@ semaphore.wait() 'HTTPVerb.put', () { test('PUT 1', () { - const expectedCode = r''' -import Foundation + const expectedCode = r'''import Foundation let postData = """ { @@ -1193,17 +1380,26 @@ let postData = """ "job": "zion resident" } """.data(using: .utf8) -var request = URLRequest(url: URL(string: "https://reqres.in/api/users/2")!) +var urlComponents = URLComponents(string: "https://reqres.in/api/users/2")! +var queryItems = [URLQueryItem]() + + + +urlComponents.queryItems = queryItems +let requestUrl = urlComponents.url! +var request = URLRequest(url: requestUrl) request.httpMethod = "PUT" +request.addValue("reqres-free-v1", forHTTPHeaderField: "x-api-key") request.addValue("application/json", forHTTPHeaderField: "Content-Type") request.httpBody = postData + let semaphore = DispatchSemaphore(value: 0) let task = URLSession.shared.dataTask(with: request) { data, response, error in - defer { semaphore.signal() } + defer { semaphore.signal() } if let error = error { print("Error: \(error.localizedDescription)") @@ -1218,6 +1414,7 @@ let task = URLSession.shared.dataTask(with: request) { data, response, error in } } + task.resume() semaphore.wait() @@ -1238,8 +1435,7 @@ semaphore.wait() 'HTTPVerb.patch', () { test('PATCH 1', () { - const expectedCode = r''' -import Foundation + const expectedCode = r'''import Foundation let postData = """ { @@ -1247,17 +1443,26 @@ let postData = """ "job": "accountant" } """.data(using: .utf8) -var request = URLRequest(url: URL(string: "https://reqres.in/api/users/2")!) +var urlComponents = URLComponents(string: "https://reqres.in/api/users/2")! +var queryItems = [URLQueryItem]() + + + +urlComponents.queryItems = queryItems +let requestUrl = urlComponents.url! +var request = URLRequest(url: requestUrl) request.httpMethod = "PATCH" +request.addValue("reqres-free-v1", forHTTPHeaderField: "x-api-key") request.addValue("application/json", forHTTPHeaderField: "Content-Type") request.httpBody = postData + let semaphore = DispatchSemaphore(value: 0) let task = URLSession.shared.dataTask(with: request) { data, response, error in - defer { semaphore.signal() } + defer { semaphore.signal() } if let error = error { print("Error: \(error.localizedDescription)") @@ -1272,6 +1477,7 @@ let task = URLSession.shared.dataTask(with: request) { data, response, error in } } + task.resume() semaphore.wait() @@ -1292,15 +1498,24 @@ semaphore.wait() 'HTTPVerb.delete', () { test('DELETE 1', () { - const expectedCode = r''' -import Foundation + const expectedCode = r'''import Foundation + +var urlComponents = URLComponents(string: "https://reqres.in/api/users/2")! +var queryItems = [URLQueryItem]() + -var request = URLRequest(url: URL(string: "https://reqres.in/api/users/2")!) + +urlComponents.queryItems = queryItems +let requestUrl = urlComponents.url! +var request = URLRequest(url: requestUrl) request.httpMethod = "DELETE" +request.addValue("reqres-free-v1", forHTTPHeaderField: "x-api-key") + + let semaphore = DispatchSemaphore(value: 0) let task = URLSession.shared.dataTask(with: request) { data, response, error in - defer { semaphore.signal() } + defer { semaphore.signal() } if let error = error { print("Error: \(error.localizedDescription)") @@ -1315,6 +1530,7 @@ let task = URLSession.shared.dataTask(with: request) { data, response, error in } } + task.resume() semaphore.wait() @@ -1330,8 +1546,7 @@ semaphore.wait() }); test('DELETE 2', () { - const expectedCode = r''' -import Foundation + const expectedCode = r'''import Foundation let postData = """ { @@ -1339,17 +1554,26 @@ let postData = """ "job": "accountant" } """.data(using: .utf8) -var request = URLRequest(url: URL(string: "https://reqres.in/api/users/2")!) +var urlComponents = URLComponents(string: "https://reqres.in/api/users/2")! +var queryItems = [URLQueryItem]() + + + +urlComponents.queryItems = queryItems +let requestUrl = urlComponents.url! +var request = URLRequest(url: requestUrl) request.httpMethod = "DELETE" +request.addValue("reqres-free-v1", forHTTPHeaderField: "x-api-key") request.addValue("application/json", forHTTPHeaderField: "Content-Type") request.httpBody = postData + let semaphore = DispatchSemaphore(value: 0) let task = URLSession.shared.dataTask(with: request) { data, response, error in - defer { semaphore.signal() } + defer { semaphore.signal() } if let error = error { print("Error: \(error.localizedDescription)") @@ -1364,6 +1588,7 @@ let task = URLSession.shared.dataTask(with: request) { data, response, error in } } + task.resume() semaphore.wait() From 1de0101a64614d6e0801df73580bdb5a215f384a Mon Sep 17 00:00:00 2001 From: Nikhil Date: Sun, 13 Jul 2025 12:30:27 +0530 Subject: [PATCH 42/42] some missed tests updated --- test/codegen/c_curl_codegen_test.dart | 10 ++++++- test/codegen/js_axios_codegen_test.dart | 27 +++++++++++++++++++ .../python_http_client_codegen_test.dart | 7 ++++- 3 files changed, 42 insertions(+), 2 deletions(-) diff --git a/test/codegen/c_curl_codegen_test.dart b/test/codegen/c_curl_codegen_test.dart index 6ec7a7951..2223571cc 100644 --- a/test/codegen/c_curl_codegen_test.dart +++ b/test/codegen/c_curl_codegen_test.dart @@ -1461,6 +1461,7 @@ int main() { curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PUT"); curl_easy_setopt(curl, CURLOPT_URL, "https://reqres.in/api/users/2"); struct curl_slist *headers = NULL; + headers = curl_slist_append(headers,"x-api-key: reqres-free-v1"); headers = curl_slist_append(headers,"Content-Type: application/json"); curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); @@ -1527,6 +1528,7 @@ int main() { curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH"); curl_easy_setopt(curl, CURLOPT_URL, "https://reqres.in/api/users/2"); struct curl_slist *headers = NULL; + headers = curl_slist_append(headers,"x-api-key: reqres-free-v1"); headers = curl_slist_append(headers,"Content-Type: application/json"); curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); @@ -1591,7 +1593,11 @@ int main() { curl = curl_easy_init(); if(curl) { curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE"); - curl_easy_setopt(curl, CURLOPT_URL, "https://reqres.in/api/users/2"); + curl_easy_setopt(curl, CURLOPT_URL, "https://reqres.in/api/users/2"); + struct curl_slist *headers = NULL; + headers = curl_slist_append(headers,"x-api-key: reqres-free-v1"); + + curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); struct ResponseData response_data = {0}; curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback); curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response_data); @@ -1601,6 +1607,7 @@ int main() { printf("Response code: %ld\n", response_code); printf("Response body: %s\n", response_data.data); free(response_data.data); + curl_slist_free_all(headers); } curl_easy_cleanup(curl); return 0; @@ -1648,6 +1655,7 @@ int main() { curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE"); curl_easy_setopt(curl, CURLOPT_URL, "https://reqres.in/api/users/2"); struct curl_slist *headers = NULL; + headers = curl_slist_append(headers,"x-api-key: reqres-free-v1"); headers = curl_slist_append(headers,"Content-Type: application/json"); curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); diff --git a/test/codegen/js_axios_codegen_test.dart b/test/codegen/js_axios_codegen_test.dart index eeb98b75c..8c6b13a5c 100644 --- a/test/codegen/js_axios_codegen_test.dart +++ b/test/codegen/js_axios_codegen_test.dart @@ -40,6 +40,9 @@ axios(config) "code": [ "US" ] + }, + paramsSerializer: (params) => { + return qs.stringify(params, { arrayFormat: 'repeat' }); } }; @@ -70,6 +73,9 @@ axios(config) "IND", "US" ] + }, + paramsSerializer: (params) => { + return qs.stringify(params, { arrayFormat: 'repeat' }); } }; @@ -111,6 +117,9 @@ axios(config) "trailing_zeros": [ "true" ] + }, + paramsSerializer: (params) => { + return qs.stringify(params, { arrayFormat: 'repeat' }); } }; @@ -168,6 +177,9 @@ axios(config) "true" ] }, + paramsSerializer: (params) => { + return qs.stringify(params, { arrayFormat: 'repeat' }); + }, headers: { "User-Agent": "Test Agent" } @@ -224,6 +236,9 @@ axios(config) "true" ] }, + paramsSerializer: (params) => { + return qs.stringify(params, { arrayFormat: 'repeat' }); + }, headers: { "User-Agent": "Test Agent" } @@ -258,6 +273,9 @@ axios(config) "add_space": [ "true" ] + }, + paramsSerializer: (params) => { + return qs.stringify(params, { arrayFormat: 'repeat' }); } }; @@ -318,6 +336,9 @@ axios(config) "3" ] }, + paramsSerializer: (params) => { + return qs.stringify(params, { arrayFormat: 'repeat' }); + }, headers: { "User-Agent": "Test Agent" } @@ -643,6 +664,9 @@ axios(config) "3" ] }, + paramsSerializer: (params) => { + return qs.stringify(params, { arrayFormat: 'repeat' }); + }, headers: { "Content-Type": "multipart/form-data" }, @@ -685,6 +709,9 @@ const config = { "3" ] }, + paramsSerializer: (params) => { + return qs.stringify(params, { arrayFormat: 'repeat' }); + }, headers: { "Content-Type": "multipart/form-data", "User-Agent": "Test Agent", diff --git a/test/codegen/python_http_client_codegen_test.dart b/test/codegen/python_http_client_codegen_test.dart index 6221a8a69..b9c89ad6c 100644 --- a/test/codegen/python_http_client_codegen_test.dart +++ b/test/codegen/python_http_client_codegen_test.dart @@ -258,8 +258,13 @@ params = { 'num': ['8700000'], 'digits': ['3'] } queryParamsStr = '?' + urlencode(params,doseq=True) +headers = { + "User-Agent": "Test Agent" +} + conn = http.client.HTTPSConnection("api.apidash.dev") -conn.request("GET", "/humanize/social" + queryParamsStr) +conn.request("GET", "/humanize/social" + queryParamsStr, + headers= headers) res = conn.getresponse() data = res.read()