Merge branch 'foss42:main' into add-feature-mobile-layout

This commit is contained in:
Ragul Raj
2024-03-14 14:08:14 +05:30
committed by GitHub
45 changed files with 7725 additions and 992 deletions

View File

@ -2,7 +2,17 @@
[![Discord Server Invite](https://img.shields.io/badge/DISCORD-JOIN%20SERVER-5663F7?style=for-the-badge&logo=discord&logoColor=white)](https://bit.ly/heyfoss)
We are participating in GSoC 2024 🎉 [More Details ...](https://summerofcode.withgoogle.com/programs/2024/organizations/api-dash)
🚨 We are participating in GSoC 2024 🎉
<img src="https://github.com/foss42/apidash/assets/615622/493ce57f-06c3-4789-b7ae-9fa63bca8183" alt="GSoC" width="500">
| | Link |
|--|--|
| Learn about GSoC | [Link](https://summerofcode.withgoogle.com) |
| Organization page on GSoC | [Link](https://summerofcode.withgoogle.com/programs/2024/organizations/api-dash) |
| Project Ideas List | [Link](https://github.com/foss42/apidash/discussions/112) |
| Application Guide | [Link](https://github.com/foss42/apidash/discussions/111) |
| Discord Channel | [Link](https://discord.com/invite/2s49SCNfyJ) |
### Please support this initiative by giving this project a Star ⭐️

View File

@ -1,47 +1,72 @@
import 'package:apidash/models/models.dart' show RequestModel;
import 'package:apidash/consts.dart';
import 'package:apidash/utils/utils.dart' show getNewUuid;
import 'dart/http.dart';
import 'dart/dio.dart';
import 'go/http.dart';
import 'kotlin/okhttp.dart';
import 'python/http_client.dart';
import 'python/requests.dart';
import 'rust/actix.dart';
import 'rust/reqwest.dart';
import 'rust/ureq.dart';
import 'js/axios.dart';
import 'js/fetch.dart';
import 'others/har.dart';
import 'others/curl.dart';
import 'julia/http.dart';
class Codegen {
String? getCode(
CodegenLanguage codegenLanguage,
RequestModel requestModel,
String defaultUriScheme,
) {
String defaultUriScheme, {
String? boundary,
}) {
String url = requestModel.url;
if (url.isEmpty) {
url = kDefaultUri;
}
if (!url.contains("://") && url.isNotEmpty) {
url = "$defaultUriScheme://$url";
}
var rM = requestModel.copyWith(url: url);
switch (codegenLanguage) {
case CodegenLanguage.curl:
return cURLCodeGen().getCode(requestModel, defaultUriScheme);
return cURLCodeGen().getCode(rM);
case CodegenLanguage.har:
return HARCodeGen().getCode(requestModel, defaultUriScheme);
return HARCodeGen().getCode(rM, defaultUriScheme, boundary: boundary);
case CodegenLanguage.dartHttp:
return DartHttpCodeGen().getCode(requestModel, defaultUriScheme);
return DartHttpCodeGen().getCode(rM);
case CodegenLanguage.dartDio:
return DartDioCodeGen().getCode(requestModel, defaultUriScheme);
return DartDioCodeGen().getCode(rM);
case CodegenLanguage.jsAxios:
return AxiosCodeGen().getCode(requestModel, defaultUriScheme);
return AxiosCodeGen().getCode(rM);
case CodegenLanguage.jsFetch:
return FetchCodeGen().getCode(requestModel, defaultUriScheme);
return FetchCodeGen().getCode(rM);
case CodegenLanguage.nodejsAxios:
return AxiosCodeGen(isNodeJs: true)
.getCode(requestModel, defaultUriScheme);
return AxiosCodeGen(isNodeJs: true).getCode(rM);
case CodegenLanguage.nodejsFetch:
return FetchCodeGen(isNodeJs: true)
.getCode(requestModel, defaultUriScheme);
return FetchCodeGen(isNodeJs: true).getCode(rM);
case CodegenLanguage.kotlinOkHttp:
return KotlinOkHttpCodeGen().getCode(requestModel, defaultUriScheme);
return KotlinOkHttpCodeGen().getCode(rM);
case CodegenLanguage.pythonHttpClient:
return PythonHttpClientCodeGen()
.getCode(requestModel, defaultUriScheme);
.getCode(rM, boundary: boundary ?? getNewUuid());
case CodegenLanguage.pythonRequests:
return PythonRequestsCodeGen().getCode(requestModel, defaultUriScheme);
return PythonRequestsCodeGen().getCode(rM, boundary: boundary);
case CodegenLanguage.rustActix:
return RustActixCodeGen().getCode(rM, boundary: boundary);
case CodegenLanguage.rustReqwest:
return RustReqwestCodeGen().getCode(rM);
case CodegenLanguage.rustUreq:
return RustUreqCodeGen().getCode(rM, boundary: boundary);
case CodegenLanguage.goHttp:
return GoHttpCodeGen().getCode(rM);
case CodegenLanguage.juliaHttp:
return JuliaHttpClientCodeGen().getCode(rM);
}
}
}

View File

@ -0,0 +1,15 @@
String jsonToPyDict(String jsonString) {
Map<String, String> replaceWithMap = {
"null": "None",
"true": "True",
"false": "False"
};
String pyDict = jsonString;
for (var k in replaceWithMap.keys) {
RegExp regExp = RegExp(k + r'(?=([^"]*"[^"]*")*[^"]*$)');
pyDict = pyDict.replaceAllMapped(regExp, (match) {
return replaceWithMap[match.group(0)] ?? match.group(0)!;
});
}
return pyDict;
}

View File

@ -8,15 +8,10 @@ import 'shared.dart';
class DartDioCodeGen {
String? getCode(
RequestModel requestModel,
String defaultUriScheme,
) {
try {
String url = requestModel.url;
if (!url.contains("://") && url.isNotEmpty) {
url = "$defaultUriScheme://$url";
}
final next = generatedDartCode(
url: url,
url: requestModel.url,
method: requestModel.method,
queryParams: requestModel.enabledParamsMap,
headers: requestModel.enabledHeadersMap,
@ -60,12 +55,17 @@ class DartDioCodeGen {
final List<Map<String,String>> formDataList = ${json.encode(formData)};
for (var formField in formDataList) {
if (formField['type'] == 'file') {
formData.files.add(MapEntry(
formField['name'],
await MultipartFile.fromFile(formField['value'], filename: formField['value']),
if (formField['value'] != null) {
data.files.add(MapEntry(
formField['name']!,
await dio.MultipartFile.fromFile(formField['value']!,
filename: formField['value']!),
));
}
} else {
formData.fields.add(MapEntry(formField['name'], formField['value']));
if (formField['value'] != null) {
data.fields.add(MapEntry(formField['name']!, formField['value']!));
}
}
}
''');
@ -84,16 +84,16 @@ class DartDioCodeGen {
dataExp = declareFinal('data').assign(strContent);
// when add new type of [ContentType], need update [dataExp].
case ContentType.formdata:
dataExp = declareFinal('data').assign(refer('FormData()'));
dataExp = declareFinal('data').assign(refer('dio.FormData()'));
}
}
final responseExp = declareFinal('response').assign(InvokeExpression.newOf(
refer('dio.Dio'),
refer('dio.Dio()'),
[literalString(url)],
{
if (queryParamExp != null) 'queryParameters': refer('queryParams'),
if (headerExp != null)
'options': refer('Options').newInstance(
'options': refer('dio.Options').newInstance(
[],
{'headers': refer('headers')},
),
@ -117,7 +117,7 @@ class DartDioCodeGen {
refer('print').call([refer('response').property('data')]),
],
onError: {
'DioException': [
'dio.DioException': [
refer('print').call([
refer('e').property('response').nullSafeProperty('statusCode'),
]),

View File

@ -9,15 +9,10 @@ import 'shared.dart';
class DartHttpCodeGen {
String? getCode(
RequestModel requestModel,
String defaultUriScheme,
) {
try {
String url = requestModel.url;
if (!url.contains("://") && url.isNotEmpty) {
url = "$defaultUriScheme://$url";
}
final next = generatedDartCode(
url: url,
url: requestModel.url,
method: requestModel.method,
queryParams: requestModel.enabledParamsMap,
headers: {...requestModel.enabledHeadersMap},

172
lib/codegen/go/http.dart Normal file
View File

@ -0,0 +1,172 @@
import 'package:apidash/consts.dart';
import 'package:jinja/jinja.dart' as jj;
import 'package:apidash/utils/utils.dart' show getValidRequestUri;
import 'package:apidash/models/models.dart' show RequestModel;
class GoHttpCodeGen {
final String kTemplateStart = """package main
import (
"fmt"
"io"
"net/http"
"net/url"{% if hasBody %}
"bytes"{% if hasFormData %}
"mime/multipart"{% if hasFileInFormData %}
"os"{% endif %}{% endif %}{% endif %}
)
func main() {
client := &http.Client{}
""";
String kTemplateUrl = """
url, _ := url.Parse("{{url}}")
""";
String kTemplateBody = """
{% if body %}payload := bytes.NewBuffer([]byte(`{{body}}`)){% endif %}
""";
String kTemplateFormData = """
payload := &bytes.Buffer{}
writer := multipart.NewWriter(payload){% if hasFileInFormData %}
var (
file *os.File
part io.Writer
){% endif %}
{% for field in fields %}
{% if field.type == "file" %}file, _ = os.Open("{{field.value}}")
defer file.Close()
part, _ = writer.CreateFormFile("{{field.name}}", "{{field.value}}")
io.Copy(part, file)
{% else %}writer.WriteField("{{field.name}}", "{{field.value}}"){% endif %}{% endfor %}
writer.Close()
""";
String kTemplateHeader = """
{% if headers %}{% for header, value in headers %}
req.Header.Set("{{header}}", "{{value}}"){% endfor %}
{% endif %}
""";
String kStringFormDataHeader = """
req.Header.Set("Content-Type", writer.FormDataContentType())
""";
String kTemplateQueryParam = """
query := url.Query()
{% for key, value in params %}
query.Set("{{key}}", "{{value}}"){% endfor %}
url.RawQuery = query.Encode()
""";
String kTemplateRequest = """
req, _ := http.NewRequest("{{method}}", url.String(), {% if hasBody %}payload{% else %}nil{% endif %})
""";
final String kTemplateEnd = """
response, err := client.Do(req)
if err != nil {
fmt.Println(err)
return
}
defer response.Body.Close()
fmt.Println("Status Code:", response.StatusCode)
body, _ := io.ReadAll(response.Body)
fmt.Println("Response body:", string(body))
}""";
String? getCode(
RequestModel requestModel,
) {
try {
String result = "";
var hasBody = false;
var requestBody = requestModel.requestBody;
String url = requestModel.url;
var templateStart = jj.Template(kTemplateStart);
result += templateStart.render({
"hasBody": requestModel.hasData,
"hasFormData": requestModel.hasFormData,
"hasFileInFormData": requestModel.hasFileInFormData,
});
var templateUrl = jj.Template(kTemplateUrl);
result += templateUrl.render({"url": url});
var rec = getValidRequestUri(
url,
requestModel.enabledRequestParams,
);
Uri? uri = rec.$1;
if (uri != null) {
if (requestModel.hasTextData || requestModel.hasJsonData) {
hasBody = true;
var templateRawBody = jj.Template(kTemplateBody);
result += templateRawBody.render({"body": requestBody});
} else if (requestModel.hasFormData) {
hasBody = true;
var templateFormData = jj.Template(kTemplateFormData);
result += templateFormData.render({
"hasFileInFormData": requestModel.hasFileInFormData,
"fields": requestModel.formDataMapList,
});
}
if (uri.hasQuery) {
var params = uri.queryParameters;
if (params.isNotEmpty) {
var templateQueryParam = jj.Template(kTemplateQueryParam);
result += templateQueryParam.render({"params": params});
}
}
var method = requestModel.method.name.toUpperCase();
var templateRequest = jj.Template(kTemplateRequest);
result += templateRequest.render({
"method": method,
"hasBody": hasBody,
});
var headersList = requestModel.enabledRequestHeaders;
if (headersList != null || requestModel.hasData) {
var headers = requestModel.enabledHeadersMap;
if (requestModel.hasJsonData || requestModel.hasTextData) {
headers.putIfAbsent(kHeaderContentType,
() => requestModel.requestBodyContentType.header);
}
if (headers.isNotEmpty) {
var templateHeader = jj.Template(kTemplateHeader);
result += templateHeader.render({
"headers": headers,
});
}
}
if (requestModel.hasFormData) {
result += kStringFormDataHeader;
}
result += kTemplateEnd;
}
return result;
} catch (e) {
return null;
}
}
}

View File

@ -12,7 +12,7 @@ class AxiosCodeGen {
String kStringImportNode = """{% if isNodeJs %}import axios from 'axios';
{% endif %}{% if isFormDataRequest and isNodeJs %}const fs = require('fs');{% endif %}
{% endif %}{% if hasFormData and isNodeJs %}const fs = require('fs');{% endif %}
""";
String kTemplateStart = """let config = {
@ -73,18 +73,16 @@ async function buildFormData(fields) {
''';
String? getCode(
RequestModel requestModel,
String defaultUriScheme,
) {
try {
jj.Template kNodejsImportTemplate = jj.Template(kStringImportNode);
String importsData = kNodejsImportTemplate.render({
"isFormDataRequest": requestModel.isFormDataRequest,
"hasFormData": requestModel.hasFormData,
"isNodeJs": isNodeJs,
});
String result = importsData;
if (requestModel.isFormDataRequest &&
requestModel.formDataMapList.isNotEmpty) {
if (requestModel.hasFormData && requestModel.formDataMapList.isNotEmpty) {
var templateMultiPartBody = jj.Template(kMultiPartBodyTemplate);
var renderedMultiPartBody = templateMultiPartBody.render({
"isNodeJs": isNodeJs,
@ -92,17 +90,14 @@ async function buildFormData(fields) {
result += renderedMultiPartBody;
}
String url = requestModel.url;
if (!url.contains("://") && url.isNotEmpty) {
url = "$defaultUriScheme://$url";
}
var rM = requestModel.copyWith(url: url);
var harJson = requestModelToHARJsonRequest(rM, useEnabled: true);
var harJson = requestModelToHARJsonRequest(
requestModel,
useEnabled: true,
);
var templateStart = jj.Template(kTemplateStart);
result += templateStart.render({
"url": stripUrlParams(url),
"url": stripUrlParams(requestModel.url),
"method": harJson["method"].toLowerCase(),
});
@ -118,22 +113,21 @@ async function buildFormData(fields) {
}
var headers = harJson["headers"];
if (headers.isNotEmpty || requestModel.isFormDataRequest) {
if (headers.isNotEmpty || requestModel.hasFormData) {
var templateHeader = jj.Template(kTemplateHeader);
var m = {};
for (var i in headers) {
m[i["name"]] = i["value"];
}
if (requestModel.isFormDataRequest) {
m['Content-Type'] = 'multipart/form-data';
if (requestModel.hasFormData) {
m[kHeaderContentType] = 'multipart/form-data';
}
result += templateHeader
.render({"headers": padMultilineString(kEncoder.convert(m), 2)});
}
var templateBody = jj.Template(kTemplateBody);
if (requestModel.isFormDataRequest &&
requestModel.formDataMapList.isNotEmpty) {
if (requestModel.hasFormData && requestModel.formDataMapList.isNotEmpty) {
var getFieldDataTemplate = jj.Template(kGetFormDataTemplate);
result += templateBody.render({

View File

@ -12,7 +12,7 @@ class FetchCodeGen {
String kStringImportNode = """
import fetch from 'node-fetch';
{% if isFormDataRequest %}const fs = require('fs');{% endif %}
{% if hasFormData %}const fs = require('fs');{% endif %}
""";
@ -73,29 +73,26 @@ fetch(url, options)
String? getCode(
RequestModel requestModel,
String defaultUriScheme,
) {
try {
jj.Template kNodejsImportTemplate = jj.Template(kStringImportNode);
String importsData = kNodejsImportTemplate.render({
"isFormDataRequest": requestModel.isFormDataRequest,
"hasFormData": requestModel.hasFormData,
});
String result = isNodeJs ? importsData : "";
if (requestModel.isFormDataRequest) {
if (requestModel.hasFormData) {
var templateMultiPartBody = jj.Template(kMultiPartBodyTemplate);
result += templateMultiPartBody.render({
"isNodeJs": isNodeJs,
"fields_list": json.encode(requestModel.formDataMapList),
});
}
String url = requestModel.url;
if (!url.contains("://") && url.isNotEmpty) {
url = "$defaultUriScheme://$url";
}
var rM = requestModel.copyWith(url: url);
var harJson = requestModelToHARJsonRequest(rM, useEnabled: true);
var harJson = requestModelToHARJsonRequest(
requestModel,
useEnabled: true,
);
var templateStart = jj.Template(kTemplateStart);
result += templateStart.render({
@ -108,8 +105,8 @@ fetch(url, options)
if (headers.isNotEmpty) {
var templateHeader = jj.Template(kTemplateHeader);
var m = {};
if (requestModel.isFormDataRequest) {
m["Content-Type"] = "multipart/form-data";
if (requestModel.hasFormData) {
m[kHeaderContentType] = "multipart/form-data";
}
for (var i in headers) {
m[i["name"]] = i["value"];
@ -124,7 +121,7 @@ fetch(url, options)
result += templateBody.render({
"body": kEncoder.convert(harJson["postData"]["text"]),
});
} else if (requestModel.isFormDataRequest) {
} else if (requestModel.hasFormData) {
var templateBody = jj.Template(kTemplateBody);
result += templateBody.render({
"body": 'payload',

198
lib/codegen/julia/http.dart Normal file
View File

@ -0,0 +1,198 @@
import 'dart:io';
import 'dart:convert';
import 'package:jinja/jinja.dart' as jj;
import 'package:apidash/consts.dart';
import 'package:apidash/utils/utils.dart'
show getNewUuid, getValidRequestUri, padMultilineString, stripUriParams;
import 'package:apidash/models/models.dart' show RequestModel;
class JuliaHttpClientCodeGen {
final String kTemplateStart = """using HTTP,JSON
url = "{{url}}"
""";
String kTemplateParams = """
{% set new_params = params | replace(":", "=>") | replace("{", "(") | replace("}", ")") %}
params = Dict{{new_params}}
""";
int kParamsPadding = 9;
String kTemplateBody = '''
{% set new_params = body | replace(":", "=>") | replace("{", "(") | replace("}", ")") %}
payload = Dict{{new_params}}
''';
String kTemplateJson = """
{% set new_params = body | replace(":", "=>") | replace("{", "(") | replace("}", ")") %}
payload = Dict{{new_params}}
""";
String kTemplateHeaders = """
{% set new_params = headers | replace(":", "=>") | replace("{", "(") | replace("}", ")") %}
headers = Dict{{new_params}}
""";
String kTemplateFormHeaderContentType = '''
multipart/form-data; boundary={{boundary}}''';
int kHeadersPadding = 10;
String kTemplateRequest = """
response = HTTP.{{method}}(url
""";
final String kStringFormDataBody = r'''
function build_data_list(fields)
dataList = []
for field in fields
name = field["name"]
value = field["value"]
type_ = get(field, "type", "text")
push!(dataList, b"--{{boundary}}")
if type_ == "text"
push!(dataList, b"Content-Disposition: form-data; name=\"$name\"")
push!(dataList, b"Content-Type: text/plain")
push!(dataList, b"")
push!(dataList, codeunits(value))
elseif type_ == "file"
push!(dataList, b"Content-Disposition: form-data; name=\"$name\"; filename=\"$value\"")
push!(dataList, b"Content-Type: $value")
push!(dataList, b"")
push!(dataList, String(read(value)))
end
end
push!(dataList, "--{{boundary}}--")
push!(dataList, b"")
return dataList
end
dataList = build_data_list({{fields_list}})
payload = join(dataList, b"\r\n")
''';
String kStringRequestParams = """, query=params""";
String kStringRequestBody = """, payload=payload""";
String kStringRequestJson = """, JSON.json(payload)""";
String kStringRequestHeaders = """, headers=headers""";
final String kStringRequestEnd = """
)
println("Status Code:", response.status)
println("Response Body:", String(response.body))
""";
String? getCode(RequestModel requestModel) {
try {
String result = "";
bool hasQuery = false;
bool hasHeaders = false;
bool hasBody = false;
bool hasJsonBody = false;
String uuid = getNewUuid();
var rec = getValidRequestUri(
requestModel.url,
requestModel.enabledRequestParams,
);
Uri? uri = rec.$1;
if (uri != null) {
var templateStartUrl = jj.Template(kTemplateStart);
result += templateStartUrl.render({
"url": stripUriParams(uri),
});
if (uri.hasQuery) {
var params = uri.queryParameters;
if (params.isNotEmpty) {
hasQuery = true;
var templateParams = jj.Template(kTemplateParams);
var paramsString = kEncoder.convert(params);
paramsString = padMultilineString(paramsString, kParamsPadding);
result += templateParams.render({"params": paramsString});
}
}
if (requestModel.hasJsonData) {
hasJsonBody = true;
var templateBody = jj.Template(kTemplateJson);
result += templateBody.render({"body": requestModel.requestBody});
} else if (requestModel.hasTextData) {
hasBody = true;
var templateBody = jj.Template(kTemplateBody);
result += templateBody.render({"body": requestModel.requestBody});
}
var headersList = requestModel.enabledRequestHeaders;
if (headersList != null || hasBody) {
var headers = requestModel.enabledHeadersMap;
if (requestModel.hasFormData) {
var formHeaderTemplate =
jj.Template(kTemplateFormHeaderContentType);
headers[HttpHeaders.contentTypeHeader] = formHeaderTemplate.render({
"boundary": uuid,
});
}
if (headers.isNotEmpty || hasBody) {
hasHeaders = true;
if (hasBody) {
headers[HttpHeaders.contentTypeHeader] =
requestModel.requestBodyContentType.header;
}
var headersString = kEncoder.convert(headers);
headersString = padMultilineString(headersString, kHeadersPadding);
var templateHeaders = jj.Template(kTemplateHeaders);
result += templateHeaders.render({"headers": headersString});
}
}
if (requestModel.hasFormData) {
var formDataBodyData = jj.Template(kStringFormDataBody);
result += formDataBodyData.render(
{
"fields_list": json.encode(requestModel.formDataMapList),
"boundary": uuid,
},
);
}
var templateRequest = jj.Template(kTemplateRequest);
result += templateRequest.render({
"method": requestModel.method.name.toLowerCase(),
});
if (hasQuery) {
result += kStringRequestParams;
}
if (hasBody || requestModel.hasFormData) {
result += kStringRequestBody;
}
if (hasJsonBody || requestModel.hasFormData) {
result += kStringRequestJson;
}
if (hasHeaders || requestModel.hasFormData) {
result += kStringRequestHeaders;
}
result += kStringRequestEnd;
}
return result;
} catch (e) {
return null;
}
}
}

View File

@ -75,7 +75,6 @@ import okhttp3.MultipartBody""";
String? getCode(
RequestModel requestModel,
String defaultUriScheme,
) {
try {
String result = "";
@ -83,13 +82,8 @@ import okhttp3.MultipartBody""";
bool hasBody = false;
bool hasFormData = false;
String url = requestModel.url;
if (!url.contains("://") && url.isNotEmpty) {
url = "$defaultUriScheme://$url";
}
var rec = getValidRequestUri(
url,
requestModel.url,
requestModel.enabledRequestParams,
);
Uri? uri = rec.$1;
@ -113,7 +107,7 @@ import okhttp3.MultipartBody""";
var method = requestModel.method;
var requestBody = requestModel.requestBody;
if (requestModel.isFormDataRequest) {
if (requestModel.hasFormData) {
hasFormData = true;
var formDataTemplate = jj.Template(kFormDataBody);
@ -152,7 +146,7 @@ import okhttp3.MultipartBody""";
var templateRequestEnd = jj.Template(kTemplateRequestEnd);
result += templateRequestEnd.render({
"method": method.name.toLowerCase(),
"hasBody": (hasBody || requestModel.isFormDataRequest) ? "body" : "",
"hasBody": (hasBody || requestModel.hasFormData) ? "body" : "",
});
}
return result;

View File

@ -1,6 +1,7 @@
import 'package:jinja/jinja.dart' as jj;
import 'package:apidash/utils/utils.dart' show requestModelToHARJsonRequest;
import 'package:apidash/models/models.dart' show RequestModel;
import 'package:apidash/consts.dart';
// ignore: camel_case_types
class cURLCodeGen {
@ -11,7 +12,7 @@ class cURLCodeGen {
--header '{{name}}: {{value}}'
""";
String kTemplateFormData = """ \\
--form '{{name}}: {{value}}'
--form '{{name}}={{value}}'
""";
String kTemplateBody = """ \\
@ -20,25 +21,21 @@ class cURLCodeGen {
String? getCode(
RequestModel requestModel,
String defaultUriScheme,
) {
try {
String result = "";
String url = requestModel.url;
if (!url.contains("://") && url.isNotEmpty) {
url = "$defaultUriScheme://$url";
}
var rM = requestModel.copyWith(url: url);
var harJson = requestModelToHARJsonRequest(rM, useEnabled: true);
var harJson = requestModelToHARJsonRequest(
requestModel,
useEnabled: true,
);
var templateStart = jj.Template(kTemplateStart);
result += templateStart.render({
"method": switch (harJson["method"]) {
"GET" => "",
"HEAD" => " --head",
_ => " --request ${harJson["method"]} \\\n"
_ => " --request ${harJson["method"]} \\\n "
},
"url": harJson["url"],
});
@ -46,33 +43,31 @@ class cURLCodeGen {
var headers = harJson["headers"];
if (headers.isNotEmpty) {
for (var item in headers) {
if (requestModel.hasFormData && item["name"] == kHeaderContentType) {
continue;
}
var templateHeader = jj.Template(kTemplateHeader);
result += templateHeader
.render({"name": item["name"], "value": item["value"]});
}
}
if (harJson['formData'] != null) {
var formDataList = harJson['formData'] as List<Map<String, dynamic>>;
for (var formData in formDataList) {
if (requestModel.hasJsonData || requestModel.hasTextData) {
var templateBody = jj.Template(kTemplateBody);
result += templateBody.render({"body": requestModel.requestBody});
} else if (requestModel.hasFormData) {
for (var formData in requestModel.formDataList) {
var templateFormData = jj.Template(kTemplateFormData);
if (formData['type'] != null &&
formData['name'] != null &&
formData['value'] != null &&
formData['name']!.isNotEmpty &&
formData['value']!.isNotEmpty) {
if (formData.name.isNotEmpty && formData.value.isNotEmpty) {
result += templateFormData.render({
"name": formData["name"],
"name": formData.name,
"value":
"${formData['type'] == 'file' ? '@' : ''}${formData["value"]}",
"${formData.type == FormDataType.file ? '@' : ''}${formData.value}",
});
}
}
}
if (harJson["postData"]?["text"] != null) {
var templateBody = jj.Template(kTemplateBody);
result += templateBody.render({"body": harJson["postData"]["text"]});
}
return result;
} catch (e) {
return null;

View File

@ -5,13 +5,15 @@ import 'package:apidash/models/models.dart' show RequestModel;
class HARCodeGen {
String? getCode(
RequestModel requestModel,
String defaultUriScheme,
) {
String defaultUriScheme, {
String? boundary,
}) {
try {
var harString = kEncoder.convert(requestModelToHARJsonRequest(
requestModel,
defaultUriScheme: defaultUriScheme,
useEnabled: true,
boundary: boundary,
));
return harString;
} catch (e) {

View File

@ -1,14 +1,13 @@
import 'dart:io';
import 'dart:convert';
import 'package:jinja/jinja.dart' as jj;
import 'package:apidash/utils/utils.dart'
show getNewUuid, getValidRequestUri, padMultilineString;
import 'package:apidash/utils/utils.dart' show getValidRequestUri;
import 'package:apidash/models/models.dart' show RequestModel;
import 'package:apidash/consts.dart';
class PythonHttpClientCodeGen {
final String kTemplateStart = """import http.client
{% if isFormDataRequest %}import mimetypes
{% if hasFormData %}import mimetypes
from codecs import encode
{% endif %}
""";
@ -20,7 +19,6 @@ queryParams = {{params}}
queryParamsStr = '?' + urlencode(queryParams)
""";
int kParamsPadding = 14;
String kTemplateBody = """
@ -36,8 +34,6 @@ headers = {{headers}}
String kTemplateFormHeaderContentType = '''
multipart/form-data; boundary={{boundary}}''';
int kHeadersPadding = 10;
String kTemplateConnection = """
conn = http.client.HTTP{{isHttps}}Connection("{{authority}}")""";
@ -87,30 +83,23 @@ dataList = build_data_list({{fields_list}})
body = b'\r\n'.join(dataList)
''';
String? getCode(
RequestModel requestModel,
String defaultUriScheme,
) {
String uuid = getNewUuid();
RequestModel requestModel, {
String? boundary,
}) {
try {
String result = "";
bool hasHeaders = false;
bool hasQuery = false;
bool hasBody = false;
String url = requestModel.url;
if (!url.contains("://") && url.isNotEmpty) {
url = "$defaultUriScheme://$url";
}
var templateStartUrl = jj.Template(kTemplateStart);
result += templateStartUrl.render(
{
"isFormDataRequest": requestModel.isFormDataRequest,
"hasFormData": requestModel.hasFormData,
},
);
var rec = getValidRequestUri(
url,
requestModel.url,
requestModel.enabledRequestParams,
);
@ -123,53 +112,48 @@ body = b'\r\n'.join(dataList)
hasQuery = true;
var templateParams = jj.Template(kTemplateParams);
var paramsString = kEncoder.convert(params);
paramsString = padMultilineString(paramsString, kParamsPadding);
result += templateParams.render({"params": paramsString});
}
}
var method = requestModel.method;
var requestBody = requestModel.requestBody;
if (kMethodsWithBody.contains(method) &&
requestBody != null &&
!requestModel.isFormDataRequest) {
var contentLength = utf8.encode(requestBody).length;
if (contentLength > 0) {
hasBody = true;
if (requestModel.hasData) {
hasBody = true;
if (requestModel.hasJsonData || requestModel.hasTextData) {
var templateBody = jj.Template(kTemplateBody);
result += templateBody.render({"body": requestBody});
result += templateBody.render({"body": requestModel.requestBody});
}
}
var headersList = requestModel.enabledRequestHeaders;
if (headersList != null || hasBody) {
var headers = requestModel.enabledHeadersMap;
if (requestModel.isFormDataRequest) {
var formHeaderTemplate =
jj.Template(kTemplateFormHeaderContentType);
headers[HttpHeaders.contentTypeHeader] = formHeaderTemplate.render({
"boundary": uuid,
});
}
if (headers.isNotEmpty || hasBody) {
hasHeaders = true;
if (hasBody && !requestModel.hasContentTypeHeader) {
headers[HttpHeaders.contentTypeHeader] =
requestModel.requestBodyContentType.header;
if (requestModel.hasJsonData || requestModel.hasTextData) {
headers[HttpHeaders.contentTypeHeader] =
requestModel.requestBodyContentType.header;
} else if (requestModel.hasFormData) {
var formHeaderTemplate =
jj.Template(kTemplateFormHeaderContentType);
headers[HttpHeaders.contentTypeHeader] =
formHeaderTemplate.render({
"boundary": boundary,
});
}
}
var headersString = kEncoder.convert(headers);
headersString = padMultilineString(headersString, kHeadersPadding);
var templateHeaders = jj.Template(kTemplateHeaders);
result += templateHeaders.render({"headers": headersString});
}
}
if (requestModel.isFormDataRequest) {
if (requestModel.hasFormData) {
var formDataBodyData = jj.Template(kStringFormDataBody);
result += formDataBodyData.render(
{
"fields_list": json.encode(requestModel.formDataMapList),
"boundary": uuid,
"boundary": boundary,
},
);
}
@ -181,16 +165,16 @@ body = b'\r\n'.join(dataList)
var templateRequest = jj.Template(kTemplateRequest);
result += templateRequest.render({
"method": method.name.toUpperCase(),
"method": requestModel.method.name.toUpperCase(),
"path": uri.path,
"queryParamsStr": hasQuery ? " + queryParamsStr" : "",
});
if (hasBody || requestModel.isFormDataRequest) {
if (hasBody || requestModel.hasFormData) {
result += kStringRequestBody;
}
if (hasHeaders || requestModel.isFormDataRequest) {
if (hasHeaders || requestModel.hasFormData) {
result += kStringRequestHeaders;
}

View File

@ -1,15 +1,14 @@
import 'dart:io';
import 'dart:convert';
import 'package:jinja/jinja.dart' as jj;
import 'package:apidash/consts.dart';
import 'package:apidash/utils/utils.dart'
show getNewUuid, getValidRequestUri, padMultilineString, stripUriParams;
show getValidRequestUri, stripUriParams, getFilenameFromPath;
import 'package:apidash/models/models.dart' show RequestModel;
import '../codegen_utils.dart';
class PythonRequestsCodeGen {
final String kTemplateStart = """import requests
{% if isFormDataRequest %}import mimetypes
from codecs import encode
{% if hasFormData %}from requests_toolbelt.multipart.encoder import MultipartEncoder
{% endif %}
url = '{{url}}'
@ -20,7 +19,6 @@ url = '{{url}}'
params = {{params}}
""";
int kParamsPadding = 9;
String kTemplateBody = """
@ -39,44 +37,27 @@ payload = {{body}}
headers = {{headers}}
""";
String kTemplateFormHeaderContentType = '''
multipart/form-data; boundary={{boundary}}''';
int kHeadersPadding = 10;
String kTemplateRequest = """
response = requests.{{method}}(url
""";
final String kStringFormDataBody = r'''
final String kTemplateFormDataBody = r'''
def build_data_list(fields):
dataList = []
for field in fields:
name = field.get('name', '')
value = field.get('value', '')
type_ = field.get('type', 'text')
payload = MultipartEncoder({
{{formdata_payload}}
}{% if boundary != '' %},
boundary="{{boundary}}"
{% endif %})
dataList.append(encode('--{{boundary}}'))
if type_ == 'text':
dataList.append(encode(f'Content-Disposition: form-data; name="{name}"'))
dataList.append(encode('Content-Type: text/plain'))
dataList.append(encode(''))
dataList.append(encode(value))
elif type_ == 'file':
dataList.append(encode(f'Content-Disposition: form-data; name="{name}"; filename="{value}"'))
dataList.append(encode(f'Content-Type: {mimetypes.guess_type(value)[0] or "application/octet-stream"}'))
dataList.append(encode(''))
dataList.append(open(value, 'rb').read())
dataList.append(encode('--{{boundary}}--'))
dataList.append(encode(''))
return dataList
dataList = build_data_list({{fields_list}})
payload = b'\r\n'.join(dataList)
''';
String kTemplateFormDataRowText = r""" "{{name}}": "{{value}}",""";
String kTemplateFormDataRowFile =
r""" "{{name}}": ("{{filename}}", open("{{path}}", "rb")),""";
String kStringRequestParams = """, params=params""";
String kStringRequestBody = """, data=payload""";
@ -91,25 +72,26 @@ print('Status Code:', response.status_code)
print('Response Body:', response.text)
""";
String kStringFormDataContentType = "payload.content_type";
String refactorHeaderString(String headerString) {
return headerString.replaceAll(
'"$kStringFormDataContentType"', kStringFormDataContentType);
}
String? getCode(
RequestModel requestModel,
String defaultUriScheme,
) {
RequestModel requestModel, {
String? boundary,
}) {
try {
String result = "";
bool hasQuery = false;
bool hasHeaders = false;
bool hasBody = false;
bool hasJsonBody = false;
String uuid = getNewUuid();
String url = requestModel.url;
if (!url.contains("://") && url.isNotEmpty) {
url = "$defaultUriScheme://$url";
}
var rec = getValidRequestUri(
url,
requestModel.url,
requestModel.enabledRequestParams,
);
Uri? uri = rec.$1;
@ -117,7 +99,7 @@ print('Response Body:', response.text)
var templateStartUrl = jj.Template(kTemplateStart);
result += templateStartUrl.render({
"url": stripUriParams(uri),
'isFormDataRequest': requestModel.isFormDataRequest
'hasFormData': requestModel.hasFormData
});
if (uri.hasQuery) {
@ -126,77 +108,85 @@ print('Response Body:', response.text)
hasQuery = true;
var templateParams = jj.Template(kTemplateParams);
var paramsString = kEncoder.convert(params);
paramsString = padMultilineString(paramsString, kParamsPadding);
result += templateParams.render({"params": paramsString});
}
}
var method = requestModel.method;
var requestBody = requestModel.requestBody;
if (kMethodsWithBody.contains(method) && requestBody != null) {
var contentLength = utf8.encode(requestBody).length;
if (contentLength > 0) {
if (requestModel.requestBodyContentType == ContentType.json) {
hasJsonBody = true;
var templateBody = jj.Template(kTemplateJson);
result += templateBody.render({"body": requestBody});
} else if (!requestModel.isFormDataRequest) {
hasBody = true;
var templateBody = jj.Template(kTemplateBody);
result += templateBody.render({"body": requestBody});
if (requestModel.hasFormData) {
hasBody = true;
List<String> formdataPayload = [];
for (var item in requestModel.formDataList) {
if (item.type == FormDataType.text) {
formdataPayload.add(jj.Template(kTemplateFormDataRowText).render({
"name": item.name,
"value": item.value,
}));
}
if (item.type == FormDataType.file) {
formdataPayload.add(jj.Template(kTemplateFormDataRowFile).render({
"name": item.name,
"filename": getFilenameFromPath(item.value),
"path": item.value,
}));
}
}
var formDataBodyData = jj.Template(kTemplateFormDataBody);
result += formDataBodyData.render(
{
"formdata_payload": formdataPayload.join("\n"),
"boundary": boundary ?? '',
},
);
} else if (requestModel.hasJsonData) {
hasJsonBody = true;
var templateBody = jj.Template(kTemplateJson);
var pyDict = jsonToPyDict(requestModel.requestBody ?? "");
result += templateBody.render({"body": pyDict});
} else if (requestModel.hasTextData) {
hasBody = true;
var templateBody = jj.Template(kTemplateBody);
result += templateBody.render({"body": requestModel.requestBody});
}
var headersList = requestModel.enabledRequestHeaders;
if (headersList != null || hasBody) {
var headers = requestModel.enabledHeadersMap;
if (requestModel.isFormDataRequest) {
var formHeaderTemplate =
jj.Template(kTemplateFormHeaderContentType);
headers[HttpHeaders.contentTypeHeader] = formHeaderTemplate.render({
"boundary": uuid,
});
}
if (headers.isNotEmpty || hasBody) {
hasHeaders = true;
if (hasBody) {
if (hasBody) {
if (requestModel.hasFormData) {
headers[HttpHeaders.contentTypeHeader] =
kStringFormDataContentType;
} else {
headers[HttpHeaders.contentTypeHeader] =
requestModel.requestBodyContentType.header;
}
}
if (headers.isNotEmpty) {
hasHeaders = true;
var headersString = kEncoder.convert(headers);
headersString = padMultilineString(headersString, kHeadersPadding);
headersString = refactorHeaderString(headersString);
var templateHeaders = jj.Template(kTemplateHeaders);
result += templateHeaders.render({"headers": headersString});
}
}
if (requestModel.isFormDataRequest) {
var formDataBodyData = jj.Template(kStringFormDataBody);
result += formDataBodyData.render(
{
"fields_list": json.encode(requestModel.formDataMapList),
"boundary": uuid,
},
);
}
var templateRequest = jj.Template(kTemplateRequest);
result += templateRequest.render({
"method": method.name.toLowerCase(),
"method": requestModel.method.name.toLowerCase(),
});
if (hasQuery) {
result += kStringRequestParams;
}
if (hasBody || requestModel.isFormDataRequest) {
if (hasBody) {
result += kStringRequestBody;
}
if (hasJsonBody || requestModel.isFormDataRequest) {
if (hasJsonBody) {
result += kStringRequestJson;
}
if (hasHeaders || requestModel.isFormDataRequest) {
if (hasHeaders) {
result += kStringRequestHeaders;
}

217
lib/codegen/rust/actix.dart Normal file
View File

@ -0,0 +1,217 @@
import 'dart:io';
import 'dart:convert';
import 'package:jinja/jinja.dart' as jj;
import 'package:apidash/consts.dart';
import 'package:apidash/utils/utils.dart'
show getNewUuid, getValidRequestUri, stripUriParams;
import 'package:apidash/models/models.dart' show RequestModel;
class RustActixCodeGen {
final String kTemplateStart = """
{%- if isFormDataRequest -%}
use std::io::Read;
{% endif -%}
#[actix_rt::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let url = "{{url}}";
let client = awc::Client::default();
""";
String kTemplateParams =
"""\n .query(&{{ params }})\n .unwrap()""";
String kTemplateBody = """
let payload = r#"{{body}}"#;
""";
String kTemplateJson = """
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 kTemplateFormHeaderContentType = '''
multipart/form-data; boundary={{boundary}}''';
String kTemplateRequest = """
let mut response = client\n .{{method}}(url)
""";
final String kStringFormDataBody = r"""
struct FormDataItem {
name: String,
value: String,
field_type: String,
}
let form_data_items: Vec<FormDataItem> = vec![
{%- for formitem in fields_list %}
FormDataItem {
{%- for key, val in formitem %}
{% if key == "type" %}field_type: "{{ val }}".to_string(),{% else %}{{ key }}: "{{ val }}".to_string(),{% endif %}
{%- endfor %}
},
{%- endfor %}
];
fn build_data_list(fields: Vec<FormDataItem>) -> Vec<u8> {
let mut data_list = Vec::new();
for field in fields {
data_list.extend_from_slice(b"--{{boundary}}\r\n");
if field.field_type == "text" {
data_list.extend_from_slice(format!("Content-Disposition: form-data; name=\"{}\"\r\n", field.name).as_bytes());
data_list.extend_from_slice(b"Content-Type: text/plain\r\n\r\n");
data_list.extend_from_slice(field.value.as_bytes());
data_list.extend_from_slice(b"\r\n");
} else if field.field_type == "file" {
data_list.extend_from_slice(format!("Content-Disposition: form-data; name=\"{}\"; filename=\"{}\"\r\n", field.name, field.value).as_bytes());
let mime_type = mime_guess::from_path(&field.value).first_or(mime_guess::mime::APPLICATION_OCTET_STREAM);
data_list.extend_from_slice(format!("Content-Type: {}\r\n\r\n", mime_type).as_bytes());
let mut file = std::fs::File::open(&field.value).unwrap();
let mut file_contents = Vec::new();
file.read_to_end(&mut file_contents).unwrap();
data_list.extend_from_slice(&file_contents);
data_list.extend_from_slice(b"\r\n");
}
}
data_list.extend_from_slice(b"--{{boundary}}--\r\n");
data_list
}
let payload = build_data_list(form_data_items);
""";
String kStringRequestBody = """\n .send_body(payload)""";
String kStringRequestJson = """\n .send_json(&payload)""";
String kStringRequestNormal = """\n .send()""";
final String kStringRequestEnd = """\n .await\n .unwrap();
let body_bytes = response.body().await.unwrap();
let body = std::str::from_utf8(&body_bytes).unwrap();
println!("Response Status: {}", response.status());
println!("Response: {:?}", body);
Ok(())
}
""";
String? getCode(
RequestModel requestModel, {
String? boundary,
}) {
try {
String uuid = getNewUuid();
String result = "";
bool hasBody = false;
bool hasJsonBody = false;
String url = requestModel.url;
var rec = getValidRequestUri(
url,
requestModel.enabledRequestParams,
);
Uri? uri = rec.$1;
if (uri != null) {
var templateStartUrl = jj.Template(kTemplateStart);
result += templateStartUrl.render({
"url": stripUriParams(uri),
'isFormDataRequest': requestModel.hasFormData,
"method": requestModel.method.name.toLowerCase()
});
var method = requestModel.method;
var requestBody = requestModel.requestBody;
if (kMethodsWithBody.contains(method) && requestBody != null) {
var contentLength = utf8.encode(requestBody).length;
if (contentLength > 0) {
if (requestModel.requestBodyContentType == ContentType.json) {
hasJsonBody = true;
var templateBody = jj.Template(kTemplateJson);
result += templateBody.render({"body": requestBody});
} else if (!requestModel.hasFormData) {
hasBody = true;
var templateBody = jj.Template(kTemplateBody);
result += templateBody.render({"body": requestBody});
}
}
}
if (requestModel.hasFormData) {
var formDataBodyData = jj.Template(kStringFormDataBody);
result += formDataBodyData.render(
{
"fields_list": requestModel.formDataMapList,
"boundary": boundary ?? uuid,
},
);
}
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 headersList = requestModel.enabledRequestHeaders;
if (headersList != null || hasBody || requestModel.hasFormData) {
var headers = requestModel.enabledHeadersMap;
if (requestModel.hasFormData) {
var formHeaderTemplate =
jj.Template(kTemplateFormHeaderContentType);
headers[HttpHeaders.contentTypeHeader] = formHeaderTemplate.render({
"boundary": boundary ?? uuid,
});
} else if (hasBody) {
headers[HttpHeaders.contentTypeHeader] =
requestModel.requestBodyContentType.header;
}
if (headers.isNotEmpty) {
var templateHeaders = jj.Template(kTemplateHeaders);
result += templateHeaders.render({"headers": headers});
}
}
if (hasBody || requestModel.hasFormData) {
result += kStringRequestBody;
} else if (hasJsonBody) {
result += kStringRequestJson;
} else {
result += kStringRequestNormal;
}
result += kStringRequestEnd;
}
return result;
} catch (e) {
return null;
}
}
}

View File

@ -0,0 +1,180 @@
import 'dart:io';
import 'dart:convert';
import 'package:jinja/jinja.dart' as jj;
import 'package:apidash/consts.dart';
import 'package:apidash/utils/utils.dart'
show getValidRequestUri, stripUriParams;
import 'package:apidash/models/models.dart' show RequestModel;
class RustReqwestCodeGen {
final String kTemplateStart =
"""fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = reqwest::blocking::Client::new();
let url = "{{url}}";
""";
String kTemplateParams = """\n .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 -%}""";
String kTemplateRequest = """
let response = client\n .{{method}}(url)
""";
final String kStringFormDataBody = r'''
struct FormDataItem {
name: String,
value: String,
field_type: String,
}
let form_data_items: Vec<FormDataItem> = vec![
{%- for formitem in fields_list %}
FormDataItem {
{%- for key, val in formitem %}
{% if key == "type" %}field_type: "{{ val }}".to_string(),{% else %}{{ key }}: "{{ val }}".to_string(),{% endif %}
{%- endfor %}
},
{%- endfor %}
];
let mut form = reqwest::blocking::multipart::Form::new();
for item in form_data_items {
if item.field_type == "text" {
form = form.text(item.name, item.value);
} else if item.field_type == "file" {
form = form.file(item.name, &item.value)?;
}
}
''';
String kStringRequestBody = """\n .body(payload)""";
String kStringRequestJson = """\n .json(&payload)""";
String kStringRequestForm = """\n .multipart(form)""";
final String kStringRequestEnd = """\n .send()?;
println!("Status Code: {}", response.status());
println!("Response Body: {}", response.text()?);
Ok(())
}
""";
String? getCode(
RequestModel requestModel,
) {
try {
String result = "";
bool hasBody = false;
bool hasJsonBody = false;
String url = requestModel.url;
var rec = getValidRequestUri(
url,
requestModel.enabledRequestParams,
);
Uri? uri = rec.$1;
if (uri != null) {
var templateStartUrl = jj.Template(kTemplateStart);
result += templateStartUrl.render({
"url": stripUriParams(uri),
'isFormDataRequest': requestModel.hasFormData,
'isJson': requestModel.requestBodyContentType == ContentType.json
});
var method = requestModel.method;
var requestBody = requestModel.requestBody;
if (kMethodsWithBody.contains(method) && requestBody != null) {
var contentLength = utf8.encode(requestBody).length;
if (contentLength > 0) {
if (requestModel.requestBodyContentType == ContentType.json) {
hasJsonBody = true;
var templateBody = jj.Template(kTemplateJson);
result += templateBody.render({"body": requestBody});
} else if (!requestModel.hasFormData) {
hasBody = true;
var templateBody = jj.Template(kTemplateBody);
result += templateBody.render({"body": requestBody});
}
}
}
if (requestModel.hasFormData) {
var formDataBodyData = jj.Template(kStringFormDataBody);
result += formDataBodyData.render(
{
"fields_list": requestModel.formDataMapList,
},
);
}
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});
}
}
var headersList = requestModel.enabledRequestHeaders;
if (headersList != null || hasBody) {
var headers = requestModel.enabledHeadersMap;
if (hasBody) {
headers[HttpHeaders.contentTypeHeader] =
requestModel.requestBodyContentType.header;
}
if (headers.isNotEmpty) {
var templateHeaders = jj.Template(kTemplateHeaders);
result += templateHeaders.render({"headers": headers});
}
}
if (hasBody && !requestModel.hasFormData) {
result += kStringRequestBody;
}
if (hasJsonBody) {
result += kStringRequestJson;
}
if (requestModel.hasFormData) {
result += kStringRequestForm;
}
result += kStringRequestEnd;
}
return result;
} catch (e) {
return null;
}
}
}

211
lib/codegen/rust/ureq.dart Normal file
View File

@ -0,0 +1,211 @@
import 'dart:io';
import 'dart:convert';
import 'package:jinja/jinja.dart' as jj;
import 'package:apidash/consts.dart';
import 'package:apidash/utils/utils.dart'
show getNewUuid, getValidRequestUri, stripUriParams;
import 'package:apidash/models/models.dart' show RequestModel;
class RustUreqCodeGen {
final String kTemplateStart = """
{%- if isFormDataRequest -%}
use std::io::Read;
{% endif -%}
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 kTemplateBody = """
let payload = r#"{{body}}"#;
""";
String kTemplateJson = """
let payload = ureq::json!({{body}});
""";
String kTemplateHeaders =
"""\n {% for key, val in headers -%}.set("{{key}}", "{{val}}"){% if not loop.last %}{{ '\n ' }}{% endif %}{%- endfor -%}""";
String kTemplateFormHeaderContentType = '''
multipart/form-data; boundary={{boundary}}''';
String kTemplateRequest = """
let response = ureq::{{method}}(url)
""";
final String kStringFormDataBody = r"""
struct FormDataItem {
name: String,
value: String,
field_type: String,
}
let form_data_items: Vec<FormDataItem> = vec![
{%- for formitem in fields_list %}
FormDataItem {
{%- for key, val in formitem %}
{% if key == "type" %}field_type: "{{ val }}".to_string(),{% else %}{{ key }}: "{{ val }}".to_string(),{% endif %}
{%- endfor %}
},
{%- endfor %}
];
fn build_data_list(fields: Vec<FormDataItem>) -> Vec<u8> {
let mut data_list = Vec::new();
for field in fields {
data_list.extend_from_slice(b"--{{boundary}}\r\n");
if field.field_type == "text" {
data_list.extend_from_slice(format!("Content-Disposition: form-data; name=\"{}\"\r\n", field.name).as_bytes());
data_list.extend_from_slice(b"Content-Type: text/plain\r\n\r\n");
data_list.extend_from_slice(field.value.as_bytes());
data_list.extend_from_slice(b"\r\n");
} else if field.field_type == "file" {
data_list.extend_from_slice(format!("Content-Disposition: form-data; name=\"{}\"; filename=\"{}\"\r\n", field.name, field.value).as_bytes());
let mime_type = mime_guess::from_path(&field.value).first_or(mime_guess::mime::APPLICATION_OCTET_STREAM);
data_list.extend_from_slice(format!("Content-Type: {}\r\n\r\n", mime_type).as_bytes());
let mut file = std::fs::File::open(&field.value).unwrap();
let mut file_contents = Vec::new();
file.read_to_end(&mut file_contents).unwrap();
data_list.extend_from_slice(&file_contents);
data_list.extend_from_slice(b"\r\n");
}
}
data_list.extend_from_slice(b"--{{boundary}}--\r\n");
data_list
}
let payload = build_data_list(form_data_items);
""";
String kStringRequestBody = """\n .send_string(payload)?;""";
String kStringRequestForm = """\n .send_bytes(&payload)?;""";
String kStringRequestJson = """\n .send_json(payload)?;""";
String kStringRequestNormal = """\n .call()?;""";
final String kStringRequestEnd = """\n
println!("Response Status: {}", response.status());
println!("Response: {}", response.into_string()?);
Ok(())
}
""";
String? getCode(
RequestModel requestModel, {
String? boundary,
}) {
try {
String result = "";
bool hasBody = false;
bool hasJsonBody = false;
String uuid = getNewUuid();
String url = requestModel.url;
var rec = getValidRequestUri(
url,
requestModel.enabledRequestParams,
);
Uri? uri = rec.$1;
if (uri != null) {
var templateStartUrl = jj.Template(kTemplateStart);
result += templateStartUrl.render({
"url": stripUriParams(uri),
'isFormDataRequest': requestModel.hasFormData,
"method": requestModel.method.name.toLowerCase()
});
var method = requestModel.method;
var requestBody = requestModel.requestBody;
if (kMethodsWithBody.contains(method) && requestBody != null) {
var contentLength = utf8.encode(requestBody).length;
if (contentLength > 0) {
if (requestModel.requestBodyContentType == ContentType.json) {
hasJsonBody = true;
var templateBody = jj.Template(kTemplateJson);
result += templateBody.render({"body": requestBody});
} else if (!requestModel.hasFormData) {
hasBody = true;
var templateBody = jj.Template(kTemplateBody);
result += templateBody.render({"body": requestBody});
}
}
}
if (requestModel.hasFormData) {
var formDataBodyData = jj.Template(kStringFormDataBody);
result += formDataBodyData.render(
{
"fields_list": requestModel.formDataMapList,
"boundary": boundary ?? uuid,
},
);
}
var templateRequest = jj.Template(kTemplateRequest);
result += templateRequest.render({
"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 headersList = requestModel.enabledRequestHeaders;
if (headersList != null || hasBody || requestModel.hasFormData) {
var headers = requestModel.enabledHeadersMap;
if (requestModel.hasFormData) {
var formHeaderTemplate =
jj.Template(kTemplateFormHeaderContentType);
headers[HttpHeaders.contentTypeHeader] = formHeaderTemplate.render({
"boundary": boundary ?? uuid,
});
} else if (hasBody) {
headers[HttpHeaders.contentTypeHeader] =
requestModel.requestBodyContentType.header;
}
if (headers.isNotEmpty) {
var templateHeaders = jj.Template(kTemplateHeaders);
result += templateHeaders.render({"headers": headers});
}
}
if (requestModel.hasFormData) {
result += kStringRequestForm;
} else if (hasBody) {
result += kStringRequestBody;
} else if (hasJsonBody) {
result += kStringRequestJson;
} else {
result += kStringRequestNormal;
}
result += kStringRequestEnd;
}
return result;
} catch (e) {
return null;
}
}
}

View File

@ -8,6 +8,7 @@ import 'package:davi/davi.dart';
const kDiscordUrl = "https://bit.ly/heyfoss";
const kGitUrl = "https://github.com/foss42/apidash";
const kIssueUrl = "$kGitUrl/issues";
const kDefaultUri = "api.apidash.dev";
final kIsMacOS = !kIsWeb && Platform.isMacOS;
final kIsWindows = !kIsWeb && Platform.isWindows;
@ -265,13 +266,19 @@ enum CodegenLanguage {
har("HAR", "json", "har"),
dartHttp("Dart (http)", "dart", "dart"),
dartDio("Dart (dio)", "dart", "dart"),
goHttp("Go (http)", "go", "go"),
jsAxios("JavaScript (axios)", "javascript", "js"),
jsFetch("JavaScript (fetch)", "javascript", "js"),
nodejsAxios("node.js (axios)", "javascript", "js"),
nodejsFetch("node.js (fetch)", "javascript", "js"),
kotlinOkHttp("Kotlin (okhttp3)", "java", "kt"),
pythonHttpClient("Python (http.client)", "python", "py"),
pythonRequests("Python (requests)", "python", "py");
pythonRequests("Python (requests)", "python", "py"),
rustActix("Rust (Actix Client)", "rust", "rs"),
rustReqwest("Rust (reqwest)", "rust", "rs"),
rustUreq("Rust (ureq)", "rust", "rs"),
juliaHttp("Julia (HTTP)", "julia", "jl");
const CodegenLanguage(this.label, this.codeHighlightLang, this.ext);
final String label;
@ -282,6 +289,8 @@ enum CodegenLanguage {
const JsonEncoder kEncoder = JsonEncoder.withIndent(' ');
const LineSplitter kSplitter = LineSplitter();
const kHeaderContentType = "Content-Type";
const kTypeApplication = 'application';
// application
const kSubTypeJson = 'json';
@ -312,12 +321,15 @@ const kSubTypeSvg = 'svg+xml';
const kTypeAudio = 'audio';
const kTypeVideo = 'video';
const kTypeMultipart = "multipart";
const kSubTypeFormData = "form-data";
const kSubTypeDefaultViewOptions = 'all';
enum ContentType {
json("$kTypeApplication/$kSubTypeJson"),
text("$kTypeText/$kSubTypePlain"),
formdata("multipart/form-data");
formdata("$kTypeMultipart/$kSubTypeFormData");
const ContentType(this.header);
final String header;
@ -499,8 +511,7 @@ const kRaiseIssue =
const kCsvError =
"There seems to be an issue rendering this CSV. Please raise an issue in API Dash GitHub repo so that we can resolve it.";
const kHintTextUrlCard =
"Enter API endpoint like api.apidash.dev/country/codes";
const kHintTextUrlCard = "Enter API endpoint like https://$kDefaultUri/";
const kLabelPlusNew = "+ New";
const kLabelSend = "Send";
const kLabelSending = "Sending..";

View File

@ -1,4 +1,5 @@
import 'dart:io';
import 'dart:convert';
import 'package:flutter/foundation.dart';
import '../utils/utils.dart'
show
@ -62,9 +63,31 @@ class RequestModel {
Map<String, String> get headersMap => rowsToMap(requestHeaders) ?? {};
Map<String, String> get paramsMap => rowsToMap(requestParams) ?? {};
bool get hasFormDataContentType =>
requestBodyContentType == ContentType.formdata;
bool get hasJsonContentType => requestBodyContentType == ContentType.json;
bool get hasTextContentType => requestBodyContentType == ContentType.text;
int get contentLength => utf8.encode(requestBody ?? "").length;
bool get hasData => hasJsonData || hasTextData || hasFormData;
bool get hasJsonData =>
kMethodsWithBody.contains(method) &&
hasJsonContentType &&
contentLength > 0;
bool get hasTextData =>
kMethodsWithBody.contains(method) &&
hasTextContentType &&
contentLength > 0;
bool get hasFormData =>
kMethodsWithBody.contains(method) &&
hasFormDataContentType &&
(requestFormDataList ?? <FormDataModel>[]).isNotEmpty;
List<FormDataModel> get formDataList =>
requestFormDataList ?? <FormDataModel>[];
List<Map<String, dynamic>> get formDataMapList =>
rowsToFormDataMapList(requestFormDataList) ?? [];
bool get isFormDataRequest => requestBodyContentType == ContentType.formdata;
bool get hasFileInFormData => formDataList
.map((e) => e.type == FormDataType.file)
.any((element) => element);
bool get hasContentTypeHeader => enabledHeadersMap.keys
.any((k) => k.toLowerCase() == HttpHeaders.contentTypeHeader);

View File

@ -3,7 +3,7 @@ import 'settings_providers.dart';
import 'ui_providers.dart';
import '../models/models.dart';
import '../services/services.dart' show hiveHandler, HiveHandler, request;
import '../utils/utils.dart' show uuid, collectionToHAR;
import '../utils/utils.dart' show getNewUuid, collectionToHAR;
import '../consts.dart';
import 'package:http/http.dart' as http;
@ -54,7 +54,7 @@ class CollectionStateNotifier
}
void add() {
final id = uuid.v1();
final id = getNewUuid();
final newRequestModel = RequestModel(
id: id,
);
@ -97,7 +97,7 @@ class CollectionStateNotifier
}
void duplicate(String id) {
final newId = uuid.v1();
final newId = getNewUuid();
var itemIds = ref.read(requestSequenceProvider);
int idx = itemIds.indexOf(id);
@ -173,8 +173,6 @@ class CollectionStateNotifier
(http.Response?, Duration?, String?)? responseRec = await request(
requestModel,
defaultUriScheme: defaultUriScheme,
isMultiPartRequest:
requestModel.requestBodyContentType == ContentType.formdata,
);
late final RequestModel newRequestModel;
if (responseRec.$1 == null) {
@ -215,7 +213,7 @@ class CollectionStateNotifier
bool loadData() {
var ids = hiveHandler.getIds();
if (ids == null || ids.length == 0) {
String newId = uuid.v1();
String newId = getNewUuid();
state = {
newId: RequestModel(
id: newId,

View File

@ -67,7 +67,7 @@ class SettingsPage extends ConsumerWidget {
hoverColor: kColorTransparent,
title: const Text('Default URI Scheme'),
subtitle: Text(
'api.apidash.dev${settings.defaultUriScheme}://api.apidash.dev'),
'$kDefaultUri${settings.defaultUriScheme}://$kDefaultUri'),
trailing: DropdownMenu(
onSelected: (value) {
ref

View File

@ -9,7 +9,6 @@ import 'package:apidash/consts.dart';
Future<(http.Response?, Duration?, String?)> request(
RequestModel requestModel, {
String defaultUriScheme = kDefaultUriScheme,
bool isMultiPartRequest = false,
}) async {
(Uri?, String?) uriRec = getValidRequestUri(
requestModel.url,
@ -22,44 +21,48 @@ Future<(http.Response?, Duration?, String?)> request(
http.Response response;
String? body;
try {
var requestBody = requestModel.requestBody;
if (kMethodsWithBody.contains(requestModel.method) &&
requestBody != null) {
var contentLength = utf8.encode(requestBody).length;
if (contentLength > 0) {
body = requestBody;
headers[HttpHeaders.contentLengthHeader] = contentLength.toString();
if (!requestModel.hasContentTypeHeader) {
headers[HttpHeaders.contentTypeHeader] =
requestModel.requestBodyContentType.header;
}
}
}
Stopwatch stopwatch = Stopwatch()..start();
if (isMultiPartRequest) {
var multiPartRequest = http.MultipartRequest(
requestModel.method.name.toUpperCase(),
requestUrl,
);
multiPartRequest.headers.addAll(headers);
for (FormDataModel formData
in (requestModel.requestFormDataList ?? [])) {
if (formData.type == FormDataType.text) {
multiPartRequest.fields.addAll({formData.name: formData.value});
} else {
multiPartRequest.files.add(
await http.MultipartFile.fromPath(
formData.name,
formData.value,
),
);
var isMultiPartRequest =
requestModel.requestBodyContentType == ContentType.formdata;
if (kMethodsWithBody.contains(requestModel.method)) {
var requestBody = requestModel.requestBody;
if (requestBody != null && !isMultiPartRequest) {
var contentLength = utf8.encode(requestBody).length;
if (contentLength > 0) {
body = requestBody;
headers[HttpHeaders.contentLengthHeader] = contentLength.toString();
if (!requestModel.hasContentTypeHeader) {
headers[HttpHeaders.contentTypeHeader] =
requestModel.requestBodyContentType.header;
}
}
}
http.StreamedResponse multiPartResponse = await multiPartRequest.send();
stopwatch.stop();
http.Response convertedMultiPartResponse =
await convertStreamedResponse(multiPartResponse);
return (convertedMultiPartResponse, stopwatch.elapsed, null);
if (isMultiPartRequest) {
var multiPartRequest = http.MultipartRequest(
requestModel.method.name.toUpperCase(),
requestUrl,
);
multiPartRequest.headers.addAll(headers);
for (var formData
in (requestModel.requestFormDataList ?? <FormDataModel>[])) {
if (formData.type == FormDataType.text) {
multiPartRequest.fields.addAll({formData.name: formData.value});
} else {
multiPartRequest.files.add(
await http.MultipartFile.fromPath(
formData.name,
formData.value,
),
);
}
}
http.StreamedResponse multiPartResponse =
await multiPartRequest.send();
stopwatch.stop();
http.Response convertedMultiPartResponse =
await convertStreamedResponse(multiPartResponse);
return (convertedMultiPartResponse, stopwatch.elapsed, null);
}
}
switch (requestModel.method) {
case HTTPVerb.get:

View File

@ -48,8 +48,13 @@ String getShortPath(String path) {
return path;
}
String getFilenameFromPath(String path) {
var f = p.split(path);
return f.last;
}
String getTempFileName() {
return uuid.v1();
return getNewUuid();
}
Future<FilePickerResult?> pickFile() async {

View File

@ -1,6 +1,10 @@
// http://www.softwareishard.com/blog/har-12-spec/
// https://github.com/ahmadnassri/har-spec/blob/master/versions/1.2.md
import 'dart:convert';
import 'package:apidash/consts.dart';
import 'package:apidash/utils/utils.dart' show getValidRequestUri;
import 'package:apidash/utils/utils.dart'
show getValidRequestUri, getNewUuid, getFilenameFromPath;
import 'package:apidash/models/models.dart' show RequestModel;
import 'package:package_info_plus/package_info_plus.dart';
@ -75,6 +79,7 @@ Map<String, dynamic> requestModelToHARJsonRequest(
defaultUriScheme = kDefaultUriScheme,
bool exportMode = false,
bool useEnabled = false,
String? boundary,
}) {
Map<String, dynamic> json = {};
bool hasBody = false;
@ -110,21 +115,37 @@ Map<String, dynamic> requestModelToHARJsonRequest(
}
}
var method = requestModel.method;
var requestBody = requestModel.requestBody;
if (kMethodsWithBody.contains(method) &&
requestBody != null &&
!requestModel.isFormDataRequest) {
var contentLength = utf8.encode(requestBody).length;
if (contentLength > 0) {
hasBody = true;
json["postData"] = {};
json["postData"]["mimeType"] =
requestModel.requestBodyContentType.header;
json["postData"]["text"] = requestBody;
if (exportMode) {
json["postData"]["comment"] = "";
if (requestModel.hasJsonData || requestModel.hasTextData) {
hasBody = true;
json["postData"] = {};
json["postData"]["mimeType"] = requestModel.requestBodyContentType.header;
json["postData"]["text"] = requestModel.requestBody;
if (exportMode) {
json["postData"]["comment"] = "";
}
}
if (requestModel.hasFormData) {
boundary = boundary ?? getNewUuid();
hasBody = true;
json["postData"] = {};
json["postData"]["mimeType"] =
"${requestModel.requestBodyContentType.header}; boundary=$boundary";
json["postData"]["params"] = [];
for (var item in requestModel.formDataList) {
Map<String, String> d = exportMode ? {"comment": ""} : {};
if (item.type == FormDataType.text) {
d["name"] = item.name;
d["value"] = item.value;
}
if (item.type == FormDataType.file) {
d["name"] = item.name;
d["fileName"] = getFilenameFromPath(item.value);
}
json["postData"]["params"].add(d);
}
if (exportMode) {
json["postData"]["comment"] = "";
}
}
@ -137,8 +158,8 @@ Map<String, dynamic> requestModelToHARJsonRequest(
if (headers.isNotEmpty || hasBody) {
if (hasBody && !requestModel.hasContentTypeHeader) {
var m = {
"name": "Content-Type",
"value": requestModel.requestBodyContentType.header
"name": kHeaderContentType,
"value": json["postData"]["mimeType"]
};
if (exportMode) {
m["comment"] = "";
@ -154,14 +175,12 @@ Map<String, dynamic> requestModelToHARJsonRequest(
}
}
}
if (requestModel.isFormDataRequest) {
json["formData"] = requestModel.formDataMapList;
}
if (exportMode) {
json["comment"] = "";
json["cookies"] = [];
json["headersSize"] = -1;
json["bodySize"] = hasBody ? utf8.encode(requestBody!).length : 0;
json["bodySize"] =
hasBody ? utf8.encode(json["postData"]["text"] ?? "").length : 0;
}
}
return json;

View File

@ -23,6 +23,9 @@ class IntroMessage extends StatelessWidget {
return FutureBuilder(
future: introData(),
builder: (BuildContext context, AsyncSnapshot<void> snapshot) {
if (snapshot.hasError) {
return const ErrorMessage(message: "An error occured");
}
if (snapshot.connectionState == ConnectionState.done) {
if (Theme.of(context).brightness == Brightness.dark) {
text = text.replaceAll("{{mode}}", "dark");
@ -37,9 +40,6 @@ class IntroMessage extends StatelessWidget {
padding: kPh60,
);
}
if (snapshot.hasError) {
return const ErrorMessage(message: "An error occured");
}
return const Center(child: CircularProgressIndicator());
},
);

View File

@ -1,239 +0,0 @@
import 'package:apidash/codegen/codegen.dart';
import 'package:apidash/consts.dart';
import '../request_models.dart';
import 'package:test/test.dart';
void main() {
final codeGen = Codegen();
group('Test various Code generators', () {
test('cURL', () {
const expectedCode = r"""curl --url 'https://api.apidash.dev'""";
expect(codeGen.getCode(CodegenLanguage.curl, requestModelGet1, "https"),
expectedCode);
});
test('Dart Dio', () {
const expectedCode = r"""import 'package:dio/dio.dart' as dio;
void main() async {
try {
final response = await dio.Dio.get('https://api.apidash.dev');
print(response.statusCode);
print(response.data);
} on DioException catch (e, s) {
print(e.response?.statusCode);
print(e.response?.data);
print(s);
} catch (e, s) {
print(e);
print(s);
}
}
""";
expect(
codeGen.getCode(CodegenLanguage.dartDio, requestModelGet1, "https"),
expectedCode);
});
test('Dart HTTP', () {
const expectedCode = r"""import 'package:http/http.dart' as http;
void main() async {
var uri = Uri.parse('https://api.apidash.dev');
final response = await http.get(uri);
int statusCode = response.statusCode;
if (statusCode >= 200 && statusCode < 300) {
print('Status Code: $statusCode');
print('Response Body: ${response.body}');
} else {
print('Error Status Code: $statusCode');
print('Error Response Body: ${response.body}');
}
}
""";
expect(
codeGen.getCode(CodegenLanguage.dartHttp, requestModelGet1, "https"),
expectedCode);
});
test('HAR', () {
const expectedCode = r"""{
"method": "GET",
"url": "https://api.apidash.dev",
"httpVersion": "HTTP/1.1",
"queryString": [],
"headers": []
}""";
expect(codeGen.getCode(CodegenLanguage.har, requestModelGet1, "https"),
expectedCode);
});
test('JS Axios', () {
const expectedCode = r"""let config = {
url: 'https://api.apidash.dev',
method: 'get'
};
axios(config)
.then(function (response) {
// handle success
console.log(response.status);
console.log(response.data);
})
.catch(function (error) {
// handle error
console.log(error.response.status);
console.log(error);
});
""";
expect(
codeGen.getCode(CodegenLanguage.jsAxios, requestModelGet1, "https"),
expectedCode);
});
test('JS Fetch', () {
const expectedCode = r"""let url = 'https://api.apidash.dev';
let options = {
method: 'GET'
};
let status;
fetch(url, options)
.then(res => {
status = res.status;
return res.json()
})
.then(body => {
console.log(status);
console.log(body);
})
.catch(err => {
console.log(status);
console.error('error:' + err);
});
""";
expect(
codeGen.getCode(CodegenLanguage.jsFetch, requestModelGet1, "https"),
expectedCode);
});
test('Kotlin OkHttp', () {
const expectedCode = r"""import okhttp3.OkHttpClient
import okhttp3.Request
fun main() {
val client = OkHttpClient()
val url = "https://api.apidash.dev"
val request = Request.Builder()
.url(url)
.get()
.build()
val response = client.newCall(request).execute()
println(response.code)
println(response.body?.string())
}
""";
expect(
codeGen.getCode(
CodegenLanguage.kotlinOkHttp, requestModelGet1, "https"),
expectedCode);
});
test('NodeJs Axios', () {
const expectedCode = r"""import axios from 'axios';
let config = {
url: 'https://api.apidash.dev',
method: 'get'
};
axios(config)
.then(function (response) {
// handle success
console.log(response.status);
console.log(response.data);
})
.catch(function (error) {
// handle error
console.log(error.response.status);
console.log(error);
});
""";
expect(
codeGen.getCode(
CodegenLanguage.nodejsAxios, requestModelGet1, "https"),
expectedCode);
});
test('Nodejs Fetch', () {
const expectedCode = r"""import fetch from 'node-fetch';
let url = 'https://api.apidash.dev';
let options = {
method: 'GET'
};
let status;
fetch(url, options)
.then(res => {
status = res.status;
return res.json()
})
.then(body => {
console.log(status);
console.log(body);
})
.catch(err => {
console.log(status);
console.error('error:' + err);
});
""";
expect(
codeGen.getCode(
CodegenLanguage.nodejsFetch, requestModelGet1, "https"),
expectedCode);
});
test('Python http.client', () {
const expectedCode = r"""import http.client
conn = http.client.HTTPSConnection("api.apidash.dev")
conn.request("GET", "")
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
""";
expect(
codeGen.getCode(
CodegenLanguage.pythonHttpClient, requestModelGet1, "https"),
expectedCode);
});
test('Python requests', () {
const expectedCode = r"""import requests
url = 'https://api.apidash.dev'
response = requests.get(url)
print('Status Code:', response.status_code)
print('Response Body:', response.text)
""";
expect(
codeGen.getCode(
CodegenLanguage.pythonRequests, requestModelGet1, "https"),
expectedCode);
});
});
}

View File

@ -1,64 +1,74 @@
import 'package:apidash/codegen/others/curl.dart';
import '../request_models.dart';
import 'package:apidash/codegen/codegen.dart';
import 'package:apidash/consts.dart';
import 'package:test/test.dart';
import '../request_models.dart';
void main() {
final curlCodeGen = cURLCodeGen();
final codeGen = Codegen();
group('GET Request', () {
test('GET 1', () {
const expectedCode = r"""curl --url 'https://api.apidash.dev'""";
expect(curlCodeGen.getCode(requestModelGet1, "https"), expectedCode);
expect(codeGen.getCode(CodegenLanguage.curl, requestModelGet1, "https"),
expectedCode);
});
test('GET 2', () {
const expectedCode =
r"""curl --url 'https://api.apidash.dev/country/data?code=US'""";
expect(curlCodeGen.getCode(requestModelGet2, "https"), expectedCode);
expect(codeGen.getCode(CodegenLanguage.curl, requestModelGet2, "https"),
expectedCode);
});
test('GET 3', () {
const expectedCode =
r"""curl --url 'https://api.apidash.dev/country/data?code=IND'""";
expect(curlCodeGen.getCode(requestModelGet3, "https"), expectedCode);
expect(codeGen.getCode(CodegenLanguage.curl, requestModelGet3, "https"),
expectedCode);
});
test('GET 4', () {
const expectedCode =
r"""curl --url 'https://api.apidash.dev/humanize/social?num=8700000&digits=3&system=SS&add_space=true&trailing_zeros=true'""";
expect(curlCodeGen.getCode(requestModelGet4, "https"), expectedCode);
expect(codeGen.getCode(CodegenLanguage.curl, requestModelGet4, "https"),
expectedCode);
});
test('GET 5', () {
const expectedCode =
r"""curl --url 'https://api.github.com/repos/foss42/apidash' \
--header 'User-Agent: Test Agent'""";
expect(curlCodeGen.getCode(requestModelGet5, "https"), expectedCode);
expect(codeGen.getCode(CodegenLanguage.curl, requestModelGet5, "https"),
expectedCode);
});
test('GET 6', () {
const expectedCode =
r"""curl --url 'https://api.github.com/repos/foss42/apidash?raw=true' \
--header 'User-Agent: Test Agent'""";
expect(curlCodeGen.getCode(requestModelGet6, "https"), expectedCode);
expect(codeGen.getCode(CodegenLanguage.curl, requestModelGet6, "https"),
expectedCode);
});
test('GET 7', () {
const expectedCode = r"""curl --url 'https://api.apidash.dev'""";
expect(curlCodeGen.getCode(requestModelGet7, "https"), expectedCode);
expect(codeGen.getCode(CodegenLanguage.curl, requestModelGet7, "https"),
expectedCode);
});
test('GET 8', () {
const expectedCode =
r"""curl --url 'https://api.github.com/repos/foss42/apidash?raw=true' \
--header 'User-Agent: Test Agent'""";
expect(curlCodeGen.getCode(requestModelGet8, "https"), expectedCode);
expect(codeGen.getCode(CodegenLanguage.curl, requestModelGet8, "https"),
expectedCode);
});
test('GET 9', () {
const expectedCode =
r"""curl --url 'https://api.apidash.dev/humanize/social?num=8700000&add_space=true'""";
expect(curlCodeGen.getCode(requestModelGet9, "https"), expectedCode);
expect(codeGen.getCode(CodegenLanguage.curl, requestModelGet9, "https"),
expectedCode);
});
test('GET 10', () {
@ -66,7 +76,8 @@ void main() {
r"""curl --url 'https://api.apidash.dev/humanize/social' \
--header 'User-Agent: Test Agent'""";
expect(
curlCodeGen.getCode(
codeGen.getCode(
CodegenLanguage.curl,
requestModelGet10,
"https",
),
@ -77,103 +88,181 @@ void main() {
const expectedCode =
r"""curl --url 'https://api.apidash.dev/humanize/social?num=8700000&digits=3' \
--header 'User-Agent: Test Agent'""";
expect(curlCodeGen.getCode(requestModelGet11, "https"), expectedCode);
expect(codeGen.getCode(CodegenLanguage.curl, requestModelGet11, "https"),
expectedCode);
});
test('GET 12', () {
const expectedCode =
r"""curl --url 'https://api.apidash.dev/humanize/social'""";
expect(curlCodeGen.getCode(requestModelGet12, "https"), expectedCode);
expect(codeGen.getCode(CodegenLanguage.curl, requestModelGet12, "https"),
expectedCode);
});
});
group('HEAD Request', () {
test('HEAD 1', () {
const expectedCode = r"""curl --head --url 'https://api.apidash.dev'""";
expect(curlCodeGen.getCode(requestModelHead1, "https"), expectedCode);
expect(codeGen.getCode(CodegenLanguage.curl, requestModelHead1, "https"),
expectedCode);
});
test('HEAD 2', () {
const expectedCode = r"""curl --head --url 'http://api.apidash.dev'""";
expect(curlCodeGen.getCode(requestModelHead2, "http"), expectedCode);
expect(codeGen.getCode(CodegenLanguage.curl, requestModelHead2, "http"),
expectedCode);
});
});
group('POST Request', () {
test('POST 1', () {
const expectedCode = r"""curl --request POST \
--url 'https://api.apidash.dev/case/lower' \
--url 'https://api.apidash.dev/case/lower' \
--header 'Content-Type: text/plain' \
--data '{
"text": "I LOVE Flutter"
}'""";
expect(curlCodeGen.getCode(requestModelPost1, "https"), expectedCode);
expect(codeGen.getCode(CodegenLanguage.curl, requestModelPost1, "https"),
expectedCode);
});
test('POST 2', () {
const expectedCode = r"""curl --request POST \
--url 'https://api.apidash.dev/case/lower' \
--url 'https://api.apidash.dev/case/lower' \
--header 'Content-Type: application/json' \
--data '{
"text": "I LOVE Flutter"
"text": "I LOVE Flutter",
"flag": null,
"male": true,
"female": false,
"no": 1.2,
"arr": ["null", "true", "false", null]
}'""";
expect(curlCodeGen.getCode(requestModelPost2, "https"), expectedCode);
expect(codeGen.getCode(CodegenLanguage.curl, requestModelPost2, "https"),
expectedCode);
});
test('POST 3', () {
const expectedCode = r"""curl --request POST \
--url 'https://api.apidash.dev/case/lower' \
--url 'https://api.apidash.dev/case/lower' \
--header 'Content-Type: application/json' \
--header 'User-Agent: Test Agent' \
--data '{
"text": "I LOVE Flutter"
}'""";
expect(curlCodeGen.getCode(requestModelPost3, "https"), expectedCode);
expect(codeGen.getCode(CodegenLanguage.curl, requestModelPost3, "https"),
expectedCode);
});
test('POST 4', () {
const expectedCode = r"""curl --request POST \
--url 'https://api.apidash.dev/io/form' \
--form 'text=API' \
--form 'sep=|' \
--form 'times=3'""";
expect(codeGen.getCode(CodegenLanguage.curl, requestModelPost4, "https"),
expectedCode);
});
test('POST 5', () {
const expectedCode = r"""curl --request POST \
--url 'https://api.apidash.dev/io/form' \
--header 'User-Agent: Test Agent' \
--form 'text=API' \
--form 'sep=|' \
--form 'times=3'""";
expect(codeGen.getCode(CodegenLanguage.curl, requestModelPost5, "https"),
expectedCode);
});
test('POST 6', () {
const expectedCode = r"""curl --request POST \
--url 'https://api.apidash.dev/io/img' \
--form 'token=xyz' \
--form 'imfile=@/Documents/up/1.png'""";
expect(codeGen.getCode(CodegenLanguage.curl, requestModelPost6, "https"),
expectedCode);
});
test('POST 7', () {
const expectedCode = r"""curl --request POST \
--url 'https://api.apidash.dev/io/img' \
--form 'token=xyz' \
--form 'imfile=@/Documents/up/1.png'""";
expect(codeGen.getCode(CodegenLanguage.curl, requestModelPost7, "https"),
expectedCode);
});
test('POST 8', () {
const expectedCode = r"""curl --request POST \
--url 'https://api.apidash.dev/io/form?size=2&len=3' \
--form 'text=API' \
--form 'sep=|' \
--form 'times=3'""";
expect(codeGen.getCode(CodegenLanguage.curl, requestModelPost8, "https"),
expectedCode);
});
test('POST 9', () {
const expectedCode = r"""curl --request POST \
--url 'https://api.apidash.dev/io/img?size=2&len=3' \
--header 'User-Agent: Test Agent' \
--header 'Keep-Alive: true' \
--form 'token=xyz' \
--form 'imfile=@/Documents/up/1.png'""";
expect(codeGen.getCode(CodegenLanguage.curl, requestModelPost9, "https"),
expectedCode);
});
});
group('PUT Request', () {
test('PUT 1', () {
const expectedCode = r"""curl --request PUT \
--url 'https://reqres.in/api/users/2' \
--url 'https://reqres.in/api/users/2' \
--header 'Content-Type: application/json' \
--data '{
"name": "morpheus",
"job": "zion resident"
}'""";
expect(curlCodeGen.getCode(requestModelPut1, "https"), expectedCode);
expect(codeGen.getCode(CodegenLanguage.curl, requestModelPut1, "https"),
expectedCode);
});
});
group('PATCH Request', () {
test('PATCH 1', () {
const expectedCode = r"""curl --request PATCH \
--url 'https://reqres.in/api/users/2' \
--url 'https://reqres.in/api/users/2' \
--header 'Content-Type: application/json' \
--data '{
"name": "marfeus",
"job": "accountant"
}'""";
expect(curlCodeGen.getCode(requestModelPatch1, "https"), expectedCode);
expect(codeGen.getCode(CodegenLanguage.curl, requestModelPatch1, "https"),
expectedCode);
});
});
group('DELETE Request', () {
test('DELETE 1', () {
const expectedCode = r"""curl --request DELETE \
--url 'https://reqres.in/api/users/2'""";
expect(curlCodeGen.getCode(requestModelDelete1, "https"), expectedCode);
--url 'https://reqres.in/api/users/2'""";
expect(
codeGen.getCode(CodegenLanguage.curl, requestModelDelete1, "https"),
expectedCode);
});
test('DELETE 2', () {
const expectedCode = r"""curl --request DELETE \
--url 'https://reqres.in/api/users/2' \
--url 'https://reqres.in/api/users/2' \
--header 'Content-Type: application/json' \
--data '{
"name": "marfeus",
"job": "accountant"
}'""";
expect(curlCodeGen.getCode(requestModelDelete2, "https"), expectedCode);
expect(
codeGen.getCode(CodegenLanguage.curl, requestModelDelete2, "https"),
expectedCode);
});
});
}

View File

@ -1,10 +1,10 @@
import 'package:apidash/codegen/dart/dio.dart';
import 'package:apidash/codegen/codegen.dart';
import 'package:apidash/consts.dart';
import 'package:test/test.dart';
import '../request_models.dart';
void main() {
final dartDioCodeGen = DartDioCodeGen();
final codeGen = Codegen();
group('GET Request', () {
test('GET 1', () {
@ -12,10 +12,10 @@ void main() {
void main() async {
try {
final response = await dio.Dio.get('https://api.apidash.dev');
final response = await dio.Dio().get('https://api.apidash.dev');
print(response.statusCode);
print(response.data);
} on DioException catch (e, s) {
} on dio.DioException catch (e, s) {
print(e.response?.statusCode);
print(e.response?.data);
print(s);
@ -25,7 +25,9 @@ void main() async {
}
}
""";
expect(dartDioCodeGen.getCode(requestModelGet1, "https"), expectedCode);
expect(
codeGen.getCode(CodegenLanguage.dartDio, requestModelGet1, "https"),
expectedCode);
});
test('GET 2', () {
@ -34,13 +36,13 @@ void main() async {
void main() async {
try {
final queryParams = {'code': 'US'};
final response = await dio.Dio.get(
final response = await dio.Dio().get(
'https://api.apidash.dev/country/data',
queryParameters: queryParams,
);
print(response.statusCode);
print(response.data);
} on DioException catch (e, s) {
} on dio.DioException catch (e, s) {
print(e.response?.statusCode);
print(e.response?.data);
print(s);
@ -50,7 +52,9 @@ void main() async {
}
}
""";
expect(dartDioCodeGen.getCode(requestModelGet2, "https"), expectedCode);
expect(
codeGen.getCode(CodegenLanguage.dartDio, requestModelGet2, "https"),
expectedCode);
});
test('GET 3', () {
@ -59,13 +63,13 @@ void main() async {
void main() async {
try {
final queryParams = {'code': 'IND'};
final response = await dio.Dio.get(
final response = await dio.Dio().get(
'https://api.apidash.dev/country/data?code=US',
queryParameters: queryParams,
);
print(response.statusCode);
print(response.data);
} on DioException catch (e, s) {
} on dio.DioException catch (e, s) {
print(e.response?.statusCode);
print(e.response?.data);
print(s);
@ -75,7 +79,9 @@ void main() async {
}
}
""";
expect(dartDioCodeGen.getCode(requestModelGet3, "https"), expectedCode);
expect(
codeGen.getCode(CodegenLanguage.dartDio, requestModelGet3, "https"),
expectedCode);
});
test('GET 4', () {
@ -90,13 +96,13 @@ void main() async {
'add_space': 'true',
'trailing_zeros': 'true',
};
final response = await dio.Dio.get(
final response = await dio.Dio().get(
'https://api.apidash.dev/humanize/social',
queryParameters: queryParams,
);
print(response.statusCode);
print(response.data);
} on DioException catch (e, s) {
} on dio.DioException catch (e, s) {
print(e.response?.statusCode);
print(e.response?.data);
print(s);
@ -106,7 +112,9 @@ void main() async {
}
}
""";
expect(dartDioCodeGen.getCode(requestModelGet4, "https"), expectedCode);
expect(
codeGen.getCode(CodegenLanguage.dartDio, requestModelGet4, "https"),
expectedCode);
});
test('GET 5', () {
@ -115,13 +123,13 @@ void main() async {
void main() async {
try {
final headers = {'User-Agent': 'Test Agent'};
final response = await dio.Dio.get(
final response = await dio.Dio().get(
'https://api.github.com/repos/foss42/apidash',
options: Options(headers: headers),
options: dio.Options(headers: headers),
);
print(response.statusCode);
print(response.data);
} on DioException catch (e, s) {
} on dio.DioException catch (e, s) {
print(e.response?.statusCode);
print(e.response?.data);
print(s);
@ -131,7 +139,9 @@ void main() async {
}
}
""";
expect(dartDioCodeGen.getCode(requestModelGet5, "https"), expectedCode);
expect(
codeGen.getCode(CodegenLanguage.dartDio, requestModelGet5, "https"),
expectedCode);
});
test('GET 6', () {
@ -141,14 +151,14 @@ void main() async {
try {
final queryParams = {'raw': 'true'};
final headers = {'User-Agent': 'Test Agent'};
final response = await dio.Dio.get(
final response = await dio.Dio().get(
'https://api.github.com/repos/foss42/apidash',
queryParameters: queryParams,
options: Options(headers: headers),
options: dio.Options(headers: headers),
);
print(response.statusCode);
print(response.data);
} on DioException catch (e, s) {
} on dio.DioException catch (e, s) {
print(e.response?.statusCode);
print(e.response?.data);
print(s);
@ -158,7 +168,9 @@ void main() async {
}
}
""";
expect(dartDioCodeGen.getCode(requestModelGet6, "https"), expectedCode);
expect(
codeGen.getCode(CodegenLanguage.dartDio, requestModelGet6, "https"),
expectedCode);
});
test('GET 7', () {
@ -166,10 +178,10 @@ void main() async {
void main() async {
try {
final response = await dio.Dio.get('https://api.apidash.dev');
final response = await dio.Dio().get('https://api.apidash.dev');
print(response.statusCode);
print(response.data);
} on DioException catch (e, s) {
} on dio.DioException catch (e, s) {
print(e.response?.statusCode);
print(e.response?.data);
print(s);
@ -179,7 +191,9 @@ void main() async {
}
}
""";
expect(dartDioCodeGen.getCode(requestModelGet7, "https"), expectedCode);
expect(
codeGen.getCode(CodegenLanguage.dartDio, requestModelGet7, "https"),
expectedCode);
});
test('GET 8', () {
@ -189,14 +203,14 @@ void main() async {
try {
final queryParams = {'raw': 'true'};
final headers = {'User-Agent': 'Test Agent'};
final response = await dio.Dio.get(
final response = await dio.Dio().get(
'https://api.github.com/repos/foss42/apidash',
queryParameters: queryParams,
options: Options(headers: headers),
options: dio.Options(headers: headers),
);
print(response.statusCode);
print(response.data);
} on DioException catch (e, s) {
} on dio.DioException catch (e, s) {
print(e.response?.statusCode);
print(e.response?.data);
print(s);
@ -206,7 +220,9 @@ void main() async {
}
}
""";
expect(dartDioCodeGen.getCode(requestModelGet8, "https"), expectedCode);
expect(
codeGen.getCode(CodegenLanguage.dartDio, requestModelGet8, "https"),
expectedCode);
});
test('GET 9', () {
@ -218,38 +234,13 @@ void main() async {
'num': '8700000',
'add_space': 'true',
};
final response = await dio.Dio.get(
final response = await dio.Dio().get(
'https://api.apidash.dev/humanize/social',
queryParameters: queryParams,
);
print(response.statusCode);
print(response.data);
} on DioException catch (e, s) {
print(e.response?.statusCode);
print(e.response?.data);
print(s);
} catch (e, s) {
print(e);
print(s);
}
}
""";
expect(dartDioCodeGen.getCode(requestModelGet9, "https"), expectedCode);
});
test('GET 10', () {
const expectedCode = r"""import 'package:dio/dio.dart' as dio;
void main() async {
try {
final headers = {'User-Agent': 'Test Agent'};
final response = await dio.Dio.get(
'https://api.apidash.dev/humanize/social',
options: Options(headers: headers),
);
print(response.statusCode);
print(response.data);
} on DioException catch (e, s) {
} on dio.DioException catch (e, s) {
print(e.response?.statusCode);
print(e.response?.data);
print(s);
@ -260,7 +251,35 @@ void main() async {
}
""";
expect(
dartDioCodeGen.getCode(
codeGen.getCode(CodegenLanguage.dartDio, requestModelGet9, "https"),
expectedCode);
});
test('GET 10', () {
const expectedCode = r"""import 'package:dio/dio.dart' as dio;
void main() async {
try {
final headers = {'User-Agent': 'Test Agent'};
final response = await dio.Dio().get(
'https://api.apidash.dev/humanize/social',
options: dio.Options(headers: headers),
);
print(response.statusCode);
print(response.data);
} on dio.DioException catch (e, s) {
print(e.response?.statusCode);
print(e.response?.data);
print(s);
} catch (e, s) {
print(e);
print(s);
}
}
""";
expect(
codeGen.getCode(
CodegenLanguage.dartDio,
requestModelGet10,
"https",
),
@ -277,14 +296,14 @@ void main() async {
'digits': '3',
};
final headers = {'User-Agent': 'Test Agent'};
final response = await dio.Dio.get(
final response = await dio.Dio().get(
'https://api.apidash.dev/humanize/social',
queryParameters: queryParams,
options: Options(headers: headers),
options: dio.Options(headers: headers),
);
print(response.statusCode);
print(response.data);
} on DioException catch (e, s) {
} on dio.DioException catch (e, s) {
print(e.response?.statusCode);
print(e.response?.data);
print(s);
@ -294,7 +313,9 @@ void main() async {
}
}
""";
expect(dartDioCodeGen.getCode(requestModelGet11, "https"), expectedCode);
expect(
codeGen.getCode(CodegenLanguage.dartDio, requestModelGet11, "https"),
expectedCode);
});
test('GET 12', () {
@ -302,10 +323,10 @@ void main() async {
void main() async {
try {
final response = await dio.Dio.get('https://api.apidash.dev/humanize/social');
final response = await dio.Dio().get('https://api.apidash.dev/humanize/social');
print(response.statusCode);
print(response.data);
} on DioException catch (e, s) {
} on dio.DioException catch (e, s) {
print(e.response?.statusCode);
print(e.response?.data);
print(s);
@ -315,7 +336,9 @@ void main() async {
}
}
""";
expect(dartDioCodeGen.getCode(requestModelGet12, "https"), expectedCode);
expect(
codeGen.getCode(CodegenLanguage.dartDio, requestModelGet12, "https"),
expectedCode);
});
});
@ -325,10 +348,10 @@ void main() async {
void main() async {
try {
final response = await dio.Dio.head('https://api.apidash.dev');
final response = await dio.Dio().head('https://api.apidash.dev');
print(response.statusCode);
print(response.data);
} on DioException catch (e, s) {
} on dio.DioException catch (e, s) {
print(e.response?.statusCode);
print(e.response?.data);
print(s);
@ -338,7 +361,9 @@ void main() async {
}
}
""";
expect(dartDioCodeGen.getCode(requestModelHead1, "https"), expectedCode);
expect(
codeGen.getCode(CodegenLanguage.dartDio, requestModelHead1, "https"),
expectedCode);
});
test('HEAD 2', () {
@ -346,10 +371,10 @@ void main() async {
void main() async {
try {
final response = await dio.Dio.head('http://api.apidash.dev');
final response = await dio.Dio().head('http://api.apidash.dev');
print(response.statusCode);
print(response.data);
} on DioException catch (e, s) {
} on dio.DioException catch (e, s) {
print(e.response?.statusCode);
print(e.response?.data);
print(s);
@ -359,7 +384,9 @@ void main() async {
}
}
""";
expect(dartDioCodeGen.getCode(requestModelHead2, "http"), expectedCode);
expect(
codeGen.getCode(CodegenLanguage.dartDio, requestModelHead2, "http"),
expectedCode);
});
});
@ -372,13 +399,13 @@ void main() async {
final data = r'''{
"text": "I LOVE Flutter"
}''';
final response = await dio.Dio.post(
final response = await dio.Dio().post(
'https://api.apidash.dev/case/lower',
data: data,
);
print(response.statusCode);
print(response.data);
} on DioException catch (e, s) {
} on dio.DioException catch (e, s) {
print(e.response?.statusCode);
print(e.response?.data);
print(s);
@ -388,7 +415,9 @@ void main() async {
}
}
""";
expect(dartDioCodeGen.getCode(requestModelPost1, "https"), expectedCode);
expect(
codeGen.getCode(CodegenLanguage.dartDio, requestModelPost1, "https"),
expectedCode);
});
test('POST 2', () {
@ -398,15 +427,20 @@ import 'dart:convert' as convert;
void main() async {
try {
final data = convert.json.decode(r'''{
"text": "I LOVE Flutter"
"text": "I LOVE Flutter",
"flag": null,
"male": true,
"female": false,
"no": 1.2,
"arr": ["null", "true", "false", null]
}''');
final response = await dio.Dio.post(
final response = await dio.Dio().post(
'https://api.apidash.dev/case/lower',
data: data,
);
print(response.statusCode);
print(response.data);
} on DioException catch (e, s) {
} on dio.DioException catch (e, s) {
print(e.response?.statusCode);
print(e.response?.data);
print(s);
@ -416,7 +450,9 @@ void main() async {
}
}
""";
expect(dartDioCodeGen.getCode(requestModelPost2, "https"), expectedCode);
expect(
codeGen.getCode(CodegenLanguage.dartDio, requestModelPost2, "https"),
expectedCode);
});
test('POST 3', () {
@ -429,14 +465,14 @@ void main() async {
final data = convert.json.decode(r'''{
"text": "I LOVE Flutter"
}''');
final response = await dio.Dio.post(
final response = await dio.Dio().post(
'https://api.apidash.dev/case/lower',
options: Options(headers: headers),
options: dio.Options(headers: headers),
data: data,
);
print(response.statusCode);
print(response.data);
} on DioException catch (e, s) {
} on dio.DioException catch (e, s) {
print(e.response?.statusCode);
print(e.response?.data);
print(s);
@ -446,10 +482,330 @@ void main() async {
}
}
""";
expect(dartDioCodeGen.getCode(requestModelPost3, "https"), expectedCode);
expect(
codeGen.getCode(CodegenLanguage.dartDio, requestModelPost3, "https"),
expectedCode);
});
test('POST 4', () {
const expectedCode = r"""import 'package:dio/dio.dart' as dio;
void main() async {
try {
final data = dio.FormData();
final List<Map<String, String>> formDataList = [
{"name": "text", "value": "API", "type": "text"},
{"name": "sep", "value": "|", "type": "text"},
{"name": "times", "value": "3", "type": "text"}
];
for (var formField in formDataList) {
if (formField['type'] == 'file') {
if (formField['value'] != null) {
data.files.add(MapEntry(
formField['name']!,
await dio.MultipartFile.fromFile(formField['value']!,
filename: formField['value']!),
));
}
} else {
if (formField['value'] != null) {
data.fields
.add(MapEntry(formField['name']!, formField['value']!));
}
}
}
final response = await dio.Dio().post(
'https://api.apidash.dev/io/form',
data: data,
);
print(response.statusCode);
print(response.data);
} on dio.DioException catch (e, s) {
print(e.response?.statusCode);
print(e.response?.data);
print(s);
} catch (e, s) {
print(e);
print(s);
}
}
""";
expect(
codeGen.getCode(CodegenLanguage.dartDio, requestModelPost4, "https"),
expectedCode);
});
test('POST 5', () {
const expectedCode = r"""import 'package:dio/dio.dart' as dio;
void main() async {
try {
final headers = {'User-Agent': 'Test Agent'};
final data = dio.FormData();
final List<Map<String, String>> formDataList = [
{"name": "text", "value": "API", "type": "text"},
{"name": "sep", "value": "|", "type": "text"},
{"name": "times", "value": "3", "type": "text"}
];
for (var formField in formDataList) {
if (formField['type'] == 'file') {
if (formField['value'] != null) {
data.files.add(MapEntry(
formField['name']!,
await dio.MultipartFile.fromFile(formField['value']!,
filename: formField['value']!),
));
}
} else {
if (formField['value'] != null) {
data.fields
.add(MapEntry(formField['name']!, formField['value']!));
}
}
}
final response = await dio.Dio().post(
'https://api.apidash.dev/io/form',
options: dio.Options(headers: headers),
data: data,
);
print(response.statusCode);
print(response.data);
} on dio.DioException catch (e, s) {
print(e.response?.statusCode);
print(e.response?.data);
print(s);
} catch (e, s) {
print(e);
print(s);
}
}
""";
expect(
codeGen.getCode(CodegenLanguage.dartDio, requestModelPost5, "https"),
expectedCode);
});
test('POST 6', () {
const expectedCode = r"""import 'package:dio/dio.dart' as dio;
void main() async {
try {
final data = dio.FormData();
final List<Map<String, String>> formDataList = [
{"name": "token", "value": "xyz", "type": "text"},
{
"name": "imfile",
"value": "/Documents/up/1.png",
"type": "file"
}
];
for (var formField in formDataList) {
if (formField['type'] == 'file') {
if (formField['value'] != null) {
data.files.add(MapEntry(
formField['name']!,
await dio.MultipartFile.fromFile(formField['value']!,
filename: formField['value']!),
));
}
} else {
if (formField['value'] != null) {
data.fields
.add(MapEntry(formField['name']!, formField['value']!));
}
}
}
final response = await dio.Dio().post(
'https://api.apidash.dev/io/img',
data: data,
);
print(response.statusCode);
print(response.data);
} on dio.DioException catch (e, s) {
print(e.response?.statusCode);
print(e.response?.data);
print(s);
} catch (e, s) {
print(e);
print(s);
}
}
""";
expect(
codeGen.getCode(CodegenLanguage.dartDio, requestModelPost6, "https"),
expectedCode);
});
test('POST 7', () {
const expectedCode = r"""import 'package:dio/dio.dart' as dio;
void main() async {
try {
final data = dio.FormData();
final List<Map<String, String>> formDataList = [
{"name": "token", "value": "xyz", "type": "text"},
{
"name": "imfile",
"value": "/Documents/up/1.png",
"type": "file"
}
];
for (var formField in formDataList) {
if (formField['type'] == 'file') {
if (formField['value'] != null) {
data.files.add(MapEntry(
formField['name']!,
await dio.MultipartFile.fromFile(formField['value']!,
filename: formField['value']!),
));
}
} else {
if (formField['value'] != null) {
data.fields
.add(MapEntry(formField['name']!, formField['value']!));
}
}
}
final response = await dio.Dio().post(
'https://api.apidash.dev/io/img',
data: data,
);
print(response.statusCode);
print(response.data);
} on dio.DioException catch (e, s) {
print(e.response?.statusCode);
print(e.response?.data);
print(s);
} catch (e, s) {
print(e);
print(s);
}
}
""";
expect(
codeGen.getCode(CodegenLanguage.dartDio, requestModelPost7, "https"),
expectedCode);
});
test('POST 8', () {
const expectedCode = r"""import 'package:dio/dio.dart' as dio;
void main() async {
try {
final queryParams = {
'size': '2',
'len': '3',
};
final data = dio.FormData();
final List<Map<String, String>> formDataList = [
{"name": "text", "value": "API", "type": "text"},
{"name": "sep", "value": "|", "type": "text"},
{"name": "times", "value": "3", "type": "text"}
];
for (var formField in formDataList) {
if (formField['type'] == 'file') {
if (formField['value'] != null) {
data.files.add(MapEntry(
formField['name']!,
await dio.MultipartFile.fromFile(formField['value']!,
filename: formField['value']!),
));
}
} else {
if (formField['value'] != null) {
data.fields
.add(MapEntry(formField['name']!, formField['value']!));
}
}
}
final response = await dio.Dio().post(
'https://api.apidash.dev/io/form',
queryParameters: queryParams,
data: data,
);
print(response.statusCode);
print(response.data);
} on dio.DioException catch (e, s) {
print(e.response?.statusCode);
print(e.response?.data);
print(s);
} catch (e, s) {
print(e);
print(s);
}
}
""";
expect(
codeGen.getCode(CodegenLanguage.dartDio, requestModelPost8, "https"),
expectedCode);
});
test('POST 9', () {
const expectedCode = r"""import 'package:dio/dio.dart' as dio;
void main() async {
try {
final queryParams = {
'size': '2',
'len': '3',
};
final headers = {
'User-Agent': 'Test Agent',
'Keep-Alive': 'true',
};
final data = dio.FormData();
final List<Map<String, String>> formDataList = [
{"name": "token", "value": "xyz", "type": "text"},
{
"name": "imfile",
"value": "/Documents/up/1.png",
"type": "file"
}
];
for (var formField in formDataList) {
if (formField['type'] == 'file') {
if (formField['value'] != null) {
data.files.add(MapEntry(
formField['name']!,
await dio.MultipartFile.fromFile(formField['value']!,
filename: formField['value']!),
));
}
} else {
if (formField['value'] != null) {
data.fields
.add(MapEntry(formField['name']!, formField['value']!));
}
}
}
final response = await dio.Dio().post(
'https://api.apidash.dev/io/img',
queryParameters: queryParams,
options: dio.Options(headers: headers),
data: data,
);
print(response.statusCode);
print(response.data);
} on dio.DioException catch (e, s) {
print(e.response?.statusCode);
print(e.response?.data);
print(s);
} catch (e, s) {
print(e);
print(s);
}
}
""";
expect(
codeGen.getCode(CodegenLanguage.dartDio, requestModelPost9, "https"),
expectedCode);
});
});
group('PUT Request', () {
test('PUT 1', () {
const expectedCode = r"""import 'package:dio/dio.dart' as dio;
@ -461,13 +817,13 @@ void main() async {
"name": "morpheus",
"job": "zion resident"
}''');
final response = await dio.Dio.put(
final response = await dio.Dio().put(
'https://reqres.in/api/users/2',
data: data,
);
print(response.statusCode);
print(response.data);
} on DioException catch (e, s) {
} on dio.DioException catch (e, s) {
print(e.response?.statusCode);
print(e.response?.data);
print(s);
@ -477,7 +833,9 @@ void main() async {
}
}
""";
expect(dartDioCodeGen.getCode(requestModelPut1, "https"), expectedCode);
expect(
codeGen.getCode(CodegenLanguage.dartDio, requestModelPut1, "https"),
expectedCode);
});
});
@ -492,36 +850,13 @@ void main() async {
"name": "marfeus",
"job": "accountant"
}''');
final response = await dio.Dio.patch(
final response = await dio.Dio().patch(
'https://reqres.in/api/users/2',
data: data,
);
print(response.statusCode);
print(response.data);
} on DioException catch (e, s) {
print(e.response?.statusCode);
print(e.response?.data);
print(s);
} catch (e, s) {
print(e);
print(s);
}
}
""";
expect(dartDioCodeGen.getCode(requestModelPatch1, "https"), expectedCode);
});
});
group('DELETE Request', () {
test('DELETE 1', () {
const expectedCode = r"""import 'package:dio/dio.dart' as dio;
void main() async {
try {
final response = await dio.Dio.delete('https://reqres.in/api/users/2');
print(response.statusCode);
print(response.data);
} on DioException catch (e, s) {
} on dio.DioException catch (e, s) {
print(e.response?.statusCode);
print(e.response?.data);
print(s);
@ -532,7 +867,34 @@ void main() async {
}
""";
expect(
dartDioCodeGen.getCode(requestModelDelete1, "https"), expectedCode);
codeGen.getCode(CodegenLanguage.dartDio, requestModelPatch1, "https"),
expectedCode);
});
});
group('DELETE Request', () {
test('DELETE 1', () {
const expectedCode = r"""import 'package:dio/dio.dart' as dio;
void main() async {
try {
final response = await dio.Dio().delete('https://reqres.in/api/users/2');
print(response.statusCode);
print(response.data);
} on dio.DioException catch (e, s) {
print(e.response?.statusCode);
print(e.response?.data);
print(s);
} catch (e, s) {
print(e);
print(s);
}
}
""";
expect(
codeGen.getCode(
CodegenLanguage.dartDio, requestModelDelete1, "https"),
expectedCode);
});
test('DELETE 2', () {
@ -545,13 +907,13 @@ void main() async {
"name": "marfeus",
"job": "accountant"
}''');
final response = await dio.Dio.delete(
final response = await dio.Dio().delete(
'https://reqres.in/api/users/2',
data: data,
);
print(response.statusCode);
print(response.data);
} on DioException catch (e, s) {
} on dio.DioException catch (e, s) {
print(e.response?.statusCode);
print(e.response?.data);
print(s);
@ -562,7 +924,9 @@ void main() async {
}
""";
expect(
dartDioCodeGen.getCode(requestModelDelete2, "https"), expectedCode);
codeGen.getCode(
CodegenLanguage.dartDio, requestModelDelete2, "https"),
expectedCode);
});
});
}

View File

@ -1,10 +1,10 @@
import 'package:apidash/codegen/dart/http.dart';
import 'package:apidash/codegen/codegen.dart';
import 'package:apidash/consts.dart';
import 'package:test/test.dart';
import '../request_models.dart';
void main() {
final dartHttpCodeGen = DartHttpCodeGen();
final codeGen = Codegen();
group('GET Request', () {
test('GET 1', () {
@ -25,7 +25,9 @@ void main() async {
}
}
""";
expect(dartHttpCodeGen.getCode(requestModelGet1, "https"), expectedCode);
expect(
codeGen.getCode(CodegenLanguage.dartHttp, requestModelGet1, "https"),
expectedCode);
});
test('GET 2', () {
@ -50,7 +52,9 @@ void main() async {
}
""";
expect(dartHttpCodeGen.getCode(requestModelGet2, "https"), expectedCode);
expect(
codeGen.getCode(CodegenLanguage.dartHttp, requestModelGet2, "https"),
expectedCode);
});
test('GET 3', () {
@ -76,7 +80,9 @@ void main() async {
}
}
""";
expect(dartHttpCodeGen.getCode(requestModelGet3, "https"), expectedCode);
expect(
codeGen.getCode(CodegenLanguage.dartHttp, requestModelGet3, "https"),
expectedCode);
});
test('GET 4', () {
@ -106,7 +112,9 @@ void main() async {
}
}
""";
expect(dartHttpCodeGen.getCode(requestModelGet4, "https"), expectedCode);
expect(
codeGen.getCode(CodegenLanguage.dartHttp, requestModelGet4, "https"),
expectedCode);
});
test('GET 5', () {
@ -132,7 +140,9 @@ void main() async {
}
}
""";
expect(dartHttpCodeGen.getCode(requestModelGet5, "https"), expectedCode);
expect(
codeGen.getCode(CodegenLanguage.dartHttp, requestModelGet5, "https"),
expectedCode);
});
test('GET 6', () {
@ -161,7 +171,9 @@ void main() async {
}
}
""";
expect(dartHttpCodeGen.getCode(requestModelGet6, "https"), expectedCode);
expect(
codeGen.getCode(CodegenLanguage.dartHttp, requestModelGet6, "https"),
expectedCode);
});
test('GET 7', () {
@ -182,7 +194,9 @@ void main() async {
}
}
""";
expect(dartHttpCodeGen.getCode(requestModelGet7, "https"), expectedCode);
expect(
codeGen.getCode(CodegenLanguage.dartHttp, requestModelGet7, "https"),
expectedCode);
});
test('GET 8', () {
@ -211,7 +225,9 @@ void main() async {
}
}
""";
expect(dartHttpCodeGen.getCode(requestModelGet8, "https"), expectedCode);
expect(
codeGen.getCode(CodegenLanguage.dartHttp, requestModelGet8, "https"),
expectedCode);
});
test('GET 9', () {
@ -238,7 +254,9 @@ void main() async {
}
}
""";
expect(dartHttpCodeGen.getCode(requestModelGet9, "https"), expectedCode);
expect(
codeGen.getCode(CodegenLanguage.dartHttp, requestModelGet9, "https"),
expectedCode);
});
test('GET 10', () {
@ -265,7 +283,8 @@ void main() async {
}
""";
expect(
dartHttpCodeGen.getCode(
codeGen.getCode(
CodegenLanguage.dartHttp,
requestModelGet10,
"https",
),
@ -301,7 +320,9 @@ void main() async {
}
}
""";
expect(dartHttpCodeGen.getCode(requestModelGet11, "https"), expectedCode);
expect(
codeGen.getCode(CodegenLanguage.dartHttp, requestModelGet11, "https"),
expectedCode);
});
test('GET 12', () {
@ -322,7 +343,9 @@ void main() async {
}
}
""";
expect(dartHttpCodeGen.getCode(requestModelGet12, "https"), expectedCode);
expect(
codeGen.getCode(CodegenLanguage.dartHttp, requestModelGet12, "https"),
expectedCode);
});
});
@ -345,7 +368,9 @@ void main() async {
}
}
""";
expect(dartHttpCodeGen.getCode(requestModelHead1, "https"), expectedCode);
expect(
codeGen.getCode(CodegenLanguage.dartHttp, requestModelHead1, "https"),
expectedCode);
});
test('HEAD 2', () {
@ -366,7 +391,9 @@ void main() async {
}
}
""";
expect(dartHttpCodeGen.getCode(requestModelHead2, "http"), expectedCode);
expect(
codeGen.getCode(CodegenLanguage.dartHttp, requestModelHead2, "http"),
expectedCode);
});
});
@ -399,7 +426,9 @@ void main() async {
}
}
""";
expect(dartHttpCodeGen.getCode(requestModelPost1, "https"), expectedCode);
expect(
codeGen.getCode(CodegenLanguage.dartHttp, requestModelPost1, "https"),
expectedCode);
});
test('POST 2', () {
@ -409,7 +438,12 @@ void main() async {
var uri = Uri.parse('https://api.apidash.dev/case/lower');
String body = r'''{
"text": "I LOVE Flutter"
"text": "I LOVE Flutter",
"flag": null,
"male": true,
"female": false,
"no": 1.2,
"arr": ["null", "true", "false", null]
}''';
var headers = {'content-type': 'application/json'};
@ -430,7 +464,9 @@ void main() async {
}
}
""";
expect(dartHttpCodeGen.getCode(requestModelPost2, "https"), expectedCode);
expect(
codeGen.getCode(CodegenLanguage.dartHttp, requestModelPost2, "https"),
expectedCode);
});
test('POST 3', () {
@ -464,7 +500,9 @@ void main() async {
}
}
""";
expect(dartHttpCodeGen.getCode(requestModelPost3, "https"), expectedCode);
expect(
codeGen.getCode(CodegenLanguage.dartHttp, requestModelPost3, "https"),
expectedCode);
});
});
@ -498,7 +536,9 @@ void main() async {
}
}
""";
expect(dartHttpCodeGen.getCode(requestModelPut1, "https"), expectedCode);
expect(
codeGen.getCode(CodegenLanguage.dartHttp, requestModelPut1, "https"),
expectedCode);
});
});
@ -533,7 +573,9 @@ void main() async {
}
""";
expect(
dartHttpCodeGen.getCode(requestModelPatch1, "https"), expectedCode);
codeGen.getCode(
CodegenLanguage.dartHttp, requestModelPatch1, "https"),
expectedCode);
});
});
@ -557,7 +599,9 @@ void main() async {
}
""";
expect(
dartHttpCodeGen.getCode(requestModelDelete1, "https"), expectedCode);
codeGen.getCode(
CodegenLanguage.dartHttp, requestModelDelete1, "https"),
expectedCode);
});
test('DELETE 2', () {
@ -590,7 +634,9 @@ void main() async {
}
""";
expect(
dartHttpCodeGen.getCode(requestModelDelete2, "https"), expectedCode);
codeGen.getCode(
CodegenLanguage.dartHttp, requestModelDelete2, "https"),
expectedCode);
});
});
}

File diff suppressed because it is too large Load Diff

View File

@ -1,9 +1,10 @@
import 'package:apidash/codegen/others/har.dart';
import '../request_models.dart';
import 'package:apidash/codegen/codegen.dart';
import 'package:apidash/consts.dart';
import 'package:test/test.dart';
import '../request_models.dart';
void main() {
final harCodeGen = HARCodeGen();
final codeGen = Codegen();
group('GET Request', () {
test('GET 1', () {
@ -14,7 +15,8 @@ void main() {
"queryString": [],
"headers": []
}""";
expect(harCodeGen.getCode(requestModelGet1, "https"), expectedCode);
expect(codeGen.getCode(CodegenLanguage.har, requestModelGet1, "https"),
expectedCode);
});
test('GET 2', () {
@ -30,7 +32,8 @@ void main() {
],
"headers": []
}""";
expect(harCodeGen.getCode(requestModelGet2, "https"), expectedCode);
expect(codeGen.getCode(CodegenLanguage.har, requestModelGet2, "https"),
expectedCode);
});
test('GET 3', () {
@ -46,7 +49,8 @@ void main() {
],
"headers": []
}""";
expect(harCodeGen.getCode(requestModelGet3, "https"), expectedCode);
expect(codeGen.getCode(CodegenLanguage.har, requestModelGet3, "https"),
expectedCode);
});
test('GET 4', () {
@ -78,7 +82,8 @@ void main() {
],
"headers": []
}""";
expect(harCodeGen.getCode(requestModelGet4, "https"), expectedCode);
expect(codeGen.getCode(CodegenLanguage.har, requestModelGet4, "https"),
expectedCode);
});
test('GET 5', () {
@ -94,7 +99,8 @@ void main() {
}
]
}""";
expect(harCodeGen.getCode(requestModelGet5, "https"), expectedCode);
expect(codeGen.getCode(CodegenLanguage.har, requestModelGet5, "https"),
expectedCode);
});
test('GET 6', () {
@ -115,7 +121,8 @@ void main() {
}
]
}""";
expect(harCodeGen.getCode(requestModelGet6, "https"), expectedCode);
expect(codeGen.getCode(CodegenLanguage.har, requestModelGet6, "https"),
expectedCode);
});
test('GET 7', () {
@ -126,7 +133,8 @@ void main() {
"queryString": [],
"headers": []
}""";
expect(harCodeGen.getCode(requestModelGet7, "https"), expectedCode);
expect(codeGen.getCode(CodegenLanguage.har, requestModelGet7, "https"),
expectedCode);
});
test('GET 8', () {
@ -147,7 +155,8 @@ void main() {
}
]
}""";
expect(harCodeGen.getCode(requestModelGet8, "https"), expectedCode);
expect(codeGen.getCode(CodegenLanguage.har, requestModelGet8, "https"),
expectedCode);
});
test('GET 9', () {
@ -167,7 +176,8 @@ void main() {
],
"headers": []
}""";
expect(harCodeGen.getCode(requestModelGet9, "https"), expectedCode);
expect(codeGen.getCode(CodegenLanguage.har, requestModelGet9, "https"),
expectedCode);
});
test('GET 10', () {
@ -184,7 +194,8 @@ void main() {
]
}""";
expect(
harCodeGen.getCode(
codeGen.getCode(
CodegenLanguage.har,
requestModelGet10,
"https",
),
@ -213,7 +224,8 @@ void main() {
}
]
}""";
expect(harCodeGen.getCode(requestModelGet11, "https"), expectedCode);
expect(codeGen.getCode(CodegenLanguage.har, requestModelGet11, "https"),
expectedCode);
});
test('GET 12', () {
@ -224,7 +236,8 @@ void main() {
"queryString": [],
"headers": []
}""";
expect(harCodeGen.getCode(requestModelGet12, "https"), expectedCode);
expect(codeGen.getCode(CodegenLanguage.har, requestModelGet12, "https"),
expectedCode);
});
});
@ -237,7 +250,8 @@ void main() {
"queryString": [],
"headers": []
}""";
expect(harCodeGen.getCode(requestModelHead1, "https"), expectedCode);
expect(codeGen.getCode(CodegenLanguage.har, requestModelHead1, "https"),
expectedCode);
});
test('HEAD 2', () {
@ -248,7 +262,8 @@ void main() {
"queryString": [],
"headers": []
}""";
expect(harCodeGen.getCode(requestModelHead2, "http"), expectedCode);
expect(codeGen.getCode(CodegenLanguage.har, requestModelHead2, "http"),
expectedCode);
});
});
@ -270,7 +285,8 @@ void main() {
"text": "{\n\"text\": \"I LOVE Flutter\"\n}"
}
}""";
expect(harCodeGen.getCode(requestModelPost1, "https"), expectedCode);
expect(codeGen.getCode(CodegenLanguage.har, requestModelPost1, "https"),
expectedCode);
});
test('POST 2', () {
@ -287,10 +303,11 @@ void main() {
],
"postData": {
"mimeType": "application/json",
"text": "{\n\"text\": \"I LOVE Flutter\"\n}"
"text": "{\n\"text\": \"I LOVE Flutter\",\n\"flag\": null,\n\"male\": true,\n\"female\": false,\n\"no\": 1.2,\n\"arr\": [\"null\", \"true\", \"false\", null]\n}"
}
}""";
expect(harCodeGen.getCode(requestModelPost2, "https"), expectedCode);
expect(codeGen.getCode(CodegenLanguage.har, requestModelPost2, "https"),
expectedCode);
});
test('POST 3', () {
@ -314,7 +331,242 @@ void main() {
"text": "{\n\"text\": \"I LOVE Flutter\"\n}"
}
}""";
expect(harCodeGen.getCode(requestModelPost3, "https"), expectedCode);
expect(codeGen.getCode(CodegenLanguage.har, requestModelPost3, "https"),
expectedCode);
});
test('POST 4', () {
const expectedCode = r"""{
"method": "POST",
"url": "https://api.apidash.dev/io/form",
"httpVersion": "HTTP/1.1",
"queryString": [],
"headers": [
{
"name": "Content-Type",
"value": "multipart/form-data; boundary=d43e2510-a25e-1f08-b0a5-591aeb704467"
}
],
"postData": {
"mimeType": "multipart/form-data; boundary=d43e2510-a25e-1f08-b0a5-591aeb704467",
"params": [
{
"name": "text",
"value": "API"
},
{
"name": "sep",
"value": "|"
},
{
"name": "times",
"value": "3"
}
]
}
}""";
expect(
codeGen.getCode(CodegenLanguage.har, requestModelPost4, "https",
boundary: "d43e2510-a25e-1f08-b0a5-591aeb704467"),
expectedCode);
});
test('POST 5', () {
const expectedCode = r"""{
"method": "POST",
"url": "https://api.apidash.dev/io/form",
"httpVersion": "HTTP/1.1",
"queryString": [],
"headers": [
{
"name": "Content-Type",
"value": "multipart/form-data; boundary=ce268b20-a3e6-1f08-b0a5-591aeb704467"
},
{
"name": "User-Agent",
"value": "Test Agent"
}
],
"postData": {
"mimeType": "multipart/form-data; boundary=ce268b20-a3e6-1f08-b0a5-591aeb704467",
"params": [
{
"name": "text",
"value": "API"
},
{
"name": "sep",
"value": "|"
},
{
"name": "times",
"value": "3"
}
]
}
}""";
expect(
codeGen.getCode(CodegenLanguage.har, requestModelPost5, "https",
boundary: "ce268b20-a3e6-1f08-b0a5-591aeb704467"),
expectedCode);
});
test('POST 6', () {
const expectedCode = r"""{
"method": "POST",
"url": "https://api.apidash.dev/io/img",
"httpVersion": "HTTP/1.1",
"queryString": [],
"headers": [
{
"name": "Content-Type",
"value": "multipart/form-data; boundary=c90d21a0-a44d-1f08-b0a5-591aeb704467"
}
],
"postData": {
"mimeType": "multipart/form-data; boundary=c90d21a0-a44d-1f08-b0a5-591aeb704467",
"params": [
{
"name": "token",
"value": "xyz"
},
{
"name": "imfile",
"fileName": "1.png"
}
]
}
}""";
expect(
codeGen.getCode(CodegenLanguage.har, requestModelPost6, "https",
boundary: "c90d21a0-a44d-1f08-b0a5-591aeb704467"),
expectedCode);
});
test('POST 7', () {
const expectedCode = r"""{
"method": "POST",
"url": "https://api.apidash.dev/io/img",
"httpVersion": "HTTP/1.1",
"queryString": [],
"headers": [
{
"name": "Content-Type",
"value": "multipart/form-data; boundary=4ac86770-a4dc-1f08-b0a5-591aeb704467"
}
],
"postData": {
"mimeType": "multipart/form-data; boundary=4ac86770-a4dc-1f08-b0a5-591aeb704467",
"params": [
{
"name": "token",
"value": "xyz"
},
{
"name": "imfile",
"fileName": "1.png"
}
]
}
}""";
expect(
codeGen.getCode(CodegenLanguage.har, requestModelPost7, "https",
boundary: "4ac86770-a4dc-1f08-b0a5-591aeb704467"),
expectedCode);
});
test('POST 8', () {
const expectedCode = r"""{
"method": "POST",
"url": "https://api.apidash.dev/io/form?size=2&len=3",
"httpVersion": "HTTP/1.1",
"queryString": [
{
"name": "size",
"value": "2"
},
{
"name": "len",
"value": "3"
}
],
"headers": [
{
"name": "Content-Type",
"value": "multipart/form-data; boundary=78403a20-a54a-1f08-b0a5-591aeb704467"
}
],
"postData": {
"mimeType": "multipart/form-data; boundary=78403a20-a54a-1f08-b0a5-591aeb704467",
"params": [
{
"name": "text",
"value": "API"
},
{
"name": "sep",
"value": "|"
},
{
"name": "times",
"value": "3"
}
]
}
}""";
expect(
codeGen.getCode(CodegenLanguage.har, requestModelPost8, "https",
boundary: "78403a20-a54a-1f08-b0a5-591aeb704467"),
expectedCode);
});
test('POST 9', () {
const expectedCode = r"""{
"method": "POST",
"url": "https://api.apidash.dev/io/img?size=2&len=3",
"httpVersion": "HTTP/1.1",
"queryString": [
{
"name": "size",
"value": "2"
},
{
"name": "len",
"value": "3"
}
],
"headers": [
{
"name": "Content-Type",
"value": "multipart/form-data; boundary=2d9cd390-a593-1f08-b0a5-591aeb704467"
},
{
"name": "User-Agent",
"value": "Test Agent"
},
{
"name": "Keep-Alive",
"value": "true"
}
],
"postData": {
"mimeType": "multipart/form-data; boundary=2d9cd390-a593-1f08-b0a5-591aeb704467",
"params": [
{
"name": "token",
"value": "xyz"
},
{
"name": "imfile",
"fileName": "1.png"
}
]
}
}""";
expect(
codeGen.getCode(CodegenLanguage.har, requestModelPost9, "https",
boundary: "2d9cd390-a593-1f08-b0a5-591aeb704467"),
expectedCode);
});
});
@ -336,7 +588,8 @@ void main() {
"text": "{\n\"name\": \"morpheus\",\n\"job\": \"zion resident\"\n}"
}
}""";
expect(harCodeGen.getCode(requestModelPut1, "https"), expectedCode);
expect(codeGen.getCode(CodegenLanguage.har, requestModelPut1, "https"),
expectedCode);
});
});
@ -358,7 +611,8 @@ void main() {
"text": "{\n\"name\": \"marfeus\",\n\"job\": \"accountant\"\n}"
}
}""";
expect(harCodeGen.getCode(requestModelPatch1, "https"), expectedCode);
expect(codeGen.getCode(CodegenLanguage.har, requestModelPatch1, "https"),
expectedCode);
});
});
@ -371,7 +625,8 @@ void main() {
"queryString": [],
"headers": []
}""";
expect(harCodeGen.getCode(requestModelDelete1, "https"), expectedCode);
expect(codeGen.getCode(CodegenLanguage.har, requestModelDelete1, "https"),
expectedCode);
});
test('DELETE 2', () {
@ -391,7 +646,8 @@ void main() {
"text": "{\n\"name\": \"marfeus\",\n\"job\": \"accountant\"\n}"
}
}""";
expect(harCodeGen.getCode(requestModelDelete2, "https"), expectedCode);
expect(codeGen.getCode(CodegenLanguage.har, requestModelDelete2, "https"),
expectedCode);
});
});
}

View File

@ -1,9 +1,10 @@
import 'package:apidash/codegen/js/axios.dart';
import '../request_models.dart';
import 'package:apidash/codegen/codegen.dart';
import 'package:apidash/consts.dart';
import 'package:test/test.dart';
import '../request_models.dart';
void main() {
final axiosCodeGen = AxiosCodeGen();
final codeGen = Codegen();
group('GET Request', () {
test('GET 1', () {
@ -24,7 +25,9 @@ axios(config)
console.log(error);
});
""";
expect(axiosCodeGen.getCode(requestModelGet1, "https"), expectedCode);
expect(
codeGen.getCode(CodegenLanguage.jsAxios, requestModelGet1, "https"),
expectedCode);
});
test('GET 2', () {
@ -48,7 +51,9 @@ axios(config)
console.log(error);
});
""";
expect(axiosCodeGen.getCode(requestModelGet2, "https"), expectedCode);
expect(
codeGen.getCode(CodegenLanguage.jsAxios, requestModelGet2, "https"),
expectedCode);
});
test('GET 3', () {
@ -72,7 +77,9 @@ axios(config)
console.log(error);
});
""";
expect(axiosCodeGen.getCode(requestModelGet3, "https"), expectedCode);
expect(
codeGen.getCode(CodegenLanguage.jsAxios, requestModelGet3, "https"),
expectedCode);
});
test('GET 4', () {
@ -100,7 +107,9 @@ axios(config)
console.log(error);
});
""";
expect(axiosCodeGen.getCode(requestModelGet4, "https"), expectedCode);
expect(
codeGen.getCode(CodegenLanguage.jsAxios, requestModelGet4, "https"),
expectedCode);
});
test('GET 5', () {
@ -124,7 +133,9 @@ axios(config)
console.log(error);
});
""";
expect(axiosCodeGen.getCode(requestModelGet5, "https"), expectedCode);
expect(
codeGen.getCode(CodegenLanguage.jsAxios, requestModelGet5, "https"),
expectedCode);
});
test('GET 6', () {
@ -151,7 +162,9 @@ axios(config)
console.log(error);
});
""";
expect(axiosCodeGen.getCode(requestModelGet6, "https"), expectedCode);
expect(
codeGen.getCode(CodegenLanguage.jsAxios, requestModelGet6, "https"),
expectedCode);
});
test('GET 7', () {
@ -172,7 +185,9 @@ axios(config)
console.log(error);
});
""";
expect(axiosCodeGen.getCode(requestModelGet7, "https"), expectedCode);
expect(
codeGen.getCode(CodegenLanguage.jsAxios, requestModelGet7, "https"),
expectedCode);
});
test('GET 8', () {
@ -199,7 +214,9 @@ axios(config)
console.log(error);
});
""";
expect(axiosCodeGen.getCode(requestModelGet8, "https"), expectedCode);
expect(
codeGen.getCode(CodegenLanguage.jsAxios, requestModelGet8, "https"),
expectedCode);
});
test('GET 9', () {
@ -224,7 +241,9 @@ axios(config)
console.log(error);
});
""";
expect(axiosCodeGen.getCode(requestModelGet9, "https"), expectedCode);
expect(
codeGen.getCode(CodegenLanguage.jsAxios, requestModelGet9, "https"),
expectedCode);
});
test('GET 10', () {
@ -249,7 +268,8 @@ axios(config)
});
""";
expect(
axiosCodeGen.getCode(
codeGen.getCode(
CodegenLanguage.jsAxios,
requestModelGet10,
"https",
),
@ -281,7 +301,9 @@ axios(config)
console.log(error);
});
""";
expect(axiosCodeGen.getCode(requestModelGet11, "https"), expectedCode);
expect(
codeGen.getCode(CodegenLanguage.jsAxios, requestModelGet11, "https"),
expectedCode);
});
test('GET 12', () {
@ -302,7 +324,9 @@ axios(config)
console.log(error);
});
""";
expect(axiosCodeGen.getCode(requestModelGet12, "https"), expectedCode);
expect(
codeGen.getCode(CodegenLanguage.jsAxios, requestModelGet12, "https"),
expectedCode);
});
});
@ -325,7 +349,9 @@ axios(config)
console.log(error);
});
""";
expect(axiosCodeGen.getCode(requestModelHead1, "https"), expectedCode);
expect(
codeGen.getCode(CodegenLanguage.jsAxios, requestModelHead1, "https"),
expectedCode);
});
test('HEAD 2', () {
@ -346,7 +372,9 @@ axios(config)
console.log(error);
});
""";
expect(axiosCodeGen.getCode(requestModelHead2, "http"), expectedCode);
expect(
codeGen.getCode(CodegenLanguage.jsAxios, requestModelHead2, "http"),
expectedCode);
});
});
@ -373,7 +401,9 @@ axios(config)
console.log(error);
});
""";
expect(axiosCodeGen.getCode(requestModelPost1, "https"), expectedCode);
expect(
codeGen.getCode(CodegenLanguage.jsAxios, requestModelPost1, "https"),
expectedCode);
});
test('POST 2', () {
@ -383,7 +413,7 @@ axios(config)
headers: {
"Content-Type": "application/json"
},
data: "{\n\"text\": \"I LOVE Flutter\"\n}"
data: "{\n\"text\": \"I LOVE Flutter\",\n\"flag\": null,\n\"male\": true,\n\"female\": false,\n\"no\": 1.2,\n\"arr\": [\"null\", \"true\", \"false\", null]\n}"
};
axios(config)
@ -398,7 +428,9 @@ axios(config)
console.log(error);
});
""";
expect(axiosCodeGen.getCode(requestModelPost2, "https"), expectedCode);
expect(
codeGen.getCode(CodegenLanguage.jsAxios, requestModelPost2, "https"),
expectedCode);
});
test('POST 3', () {
@ -424,7 +456,9 @@ axios(config)
console.log(error);
});
""";
expect(axiosCodeGen.getCode(requestModelPost3, "https"), expectedCode);
expect(
codeGen.getCode(CodegenLanguage.jsAxios, requestModelPost3, "https"),
expectedCode);
});
});
@ -451,7 +485,9 @@ axios(config)
console.log(error);
});
""";
expect(axiosCodeGen.getCode(requestModelPut1, "https"), expectedCode);
expect(
codeGen.getCode(CodegenLanguage.jsAxios, requestModelPut1, "https"),
expectedCode);
});
});
@ -478,7 +514,9 @@ axios(config)
console.log(error);
});
""";
expect(axiosCodeGen.getCode(requestModelPatch1, "https"), expectedCode);
expect(
codeGen.getCode(CodegenLanguage.jsAxios, requestModelPatch1, "https"),
expectedCode);
});
});
@ -501,7 +539,10 @@ axios(config)
console.log(error);
});
""";
expect(axiosCodeGen.getCode(requestModelDelete1, "https"), expectedCode);
expect(
codeGen.getCode(
CodegenLanguage.jsAxios, requestModelDelete1, "https"),
expectedCode);
});
test('DELETE 2', () {
@ -526,7 +567,10 @@ axios(config)
console.log(error);
});
""";
expect(axiosCodeGen.getCode(requestModelDelete2, "https"), expectedCode);
expect(
codeGen.getCode(
CodegenLanguage.jsAxios, requestModelDelete2, "https"),
expectedCode);
});
});
}

View File

@ -1,9 +1,10 @@
import 'package:apidash/codegen/js/fetch.dart';
import '../request_models.dart';
import 'package:apidash/codegen/codegen.dart';
import 'package:apidash/consts.dart';
import 'package:test/test.dart';
import '../request_models.dart';
void main() {
final fetchCodeGen = FetchCodeGen();
final codeGen = Codegen();
group('GET Request', () {
test('GET 1', () {
@ -28,7 +29,9 @@ fetch(url, options)
console.error('error:' + err);
});
""";
expect(fetchCodeGen.getCode(requestModelGet1, "https"), expectedCode);
expect(
codeGen.getCode(CodegenLanguage.jsFetch, requestModelGet1, "https"),
expectedCode);
});
test('GET 2', () {
@ -54,7 +57,9 @@ fetch(url, options)
console.error('error:' + err);
});
""";
expect(fetchCodeGen.getCode(requestModelGet2, "https"), expectedCode);
expect(
codeGen.getCode(CodegenLanguage.jsFetch, requestModelGet2, "https"),
expectedCode);
});
test('GET 3', () {
@ -80,7 +85,9 @@ fetch(url, options)
console.error('error:' + err);
});
""";
expect(fetchCodeGen.getCode(requestModelGet3, "https"), expectedCode);
expect(
codeGen.getCode(CodegenLanguage.jsFetch, requestModelGet3, "https"),
expectedCode);
});
test('GET 4', () {
@ -106,7 +113,9 @@ fetch(url, options)
console.error('error:' + err);
});
""";
expect(fetchCodeGen.getCode(requestModelGet4, "https"), expectedCode);
expect(
codeGen.getCode(CodegenLanguage.jsFetch, requestModelGet4, "https"),
expectedCode);
});
test('GET 5', () {
@ -135,7 +144,9 @@ fetch(url, options)
console.error('error:' + err);
});
""";
expect(fetchCodeGen.getCode(requestModelGet5, "https"), expectedCode);
expect(
codeGen.getCode(CodegenLanguage.jsFetch, requestModelGet5, "https"),
expectedCode);
});
test('GET 6', () {
@ -164,7 +175,9 @@ fetch(url, options)
console.error('error:' + err);
});
""";
expect(fetchCodeGen.getCode(requestModelGet6, "https"), expectedCode);
expect(
codeGen.getCode(CodegenLanguage.jsFetch, requestModelGet6, "https"),
expectedCode);
});
test('GET 7', () {
@ -189,7 +202,9 @@ fetch(url, options)
console.error('error:' + err);
});
""";
expect(fetchCodeGen.getCode(requestModelGet7, "https"), expectedCode);
expect(
codeGen.getCode(CodegenLanguage.jsFetch, requestModelGet7, "https"),
expectedCode);
});
test('GET 8', () {
@ -218,7 +233,9 @@ fetch(url, options)
console.error('error:' + err);
});
""";
expect(fetchCodeGen.getCode(requestModelGet8, "https"), expectedCode);
expect(
codeGen.getCode(CodegenLanguage.jsFetch, requestModelGet8, "https"),
expectedCode);
});
test('GET 9', () {
@ -244,7 +261,9 @@ fetch(url, options)
console.error('error:' + err);
});
""";
expect(fetchCodeGen.getCode(requestModelGet9, "https"), expectedCode);
expect(
codeGen.getCode(CodegenLanguage.jsFetch, requestModelGet9, "https"),
expectedCode);
});
test('GET 10', () {
@ -274,7 +293,8 @@ fetch(url, options)
});
""";
expect(
fetchCodeGen.getCode(
codeGen.getCode(
CodegenLanguage.jsFetch,
requestModelGet10,
"https",
),
@ -307,7 +327,9 @@ fetch(url, options)
console.error('error:' + err);
});
""";
expect(fetchCodeGen.getCode(requestModelGet11, "https"), expectedCode);
expect(
codeGen.getCode(CodegenLanguage.jsFetch, requestModelGet11, "https"),
expectedCode);
});
test('GET 12', () {
@ -333,7 +355,9 @@ fetch(url, options)
console.error('error:' + err);
});
""";
expect(fetchCodeGen.getCode(requestModelGet12, "https"), expectedCode);
expect(
codeGen.getCode(CodegenLanguage.jsFetch, requestModelGet12, "https"),
expectedCode);
});
});
@ -360,7 +384,9 @@ fetch(url, options)
console.error('error:' + err);
});
""";
expect(fetchCodeGen.getCode(requestModelHead1, "https"), expectedCode);
expect(
codeGen.getCode(CodegenLanguage.jsFetch, requestModelHead1, "https"),
expectedCode);
});
test('HEAD 2', () {
@ -385,7 +411,9 @@ fetch(url, options)
console.error('error:' + err);
});
""";
expect(fetchCodeGen.getCode(requestModelHead2, "http"), expectedCode);
expect(
codeGen.getCode(CodegenLanguage.jsFetch, requestModelHead2, "http"),
expectedCode);
});
});
@ -417,7 +445,9 @@ fetch(url, options)
console.error('error:' + err);
});
""";
expect(fetchCodeGen.getCode(requestModelPost1, "https"), expectedCode);
expect(
codeGen.getCode(CodegenLanguage.jsFetch, requestModelPost1, "https"),
expectedCode);
});
test('POST 2', () {
@ -429,7 +459,7 @@ let options = {
"Content-Type": "application/json"
},
body:
"{\n\"text\": \"I LOVE Flutter\"\n}"
"{\n\"text\": \"I LOVE Flutter\",\n\"flag\": null,\n\"male\": true,\n\"female\": false,\n\"no\": 1.2,\n\"arr\": [\"null\", \"true\", \"false\", null]\n}"
};
let status;
@ -447,7 +477,9 @@ fetch(url, options)
console.error('error:' + err);
});
""";
expect(fetchCodeGen.getCode(requestModelPost2, "https"), expectedCode);
expect(
codeGen.getCode(CodegenLanguage.jsFetch, requestModelPost2, "https"),
expectedCode);
});
test('POST 3', () {
@ -478,7 +510,9 @@ fetch(url, options)
console.error('error:' + err);
});
""";
expect(fetchCodeGen.getCode(requestModelPost3, "https"), expectedCode);
expect(
codeGen.getCode(CodegenLanguage.jsFetch, requestModelPost3, "https"),
expectedCode);
});
});
@ -510,7 +544,9 @@ fetch(url, options)
console.error('error:' + err);
});
""";
expect(fetchCodeGen.getCode(requestModelPut1, "https"), expectedCode);
expect(
codeGen.getCode(CodegenLanguage.jsFetch, requestModelPut1, "https"),
expectedCode);
});
});
@ -542,7 +578,9 @@ fetch(url, options)
console.error('error:' + err);
});
""";
expect(fetchCodeGen.getCode(requestModelPatch1, "https"), expectedCode);
expect(
codeGen.getCode(CodegenLanguage.jsFetch, requestModelPatch1, "https"),
expectedCode);
});
});
@ -569,7 +607,10 @@ fetch(url, options)
console.error('error:' + err);
});
""";
expect(fetchCodeGen.getCode(requestModelDelete1, "https"), expectedCode);
expect(
codeGen.getCode(
CodegenLanguage.jsFetch, requestModelDelete1, "https"),
expectedCode);
});
test('DELETE 2', () {
@ -599,7 +640,10 @@ fetch(url, options)
console.error('error:' + err);
});
""";
expect(fetchCodeGen.getCode(requestModelDelete2, "https"), expectedCode);
expect(
codeGen.getCode(
CodegenLanguage.jsFetch, requestModelDelete2, "https"),
expectedCode);
});
});
}

View File

@ -0,0 +1,453 @@
import 'package:apidash/codegen/codegen.dart';
import 'package:apidash/consts.dart';
import 'package:test/test.dart';
import '../request_models.dart';
void main() {
final codeGen = Codegen();
group('GET Request', () {
test('GET 1', () {
const expectedCode = r"""using HTTP,JSON
url = "https://api.apidash.dev"
response = HTTP.get(url)
println("Status Code:", response.status)
println("Response Body:", String(response.body))
""";
expect(
codeGen.getCode(CodegenLanguage.juliaHttp, requestModelGet1, "https"),
expectedCode);
});
test('GET 2', () {
const expectedCode = r"""using HTTP,JSON
url = "https://api.apidash.dev/country/data"
params = Dict(
"code"=> "US"
)
response = HTTP.get(url, query=params)
println("Status Code:", response.status)
println("Response Body:", String(response.body))
""";
expect(
codeGen.getCode(CodegenLanguage.juliaHttp, requestModelGet2, "https"),
expectedCode);
});
test('GET 3', () {
const expectedCode = r"""using HTTP,JSON
url = "https://api.apidash.dev/country/data"
params = Dict(
"code"=> "IND"
)
response = HTTP.get(url, query=params)
println("Status Code:", response.status)
println("Response Body:", String(response.body))
""";
expect(
codeGen.getCode(CodegenLanguage.juliaHttp, requestModelGet3, "https"),
expectedCode);
});
test('GET 4', () {
const expectedCode = r"""using HTTP,JSON
url = "https://api.apidash.dev/humanize/social"
params = Dict(
"num"=> "8700000",
"digits"=> "3",
"system"=> "SS",
"add_space"=> "true",
"trailing_zeros"=> "true"
)
response = HTTP.get(url, query=params)
println("Status Code:", response.status)
println("Response Body:", String(response.body))
""";
expect(
codeGen.getCode(CodegenLanguage.juliaHttp, requestModelGet4, "https"),
expectedCode);
});
test('GET 5', () {
const expectedCode = r"""using HTTP,JSON
url = "https://api.github.com/repos/foss42/apidash"
headers = Dict(
"User-Agent"=> "Test Agent"
)
response = HTTP.get(url, headers=headers)
println("Status Code:", response.status)
println("Response Body:", String(response.body))
""";
expect(
codeGen.getCode(CodegenLanguage.juliaHttp, requestModelGet5, "https"),
expectedCode);
});
test('GET 6', () {
const expectedCode = r"""using HTTP,JSON
url = "https://api.github.com/repos/foss42/apidash"
params = Dict(
"raw"=> "true"
)
headers = Dict(
"User-Agent"=> "Test Agent"
)
response = HTTP.get(url, query=params, headers=headers)
println("Status Code:", response.status)
println("Response Body:", String(response.body))
""";
expect(
codeGen.getCode(CodegenLanguage.juliaHttp, requestModelGet6, "https"),
expectedCode);
});
test('GET 7', () {
const expectedCode = r"""using HTTP,JSON
url = "https://api.apidash.dev"
response = HTTP.get(url)
println("Status Code:", response.status)
println("Response Body:", String(response.body))
""";
expect(
codeGen.getCode(CodegenLanguage.juliaHttp, requestModelGet7, "https"),
expectedCode);
});
test('GET 8', () {
const expectedCode = r"""using HTTP,JSON
url = "https://api.github.com/repos/foss42/apidash"
params = Dict(
"raw"=> "true"
)
headers = Dict(
"User-Agent"=> "Test Agent"
)
response = HTTP.get(url, query=params, headers=headers)
println("Status Code:", response.status)
println("Response Body:", String(response.body))
""";
expect(
codeGen.getCode(CodegenLanguage.juliaHttp, requestModelGet8, "https"),
expectedCode);
});
test('GET 9', () {
const expectedCode = r"""using HTTP,JSON
url = "https://api.apidash.dev/humanize/social"
params = Dict(
"num"=> "8700000",
"add_space"=> "true"
)
response = HTTP.get(url, query=params)
println("Status Code:", response.status)
println("Response Body:", String(response.body))
""";
expect(
codeGen.getCode(CodegenLanguage.juliaHttp, requestModelGet9, "https"),
expectedCode);
});
test('GET 10', () {
const expectedCode = r"""using HTTP,JSON
url = "https://api.apidash.dev/humanize/social"
headers = Dict(
"User-Agent"=> "Test Agent"
)
response = HTTP.get(url, headers=headers)
println("Status Code:", response.status)
println("Response Body:", String(response.body))
""";
expect(
codeGen.getCode(
CodegenLanguage.juliaHttp, requestModelGet10, "https"),
expectedCode);
});
test('GET 11', () {
const expectedCode = r"""using HTTP,JSON
url = "https://api.apidash.dev/humanize/social"
params = Dict(
"num"=> "8700000",
"digits"=> "3"
)
headers = Dict(
"User-Agent"=> "Test Agent"
)
response = HTTP.get(url, query=params, headers=headers)
println("Status Code:", response.status)
println("Response Body:", String(response.body))
""";
expect(
codeGen.getCode(
CodegenLanguage.juliaHttp, requestModelGet11, "https"),
expectedCode);
});
test('GET 12', () {
const expectedCode = r"""using HTTP,JSON
url = "https://api.apidash.dev/humanize/social"
response = HTTP.get(url)
println("Status Code:", response.status)
println("Response Body:", String(response.body))
""";
expect(
codeGen.getCode(
CodegenLanguage.juliaHttp, requestModelGet12, "https"),
expectedCode);
});
});
group('HEAD Request', () {
test('HEAD 1', () {
const expectedCode = r"""using HTTP,JSON
url = "https://api.apidash.dev"
response = HTTP.head(url)
println("Status Code:", response.status)
println("Response Body:", String(response.body))
""";
expect(
codeGen.getCode(
CodegenLanguage.juliaHttp, requestModelHead1, "https"),
expectedCode);
});
test('HEAD 2', () {
const expectedCode = r"""using HTTP,JSON
url = "https://api.apidash.dev"
response = HTTP.head(url)
println("Status Code:", response.status)
println("Response Body:", String(response.body))
""";
expect(
codeGen.getCode(
CodegenLanguage.juliaHttp, requestModelHead2, "https"),
expectedCode);
});
});
group('POST Request', () {
test('POST 1', () {
const expectedCode = r"""using HTTP,JSON
url = "https://api.apidash.dev/case/lower"
payload = Dict(
"text"=> "I LOVE Flutter"
)
headers = Dict(
"content-type"=> "text/plain"
)
response = HTTP.post(url, payload=payload, headers=headers)
println("Status Code:", response.status)
println("Response Body:", String(response.body))
""";
expect(
codeGen.getCode(
CodegenLanguage.juliaHttp, requestModelPost1, "https"),
expectedCode);
});
test('POST 2', () {
const expectedCode = r"""using HTTP,JSON
url = "https://api.apidash.dev/case/lower"
payload = Dict(
"text"=> "I LOVE Flutter",
"flag"=> null,
"male"=> true,
"female"=> false,
"no"=> 1.2,
"arr"=> ["null", "true", "false", null]
)
response = HTTP.post(url, JSON.json(payload))
println("Status Code:", response.status)
println("Response Body:", String(response.body))
""";
expect(
codeGen.getCode(
CodegenLanguage.juliaHttp, requestModelPost2, "https"),
expectedCode);
});
test('POST 3', () {
const expectedCode = r"""using HTTP,JSON
url = "https://api.apidash.dev/case/lower"
payload = Dict(
"text"=> "I LOVE Flutter"
)
headers = Dict(
"User-Agent"=> "Test Agent"
)
response = HTTP.post(url, JSON.json(payload), headers=headers)
println("Status Code:", response.status)
println("Response Body:", String(response.body))
""";
expect(
codeGen.getCode(
CodegenLanguage.juliaHttp, requestModelPost3, "https"),
expectedCode);
});
});
group('PUT Request', () {
test('PUT 1', () {
const expectedCode = r"""using HTTP,JSON
url = "https://reqres.in/api/users/2"
payload = Dict(
"name"=> "morpheus",
"job"=> "zion resident"
)
response = HTTP.put(url, JSON.json(payload))
println("Status Code:", response.status)
println("Response Body:", String(response.body))
""";
expect(
codeGen.getCode(CodegenLanguage.juliaHttp, requestModelPut1, "https"),
expectedCode);
});
});
group('PATCH Request', () {
test('PATCH 1', () {
const expectedCode = r"""using HTTP,JSON
url = "https://reqres.in/api/users/2"
payload = Dict(
"name"=> "marfeus",
"job"=> "accountant"
)
response = HTTP.patch(url, JSON.json(payload))
println("Status Code:", response.status)
println("Response Body:", String(response.body))
""";
expect(
codeGen.getCode(
CodegenLanguage.juliaHttp, requestModelPatch1, "https"),
expectedCode);
});
});
group('DELETE Request', () {
test('DELETE 1', () {
const expectedCode = r"""using HTTP,JSON
url = "https://reqres.in/api/users/2"
response = HTTP.delete(url)
println("Status Code:", response.status)
println("Response Body:", String(response.body))
""";
expect(
codeGen.getCode(
CodegenLanguage.juliaHttp, requestModelDelete1, "https"),
expectedCode);
});
test('DELETE 2', () {
const expectedCode = r"""using HTTP,JSON
url = "https://reqres.in/api/users/2"
payload = Dict(
"name"=> "marfeus",
"job"=> "accountant"
)
response = HTTP.delete(url, JSON.json(payload))
println("Status Code:", response.status)
println("Response Body:", String(response.body))
""";
expect(
codeGen.getCode(
CodegenLanguage.juliaHttp, requestModelDelete2, "https"),
expectedCode);
});
});
}

View File

@ -1,9 +1,10 @@
import 'package:apidash/codegen/kotlin/okhttp.dart';
import 'package:apidash/codegen/codegen.dart';
import 'package:apidash/consts.dart';
import 'package:test/test.dart';
import '../request_models.dart';
void main() {
final kotlinOkHttpCodeGen = KotlinOkHttpCodeGen();
final codeGen = Codegen();
group('GET Request', () {
test('GET 1', () {
@ -27,7 +28,9 @@ fun main() {
}
""";
expect(
kotlinOkHttpCodeGen.getCode(requestModelGet1, "https"), expectedCode);
codeGen.getCode(
CodegenLanguage.kotlinOkHttp, requestModelGet1, "https"),
expectedCode);
});
test('GET 2', () {
@ -54,7 +57,9 @@ fun main() {
}
""";
expect(
kotlinOkHttpCodeGen.getCode(requestModelGet2, "https"), expectedCode);
codeGen.getCode(
CodegenLanguage.kotlinOkHttp, requestModelGet2, "https"),
expectedCode);
});
test('GET 3', () {
@ -81,7 +86,9 @@ fun main() {
}
""";
expect(
kotlinOkHttpCodeGen.getCode(requestModelGet3, "https"), expectedCode);
codeGen.getCode(
CodegenLanguage.kotlinOkHttp, requestModelGet3, "https"),
expectedCode);
});
test('GET 4', () {
@ -112,7 +119,9 @@ fun main() {
}
""";
expect(
kotlinOkHttpCodeGen.getCode(requestModelGet4, "https"), expectedCode);
codeGen.getCode(
CodegenLanguage.kotlinOkHttp, requestModelGet4, "https"),
expectedCode);
});
test('GET 5', () {
@ -137,7 +146,9 @@ fun main() {
}
""";
expect(
kotlinOkHttpCodeGen.getCode(requestModelGet5, "https"), expectedCode);
codeGen.getCode(
CodegenLanguage.kotlinOkHttp, requestModelGet5, "https"),
expectedCode);
});
test('GET 6', () {
@ -165,7 +176,9 @@ fun main() {
}
""";
expect(
kotlinOkHttpCodeGen.getCode(requestModelGet6, "https"), expectedCode);
codeGen.getCode(
CodegenLanguage.kotlinOkHttp, requestModelGet6, "https"),
expectedCode);
});
test('GET 7', () {
@ -189,7 +202,9 @@ fun main() {
}
""";
expect(
kotlinOkHttpCodeGen.getCode(requestModelGet7, "https"), expectedCode);
codeGen.getCode(
CodegenLanguage.kotlinOkHttp, requestModelGet7, "https"),
expectedCode);
});
test('GET 8', () {
@ -217,7 +232,9 @@ fun main() {
}
""";
expect(
kotlinOkHttpCodeGen.getCode(requestModelGet8, "https"), expectedCode);
codeGen.getCode(
CodegenLanguage.kotlinOkHttp, requestModelGet8, "https"),
expectedCode);
});
test('GET 9', () {
@ -245,7 +262,9 @@ fun main() {
}
""";
expect(
kotlinOkHttpCodeGen.getCode(requestModelGet9, "https"), expectedCode);
codeGen.getCode(
CodegenLanguage.kotlinOkHttp, requestModelGet9, "https"),
expectedCode);
});
test('GET 10', () {
@ -270,7 +289,8 @@ fun main() {
}
""";
expect(
kotlinOkHttpCodeGen.getCode(
codeGen.getCode(
CodegenLanguage.kotlinOkHttp,
requestModelGet10,
"https",
),
@ -302,7 +322,9 @@ fun main() {
println(response.body?.string())
}
""";
expect(kotlinOkHttpCodeGen.getCode(requestModelGet11, "https"),
expect(
codeGen.getCode(
CodegenLanguage.kotlinOkHttp, requestModelGet11, "https"),
expectedCode);
});
@ -326,7 +348,9 @@ fun main() {
println(response.body?.string())
}
""";
expect(kotlinOkHttpCodeGen.getCode(requestModelGet12, "https"),
expect(
codeGen.getCode(
CodegenLanguage.kotlinOkHttp, requestModelGet12, "https"),
expectedCode);
});
});
@ -352,7 +376,9 @@ fun main() {
println(response.body?.string())
}
""";
expect(kotlinOkHttpCodeGen.getCode(requestModelHead1, "https"),
expect(
codeGen.getCode(
CodegenLanguage.kotlinOkHttp, requestModelHead1, "https"),
expectedCode);
});
@ -377,7 +403,9 @@ fun main() {
}
""";
expect(
kotlinOkHttpCodeGen.getCode(requestModelHead2, "http"), expectedCode);
codeGen.getCode(
CodegenLanguage.kotlinOkHttp, requestModelHead2, "http"),
expectedCode);
});
});
@ -410,7 +438,9 @@ fun main() {
println(response.body?.string())
}
''';
expect(kotlinOkHttpCodeGen.getCode(requestModelPost1, "https"),
expect(
codeGen.getCode(
CodegenLanguage.kotlinOkHttp, requestModelPost1, "https"),
expectedCode);
});
@ -428,7 +458,12 @@ fun main() {
val mediaType = "application/json".toMediaType()
val body = """{
"text": "I LOVE Flutter"
"text": "I LOVE Flutter",
"flag": null,
"male": true,
"female": false,
"no": 1.2,
"arr": ["null", "true", "false", null]
}""".toRequestBody(mediaType)
val request = Request.Builder()
@ -442,7 +477,9 @@ fun main() {
println(response.body?.string())
}
''';
expect(kotlinOkHttpCodeGen.getCode(requestModelPost2, "https"),
expect(
codeGen.getCode(
CodegenLanguage.kotlinOkHttp, requestModelPost2, "https"),
expectedCode);
});
@ -475,7 +512,9 @@ fun main() {
println(response.body?.string())
}
''';
expect(kotlinOkHttpCodeGen.getCode(requestModelPost3, "https"),
expect(
codeGen.getCode(
CodegenLanguage.kotlinOkHttp, requestModelPost3, "https"),
expectedCode);
});
@ -504,7 +543,9 @@ fun main() {
println(response.body?.string())
}
''';
expect(kotlinOkHttpCodeGen.getCode(requestModelPost5, "https"),
expect(
codeGen.getCode(
CodegenLanguage.kotlinOkHttp, requestModelPost5, "https"),
expectedCode);
});
});
@ -540,7 +581,9 @@ fun main() {
}
''';
expect(
kotlinOkHttpCodeGen.getCode(requestModelPut1, "https"), expectedCode);
codeGen.getCode(
CodegenLanguage.kotlinOkHttp, requestModelPut1, "https"),
expectedCode);
});
});
@ -574,7 +617,9 @@ fun main() {
println(response.body?.string())
}
''';
expect(kotlinOkHttpCodeGen.getCode(requestModelPatch1, "https"),
expect(
codeGen.getCode(
CodegenLanguage.kotlinOkHttp, requestModelPatch1, "https"),
expectedCode);
});
});
@ -600,7 +645,9 @@ fun main() {
println(response.body?.string())
}
""";
expect(kotlinOkHttpCodeGen.getCode(requestModelDelete1, "https"),
expect(
codeGen.getCode(
CodegenLanguage.kotlinOkHttp, requestModelDelete1, "https"),
expectedCode);
});
@ -633,7 +680,9 @@ fun main() {
println(response.body?.string())
}
''';
expect(kotlinOkHttpCodeGen.getCode(requestModelDelete2, "https"),
expect(
codeGen.getCode(
CodegenLanguage.kotlinOkHttp, requestModelDelete2, "https"),
expectedCode);
});
});

View File

@ -1,9 +1,10 @@
import 'package:apidash/codegen/js/axios.dart';
import '../request_models.dart';
import 'package:apidash/codegen/codegen.dart';
import 'package:apidash/consts.dart';
import 'package:test/test.dart';
import '../request_models.dart';
void main() {
final axiosCodeGen = AxiosCodeGen(isNodeJs: true);
final codeGen = Codegen();
group('GET Request', () {
test('GET 1', () {
@ -26,7 +27,10 @@ axios(config)
console.log(error);
});
""";
expect(axiosCodeGen.getCode(requestModelGet1, "https"), expectedCode);
expect(
codeGen.getCode(
CodegenLanguage.nodejsAxios, requestModelGet1, "https"),
expectedCode);
});
test('GET 2', () {
@ -52,7 +56,10 @@ axios(config)
console.log(error);
});
""";
expect(axiosCodeGen.getCode(requestModelGet2, "https"), expectedCode);
expect(
codeGen.getCode(
CodegenLanguage.nodejsAxios, requestModelGet2, "https"),
expectedCode);
});
test('GET 3', () {
@ -78,7 +85,10 @@ axios(config)
console.log(error);
});
""";
expect(axiosCodeGen.getCode(requestModelGet3, "https"), expectedCode);
expect(
codeGen.getCode(
CodegenLanguage.nodejsAxios, requestModelGet3, "https"),
expectedCode);
});
test('GET 4', () {
@ -108,7 +118,10 @@ axios(config)
console.log(error);
});
""";
expect(axiosCodeGen.getCode(requestModelGet4, "https"), expectedCode);
expect(
codeGen.getCode(
CodegenLanguage.nodejsAxios, requestModelGet4, "https"),
expectedCode);
});
test('GET 5', () {
@ -134,7 +147,10 @@ axios(config)
console.log(error);
});
""";
expect(axiosCodeGen.getCode(requestModelGet5, "https"), expectedCode);
expect(
codeGen.getCode(
CodegenLanguage.nodejsAxios, requestModelGet5, "https"),
expectedCode);
});
test('GET 6', () {
@ -163,7 +179,10 @@ axios(config)
console.log(error);
});
""";
expect(axiosCodeGen.getCode(requestModelGet6, "https"), expectedCode);
expect(
codeGen.getCode(
CodegenLanguage.nodejsAxios, requestModelGet6, "https"),
expectedCode);
});
test('GET 7', () {
@ -186,7 +205,10 @@ axios(config)
console.log(error);
});
""";
expect(axiosCodeGen.getCode(requestModelGet7, "https"), expectedCode);
expect(
codeGen.getCode(
CodegenLanguage.nodejsAxios, requestModelGet7, "https"),
expectedCode);
});
test('GET 8', () {
@ -215,7 +237,10 @@ axios(config)
console.log(error);
});
""";
expect(axiosCodeGen.getCode(requestModelGet8, "https"), expectedCode);
expect(
codeGen.getCode(
CodegenLanguage.nodejsAxios, requestModelGet8, "https"),
expectedCode);
});
test('GET 9', () {
@ -242,7 +267,10 @@ axios(config)
console.log(error);
});
""";
expect(axiosCodeGen.getCode(requestModelGet9, "https"), expectedCode);
expect(
codeGen.getCode(
CodegenLanguage.nodejsAxios, requestModelGet9, "https"),
expectedCode);
});
test('GET 10', () {
@ -269,7 +297,8 @@ axios(config)
});
""";
expect(
axiosCodeGen.getCode(
codeGen.getCode(
CodegenLanguage.nodejsAxios,
requestModelGet10,
"https",
),
@ -303,7 +332,10 @@ axios(config)
console.log(error);
});
""";
expect(axiosCodeGen.getCode(requestModelGet11, "https"), expectedCode);
expect(
codeGen.getCode(
CodegenLanguage.nodejsAxios, requestModelGet11, "https"),
expectedCode);
});
test('GET 12', () {
@ -326,7 +358,10 @@ axios(config)
console.log(error);
});
""";
expect(axiosCodeGen.getCode(requestModelGet12, "https"), expectedCode);
expect(
codeGen.getCode(
CodegenLanguage.nodejsAxios, requestModelGet12, "https"),
expectedCode);
});
});
@ -351,7 +386,10 @@ axios(config)
console.log(error);
});
""";
expect(axiosCodeGen.getCode(requestModelHead1, "https"), expectedCode);
expect(
codeGen.getCode(
CodegenLanguage.nodejsAxios, requestModelHead1, "https"),
expectedCode);
});
test('HEAD 2', () {
@ -374,7 +412,10 @@ axios(config)
console.log(error);
});
""";
expect(axiosCodeGen.getCode(requestModelHead2, "http"), expectedCode);
expect(
codeGen.getCode(
CodegenLanguage.nodejsAxios, requestModelHead2, "http"),
expectedCode);
});
});
@ -403,7 +444,10 @@ axios(config)
console.log(error);
});
""";
expect(axiosCodeGen.getCode(requestModelPost1, "https"), expectedCode);
expect(
codeGen.getCode(
CodegenLanguage.nodejsAxios, requestModelPost1, "https"),
expectedCode);
});
test('POST 2', () {
@ -415,7 +459,7 @@ let config = {
headers: {
"Content-Type": "application/json"
},
data: "{\n\"text\": \"I LOVE Flutter\"\n}"
data: "{\n\"text\": \"I LOVE Flutter\",\n\"flag\": null,\n\"male\": true,\n\"female\": false,\n\"no\": 1.2,\n\"arr\": [\"null\", \"true\", \"false\", null]\n}"
};
axios(config)
@ -430,7 +474,10 @@ axios(config)
console.log(error);
});
""";
expect(axiosCodeGen.getCode(requestModelPost2, "https"), expectedCode);
expect(
codeGen.getCode(
CodegenLanguage.nodejsAxios, requestModelPost2, "https"),
expectedCode);
});
test('POST 3', () {
@ -458,7 +505,10 @@ axios(config)
console.log(error);
});
""";
expect(axiosCodeGen.getCode(requestModelPost3, "https"), expectedCode);
expect(
codeGen.getCode(
CodegenLanguage.nodejsAxios, requestModelPost3, "https"),
expectedCode);
});
});
@ -487,7 +537,10 @@ axios(config)
console.log(error);
});
""";
expect(axiosCodeGen.getCode(requestModelPut1, "https"), expectedCode);
expect(
codeGen.getCode(
CodegenLanguage.nodejsAxios, requestModelPut1, "https"),
expectedCode);
});
});
@ -516,7 +569,10 @@ axios(config)
console.log(error);
});
""";
expect(axiosCodeGen.getCode(requestModelPatch1, "https"), expectedCode);
expect(
codeGen.getCode(
CodegenLanguage.nodejsAxios, requestModelPatch1, "https"),
expectedCode);
});
});
@ -541,7 +597,10 @@ axios(config)
console.log(error);
});
""";
expect(axiosCodeGen.getCode(requestModelDelete1, "https"), expectedCode);
expect(
codeGen.getCode(
CodegenLanguage.nodejsAxios, requestModelDelete1, "https"),
expectedCode);
});
test('DELETE 2', () {
@ -568,7 +627,10 @@ axios(config)
console.log(error);
});
""";
expect(axiosCodeGen.getCode(requestModelDelete2, "https"), expectedCode);
expect(
codeGen.getCode(
CodegenLanguage.nodejsAxios, requestModelDelete2, "https"),
expectedCode);
});
});
}

View File

@ -1,9 +1,10 @@
import 'package:apidash/codegen/js/fetch.dart';
import '../request_models.dart';
import 'package:apidash/codegen/codegen.dart';
import 'package:apidash/consts.dart';
import 'package:test/test.dart';
import '../request_models.dart';
void main() {
final fetchCodeGen = FetchCodeGen(isNodeJs: true);
final codeGen = Codegen();
group('GET Request', () {
test('GET 1', () {
@ -30,7 +31,10 @@ fetch(url, options)
console.error('error:' + err);
});
""";
expect(fetchCodeGen.getCode(requestModelGet1, "https"), expectedCode);
expect(
codeGen.getCode(
CodegenLanguage.nodejsFetch, requestModelGet1, "https"),
expectedCode);
});
test('GET 2', () {
@ -57,7 +61,10 @@ fetch(url, options)
console.error('error:' + err);
});
""";
expect(fetchCodeGen.getCode(requestModelGet2, "https"), expectedCode);
expect(
codeGen.getCode(
CodegenLanguage.nodejsFetch, requestModelGet2, "https"),
expectedCode);
});
test('GET 3', () {
@ -84,7 +91,10 @@ fetch(url, options)
console.error('error:' + err);
});
""";
expect(fetchCodeGen.getCode(requestModelGet3, "https"), expectedCode);
expect(
codeGen.getCode(
CodegenLanguage.nodejsFetch, requestModelGet3, "https"),
expectedCode);
});
test('GET 4', () {
@ -111,7 +121,10 @@ fetch(url, options)
console.error('error:' + err);
});
""";
expect(fetchCodeGen.getCode(requestModelGet4, "https"), expectedCode);
expect(
codeGen.getCode(
CodegenLanguage.nodejsFetch, requestModelGet4, "https"),
expectedCode);
});
test('GET 5', () {
@ -141,7 +154,10 @@ fetch(url, options)
console.error('error:' + err);
});
""";
expect(fetchCodeGen.getCode(requestModelGet5, "https"), expectedCode);
expect(
codeGen.getCode(
CodegenLanguage.nodejsFetch, requestModelGet5, "https"),
expectedCode);
});
test('GET 6', () {
@ -171,7 +187,10 @@ fetch(url, options)
console.error('error:' + err);
});
""";
expect(fetchCodeGen.getCode(requestModelGet6, "https"), expectedCode);
expect(
codeGen.getCode(
CodegenLanguage.nodejsFetch, requestModelGet6, "https"),
expectedCode);
});
test('GET 7', () {
@ -198,7 +217,10 @@ fetch(url, options)
console.error('error:' + err);
});
""";
expect(fetchCodeGen.getCode(requestModelGet7, "https"), expectedCode);
expect(
codeGen.getCode(
CodegenLanguage.nodejsFetch, requestModelGet7, "https"),
expectedCode);
});
test('GET 8', () {
@ -228,7 +250,10 @@ fetch(url, options)
console.error('error:' + err);
});
""";
expect(fetchCodeGen.getCode(requestModelGet8, "https"), expectedCode);
expect(
codeGen.getCode(
CodegenLanguage.nodejsFetch, requestModelGet8, "https"),
expectedCode);
});
test('GET 9', () {
@ -255,7 +280,10 @@ fetch(url, options)
console.error('error:' + err);
});
""";
expect(fetchCodeGen.getCode(requestModelGet9, "https"), expectedCode);
expect(
codeGen.getCode(
CodegenLanguage.nodejsFetch, requestModelGet9, "https"),
expectedCode);
});
test('GET 10', () {
@ -286,7 +314,8 @@ fetch(url, options)
});
""";
expect(
fetchCodeGen.getCode(
codeGen.getCode(
CodegenLanguage.nodejsFetch,
requestModelGet10,
"https",
),
@ -320,7 +349,10 @@ fetch(url, options)
console.error('error:' + err);
});
""";
expect(fetchCodeGen.getCode(requestModelGet11, "https"), expectedCode);
expect(
codeGen.getCode(
CodegenLanguage.nodejsFetch, requestModelGet11, "https"),
expectedCode);
});
test('GET 12', () {
@ -347,7 +379,10 @@ fetch(url, options)
console.error('error:' + err);
});
""";
expect(fetchCodeGen.getCode(requestModelGet12, "https"), expectedCode);
expect(
codeGen.getCode(
CodegenLanguage.nodejsFetch, requestModelGet12, "https"),
expectedCode);
});
});
@ -376,7 +411,10 @@ fetch(url, options)
console.error('error:' + err);
});
""";
expect(fetchCodeGen.getCode(requestModelHead1, "https"), expectedCode);
expect(
codeGen.getCode(
CodegenLanguage.nodejsFetch, requestModelHead1, "https"),
expectedCode);
});
test('HEAD 2', () {
@ -403,7 +441,10 @@ fetch(url, options)
console.error('error:' + err);
});
""";
expect(fetchCodeGen.getCode(requestModelHead2, "http"), expectedCode);
expect(
codeGen.getCode(
CodegenLanguage.nodejsFetch, requestModelHead2, "http"),
expectedCode);
});
});
@ -437,7 +478,10 @@ fetch(url, options)
console.error('error:' + err);
});
""";
expect(fetchCodeGen.getCode(requestModelPost1, "https"), expectedCode);
expect(
codeGen.getCode(
CodegenLanguage.nodejsFetch, requestModelPost1, "https"),
expectedCode);
});
test('POST 2', () {
@ -451,7 +495,7 @@ let options = {
"Content-Type": "application/json"
},
body:
"{\n\"text\": \"I LOVE Flutter\"\n}"
"{\n\"text\": \"I LOVE Flutter\",\n\"flag\": null,\n\"male\": true,\n\"female\": false,\n\"no\": 1.2,\n\"arr\": [\"null\", \"true\", \"false\", null]\n}"
};
let status;
@ -469,7 +513,10 @@ fetch(url, options)
console.error('error:' + err);
});
""";
expect(fetchCodeGen.getCode(requestModelPost2, "https"), expectedCode);
expect(
codeGen.getCode(
CodegenLanguage.nodejsFetch, requestModelPost2, "https"),
expectedCode);
});
test('POST 3', () {
@ -502,7 +549,10 @@ fetch(url, options)
console.error('error:' + err);
});
""";
expect(fetchCodeGen.getCode(requestModelPost3, "https"), expectedCode);
expect(
codeGen.getCode(
CodegenLanguage.nodejsFetch, requestModelPost3, "https"),
expectedCode);
});
});
@ -536,7 +586,10 @@ fetch(url, options)
console.error('error:' + err);
});
""";
expect(fetchCodeGen.getCode(requestModelPut1, "https"), expectedCode);
expect(
codeGen.getCode(
CodegenLanguage.nodejsFetch, requestModelPut1, "https"),
expectedCode);
});
});
@ -570,7 +623,10 @@ fetch(url, options)
console.error('error:' + err);
});
""";
expect(fetchCodeGen.getCode(requestModelPatch1, "https"), expectedCode);
expect(
codeGen.getCode(
CodegenLanguage.nodejsFetch, requestModelPatch1, "https"),
expectedCode);
});
});
@ -599,7 +655,10 @@ fetch(url, options)
console.error('error:' + err);
});
""";
expect(fetchCodeGen.getCode(requestModelDelete1, "https"), expectedCode);
expect(
codeGen.getCode(
CodegenLanguage.nodejsFetch, requestModelDelete1, "https"),
expectedCode);
});
test('DELETE 2', () {
@ -631,7 +690,10 @@ fetch(url, options)
console.error('error:' + err);
});
""";
expect(fetchCodeGen.getCode(requestModelDelete2, "https"), expectedCode);
expect(
codeGen.getCode(
CodegenLanguage.nodejsFetch, requestModelDelete2, "https"),
expectedCode);
});
});
}

View File

@ -1,9 +1,10 @@
import 'package:apidash/codegen/python/http_client.dart';
import '../request_models.dart';
import 'package:apidash/codegen/codegen.dart';
import 'package:apidash/consts.dart';
import 'package:test/test.dart';
import '../request_models.dart';
void main() {
final pythonHttpClientCodeGen = PythonHttpClientCodeGen();
final codeGen = Codegen();
group('GET Request', () {
test('GET 1', () {
@ -17,7 +18,9 @@ data = res.read()
print(data.decode("utf-8"))
""";
expect(pythonHttpClientCodeGen.getCode(requestModelGet1, "https"),
expect(
codeGen.getCode(
CodegenLanguage.pythonHttpClient, requestModelGet1, "https"),
expectedCode);
});
@ -26,8 +29,8 @@ print(data.decode("utf-8"))
from urllib.parse import urlencode
queryParams = {
"code": "US"
}
"code": "US"
}
queryParamsStr = '?' + urlencode(queryParams)
conn = http.client.HTTPSConnection("api.apidash.dev")
@ -38,7 +41,9 @@ data = res.read()
print(data.decode("utf-8"))
""";
expect(pythonHttpClientCodeGen.getCode(requestModelGet2, "https"),
expect(
codeGen.getCode(
CodegenLanguage.pythonHttpClient, requestModelGet2, "https"),
expectedCode);
});
@ -47,8 +52,8 @@ print(data.decode("utf-8"))
from urllib.parse import urlencode
queryParams = {
"code": "IND"
}
"code": "IND"
}
queryParamsStr = '?' + urlencode(queryParams)
conn = http.client.HTTPSConnection("api.apidash.dev")
@ -59,7 +64,9 @@ data = res.read()
print(data.decode("utf-8"))
""";
expect(pythonHttpClientCodeGen.getCode(requestModelGet3, "https"),
expect(
codeGen.getCode(
CodegenLanguage.pythonHttpClient, requestModelGet3, "https"),
expectedCode);
});
@ -68,12 +75,12 @@ print(data.decode("utf-8"))
from urllib.parse import urlencode
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 = '?' + urlencode(queryParams)
conn = http.client.HTTPSConnection("api.apidash.dev")
@ -84,7 +91,9 @@ data = res.read()
print(data.decode("utf-8"))
""";
expect(pythonHttpClientCodeGen.getCode(requestModelGet4, "https"),
expect(
codeGen.getCode(
CodegenLanguage.pythonHttpClient, requestModelGet4, "https"),
expectedCode);
});
@ -92,8 +101,8 @@ print(data.decode("utf-8"))
const expectedCode = r"""import http.client
headers = {
"User-Agent": "Test Agent"
}
"User-Agent": "Test Agent"
}
conn = http.client.HTTPSConnection("api.github.com")
conn.request("GET", "/repos/foss42/apidash",
@ -104,7 +113,9 @@ data = res.read()
print(data.decode("utf-8"))
""";
expect(pythonHttpClientCodeGen.getCode(requestModelGet5, "https"),
expect(
codeGen.getCode(
CodegenLanguage.pythonHttpClient, requestModelGet5, "https"),
expectedCode);
});
@ -113,13 +124,13 @@ print(data.decode("utf-8"))
from urllib.parse import urlencode
queryParams = {
"raw": "true"
}
"raw": "true"
}
queryParamsStr = '?' + urlencode(queryParams)
headers = {
"User-Agent": "Test Agent"
}
"User-Agent": "Test Agent"
}
conn = http.client.HTTPSConnection("api.github.com")
conn.request("GET", "/repos/foss42/apidash" + queryParamsStr,
@ -130,7 +141,9 @@ data = res.read()
print(data.decode("utf-8"))
""";
expect(pythonHttpClientCodeGen.getCode(requestModelGet6, "https"),
expect(
codeGen.getCode(
CodegenLanguage.pythonHttpClient, requestModelGet6, "https"),
expectedCode);
});
@ -145,7 +158,9 @@ data = res.read()
print(data.decode("utf-8"))
""";
expect(pythonHttpClientCodeGen.getCode(requestModelGet7, "https"),
expect(
codeGen.getCode(
CodegenLanguage.pythonHttpClient, requestModelGet7, "https"),
expectedCode);
});
@ -154,13 +169,13 @@ print(data.decode("utf-8"))
from urllib.parse import urlencode
queryParams = {
"raw": "true"
}
"raw": "true"
}
queryParamsStr = '?' + urlencode(queryParams)
headers = {
"User-Agent": "Test Agent"
}
"User-Agent": "Test Agent"
}
conn = http.client.HTTPSConnection("api.github.com")
conn.request("GET", "/repos/foss42/apidash" + queryParamsStr,
@ -171,7 +186,9 @@ data = res.read()
print(data.decode("utf-8"))
""";
expect(pythonHttpClientCodeGen.getCode(requestModelGet8, "https"),
expect(
codeGen.getCode(
CodegenLanguage.pythonHttpClient, requestModelGet8, "https"),
expectedCode);
});
@ -180,9 +197,9 @@ print(data.decode("utf-8"))
from urllib.parse import urlencode
queryParams = {
"num": "8700000",
"add_space": "true"
}
"num": "8700000",
"add_space": "true"
}
queryParamsStr = '?' + urlencode(queryParams)
conn = http.client.HTTPSConnection("api.apidash.dev")
@ -193,7 +210,9 @@ data = res.read()
print(data.decode("utf-8"))
""";
expect(pythonHttpClientCodeGen.getCode(requestModelGet9, "https"),
expect(
codeGen.getCode(
CodegenLanguage.pythonHttpClient, requestModelGet9, "https"),
expectedCode);
});
@ -201,8 +220,8 @@ print(data.decode("utf-8"))
const expectedCode = r"""import http.client
headers = {
"User-Agent": "Test Agent"
}
"User-Agent": "Test Agent"
}
conn = http.client.HTTPSConnection("api.apidash.dev")
conn.request("GET", "/humanize/social",
@ -214,7 +233,8 @@ data = res.read()
print(data.decode("utf-8"))
""";
expect(
pythonHttpClientCodeGen.getCode(
codeGen.getCode(
CodegenLanguage.pythonHttpClient,
requestModelGet10,
"https",
),
@ -226,14 +246,14 @@ print(data.decode("utf-8"))
from urllib.parse import urlencode
queryParams = {
"num": "8700000",
"digits": "3"
}
"num": "8700000",
"digits": "3"
}
queryParamsStr = '?' + urlencode(queryParams)
headers = {
"User-Agent": "Test Agent"
}
"User-Agent": "Test Agent"
}
conn = http.client.HTTPSConnection("api.apidash.dev")
conn.request("GET", "/humanize/social" + queryParamsStr,
@ -244,7 +264,9 @@ data = res.read()
print(data.decode("utf-8"))
""";
expect(pythonHttpClientCodeGen.getCode(requestModelGet11, "https"),
expect(
codeGen.getCode(
CodegenLanguage.pythonHttpClient, requestModelGet11, "https"),
expectedCode);
});
@ -259,7 +281,9 @@ data = res.read()
print(data.decode("utf-8"))
""";
expect(pythonHttpClientCodeGen.getCode(requestModelGet12, "https"),
expect(
codeGen.getCode(
CodegenLanguage.pythonHttpClient, requestModelGet12, "https"),
expectedCode);
});
});
@ -276,7 +300,9 @@ data = res.read()
print(data.decode("utf-8"))
""";
expect(pythonHttpClientCodeGen.getCode(requestModelHead1, "https"),
expect(
codeGen.getCode(
CodegenLanguage.pythonHttpClient, requestModelHead1, "https"),
expectedCode);
});
@ -291,7 +317,9 @@ data = res.read()
print(data.decode("utf-8"))
""";
expect(pythonHttpClientCodeGen.getCode(requestModelHead2, "http"),
expect(
codeGen.getCode(
CodegenLanguage.pythonHttpClient, requestModelHead2, "http"),
expectedCode);
});
});
@ -305,8 +333,8 @@ body = r'''{
}'''
headers = {
"content-type": "text/plain"
}
"content-type": "text/plain"
}
conn = http.client.HTTPSConnection("api.apidash.dev")
conn.request("POST", "/case/lower",
@ -318,7 +346,9 @@ data = res.read()
print(data.decode("utf-8"))
""";
expect(pythonHttpClientCodeGen.getCode(requestModelPost1, "https"),
expect(
codeGen.getCode(
CodegenLanguage.pythonHttpClient, requestModelPost1, "https"),
expectedCode);
});
@ -326,12 +356,17 @@ print(data.decode("utf-8"))
const expectedCode = r"""import http.client
body = r'''{
"text": "I LOVE Flutter"
"text": "I LOVE Flutter",
"flag": null,
"male": true,
"female": false,
"no": 1.2,
"arr": ["null", "true", "false", null]
}'''
headers = {
"content-type": "application/json"
}
"content-type": "application/json"
}
conn = http.client.HTTPSConnection("api.apidash.dev")
conn.request("POST", "/case/lower",
@ -343,7 +378,9 @@ data = res.read()
print(data.decode("utf-8"))
""";
expect(pythonHttpClientCodeGen.getCode(requestModelPost2, "https"),
expect(
codeGen.getCode(
CodegenLanguage.pythonHttpClient, requestModelPost2, "https"),
expectedCode);
});
@ -355,9 +392,9 @@ body = r'''{
}'''
headers = {
"User-Agent": "Test Agent",
"content-type": "application/json"
}
"User-Agent": "Test Agent",
"content-type": "application/json"
}
conn = http.client.HTTPSConnection("api.apidash.dev")
conn.request("POST", "/case/lower",
@ -369,7 +406,320 @@ data = res.read()
print(data.decode("utf-8"))
""";
expect(pythonHttpClientCodeGen.getCode(requestModelPost3, "https"),
expect(
codeGen.getCode(
CodegenLanguage.pythonHttpClient, requestModelPost3, "https"),
expectedCode);
});
test('POST 4', () {
const expectedCode = r"""import http.client
import mimetypes
from codecs import encode
headers = {
"content-type": "multipart/form-data; boundary=b9826c20-773c-1f0c-814d-a1b3d90cd6b3"
}
def build_data_list(fields):
dataList = []
for field in fields:
name = field.get('name', '')
value = field.get('value', '')
type_ = field.get('type', 'text')
dataList.append(encode('--b9826c20-773c-1f0c-814d-a1b3d90cd6b3'))
if type_ == 'text':
dataList.append(encode(f'Content-Disposition: form-data; name="{name}"'))
dataList.append(encode('Content-Type: text/plain'))
dataList.append(encode(''))
dataList.append(encode(value))
elif type_ == 'file':
dataList.append(encode(f'Content-Disposition: form-data; name="{name}"; filename="{value}"'))
dataList.append(encode(f'Content-Type: {mimetypes.guess_type(value)[0] or "application/octet-stream"}'))
dataList.append(encode(''))
dataList.append(open(value, 'rb').read())
dataList.append(encode(f'--b9826c20-773c-1f0c-814d-a1b3d90cd6b3--'))
dataList.append(encode(''))
return dataList
dataList = build_data_list([{"name":"text","value":"API","type":"text"},{"name":"sep","value":"|","type":"text"},{"name":"times","value":"3","type":"text"}])
body = b'\r\n'.join(dataList)
conn = http.client.HTTPSConnection("api.apidash.dev")
conn.request("POST", "/io/form",
body= body,
headers= headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
""";
expect(
codeGen.getCode(
CodegenLanguage.pythonHttpClient, requestModelPost4, "https",
boundary: "b9826c20-773c-1f0c-814d-a1b3d90cd6b3"),
expectedCode);
});
test('POST 5', () {
const expectedCode = r"""import http.client
import mimetypes
from codecs import encode
headers = {
"User-Agent": "Test Agent",
"content-type": "multipart/form-data; boundary=929dc910-7714-1f0c-814d-a1b3d90cd6b3"
}
def build_data_list(fields):
dataList = []
for field in fields:
name = field.get('name', '')
value = field.get('value', '')
type_ = field.get('type', 'text')
dataList.append(encode('--929dc910-7714-1f0c-814d-a1b3d90cd6b3'))
if type_ == 'text':
dataList.append(encode(f'Content-Disposition: form-data; name="{name}"'))
dataList.append(encode('Content-Type: text/plain'))
dataList.append(encode(''))
dataList.append(encode(value))
elif type_ == 'file':
dataList.append(encode(f'Content-Disposition: form-data; name="{name}"; filename="{value}"'))
dataList.append(encode(f'Content-Type: {mimetypes.guess_type(value)[0] or "application/octet-stream"}'))
dataList.append(encode(''))
dataList.append(open(value, 'rb').read())
dataList.append(encode(f'--929dc910-7714-1f0c-814d-a1b3d90cd6b3--'))
dataList.append(encode(''))
return dataList
dataList = build_data_list([{"name":"text","value":"API","type":"text"},{"name":"sep","value":"|","type":"text"},{"name":"times","value":"3","type":"text"}])
body = b'\r\n'.join(dataList)
conn = http.client.HTTPSConnection("api.apidash.dev")
conn.request("POST", "/io/form",
body= body,
headers= headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
""";
expect(
codeGen.getCode(
CodegenLanguage.pythonHttpClient, requestModelPost5, "https",
boundary: "929dc910-7714-1f0c-814d-a1b3d90cd6b3"),
expectedCode);
});
test('POST 6', () {
const expectedCode = r"""import http.client
import mimetypes
from codecs import encode
headers = {
"content-type": "multipart/form-data; boundary=9b1374c0-76e0-1f0c-814d-a1b3d90cd6b3"
}
def build_data_list(fields):
dataList = []
for field in fields:
name = field.get('name', '')
value = field.get('value', '')
type_ = field.get('type', 'text')
dataList.append(encode('--9b1374c0-76e0-1f0c-814d-a1b3d90cd6b3'))
if type_ == 'text':
dataList.append(encode(f'Content-Disposition: form-data; name="{name}"'))
dataList.append(encode('Content-Type: text/plain'))
dataList.append(encode(''))
dataList.append(encode(value))
elif type_ == 'file':
dataList.append(encode(f'Content-Disposition: form-data; name="{name}"; filename="{value}"'))
dataList.append(encode(f'Content-Type: {mimetypes.guess_type(value)[0] or "application/octet-stream"}'))
dataList.append(encode(''))
dataList.append(open(value, 'rb').read())
dataList.append(encode(f'--9b1374c0-76e0-1f0c-814d-a1b3d90cd6b3--'))
dataList.append(encode(''))
return dataList
dataList = build_data_list([{"name":"token","value":"xyz","type":"text"},{"name":"imfile","value":"/Documents/up/1.png","type":"file"}])
body = b'\r\n'.join(dataList)
conn = http.client.HTTPSConnection("api.apidash.dev")
conn.request("POST", "/io/img",
body= body,
headers= headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
""";
expect(
codeGen.getCode(
CodegenLanguage.pythonHttpClient, requestModelPost6, "https",
boundary: "9b1374c0-76e0-1f0c-814d-a1b3d90cd6b3"),
expectedCode);
});
test('POST 7', () {
const expectedCode = r"""import http.client
import mimetypes
from codecs import encode
headers = {
"content-type": "multipart/form-data; boundary=defdf240-76b4-1f0c-814d-a1b3d90cd6b3"
}
def build_data_list(fields):
dataList = []
for field in fields:
name = field.get('name', '')
value = field.get('value', '')
type_ = field.get('type', 'text')
dataList.append(encode('--defdf240-76b4-1f0c-814d-a1b3d90cd6b3'))
if type_ == 'text':
dataList.append(encode(f'Content-Disposition: form-data; name="{name}"'))
dataList.append(encode('Content-Type: text/plain'))
dataList.append(encode(''))
dataList.append(encode(value))
elif type_ == 'file':
dataList.append(encode(f'Content-Disposition: form-data; name="{name}"; filename="{value}"'))
dataList.append(encode(f'Content-Type: {mimetypes.guess_type(value)[0] or "application/octet-stream"}'))
dataList.append(encode(''))
dataList.append(open(value, 'rb').read())
dataList.append(encode(f'--defdf240-76b4-1f0c-814d-a1b3d90cd6b3--'))
dataList.append(encode(''))
return dataList
dataList = build_data_list([{"name":"token","value":"xyz","type":"text"},{"name":"imfile","value":"/Documents/up/1.png","type":"file"}])
body = b'\r\n'.join(dataList)
conn = http.client.HTTPSConnection("api.apidash.dev")
conn.request("POST", "/io/img",
body= body,
headers= headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
""";
expect(
codeGen.getCode(
CodegenLanguage.pythonHttpClient, requestModelPost7, "https",
boundary: "defdf240-76b4-1f0c-814d-a1b3d90cd6b3"),
expectedCode);
});
test('POST 8', () {
const expectedCode = r"""import http.client
import mimetypes
from codecs import encode
from urllib.parse import urlencode
queryParams = {
"size": "2",
"len": "3"
}
queryParamsStr = '?' + urlencode(queryParams)
headers = {
"content-type": "multipart/form-data; boundary=a990b150-7683-1f0c-814d-a1b3d90cd6b3"
}
def build_data_list(fields):
dataList = []
for field in fields:
name = field.get('name', '')
value = field.get('value', '')
type_ = field.get('type', 'text')
dataList.append(encode('--a990b150-7683-1f0c-814d-a1b3d90cd6b3'))
if type_ == 'text':
dataList.append(encode(f'Content-Disposition: form-data; name="{name}"'))
dataList.append(encode('Content-Type: text/plain'))
dataList.append(encode(''))
dataList.append(encode(value))
elif type_ == 'file':
dataList.append(encode(f'Content-Disposition: form-data; name="{name}"; filename="{value}"'))
dataList.append(encode(f'Content-Type: {mimetypes.guess_type(value)[0] or "application/octet-stream"}'))
dataList.append(encode(''))
dataList.append(open(value, 'rb').read())
dataList.append(encode(f'--a990b150-7683-1f0c-814d-a1b3d90cd6b3--'))
dataList.append(encode(''))
return dataList
dataList = build_data_list([{"name":"text","value":"API","type":"text"},{"name":"sep","value":"|","type":"text"},{"name":"times","value":"3","type":"text"}])
body = b'\r\n'.join(dataList)
conn = http.client.HTTPSConnection("api.apidash.dev")
conn.request("POST", "/io/form" + queryParamsStr,
body= body,
headers= headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
""";
expect(
codeGen.getCode(
CodegenLanguage.pythonHttpClient, requestModelPost8, "https",
boundary: "a990b150-7683-1f0c-814d-a1b3d90cd6b3"),
expectedCode);
});
test('POST 9', () {
const expectedCode = r"""import http.client
import mimetypes
from codecs import encode
from urllib.parse import urlencode
queryParams = {
"size": "2",
"len": "3"
}
queryParamsStr = '?' + urlencode(queryParams)
headers = {
"User-Agent": "Test Agent",
"Keep-Alive": "true",
"content-type": "multipart/form-data; boundary=79088e00-75ec-1f0c-814d-a1b3d90cd6b3"
}
def build_data_list(fields):
dataList = []
for field in fields:
name = field.get('name', '')
value = field.get('value', '')
type_ = field.get('type', 'text')
dataList.append(encode('--79088e00-75ec-1f0c-814d-a1b3d90cd6b3'))
if type_ == 'text':
dataList.append(encode(f'Content-Disposition: form-data; name="{name}"'))
dataList.append(encode('Content-Type: text/plain'))
dataList.append(encode(''))
dataList.append(encode(value))
elif type_ == 'file':
dataList.append(encode(f'Content-Disposition: form-data; name="{name}"; filename="{value}"'))
dataList.append(encode(f'Content-Type: {mimetypes.guess_type(value)[0] or "application/octet-stream"}'))
dataList.append(encode(''))
dataList.append(open(value, 'rb').read())
dataList.append(encode(f'--79088e00-75ec-1f0c-814d-a1b3d90cd6b3--'))
dataList.append(encode(''))
return dataList
dataList = build_data_list([{"name":"token","value":"xyz","type":"text"},{"name":"imfile","value":"/Documents/up/1.png","type":"file"}])
body = b'\r\n'.join(dataList)
conn = http.client.HTTPSConnection("api.apidash.dev")
conn.request("POST", "/io/img" + queryParamsStr,
body= body,
headers= headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
""";
expect(
codeGen.getCode(
CodegenLanguage.pythonHttpClient, requestModelPost9, "https",
boundary: "79088e00-75ec-1f0c-814d-a1b3d90cd6b3"),
expectedCode);
});
});
@ -384,8 +734,8 @@ body = r'''{
}'''
headers = {
"content-type": "application/json"
}
"content-type": "application/json"
}
conn = http.client.HTTPSConnection("reqres.in")
conn.request("PUT", "/api/users/2",
@ -397,7 +747,9 @@ data = res.read()
print(data.decode("utf-8"))
""";
expect(pythonHttpClientCodeGen.getCode(requestModelPut1, "https"),
expect(
codeGen.getCode(
CodegenLanguage.pythonHttpClient, requestModelPut1, "https"),
expectedCode);
});
});
@ -412,8 +764,8 @@ body = r'''{
}'''
headers = {
"content-type": "application/json"
}
"content-type": "application/json"
}
conn = http.client.HTTPSConnection("reqres.in")
conn.request("PATCH", "/api/users/2",
@ -425,7 +777,9 @@ data = res.read()
print(data.decode("utf-8"))
""";
expect(pythonHttpClientCodeGen.getCode(requestModelPatch1, "https"),
expect(
codeGen.getCode(
CodegenLanguage.pythonHttpClient, requestModelPatch1, "https"),
expectedCode);
});
});
@ -442,7 +796,9 @@ data = res.read()
print(data.decode("utf-8"))
""";
expect(pythonHttpClientCodeGen.getCode(requestModelDelete1, "https"),
expect(
codeGen.getCode(
CodegenLanguage.pythonHttpClient, requestModelDelete1, "https"),
expectedCode);
});
@ -455,8 +811,8 @@ body = r'''{
}'''
headers = {
"content-type": "application/json"
}
"content-type": "application/json"
}
conn = http.client.HTTPSConnection("reqres.in")
conn.request("DELETE", "/api/users/2",
@ -468,7 +824,9 @@ data = res.read()
print(data.decode("utf-8"))
""";
expect(pythonHttpClientCodeGen.getCode(requestModelDelete2, "https"),
expect(
codeGen.getCode(
CodegenLanguage.pythonHttpClient, requestModelDelete2, "https"),
expectedCode);
});
});

View File

@ -1,9 +1,10 @@
import 'package:apidash/codegen/python/requests.dart';
import '../request_models.dart';
import 'package:apidash/codegen/codegen.dart';
import 'package:apidash/consts.dart';
import 'package:test/test.dart';
import '../request_models.dart';
void main() {
final pythonRequestsCodeGen = PythonRequestsCodeGen();
final codeGen = Codegen();
group('GET Request', () {
test('GET 1', () {
@ -16,7 +17,9 @@ response = requests.get(url)
print('Status Code:', response.status_code)
print('Response Body:', response.text)
""";
expect(pythonRequestsCodeGen.getCode(requestModelGet1, "https"),
expect(
codeGen.getCode(
CodegenLanguage.pythonRequests, requestModelGet1, "https"),
expectedCode);
});
@ -26,15 +29,17 @@ print('Response Body:', response.text)
url = 'https://api.apidash.dev/country/data'
params = {
"code": "US"
}
"code": "US"
}
response = requests.get(url, params=params)
print('Status Code:', response.status_code)
print('Response Body:', response.text)
""";
expect(pythonRequestsCodeGen.getCode(requestModelGet2, "https"),
expect(
codeGen.getCode(
CodegenLanguage.pythonRequests, requestModelGet2, "https"),
expectedCode);
});
@ -44,15 +49,17 @@ print('Response Body:', response.text)
url = 'https://api.apidash.dev/country/data'
params = {
"code": "IND"
}
"code": "IND"
}
response = requests.get(url, params=params)
print('Status Code:', response.status_code)
print('Response Body:', response.text)
""";
expect(pythonRequestsCodeGen.getCode(requestModelGet3, "https"),
expect(
codeGen.getCode(
CodegenLanguage.pythonRequests, requestModelGet3, "https"),
expectedCode);
});
@ -62,19 +69,21 @@ print('Response Body:', response.text)
url = 'https://api.apidash.dev/humanize/social'
params = {
"num": "8700000",
"digits": "3",
"system": "SS",
"add_space": "true",
"trailing_zeros": "true"
}
"num": "8700000",
"digits": "3",
"system": "SS",
"add_space": "true",
"trailing_zeros": "true"
}
response = requests.get(url, params=params)
print('Status Code:', response.status_code)
print('Response Body:', response.text)
""";
expect(pythonRequestsCodeGen.getCode(requestModelGet4, "https"),
expect(
codeGen.getCode(
CodegenLanguage.pythonRequests, requestModelGet4, "https"),
expectedCode);
});
@ -84,15 +93,17 @@ print('Response Body:', response.text)
url = 'https://api.github.com/repos/foss42/apidash'
headers = {
"User-Agent": "Test Agent"
}
"User-Agent": "Test Agent"
}
response = requests.get(url, headers=headers)
print('Status Code:', response.status_code)
print('Response Body:', response.text)
""";
expect(pythonRequestsCodeGen.getCode(requestModelGet5, "https"),
expect(
codeGen.getCode(
CodegenLanguage.pythonRequests, requestModelGet5, "https"),
expectedCode);
});
@ -102,19 +113,21 @@ print('Response Body:', response.text)
url = 'https://api.github.com/repos/foss42/apidash'
params = {
"raw": "true"
}
"raw": "true"
}
headers = {
"User-Agent": "Test Agent"
}
"User-Agent": "Test Agent"
}
response = requests.get(url, params=params, headers=headers)
print('Status Code:', response.status_code)
print('Response Body:', response.text)
""";
expect(pythonRequestsCodeGen.getCode(requestModelGet6, "https"),
expect(
codeGen.getCode(
CodegenLanguage.pythonRequests, requestModelGet6, "https"),
expectedCode);
});
@ -128,7 +141,9 @@ response = requests.get(url)
print('Status Code:', response.status_code)
print('Response Body:', response.text)
""";
expect(pythonRequestsCodeGen.getCode(requestModelGet7, "https"),
expect(
codeGen.getCode(
CodegenLanguage.pythonRequests, requestModelGet7, "https"),
expectedCode);
});
@ -138,19 +153,21 @@ print('Response Body:', response.text)
url = 'https://api.github.com/repos/foss42/apidash'
params = {
"raw": "true"
}
"raw": "true"
}
headers = {
"User-Agent": "Test Agent"
}
"User-Agent": "Test Agent"
}
response = requests.get(url, params=params, headers=headers)
print('Status Code:', response.status_code)
print('Response Body:', response.text)
""";
expect(pythonRequestsCodeGen.getCode(requestModelGet8, "https"),
expect(
codeGen.getCode(
CodegenLanguage.pythonRequests, requestModelGet8, "https"),
expectedCode);
});
@ -160,16 +177,18 @@ print('Response Body:', response.text)
url = 'https://api.apidash.dev/humanize/social'
params = {
"num": "8700000",
"add_space": "true"
}
"num": "8700000",
"add_space": "true"
}
response = requests.get(url, params=params)
print('Status Code:', response.status_code)
print('Response Body:', response.text)
""";
expect(pythonRequestsCodeGen.getCode(requestModelGet9, "https"),
expect(
codeGen.getCode(
CodegenLanguage.pythonRequests, requestModelGet9, "https"),
expectedCode);
});
@ -179,8 +198,8 @@ print('Response Body:', response.text)
url = 'https://api.apidash.dev/humanize/social'
headers = {
"User-Agent": "Test Agent"
}
"User-Agent": "Test Agent"
}
response = requests.get(url, headers=headers)
@ -188,7 +207,8 @@ print('Status Code:', response.status_code)
print('Response Body:', response.text)
""";
expect(
pythonRequestsCodeGen.getCode(
codeGen.getCode(
CodegenLanguage.pythonRequests,
requestModelGet10,
"https",
),
@ -201,20 +221,22 @@ print('Response Body:', response.text)
url = 'https://api.apidash.dev/humanize/social'
params = {
"num": "8700000",
"digits": "3"
}
"num": "8700000",
"digits": "3"
}
headers = {
"User-Agent": "Test Agent"
}
"User-Agent": "Test Agent"
}
response = requests.get(url, params=params, headers=headers)
print('Status Code:', response.status_code)
print('Response Body:', response.text)
""";
expect(pythonRequestsCodeGen.getCode(requestModelGet11, "https"),
expect(
codeGen.getCode(
CodegenLanguage.pythonRequests, requestModelGet11, "https"),
expectedCode);
});
@ -228,7 +250,9 @@ response = requests.get(url)
print('Status Code:', response.status_code)
print('Response Body:', response.text)
""";
expect(pythonRequestsCodeGen.getCode(requestModelGet12, "https"),
expect(
codeGen.getCode(
CodegenLanguage.pythonRequests, requestModelGet12, "https"),
expectedCode);
});
});
@ -244,7 +268,9 @@ response = requests.head(url)
print('Status Code:', response.status_code)
print('Response Body:', response.text)
""";
expect(pythonRequestsCodeGen.getCode(requestModelHead1, "https"),
expect(
codeGen.getCode(
CodegenLanguage.pythonRequests, requestModelHead1, "https"),
expectedCode);
});
@ -258,7 +284,9 @@ response = requests.head(url)
print('Status Code:', response.status_code)
print('Response Body:', response.text)
""";
expect(pythonRequestsCodeGen.getCode(requestModelHead2, "http"),
expect(
codeGen.getCode(
CodegenLanguage.pythonRequests, requestModelHead2, "http"),
expectedCode);
});
});
@ -274,15 +302,17 @@ payload = r'''{
}'''
headers = {
"content-type": "text/plain"
}
"content-type": "text/plain"
}
response = requests.post(url, data=payload, headers=headers)
print('Status Code:', response.status_code)
print('Response Body:', response.text)
""";
expect(pythonRequestsCodeGen.getCode(requestModelPost1, "https"),
expect(
codeGen.getCode(
CodegenLanguage.pythonRequests, requestModelPost1, "https"),
expectedCode);
});
@ -292,7 +322,12 @@ print('Response Body:', response.text)
url = 'https://api.apidash.dev/case/lower'
payload = {
"text": "I LOVE Flutter"
"text": "I LOVE Flutter",
"flag": None,
"male": True,
"female": False,
"no": 1.2,
"arr": ["null", "true", "false", None]
}
response = requests.post(url, json=payload)
@ -300,7 +335,9 @@ response = requests.post(url, json=payload)
print('Status Code:', response.status_code)
print('Response Body:', response.text)
""";
expect(pythonRequestsCodeGen.getCode(requestModelPost2, "https"),
expect(
codeGen.getCode(
CodegenLanguage.pythonRequests, requestModelPost2, "https"),
expectedCode);
});
@ -314,15 +351,189 @@ payload = {
}
headers = {
"User-Agent": "Test Agent"
}
"User-Agent": "Test Agent"
}
response = requests.post(url, json=payload, headers=headers)
print('Status Code:', response.status_code)
print('Response Body:', response.text)
""";
expect(pythonRequestsCodeGen.getCode(requestModelPost3, "https"),
expect(
codeGen.getCode(
CodegenLanguage.pythonRequests, requestModelPost3, "https"),
expectedCode);
});
test('POST 4', () {
const expectedCode = r"""import requests
from requests_toolbelt.multipart.encoder import MultipartEncoder
url = 'https://api.apidash.dev/io/form'
payload = MultipartEncoder({
"text": "API",
"sep": "|",
"times": "3",
})
headers = {
"content-type": payload.content_type
}
response = requests.post(url, data=payload, headers=headers)
print('Status Code:', response.status_code)
print('Response Body:', response.text)
""";
expect(
codeGen.getCode(
CodegenLanguage.pythonRequests, requestModelPost4, "https"),
expectedCode);
});
test('POST 5', () {
const expectedCode = r"""import requests
from requests_toolbelt.multipart.encoder import MultipartEncoder
url = 'https://api.apidash.dev/io/form'
payload = MultipartEncoder({
"text": "API",
"sep": "|",
"times": "3",
})
headers = {
"User-Agent": "Test Agent",
"content-type": payload.content_type
}
response = requests.post(url, data=payload, headers=headers)
print('Status Code:', response.status_code)
print('Response Body:', response.text)
""";
expect(
codeGen.getCode(
CodegenLanguage.pythonRequests, requestModelPost5, "https"),
expectedCode);
});
test('POST 6', () {
const expectedCode = r"""import requests
from requests_toolbelt.multipart.encoder import MultipartEncoder
url = 'https://api.apidash.dev/io/img'
payload = MultipartEncoder({
"token": "xyz",
"imfile": ("1.png", open("/Documents/up/1.png", "rb")),
})
headers = {
"content-type": payload.content_type
}
response = requests.post(url, data=payload, headers=headers)
print('Status Code:', response.status_code)
print('Response Body:', response.text)
""";
expect(
codeGen.getCode(
CodegenLanguage.pythonRequests, requestModelPost6, "https"),
expectedCode);
});
test('POST 7', () {
const expectedCode = r"""import requests
from requests_toolbelt.multipart.encoder import MultipartEncoder
url = 'https://api.apidash.dev/io/img'
payload = MultipartEncoder({
"token": "xyz",
"imfile": ("1.png", open("/Documents/up/1.png", "rb")),
})
headers = {
"content-type": payload.content_type
}
response = requests.post(url, data=payload, headers=headers)
print('Status Code:', response.status_code)
print('Response Body:', response.text)
""";
expect(
codeGen.getCode(
CodegenLanguage.pythonRequests, requestModelPost7, "https"),
expectedCode);
});
test('POST 8', () {
const expectedCode = r"""import requests
from requests_toolbelt.multipart.encoder import MultipartEncoder
url = 'https://api.apidash.dev/io/form'
params = {
"size": "2",
"len": "3"
}
payload = MultipartEncoder({
"text": "API",
"sep": "|",
"times": "3",
})
headers = {
"content-type": payload.content_type
}
response = requests.post(url, params=params, data=payload, headers=headers)
print('Status Code:', response.status_code)
print('Response Body:', response.text)
""";
expect(
codeGen.getCode(
CodegenLanguage.pythonRequests, requestModelPost8, "https"),
expectedCode);
});
test('POST 9', () {
const expectedCode = r"""import requests
from requests_toolbelt.multipart.encoder import MultipartEncoder
url = 'https://api.apidash.dev/io/img'
params = {
"size": "2",
"len": "3"
}
payload = MultipartEncoder({
"token": "xyz",
"imfile": ("1.png", open("/Documents/up/1.png", "rb")),
})
headers = {
"User-Agent": "Test Agent",
"Keep-Alive": "true",
"content-type": payload.content_type
}
response = requests.post(url, params=params, data=payload, headers=headers)
print('Status Code:', response.status_code)
print('Response Body:', response.text)
""";
expect(
codeGen.getCode(
CodegenLanguage.pythonRequests, requestModelPost9, "https"),
expectedCode);
});
});
@ -343,7 +554,9 @@ response = requests.put(url, json=payload)
print('Status Code:', response.status_code)
print('Response Body:', response.text)
""";
expect(pythonRequestsCodeGen.getCode(requestModelPut1, "https"),
expect(
codeGen.getCode(
CodegenLanguage.pythonRequests, requestModelPut1, "https"),
expectedCode);
});
});
@ -364,7 +577,9 @@ response = requests.patch(url, json=payload)
print('Status Code:', response.status_code)
print('Response Body:', response.text)
""";
expect(pythonRequestsCodeGen.getCode(requestModelPatch1, "https"),
expect(
codeGen.getCode(
CodegenLanguage.pythonRequests, requestModelPatch1, "https"),
expectedCode);
});
});
@ -380,7 +595,9 @@ response = requests.delete(url)
print('Status Code:', response.status_code)
print('Response Body:', response.text)
""";
expect(pythonRequestsCodeGen.getCode(requestModelDelete1, "https"),
expect(
codeGen.getCode(
CodegenLanguage.pythonRequests, requestModelDelete1, "https"),
expectedCode);
});
@ -399,7 +616,9 @@ response = requests.delete(url, json=payload)
print('Status Code:', response.status_code)
print('Response Body:', response.text)
""";
expect(pythonRequestsCodeGen.getCode(requestModelDelete2, "https"),
expect(
codeGen.getCode(
CodegenLanguage.pythonRequests, requestModelDelete2, "https"),
expectedCode);
});
});

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,866 @@
import 'package:apidash/codegen/codegen.dart';
import 'package:apidash/consts.dart';
import 'package:test/test.dart';
import '../request_models.dart';
void main() {
final codeGen = Codegen();
group('GET Request', () {
test('GET 1', () {
const expectedCode =
r"""fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = reqwest::blocking::Client::new();
let url = "https://api.apidash.dev";
let response = client
.get(url)
.send()?;
println!("Status Code: {}", response.status());
println!("Response Body: {}", response.text()?);
Ok(())
}
""";
expect(
codeGen.getCode(
CodegenLanguage.rustReqwest, requestModelGet1, "https"),
expectedCode);
});
test('GET 2', () {
const expectedCode =
r"""fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = reqwest::blocking::Client::new();
let url = "https://api.apidash.dev/country/data";
let response = client
.get(url)
.query(&[("code", "US")])
.send()?;
println!("Status Code: {}", response.status());
println!("Response Body: {}", response.text()?);
Ok(())
}
""";
expect(
codeGen.getCode(
CodegenLanguage.rustReqwest, requestModelGet2, "https"),
expectedCode);
});
test('GET 3', () {
const expectedCode =
r"""fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = reqwest::blocking::Client::new();
let url = "https://api.apidash.dev/country/data";
let response = client
.get(url)
.query(&[("code", "IND")])
.send()?;
println!("Status Code: {}", response.status());
println!("Response Body: {}", response.text()?);
Ok(())
}
""";
expect(
codeGen.getCode(
CodegenLanguage.rustReqwest, requestModelGet3, "https"),
expectedCode);
});
test('GET 4', () {
const expectedCode =
r"""fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = reqwest::blocking::Client::new();
let url = "https://api.apidash.dev/humanize/social";
let response = client
.get(url)
.query(&[("num", "8700000"), ("digits", "3"), ("system", "SS"), ("add_space", "true"), ("trailing_zeros", "true")])
.send()?;
println!("Status Code: {}", response.status());
println!("Response Body: {}", response.text()?);
Ok(())
}
""";
expect(
codeGen.getCode(
CodegenLanguage.rustReqwest, requestModelGet4, "https"),
expectedCode);
});
test('GET 5', () {
const expectedCode =
r"""fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = reqwest::blocking::Client::new();
let url = "https://api.github.com/repos/foss42/apidash";
let response = client
.get(url)
.header("User-Agent", "Test Agent")
.send()?;
println!("Status Code: {}", response.status());
println!("Response Body: {}", response.text()?);
Ok(())
}
""";
expect(
codeGen.getCode(
CodegenLanguage.rustReqwest, requestModelGet5, "https"),
expectedCode);
});
test('GET 6', () {
const expectedCode =
r"""fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = reqwest::blocking::Client::new();
let url = "https://api.github.com/repos/foss42/apidash";
let response = client
.get(url)
.query(&[("raw", "true")])
.header("User-Agent", "Test Agent")
.send()?;
println!("Status Code: {}", response.status());
println!("Response Body: {}", response.text()?);
Ok(())
}
""";
expect(
codeGen.getCode(
CodegenLanguage.rustReqwest, requestModelGet6, "https"),
expectedCode);
});
test('GET 7', () {
const expectedCode =
r"""fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = reqwest::blocking::Client::new();
let url = "https://api.apidash.dev";
let response = client
.get(url)
.send()?;
println!("Status Code: {}", response.status());
println!("Response Body: {}", response.text()?);
Ok(())
}
""";
expect(
codeGen.getCode(
CodegenLanguage.rustReqwest, requestModelGet7, "https"),
expectedCode);
});
test('GET 8', () {
const expectedCode =
r"""fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = reqwest::blocking::Client::new();
let url = "https://api.github.com/repos/foss42/apidash";
let response = client
.get(url)
.query(&[("raw", "true")])
.header("User-Agent", "Test Agent")
.send()?;
println!("Status Code: {}", response.status());
println!("Response Body: {}", response.text()?);
Ok(())
}
""";
expect(
codeGen.getCode(
CodegenLanguage.rustReqwest, requestModelGet8, "https"),
expectedCode);
});
test('GET 9', () {
const expectedCode =
r"""fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = reqwest::blocking::Client::new();
let url = "https://api.apidash.dev/humanize/social";
let response = client
.get(url)
.query(&[("num", "8700000"), ("add_space", "true")])
.send()?;
println!("Status Code: {}", response.status());
println!("Response Body: {}", response.text()?);
Ok(())
}
""";
expect(
codeGen.getCode(
CodegenLanguage.rustReqwest, requestModelGet9, "https"),
expectedCode);
});
test('GET 10', () {
const expectedCode =
r"""fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = reqwest::blocking::Client::new();
let url = "https://api.apidash.dev/humanize/social";
let response = client
.get(url)
.header("User-Agent", "Test Agent")
.send()?;
println!("Status Code: {}", response.status());
println!("Response Body: {}", response.text()?);
Ok(())
}
""";
expect(
codeGen.getCode(
CodegenLanguage.rustReqwest,
requestModelGet10,
"https",
),
expectedCode);
});
test('GET 11', () {
const expectedCode =
r"""fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = reqwest::blocking::Client::new();
let url = "https://api.apidash.dev/humanize/social";
let response = client
.get(url)
.query(&[("num", "8700000"), ("digits", "3")])
.header("User-Agent", "Test Agent")
.send()?;
println!("Status Code: {}", response.status());
println!("Response Body: {}", response.text()?);
Ok(())
}
""";
expect(
codeGen.getCode(
CodegenLanguage.rustReqwest, requestModelGet11, "https"),
expectedCode);
});
test('GET 12', () {
const expectedCode =
r"""fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = reqwest::blocking::Client::new();
let url = "https://api.apidash.dev/humanize/social";
let response = client
.get(url)
.send()?;
println!("Status Code: {}", response.status());
println!("Response Body: {}", response.text()?);
Ok(())
}
""";
expect(
codeGen.getCode(
CodegenLanguage.rustReqwest, requestModelGet12, "https"),
expectedCode);
});
});
group('HEAD Request', () {
test('HEAD 1', () {
const expectedCode =
r"""fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = reqwest::blocking::Client::new();
let url = "https://api.apidash.dev";
let response = client
.head(url)
.send()?;
println!("Status Code: {}", response.status());
println!("Response Body: {}", response.text()?);
Ok(())
}
""";
expect(
codeGen.getCode(
CodegenLanguage.rustReqwest, requestModelHead1, "https"),
expectedCode);
});
test('HEAD 2', () {
const expectedCode =
r"""fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = reqwest::blocking::Client::new();
let url = "http://api.apidash.dev";
let response = client
.head(url)
.send()?;
println!("Status Code: {}", response.status());
println!("Response Body: {}", response.text()?);
Ok(())
}
""";
expect(
codeGen.getCode(
CodegenLanguage.rustReqwest, requestModelHead2, "http"),
expectedCode);
});
});
group('POST Request', () {
test('POST 1', () {
const expectedCode =
r"""fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = reqwest::blocking::Client::new();
let url = "https://api.apidash.dev/case/lower";
let payload = r#"{
"text": "I LOVE Flutter"
}"#;
let response = client
.post(url)
.header("content-type", "text/plain")
.body(payload)
.send()?;
println!("Status Code: {}", response.status());
println!("Response Body: {}", response.text()?);
Ok(())
}
""";
expect(
codeGen.getCode(
CodegenLanguage.rustReqwest, requestModelPost1, "https"),
expectedCode);
});
test('POST 2', () {
const expectedCode =
r"""fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = reqwest::blocking::Client::new();
let url = "https://api.apidash.dev/case/lower";
let payload = serde_json::json!({
"text": "I LOVE Flutter",
"flag": null,
"male": true,
"female": false,
"no": 1.2,
"arr": ["null", "true", "false", null]
});
let response = client
.post(url)
.json(&payload)
.send()?;
println!("Status Code: {}", response.status());
println!("Response Body: {}", response.text()?);
Ok(())
}
""";
expect(
codeGen.getCode(
CodegenLanguage.rustReqwest, requestModelPost2, "https"),
expectedCode);
});
test('POST 3', () {
const expectedCode =
r"""fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = reqwest::blocking::Client::new();
let url = "https://api.apidash.dev/case/lower";
let payload = serde_json::json!({
"text": "I LOVE Flutter"
});
let response = client
.post(url)
.header("User-Agent", "Test Agent")
.json(&payload)
.send()?;
println!("Status Code: {}", response.status());
println!("Response Body: {}", response.text()?);
Ok(())
}
""";
expect(
codeGen.getCode(
CodegenLanguage.rustReqwest, requestModelPost3, "https"),
expectedCode);
});
test('POST 4', () {
const expectedCode =
r"""fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = reqwest::blocking::Client::new();
let url = "https://api.apidash.dev/io/form";
struct FormDataItem {
name: String,
value: String,
field_type: String,
}
let form_data_items: Vec<FormDataItem> = vec![
FormDataItem {
name: "text".to_string(),
value: "API".to_string(),
field_type: "text".to_string(),
},
FormDataItem {
name: "sep".to_string(),
value: "|".to_string(),
field_type: "text".to_string(),
},
FormDataItem {
name: "times".to_string(),
value: "3".to_string(),
field_type: "text".to_string(),
},
];
let mut form = reqwest::blocking::multipart::Form::new();
for item in form_data_items {
if item.field_type == "text" {
form = form.text(item.name, item.value);
} else if item.field_type == "file" {
form = form.file(item.name, &item.value)?;
}
}
let response = client
.post(url)
.multipart(form)
.send()?;
println!("Status Code: {}", response.status());
println!("Response Body: {}", response.text()?);
Ok(())
}
""";
expect(
codeGen.getCode(
CodegenLanguage.rustReqwest,
requestModelPost4,
"https",
boundary: "test",
),
expectedCode);
});
test('POST 5', () {
const expectedCode =
r"""fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = reqwest::blocking::Client::new();
let url = "https://api.apidash.dev/io/form";
struct FormDataItem {
name: String,
value: String,
field_type: String,
}
let form_data_items: Vec<FormDataItem> = vec![
FormDataItem {
name: "text".to_string(),
value: "API".to_string(),
field_type: "text".to_string(),
},
FormDataItem {
name: "sep".to_string(),
value: "|".to_string(),
field_type: "text".to_string(),
},
FormDataItem {
name: "times".to_string(),
value: "3".to_string(),
field_type: "text".to_string(),
},
];
let mut form = reqwest::blocking::multipart::Form::new();
for item in form_data_items {
if item.field_type == "text" {
form = form.text(item.name, item.value);
} else if item.field_type == "file" {
form = form.file(item.name, &item.value)?;
}
}
let response = client
.post(url)
.header("User-Agent", "Test Agent")
.multipart(form)
.send()?;
println!("Status Code: {}", response.status());
println!("Response Body: {}", response.text()?);
Ok(())
}
""";
expect(
codeGen.getCode(
CodegenLanguage.rustReqwest, requestModelPost5, "https",
boundary: "test"),
expectedCode);
});
test('POST 6', () {
const expectedCode =
r"""fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = reqwest::blocking::Client::new();
let url = "https://api.apidash.dev/io/img";
struct FormDataItem {
name: String,
value: String,
field_type: String,
}
let form_data_items: Vec<FormDataItem> = vec![
FormDataItem {
name: "token".to_string(),
value: "xyz".to_string(),
field_type: "text".to_string(),
},
FormDataItem {
name: "imfile".to_string(),
value: "/Documents/up/1.png".to_string(),
field_type: "file".to_string(),
},
];
let mut form = reqwest::blocking::multipart::Form::new();
for item in form_data_items {
if item.field_type == "text" {
form = form.text(item.name, item.value);
} else if item.field_type == "file" {
form = form.file(item.name, &item.value)?;
}
}
let response = client
.post(url)
.multipart(form)
.send()?;
println!("Status Code: {}", response.status());
println!("Response Body: {}", response.text()?);
Ok(())
}
""";
expect(
codeGen.getCode(
CodegenLanguage.rustReqwest, requestModelPost6, "https",
boundary: "test"),
expectedCode);
});
test('POST 7', () {
const expectedCode =
r"""fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = reqwest::blocking::Client::new();
let url = "https://api.apidash.dev/io/img";
struct FormDataItem {
name: String,
value: String,
field_type: String,
}
let form_data_items: Vec<FormDataItem> = vec![
FormDataItem {
name: "token".to_string(),
value: "xyz".to_string(),
field_type: "text".to_string(),
},
FormDataItem {
name: "imfile".to_string(),
value: "/Documents/up/1.png".to_string(),
field_type: "file".to_string(),
},
];
let mut form = reqwest::blocking::multipart::Form::new();
for item in form_data_items {
if item.field_type == "text" {
form = form.text(item.name, item.value);
} else if item.field_type == "file" {
form = form.file(item.name, &item.value)?;
}
}
let response = client
.post(url)
.multipart(form)
.send()?;
println!("Status Code: {}", response.status());
println!("Response Body: {}", response.text()?);
Ok(())
}
""";
expect(
codeGen.getCode(
CodegenLanguage.rustReqwest, requestModelPost7, "https",
boundary: "test"),
expectedCode);
});
test('POST 8', () {
const expectedCode =
r"""fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = reqwest::blocking::Client::new();
let url = "https://api.apidash.dev/io/form";
struct FormDataItem {
name: String,
value: String,
field_type: String,
}
let form_data_items: Vec<FormDataItem> = vec![
FormDataItem {
name: "text".to_string(),
value: "API".to_string(),
field_type: "text".to_string(),
},
FormDataItem {
name: "sep".to_string(),
value: "|".to_string(),
field_type: "text".to_string(),
},
FormDataItem {
name: "times".to_string(),
value: "3".to_string(),
field_type: "text".to_string(),
},
];
let mut form = reqwest::blocking::multipart::Form::new();
for item in form_data_items {
if item.field_type == "text" {
form = form.text(item.name, item.value);
} else if item.field_type == "file" {
form = form.file(item.name, &item.value)?;
}
}
let response = client
.post(url)
.query(&[("size", "2"), ("len", "3")])
.multipart(form)
.send()?;
println!("Status Code: {}", response.status());
println!("Response Body: {}", response.text()?);
Ok(())
}
""";
expect(
codeGen.getCode(
CodegenLanguage.rustReqwest, requestModelPost8, "https",
boundary: "test"),
expectedCode);
});
test('POST 9', () {
const expectedCode =
r"""fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = reqwest::blocking::Client::new();
let url = "https://api.apidash.dev/io/img";
struct FormDataItem {
name: String,
value: String,
field_type: String,
}
let form_data_items: Vec<FormDataItem> = vec![
FormDataItem {
name: "token".to_string(),
value: "xyz".to_string(),
field_type: "text".to_string(),
},
FormDataItem {
name: "imfile".to_string(),
value: "/Documents/up/1.png".to_string(),
field_type: "file".to_string(),
},
];
let mut form = reqwest::blocking::multipart::Form::new();
for item in form_data_items {
if item.field_type == "text" {
form = form.text(item.name, item.value);
} else if item.field_type == "file" {
form = form.file(item.name, &item.value)?;
}
}
let response = client
.post(url)
.query(&[("size", "2"), ("len", "3")])
.header("User-Agent", "Test Agent")
.header("Keep-Alive", "true")
.multipart(form)
.send()?;
println!("Status Code: {}", response.status());
println!("Response Body: {}", response.text()?);
Ok(())
}
""";
expect(
codeGen.getCode(
CodegenLanguage.rustReqwest, requestModelPost9, "https",
boundary: "test"),
expectedCode);
});
});
group('PUT Request', () {
test('PUT 1', () {
const expectedCode =
r"""fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = reqwest::blocking::Client::new();
let url = "https://reqres.in/api/users/2";
let payload = serde_json::json!({
"name": "morpheus",
"job": "zion resident"
});
let response = client
.put(url)
.json(&payload)
.send()?;
println!("Status Code: {}", response.status());
println!("Response Body: {}", response.text()?);
Ok(())
}
""";
expect(
codeGen.getCode(
CodegenLanguage.rustReqwest, requestModelPut1, "https"),
expectedCode);
});
});
group('PATCH Request', () {
test('PATCH 1', () {
const expectedCode =
r"""fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = reqwest::blocking::Client::new();
let url = "https://reqres.in/api/users/2";
let payload = serde_json::json!({
"name": "marfeus",
"job": "accountant"
});
let response = client
.patch(url)
.json(&payload)
.send()?;
println!("Status Code: {}", response.status());
println!("Response Body: {}", response.text()?);
Ok(())
}
""";
expect(
codeGen.getCode(
CodegenLanguage.rustReqwest, requestModelPatch1, "https"),
expectedCode);
});
});
group('DELETE Request', () {
test('DELETE 1', () {
const expectedCode =
r"""fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = reqwest::blocking::Client::new();
let url = "https://reqres.in/api/users/2";
let response = client
.delete(url)
.send()?;
println!("Status Code: {}", response.status());
println!("Response Body: {}", response.text()?);
Ok(())
}
""";
expect(
codeGen.getCode(
CodegenLanguage.rustReqwest, requestModelDelete1, "https"),
expectedCode);
});
test('DELETE 2', () {
const expectedCode =
r"""fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = reqwest::blocking::Client::new();
let url = "https://reqres.in/api/users/2";
let payload = serde_json::json!({
"name": "marfeus",
"job": "accountant"
});
let response = client
.delete(url)
.json(&payload)
.send()?;
println!("Status Code: {}", response.status());
println!("Response Body: {}", response.text()?);
Ok(())
}
""";
expect(
codeGen.getCode(
CodegenLanguage.rustReqwest, requestModelDelete2, "https"),
expectedCode);
});
});
}

View File

@ -0,0 +1,871 @@
import 'package:apidash/codegen/codegen.dart';
import 'package:apidash/consts.dart';
import 'package:test/test.dart';
import '../request_models.dart';
void main() {
final codeGen = Codegen();
group('GET Request', () {
test('GET 1', () {
const expectedCode = r"""fn main() -> Result<(), ureq::Error> {
let url = "https://api.apidash.dev";
let response = ureq::get(url)
.call()?;
println!("Response Status: {}", response.status());
println!("Response: {}", response.into_string()?);
Ok(())
}
""";
expect(
codeGen.getCode(CodegenLanguage.rustUreq, requestModelGet1, "https"),
expectedCode);
});
test('GET 2', () {
const expectedCode = r"""fn main() -> Result<(), ureq::Error> {
let url = "https://api.apidash.dev/country/data";
let response = ureq::get(url)
.query("code", "US")
.call()?;
println!("Response Status: {}", response.status());
println!("Response: {}", response.into_string()?);
Ok(())
}
""";
expect(
codeGen.getCode(CodegenLanguage.rustUreq, requestModelGet2, "https"),
expectedCode);
});
test('GET 3', () {
const expectedCode = r"""fn main() -> Result<(), ureq::Error> {
let url = "https://api.apidash.dev/country/data";
let response = ureq::get(url)
.query("code", "IND")
.call()?;
println!("Response Status: {}", response.status());
println!("Response: {}", response.into_string()?);
Ok(())
}
""";
expect(
codeGen.getCode(CodegenLanguage.rustUreq, requestModelGet3, "https"),
expectedCode);
});
test('GET 4', () {
const expectedCode = r"""fn main() -> Result<(), ureq::Error> {
let url = "https://api.apidash.dev/humanize/social";
let response = ureq::get(url)
.query("num", "8700000")
.query("digits", "3")
.query("system", "SS")
.query("add_space", "true")
.query("trailing_zeros", "true")
.call()?;
println!("Response Status: {}", response.status());
println!("Response: {}", response.into_string()?);
Ok(())
}
""";
expect(
codeGen.getCode(CodegenLanguage.rustUreq, requestModelGet4, "https"),
expectedCode);
});
test('GET 5', () {
const expectedCode = r"""fn main() -> Result<(), ureq::Error> {
let url = "https://api.github.com/repos/foss42/apidash";
let response = ureq::get(url)
.set("User-Agent", "Test Agent")
.call()?;
println!("Response Status: {}", response.status());
println!("Response: {}", response.into_string()?);
Ok(())
}
""";
expect(
codeGen.getCode(CodegenLanguage.rustUreq, requestModelGet5, "https"),
expectedCode);
});
test('GET 6', () {
const expectedCode = r"""fn main() -> Result<(), ureq::Error> {
let url = "https://api.github.com/repos/foss42/apidash";
let response = ureq::get(url)
.query("raw", "true")
.set("User-Agent", "Test Agent")
.call()?;
println!("Response Status: {}", response.status());
println!("Response: {}", response.into_string()?);
Ok(())
}
""";
expect(
codeGen.getCode(CodegenLanguage.rustUreq, requestModelGet6, "https"),
expectedCode);
});
test('GET 7', () {
const expectedCode = r"""fn main() -> Result<(), ureq::Error> {
let url = "https://api.apidash.dev";
let response = ureq::get(url)
.call()?;
println!("Response Status: {}", response.status());
println!("Response: {}", response.into_string()?);
Ok(())
}
""";
expect(
codeGen.getCode(CodegenLanguage.rustUreq, requestModelGet7, "https"),
expectedCode);
});
test('GET 8', () {
const expectedCode = r"""fn main() -> Result<(), ureq::Error> {
let url = "https://api.github.com/repos/foss42/apidash";
let response = ureq::get(url)
.query("raw", "true")
.set("User-Agent", "Test Agent")
.call()?;
println!("Response Status: {}", response.status());
println!("Response: {}", response.into_string()?);
Ok(())
}
""";
expect(
codeGen.getCode(CodegenLanguage.rustUreq, requestModelGet8, "https"),
expectedCode);
});
test('GET 9', () {
const expectedCode = r"""fn main() -> Result<(), ureq::Error> {
let url = "https://api.apidash.dev/humanize/social";
let response = ureq::get(url)
.query("num", "8700000")
.query("add_space", "true")
.call()?;
println!("Response Status: {}", response.status());
println!("Response: {}", response.into_string()?);
Ok(())
}
""";
expect(
codeGen.getCode(CodegenLanguage.rustUreq, requestModelGet9, "https"),
expectedCode);
});
test('GET 10', () {
const expectedCode = r"""fn main() -> Result<(), ureq::Error> {
let url = "https://api.apidash.dev/humanize/social";
let response = ureq::get(url)
.set("User-Agent", "Test Agent")
.call()?;
println!("Response Status: {}", response.status());
println!("Response: {}", response.into_string()?);
Ok(())
}
""";
expect(
codeGen.getCode(
CodegenLanguage.rustUreq,
requestModelGet10,
"https",
),
expectedCode);
});
test('GET 11', () {
const expectedCode = r"""fn main() -> Result<(), ureq::Error> {
let url = "https://api.apidash.dev/humanize/social";
let response = ureq::get(url)
.query("num", "8700000")
.query("digits", "3")
.set("User-Agent", "Test Agent")
.call()?;
println!("Response Status: {}", response.status());
println!("Response: {}", response.into_string()?);
Ok(())
}
""";
expect(
codeGen.getCode(CodegenLanguage.rustUreq, requestModelGet11, "https"),
expectedCode);
});
test('GET 12', () {
const expectedCode = r"""fn main() -> Result<(), ureq::Error> {
let url = "https://api.apidash.dev/humanize/social";
let response = ureq::get(url)
.call()?;
println!("Response Status: {}", response.status());
println!("Response: {}", response.into_string()?);
Ok(())
}
""";
expect(
codeGen.getCode(CodegenLanguage.rustUreq, requestModelGet12, "https"),
expectedCode);
});
});
group('HEAD Request', () {
test('HEAD 1', () {
const expectedCode = r"""fn main() -> Result<(), ureq::Error> {
let url = "https://api.apidash.dev";
let response = ureq::head(url)
.call()?;
println!("Response Status: {}", response.status());
println!("Response: {}", response.into_string()?);
Ok(())
}
""";
expect(
codeGen.getCode(CodegenLanguage.rustUreq, requestModelHead1, "https"),
expectedCode);
});
test('HEAD 2', () {
const expectedCode = r"""fn main() -> Result<(), ureq::Error> {
let url = "http://api.apidash.dev";
let response = ureq::head(url)
.call()?;
println!("Response Status: {}", response.status());
println!("Response: {}", response.into_string()?);
Ok(())
}
""";
expect(
codeGen.getCode(CodegenLanguage.rustUreq, requestModelHead2, "http"),
expectedCode);
});
});
group('POST Request', () {
test('POST 1', () {
const expectedCode = r'''fn main() -> Result<(), ureq::Error> {
let url = "https://api.apidash.dev/case/lower";
let payload = r#"{
"text": "I LOVE Flutter"
}"#;
let response = ureq::post(url)
.set("content-type", "text/plain")
.send_string(payload)?;
println!("Response Status: {}", response.status());
println!("Response: {}", response.into_string()?);
Ok(())
}
''';
expect(
codeGen.getCode(CodegenLanguage.rustUreq, requestModelPost1, "https"),
expectedCode);
});
test('POST 2', () {
const expectedCode = r'''fn main() -> Result<(), ureq::Error> {
let url = "https://api.apidash.dev/case/lower";
let payload = ureq::json!({
"text": "I LOVE Flutter",
"flag": null,
"male": true,
"female": false,
"no": 1.2,
"arr": ["null", "true", "false", null]
});
let response = ureq::post(url)
.send_json(payload)?;
println!("Response Status: {}", response.status());
println!("Response: {}", response.into_string()?);
Ok(())
}
''';
expect(
codeGen.getCode(CodegenLanguage.rustUreq, requestModelPost2, "https"),
expectedCode);
});
test('POST 3', () {
const expectedCode = r'''fn main() -> Result<(), ureq::Error> {
let url = "https://api.apidash.dev/case/lower";
let payload = ureq::json!({
"text": "I LOVE Flutter"
});
let response = ureq::post(url)
.set("User-Agent", "Test Agent")
.send_json(payload)?;
println!("Response Status: {}", response.status());
println!("Response: {}", response.into_string()?);
Ok(())
}
''';
expect(
codeGen.getCode(CodegenLanguage.rustUreq, requestModelPost3, "https"),
expectedCode);
});
test('POST 4', () {
const expectedCode = r"""use std::io::Read;
fn main() -> Result<(), ureq::Error> {
let url = "https://api.apidash.dev/io/form";
struct FormDataItem {
name: String,
value: String,
field_type: String,
}
let form_data_items: Vec<FormDataItem> = vec![
FormDataItem {
name: "text".to_string(),
value: "API".to_string(),
field_type: "text".to_string(),
},
FormDataItem {
name: "sep".to_string(),
value: "|".to_string(),
field_type: "text".to_string(),
},
FormDataItem {
name: "times".to_string(),
value: "3".to_string(),
field_type: "text".to_string(),
},
];
fn build_data_list(fields: Vec<FormDataItem>) -> Vec<u8> {
let mut data_list = Vec::new();
for field in fields {
data_list.extend_from_slice(b"--test\r\n");
if field.field_type == "text" {
data_list.extend_from_slice(format!("Content-Disposition: form-data; name=\"{}\"\r\n", field.name).as_bytes());
data_list.extend_from_slice(b"Content-Type: text/plain\r\n\r\n");
data_list.extend_from_slice(field.value.as_bytes());
data_list.extend_from_slice(b"\r\n");
} else if field.field_type == "file" {
data_list.extend_from_slice(format!("Content-Disposition: form-data; name=\"{}\"; filename=\"{}\"\r\n", field.name, field.value).as_bytes());
let mime_type = mime_guess::from_path(&field.value).first_or(mime_guess::mime::APPLICATION_OCTET_STREAM);
data_list.extend_from_slice(format!("Content-Type: {}\r\n\r\n", mime_type).as_bytes());
let mut file = std::fs::File::open(&field.value).unwrap();
let mut file_contents = Vec::new();
file.read_to_end(&mut file_contents).unwrap();
data_list.extend_from_slice(&file_contents);
data_list.extend_from_slice(b"\r\n");
}
}
data_list.extend_from_slice(b"--test--\r\n");
data_list
}
let payload = build_data_list(form_data_items);
let response = ureq::post(url)
.set("content-type", "multipart/form-data; boundary=test")
.send_bytes(&payload)?;
println!("Response Status: {}", response.status());
println!("Response: {}", response.into_string()?);
Ok(())
}
""";
expect(
codeGen.getCode(
CodegenLanguage.rustUreq,
requestModelPost4,
"https",
boundary: "test",
),
expectedCode);
});
test('POST 5', () {
const expectedCode = r"""use std::io::Read;
fn main() -> Result<(), ureq::Error> {
let url = "https://api.apidash.dev/io/form";
struct FormDataItem {
name: String,
value: String,
field_type: String,
}
let form_data_items: Vec<FormDataItem> = vec![
FormDataItem {
name: "text".to_string(),
value: "API".to_string(),
field_type: "text".to_string(),
},
FormDataItem {
name: "sep".to_string(),
value: "|".to_string(),
field_type: "text".to_string(),
},
FormDataItem {
name: "times".to_string(),
value: "3".to_string(),
field_type: "text".to_string(),
},
];
fn build_data_list(fields: Vec<FormDataItem>) -> Vec<u8> {
let mut data_list = Vec::new();
for field in fields {
data_list.extend_from_slice(b"--test\r\n");
if field.field_type == "text" {
data_list.extend_from_slice(format!("Content-Disposition: form-data; name=\"{}\"\r\n", field.name).as_bytes());
data_list.extend_from_slice(b"Content-Type: text/plain\r\n\r\n");
data_list.extend_from_slice(field.value.as_bytes());
data_list.extend_from_slice(b"\r\n");
} else if field.field_type == "file" {
data_list.extend_from_slice(format!("Content-Disposition: form-data; name=\"{}\"; filename=\"{}\"\r\n", field.name, field.value).as_bytes());
let mime_type = mime_guess::from_path(&field.value).first_or(mime_guess::mime::APPLICATION_OCTET_STREAM);
data_list.extend_from_slice(format!("Content-Type: {}\r\n\r\n", mime_type).as_bytes());
let mut file = std::fs::File::open(&field.value).unwrap();
let mut file_contents = Vec::new();
file.read_to_end(&mut file_contents).unwrap();
data_list.extend_from_slice(&file_contents);
data_list.extend_from_slice(b"\r\n");
}
}
data_list.extend_from_slice(b"--test--\r\n");
data_list
}
let payload = build_data_list(form_data_items);
let response = ureq::post(url)
.set("User-Agent", "Test Agent")
.set("content-type", "multipart/form-data; boundary=test")
.send_bytes(&payload)?;
println!("Response Status: {}", response.status());
println!("Response: {}", response.into_string()?);
Ok(())
}
""";
expect(
codeGen.getCode(CodegenLanguage.rustUreq, requestModelPost5, "https",
boundary: "test"),
expectedCode);
});
test('POST 6', () {
const expectedCode = r"""use std::io::Read;
fn main() -> Result<(), ureq::Error> {
let url = "https://api.apidash.dev/io/img";
struct FormDataItem {
name: String,
value: String,
field_type: String,
}
let form_data_items: Vec<FormDataItem> = vec![
FormDataItem {
name: "token".to_string(),
value: "xyz".to_string(),
field_type: "text".to_string(),
},
FormDataItem {
name: "imfile".to_string(),
value: "/Documents/up/1.png".to_string(),
field_type: "file".to_string(),
},
];
fn build_data_list(fields: Vec<FormDataItem>) -> Vec<u8> {
let mut data_list = Vec::new();
for field in fields {
data_list.extend_from_slice(b"--test\r\n");
if field.field_type == "text" {
data_list.extend_from_slice(format!("Content-Disposition: form-data; name=\"{}\"\r\n", field.name).as_bytes());
data_list.extend_from_slice(b"Content-Type: text/plain\r\n\r\n");
data_list.extend_from_slice(field.value.as_bytes());
data_list.extend_from_slice(b"\r\n");
} else if field.field_type == "file" {
data_list.extend_from_slice(format!("Content-Disposition: form-data; name=\"{}\"; filename=\"{}\"\r\n", field.name, field.value).as_bytes());
let mime_type = mime_guess::from_path(&field.value).first_or(mime_guess::mime::APPLICATION_OCTET_STREAM);
data_list.extend_from_slice(format!("Content-Type: {}\r\n\r\n", mime_type).as_bytes());
let mut file = std::fs::File::open(&field.value).unwrap();
let mut file_contents = Vec::new();
file.read_to_end(&mut file_contents).unwrap();
data_list.extend_from_slice(&file_contents);
data_list.extend_from_slice(b"\r\n");
}
}
data_list.extend_from_slice(b"--test--\r\n");
data_list
}
let payload = build_data_list(form_data_items);
let response = ureq::post(url)
.set("content-type", "multipart/form-data; boundary=test")
.send_bytes(&payload)?;
println!("Response Status: {}", response.status());
println!("Response: {}", response.into_string()?);
Ok(())
}
""";
expect(
codeGen.getCode(CodegenLanguage.rustUreq, requestModelPost6, "https",
boundary: "test"),
expectedCode);
});
test('POST 7', () {
const expectedCode = r"""use std::io::Read;
fn main() -> Result<(), ureq::Error> {
let url = "https://api.apidash.dev/io/img";
struct FormDataItem {
name: String,
value: String,
field_type: String,
}
let form_data_items: Vec<FormDataItem> = vec![
FormDataItem {
name: "token".to_string(),
value: "xyz".to_string(),
field_type: "text".to_string(),
},
FormDataItem {
name: "imfile".to_string(),
value: "/Documents/up/1.png".to_string(),
field_type: "file".to_string(),
},
];
fn build_data_list(fields: Vec<FormDataItem>) -> Vec<u8> {
let mut data_list = Vec::new();
for field in fields {
data_list.extend_from_slice(b"--test\r\n");
if field.field_type == "text" {
data_list.extend_from_slice(format!("Content-Disposition: form-data; name=\"{}\"\r\n", field.name).as_bytes());
data_list.extend_from_slice(b"Content-Type: text/plain\r\n\r\n");
data_list.extend_from_slice(field.value.as_bytes());
data_list.extend_from_slice(b"\r\n");
} else if field.field_type == "file" {
data_list.extend_from_slice(format!("Content-Disposition: form-data; name=\"{}\"; filename=\"{}\"\r\n", field.name, field.value).as_bytes());
let mime_type = mime_guess::from_path(&field.value).first_or(mime_guess::mime::APPLICATION_OCTET_STREAM);
data_list.extend_from_slice(format!("Content-Type: {}\r\n\r\n", mime_type).as_bytes());
let mut file = std::fs::File::open(&field.value).unwrap();
let mut file_contents = Vec::new();
file.read_to_end(&mut file_contents).unwrap();
data_list.extend_from_slice(&file_contents);
data_list.extend_from_slice(b"\r\n");
}
}
data_list.extend_from_slice(b"--test--\r\n");
data_list
}
let payload = build_data_list(form_data_items);
let response = ureq::post(url)
.set("content-type", "multipart/form-data; boundary=test")
.send_bytes(&payload)?;
println!("Response Status: {}", response.status());
println!("Response: {}", response.into_string()?);
Ok(())
}
""";
expect(
codeGen.getCode(CodegenLanguage.rustUreq, requestModelPost7, "https",
boundary: "test"),
expectedCode);
});
test('POST 8', () {
const expectedCode = r"""use std::io::Read;
fn main() -> Result<(), ureq::Error> {
let url = "https://api.apidash.dev/io/form";
struct FormDataItem {
name: String,
value: String,
field_type: String,
}
let form_data_items: Vec<FormDataItem> = vec![
FormDataItem {
name: "text".to_string(),
value: "API".to_string(),
field_type: "text".to_string(),
},
FormDataItem {
name: "sep".to_string(),
value: "|".to_string(),
field_type: "text".to_string(),
},
FormDataItem {
name: "times".to_string(),
value: "3".to_string(),
field_type: "text".to_string(),
},
];
fn build_data_list(fields: Vec<FormDataItem>) -> Vec<u8> {
let mut data_list = Vec::new();
for field in fields {
data_list.extend_from_slice(b"--test\r\n");
if field.field_type == "text" {
data_list.extend_from_slice(format!("Content-Disposition: form-data; name=\"{}\"\r\n", field.name).as_bytes());
data_list.extend_from_slice(b"Content-Type: text/plain\r\n\r\n");
data_list.extend_from_slice(field.value.as_bytes());
data_list.extend_from_slice(b"\r\n");
} else if field.field_type == "file" {
data_list.extend_from_slice(format!("Content-Disposition: form-data; name=\"{}\"; filename=\"{}\"\r\n", field.name, field.value).as_bytes());
let mime_type = mime_guess::from_path(&field.value).first_or(mime_guess::mime::APPLICATION_OCTET_STREAM);
data_list.extend_from_slice(format!("Content-Type: {}\r\n\r\n", mime_type).as_bytes());
let mut file = std::fs::File::open(&field.value).unwrap();
let mut file_contents = Vec::new();
file.read_to_end(&mut file_contents).unwrap();
data_list.extend_from_slice(&file_contents);
data_list.extend_from_slice(b"\r\n");
}
}
data_list.extend_from_slice(b"--test--\r\n");
data_list
}
let payload = build_data_list(form_data_items);
let response = ureq::post(url)
.query("size", "2")
.query("len", "3")
.set("content-type", "multipart/form-data; boundary=test")
.send_bytes(&payload)?;
println!("Response Status: {}", response.status());
println!("Response: {}", response.into_string()?);
Ok(())
}
""";
expect(
codeGen.getCode(CodegenLanguage.rustUreq, requestModelPost8, "https",
boundary: "test"),
expectedCode);
});
test('POST 9', () {
const expectedCode = r"""use std::io::Read;
fn main() -> Result<(), ureq::Error> {
let url = "https://api.apidash.dev/io/img";
struct FormDataItem {
name: String,
value: String,
field_type: String,
}
let form_data_items: Vec<FormDataItem> = vec![
FormDataItem {
name: "token".to_string(),
value: "xyz".to_string(),
field_type: "text".to_string(),
},
FormDataItem {
name: "imfile".to_string(),
value: "/Documents/up/1.png".to_string(),
field_type: "file".to_string(),
},
];
fn build_data_list(fields: Vec<FormDataItem>) -> Vec<u8> {
let mut data_list = Vec::new();
for field in fields {
data_list.extend_from_slice(b"--test\r\n");
if field.field_type == "text" {
data_list.extend_from_slice(format!("Content-Disposition: form-data; name=\"{}\"\r\n", field.name).as_bytes());
data_list.extend_from_slice(b"Content-Type: text/plain\r\n\r\n");
data_list.extend_from_slice(field.value.as_bytes());
data_list.extend_from_slice(b"\r\n");
} else if field.field_type == "file" {
data_list.extend_from_slice(format!("Content-Disposition: form-data; name=\"{}\"; filename=\"{}\"\r\n", field.name, field.value).as_bytes());
let mime_type = mime_guess::from_path(&field.value).first_or(mime_guess::mime::APPLICATION_OCTET_STREAM);
data_list.extend_from_slice(format!("Content-Type: {}\r\n\r\n", mime_type).as_bytes());
let mut file = std::fs::File::open(&field.value).unwrap();
let mut file_contents = Vec::new();
file.read_to_end(&mut file_contents).unwrap();
data_list.extend_from_slice(&file_contents);
data_list.extend_from_slice(b"\r\n");
}
}
data_list.extend_from_slice(b"--test--\r\n");
data_list
}
let payload = build_data_list(form_data_items);
let response = ureq::post(url)
.query("size", "2")
.query("len", "3")
.set("User-Agent", "Test Agent")
.set("Keep-Alive", "true")
.set("content-type", "multipart/form-data; boundary=test")
.send_bytes(&payload)?;
println!("Response Status: {}", response.status());
println!("Response: {}", response.into_string()?);
Ok(())
}
""";
expect(
codeGen.getCode(CodegenLanguage.rustUreq, requestModelPost9, "https",
boundary: "test"),
expectedCode);
});
});
group('PUT Request', () {
test('PUT 1', () {
const expectedCode = r'''fn main() -> Result<(), ureq::Error> {
let url = "https://reqres.in/api/users/2";
let payload = ureq::json!({
"name": "morpheus",
"job": "zion resident"
});
let response = ureq::put(url)
.send_json(payload)?;
println!("Response Status: {}", response.status());
println!("Response: {}", response.into_string()?);
Ok(())
}
''';
expect(
codeGen.getCode(CodegenLanguage.rustUreq, requestModelPut1, "https"),
expectedCode);
});
});
group('PATCH Request', () {
test('PATCH 1', () {
const expectedCode = r'''fn main() -> Result<(), ureq::Error> {
let url = "https://reqres.in/api/users/2";
let payload = ureq::json!({
"name": "marfeus",
"job": "accountant"
});
let response = ureq::patch(url)
.send_json(payload)?;
println!("Response Status: {}", response.status());
println!("Response: {}", response.into_string()?);
Ok(())
}
''';
expect(
codeGen.getCode(
CodegenLanguage.rustUreq, requestModelPatch1, "https"),
expectedCode);
});
});
group('DELETE Request', () {
test('DELETE 1', () {
const expectedCode = r"""fn main() -> Result<(), ureq::Error> {
let url = "https://reqres.in/api/users/2";
let response = ureq::delete(url)
.call()?;
println!("Response Status: {}", response.status());
println!("Response: {}", response.into_string()?);
Ok(())
}
""";
expect(
codeGen.getCode(
CodegenLanguage.rustUreq, requestModelDelete1, "https"),
expectedCode);
});
test('DELETE 2', () {
const expectedCode = r'''fn main() -> Result<(), ureq::Error> {
let url = "https://reqres.in/api/users/2";
let payload = ureq::json!({
"name": "marfeus",
"job": "accountant"
});
let response = ureq::delete(url)
.send_json(payload)?;
println!("Response Status: {}", response.status());
println!("Response: {}", response.into_string()?);
Ok(())
}
''';
expect(
codeGen.getCode(
CodegenLanguage.rustUreq, requestModelDelete2, "https"),
expectedCode);
});
});
}

View File

@ -175,7 +175,7 @@ void main() {
});
expect(requestModel.paramsMap, {});
expect(requestModel.formDataMapList, []);
expect(requestModel.isFormDataRequest, false);
expect(requestModel.hasFormData, false);
expect(requestModel.hasContentTypeHeader, true);
});

View File

@ -209,7 +209,12 @@ const requestModelPost2 = RequestModel(
url: 'https://api.apidash.dev/case/lower',
method: HTTPVerb.post,
requestBody: r"""{
"text": "I LOVE Flutter"
"text": "I LOVE Flutter",
"flag": null,
"male": true,
"female": false,
"no": 1.2,
"arr": ["null", "true", "false", null]
}""",
);

View File

@ -261,14 +261,19 @@ void main() {
'postData': {
'mimeType': 'application/json',
'text': '{\n'
'"text": "I LOVE Flutter"\n'
'"text": "I LOVE Flutter",\n'
'"flag": null,\n'
'"male": true,\n'
'"female": false,\n'
'"no": 1.2,\n'
'"arr": ["null", "true", "false", null]\n'
'}',
'comment': ''
},
'comment': '',
'cookies': [],
'headersSize': -1,
'bodySize': 28
'bodySize': 124
};
expect(
requestModelToHARJsonRequest(