mirror of
https://github.com/foss42/apidash.git
synced 2025-06-28 03:19:40 +08:00
Merge remote-tracking branch 'upstream/main' into add-rust-reqwest-codegen
- Merged upstream - Made required changes with respect to upstream - Fixed tests
This commit is contained in:
18
.github/pull_request_template.md
vendored
Normal file
18
.github/pull_request_template.md
vendored
Normal file
@ -0,0 +1,18 @@
|
||||
## PR Description
|
||||
|
||||
_Add your description_
|
||||
|
||||
## Related Issues
|
||||
|
||||
- Related Issue #
|
||||
- Closes #
|
||||
|
||||
### Checklist
|
||||
- [ ] I have gone through the [contributing guide](https://github.com/foss42/apidash/blob/main/CONTRIBUTING.md)
|
||||
- [ ] I have run the tests (`flutter test`) and all tests are passing
|
||||
|
||||
## Added/updated tests?
|
||||
_We encourage you to add relevant test cases._
|
||||
|
||||
- [ ] Yes
|
||||
- [ ] No, and this is why: _please replace this line with details on why tests have not been included_
|
@ -83,7 +83,7 @@ In case you have already setup Flutter, make sure to switch to `stable` branch a
|
||||
1. Fork the project.
|
||||
2. Create a clone of the forked project on your computer to run it locally.
|
||||
3. Based on your desktop environment, enable Windows, macOS or Linux for the project. Select the same target device.
|
||||
4. This project uses [Records feature in Dart](https://github.com/dart-lang/language/blob/main/accepted/future-releases/records/records-feature-specification.md), so to run the project execute the following command:
|
||||
4. Run the project by executing the following command:
|
||||
|
||||
```
|
||||
flutter run
|
||||
@ -128,3 +128,23 @@ flutter test test/widgets/codegen_previewer_test.dart
|
||||
### How to add a new package to pubspec.yaml?
|
||||
|
||||
Instead of copy pasting from pub.dev, it is recommended that you use `flutter pub add package_name` to add a new package to `pubspec.yaml`. You can read more [here](https://docs.flutter.dev/packages-and-plugins/using-packages#adding-a-package-dependency-to-an-app-using-flutter-pub-add).
|
||||
|
||||
## Troubleshooting Common Issues
|
||||
|
||||
### Network Connection Issues on macOS
|
||||
|
||||
If you encounter a network connection error similar to the following while running your Flutter app on macOS:
|
||||
|
||||
```
|
||||
ClientException with SocketException: Connection failed (OS Error: Operation not permitted, errno = 1)
|
||||
```
|
||||
Add below key to `macos/Runner/DebugProfile.entitlements` and `macos/Runner/Release.entitlements`.
|
||||
|
||||
```
|
||||
<key>com.apple.security.network.client</key>
|
||||
<true/>
|
||||
```
|
||||
|
||||
You can read more [here](https://docs.flutter.dev/platform-integration/macos/building#setting-up-entitlements)
|
||||
|
||||
|
||||
|
17
README.md
17
README.md
@ -137,6 +137,7 @@ Here is the complete list of mimetypes that can be directly previewed in API Das
|
||||
| File Type | Mimetype | Extension | Comment |
|
||||
| --------- | -------------------------- | ----------------- | -------- |
|
||||
| PDF | `application/pdf` | `.pdf` | |
|
||||
| CSV | `text/csv` | `.csv` | Can be improved |
|
||||
| Image | `image/apng` | `.apng` | Animated |
|
||||
| Image | `image/avif` | `.avif` | |
|
||||
| Image | `image/bmp` | `.bmp` | |
|
||||
@ -177,14 +178,14 @@ Here is the complete list of mimetypes that are syntax highlighted in API Dash:
|
||||
| ------------------ | --------- | ------------------------------------------------------------------------------------------------------------------ |
|
||||
| `application/json` | `.json` | Other mimetypes like `application/geo+json`, `application/vcard+json` that are based on `json` are also supported. |
|
||||
| `application/xml` | `.xml` | Other mimetypes like `application/xhtml+xml`, `application/vcard+xml` that are based on `xml` are also supported. |
|
||||
| `text/xml` | `.xml` | |
|
||||
| `application/yaml` | `.yaml` | Others - `application/x-yaml` or `application/x-yml` |
|
||||
| `text/yaml` | `.yaml` | Others - `text/yml` |
|
||||
| `application/sql` | `.sql` | |
|
||||
| `text/css` | `.css` | |
|
||||
| `text/html` | `.html` | Only syntax highlighting, no web preview. |
|
||||
| `text/javascript` | `.js` | |
|
||||
| `text/markdown` | `.md` | |
|
||||
| `text/xml` | `.xml` | |
|
||||
| `application/yaml` | `.yaml` | Others - `application/x-yaml` or `application/x-yml` |
|
||||
| `text/yaml` | `.yaml` | Others - `text/yml` |
|
||||
| `application/sql` | `.sql` | |
|
||||
| `text/css` | `.css` | |
|
||||
| `text/html` | `.html` | Only syntax highlighting, no web preview. |
|
||||
| `text/javascript` | `.js` | |
|
||||
| `text/markdown` | `.md` | |
|
||||
|
||||
## What's new in v0.3.0?
|
||||
|
||||
|
@ -3,8 +3,9 @@ include: package:flutter_lints/flutter.yaml
|
||||
analyzer:
|
||||
errors:
|
||||
invalid_annotation_target: ignore
|
||||
enable-experiment:
|
||||
- records
|
||||
exclude:
|
||||
- "**/*.freezed.dart"
|
||||
- "**/*.g.dart"
|
||||
|
||||
linter:
|
||||
rules:
|
||||
|
@ -1,5 +1,6 @@
|
||||
import 'package:apidash/models/models.dart' show RequestModel;
|
||||
import 'package:apidash/consts.dart';
|
||||
import 'package:apidash/utils/utils.dart' show getNewUuid;
|
||||
import 'dart/http.dart';
|
||||
import 'dart/dio.dart';
|
||||
import 'kotlin/okhttp.dart';
|
||||
@ -15,36 +16,45 @@ 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.rustReqwest:
|
||||
return RustReqwestCodeGen().getCode(requestModel, defaultUriScheme);
|
||||
return RustReqwestCodeGen().getCode(rM);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
15
lib/codegen/codegen_utils.dart
Normal file
15
lib/codegen/codegen_utils.dart
Normal 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;
|
||||
}
|
@ -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,
|
||||
|
@ -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},
|
||||
@ -53,7 +48,9 @@ class DartHttpCodeGen {
|
||||
declareVar('uri').assign(refer('Uri.parse').call([literalString(url)]));
|
||||
|
||||
Expression? dataExp;
|
||||
if (kMethodsWithBody.contains(method) && (body?.isNotEmpty ?? false)) {
|
||||
if (kMethodsWithBody.contains(method) &&
|
||||
(body?.isNotEmpty ?? false) &&
|
||||
contentType != ContentType.formdata) {
|
||||
final strContent = CodeExpression(Code('r\'\'\'$body\'\'\''));
|
||||
dataExp = declareVar('body', type: refer('String')).assign(strContent);
|
||||
if (!hasContentTypeHeader) {
|
||||
|
@ -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({
|
||||
|
@ -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',
|
||||
|
@ -7,7 +7,7 @@ import 'package:apidash/consts.dart';
|
||||
|
||||
class KotlinOkHttpCodeGen {
|
||||
final String kTemplateStart = """import okhttp3.OkHttpClient
|
||||
import okhttp3.Request{{importForQuery}}{{importForBody}}
|
||||
import okhttp3.Request{{importForQuery}}{{importForBody}}{{importForFormData}}
|
||||
|
||||
fun main() {
|
||||
val client = OkHttpClient()
|
||||
@ -23,6 +23,10 @@ import okhttp3.HttpUrl.Companion.toHttpUrl""";
|
||||
import okhttp3.RequestBody.Companion.toRequestBody
|
||||
import okhttp3.MediaType.Companion.toMediaType""";
|
||||
|
||||
final String kStringImportForFormData = """
|
||||
|
||||
import okhttp3.MultipartBody""";
|
||||
|
||||
final String kTemplateUrl = '''
|
||||
|
||||
val url = "{{url}}"
|
||||
@ -71,20 +75,15 @@ import okhttp3.MediaType.Companion.toMediaType""";
|
||||
|
||||
String? getCode(
|
||||
RequestModel requestModel,
|
||||
String defaultUriScheme,
|
||||
) {
|
||||
try {
|
||||
String result = "";
|
||||
bool hasQuery = false;
|
||||
bool hasBody = false;
|
||||
|
||||
String url = requestModel.url;
|
||||
if (!url.contains("://") && url.isNotEmpty) {
|
||||
url = "$defaultUriScheme://$url";
|
||||
}
|
||||
bool hasFormData = false;
|
||||
|
||||
var rec = getValidRequestUri(
|
||||
url,
|
||||
requestModel.url,
|
||||
requestModel.enabledRequestParams,
|
||||
);
|
||||
Uri? uri = rec.$1;
|
||||
@ -108,7 +107,8 @@ import okhttp3.MediaType.Companion.toMediaType""";
|
||||
|
||||
var method = requestModel.method;
|
||||
var requestBody = requestModel.requestBody;
|
||||
if (requestModel.isFormDataRequest) {
|
||||
if (requestModel.hasFormData) {
|
||||
hasFormData = true;
|
||||
var formDataTemplate = jj.Template(kFormDataBody);
|
||||
|
||||
result += formDataTemplate.render({
|
||||
@ -128,7 +128,8 @@ import okhttp3.MediaType.Companion.toMediaType""";
|
||||
var templateStart = jj.Template(kTemplateStart);
|
||||
var stringStart = templateStart.render({
|
||||
"importForQuery": hasQuery ? kStringImportForQuery : "",
|
||||
"importForBody": hasBody ? kStringImportForBody : ""
|
||||
"importForBody": hasBody ? kStringImportForBody : "",
|
||||
"importForFormData": hasFormData ? kStringImportForFormData : ""
|
||||
});
|
||||
|
||||
result = stringStart + result;
|
||||
@ -145,7 +146,7 @@ import okhttp3.MediaType.Companion.toMediaType""";
|
||||
var templateRequestEnd = jj.Template(kTemplateRequestEnd);
|
||||
result += templateRequestEnd.render({
|
||||
"method": method.name.toLowerCase(),
|
||||
"hasBody": (hasBody || requestModel.isFormDataRequest) ? "body" : "",
|
||||
"hasBody": (hasBody || requestModel.hasFormData) ? "body" : "",
|
||||
});
|
||||
}
|
||||
return result;
|
||||
|
@ -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;
|
||||
|
@ -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) {
|
||||
|
@ -2,13 +2,13 @@ import 'dart:io';
|
||||
import 'dart:convert';
|
||||
import 'package:jinja/jinja.dart' as jj;
|
||||
import 'package:apidash/utils/utils.dart'
|
||||
show getNewUuid, getValidRequestUri, padMultilineString;
|
||||
show getValidRequestUri, padMultilineString;
|
||||
import 'package:apidash/models/models.dart' show RequestModel;
|
||||
import 'package:apidash/consts.dart';
|
||||
|
||||
class PythonHttpClientCodeGen {
|
||||
final String kTemplateStart = """import http.client
|
||||
{% if isFormDataRequest %}import mimetypes
|
||||
{% if hasFormData %}import mimetypes
|
||||
from codecs import encode
|
||||
{% endif %}
|
||||
""";
|
||||
@ -87,30 +87,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,
|
||||
);
|
||||
|
||||
@ -130,7 +123,9 @@ body = b'\r\n'.join(dataList)
|
||||
|
||||
var method = requestModel.method;
|
||||
var requestBody = requestModel.requestBody;
|
||||
if (kMethodsWithBody.contains(method) && requestBody != null) {
|
||||
if (kMethodsWithBody.contains(method) &&
|
||||
requestBody != null &&
|
||||
!requestModel.hasFormData) {
|
||||
var contentLength = utf8.encode(requestBody).length;
|
||||
if (contentLength > 0) {
|
||||
hasBody = true;
|
||||
@ -142,11 +137,11 @@ body = b'\r\n'.join(dataList)
|
||||
var headersList = requestModel.enabledRequestHeaders;
|
||||
if (headersList != null || hasBody) {
|
||||
var headers = requestModel.enabledHeadersMap;
|
||||
if (requestModel.isFormDataRequest) {
|
||||
if (requestModel.hasFormData) {
|
||||
var formHeaderTemplate =
|
||||
jj.Template(kTemplateFormHeaderContentType);
|
||||
headers[HttpHeaders.contentTypeHeader] = formHeaderTemplate.render({
|
||||
"boundary": uuid,
|
||||
"boundary": boundary,
|
||||
});
|
||||
}
|
||||
|
||||
@ -162,12 +157,12 @@ body = b'\r\n'.join(dataList)
|
||||
result += templateHeaders.render({"headers": headersString});
|
||||
}
|
||||
}
|
||||
if (requestModel.isFormDataRequest) {
|
||||
if (requestModel.hasFormData) {
|
||||
var formDataBodyData = jj.Template(kStringFormDataBody);
|
||||
result += formDataBodyData.render(
|
||||
{
|
||||
"fields_list": json.encode(requestModel.formDataMapList),
|
||||
"boundary": uuid,
|
||||
"boundary": boundary,
|
||||
},
|
||||
);
|
||||
}
|
||||
@ -184,11 +179,11 @@ body = b'\r\n'.join(dataList)
|
||||
"queryParamsStr": hasQuery ? " + queryParamsStr" : "",
|
||||
});
|
||||
|
||||
if (hasBody || requestModel.isFormDataRequest) {
|
||||
if (hasBody || requestModel.hasFormData) {
|
||||
result += kStringRequestBody;
|
||||
}
|
||||
|
||||
if (hasHeaders || requestModel.isFormDataRequest) {
|
||||
if (hasHeaders || requestModel.hasFormData) {
|
||||
result += kStringRequestHeaders;
|
||||
}
|
||||
|
||||
|
@ -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 {
|
||||
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;
|
||||
}
|
||||
|
||||
|
@ -82,7 +82,6 @@ class RustReqwestCodeGen {
|
||||
|
||||
String? getCode(
|
||||
RequestModel requestModel,
|
||||
String defaultUriScheme,
|
||||
) {
|
||||
try {
|
||||
String result = "";
|
||||
@ -90,9 +89,6 @@ class RustReqwestCodeGen {
|
||||
bool hasJsonBody = false;
|
||||
|
||||
String url = requestModel.url;
|
||||
if (!url.contains("://") && url.isNotEmpty) {
|
||||
url = "$defaultUriScheme://$url";
|
||||
}
|
||||
|
||||
var rec = getValidRequestUri(
|
||||
url,
|
||||
@ -103,7 +99,7 @@ class RustReqwestCodeGen {
|
||||
var templateStartUrl = jj.Template(kTemplateStart);
|
||||
result += templateStartUrl.render({
|
||||
"url": stripUriParams(uri),
|
||||
'isFormDataRequest': requestModel.isFormDataRequest,
|
||||
'isFormDataRequest': requestModel.hasFormData,
|
||||
'isJson': requestModel.requestBodyContentType == ContentType.json
|
||||
});
|
||||
|
||||
@ -116,7 +112,7 @@ class RustReqwestCodeGen {
|
||||
hasJsonBody = true;
|
||||
var templateBody = jj.Template(kTemplateJson);
|
||||
result += templateBody.render({"body": requestBody});
|
||||
} else if (!requestModel.isFormDataRequest) {
|
||||
} else if (!requestModel.hasFormData) {
|
||||
hasBody = true;
|
||||
var templateBody = jj.Template(kTemplateBody);
|
||||
result += templateBody.render({"body": requestBody});
|
||||
@ -124,7 +120,7 @@ class RustReqwestCodeGen {
|
||||
}
|
||||
}
|
||||
|
||||
if (requestModel.isFormDataRequest) {
|
||||
if (requestModel.hasFormData) {
|
||||
var formDataBodyData = jj.Template(kStringFormDataBody);
|
||||
result += formDataBodyData.render(
|
||||
{
|
||||
@ -162,7 +158,7 @@ class RustReqwestCodeGen {
|
||||
}
|
||||
}
|
||||
|
||||
if (hasBody && !requestModel.isFormDataRequest) {
|
||||
if (hasBody && !requestModel.hasFormData) {
|
||||
result += kStringRequestBody;
|
||||
}
|
||||
|
||||
@ -170,7 +166,7 @@ class RustReqwestCodeGen {
|
||||
result += kStringRequestJson;
|
||||
}
|
||||
|
||||
if (requestModel.isFormDataRequest) {
|
||||
if (requestModel.hasFormData) {
|
||||
result += kStringRequestForm;
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
@ -90,6 +91,9 @@ const kP8CollectionPane = EdgeInsets.only(
|
||||
//right: 4.0,
|
||||
// bottom: 8.0,
|
||||
);
|
||||
const kPb10 = EdgeInsets.only(
|
||||
bottom: 10,
|
||||
);
|
||||
const kPr8CollectionPane = EdgeInsets.only(right: 8.0);
|
||||
const kpsV5 = EdgeInsets.symmetric(vertical: 2);
|
||||
const kHSpacer4 = SizedBox(width: 4);
|
||||
@ -280,6 +284,8 @@ enum CodegenLanguage {
|
||||
const JsonEncoder kEncoder = JsonEncoder.withIndent(' ');
|
||||
const LineSplitter kSplitter = LineSplitter();
|
||||
|
||||
const kHeaderContentType = "Content-Type";
|
||||
|
||||
const kTypeApplication = 'application';
|
||||
// application
|
||||
const kSubTypeJson = 'json';
|
||||
@ -310,12 +316,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;
|
||||
@ -376,6 +385,7 @@ const Map<String, Map<String, List<ResponseBodyView>>>
|
||||
kSubTypeDefaultViewOptions: kRawBodyViewOptions,
|
||||
kSubTypeCss: kCodeRawBodyViewOptions,
|
||||
kSubTypeHtml: kCodeRawBodyViewOptions,
|
||||
kSubTypeCsv: kPreviewRawBodyViewOptions,
|
||||
kSubTypeJavascript: kCodeRawBodyViewOptions,
|
||||
kSubTypeMarkdown: kCodeRawBodyViewOptions,
|
||||
kSubTypeTextXml: kCodeRawBodyViewOptions,
|
||||
@ -493,7 +503,10 @@ const kAudioError =
|
||||
const kRaiseIssue =
|
||||
"\nPlease raise an issue in API Dash GitHub repo so that we can resolve it.";
|
||||
|
||||
const kHintTextUrlCard = "Enter API endpoint like api.foss42.com/country/codes";
|
||||
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 https://$kDefaultUri/";
|
||||
const kLabelPlusNew = "+ New";
|
||||
const kLabelSend = "Send";
|
||||
const kLabelSending = "Sending..";
|
||||
|
@ -1,4 +1,5 @@
|
||||
import 'dart:io';
|
||||
import 'dart:convert';
|
||||
import 'package:flutter/foundation.dart';
|
||||
import '../utils/utils.dart'
|
||||
show
|
||||
@ -29,6 +30,7 @@ class RequestModel {
|
||||
this.responseStatus,
|
||||
this.message,
|
||||
this.responseModel,
|
||||
this.isWorking = false,
|
||||
});
|
||||
|
||||
final String id;
|
||||
@ -47,6 +49,7 @@ class RequestModel {
|
||||
final int? responseStatus;
|
||||
final String? message;
|
||||
final ResponseModel? responseModel;
|
||||
final bool isWorking;
|
||||
|
||||
List<NameValueModel>? get enabledRequestHeaders =>
|
||||
getEnabledRows(requestHeaders, isHeaderEnabledList);
|
||||
@ -60,9 +63,27 @@ 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 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 hasContentTypeHeader => enabledHeadersMap.keys
|
||||
.any((k) => k.toLowerCase() == HttpHeaders.contentTypeHeader);
|
||||
@ -106,6 +127,7 @@ class RequestModel {
|
||||
int? responseStatus,
|
||||
String? message,
|
||||
ResponseModel? responseModel,
|
||||
bool? isWorking,
|
||||
}) {
|
||||
var headers = requestHeaders ?? this.requestHeaders;
|
||||
var params = requestParams ?? this.requestParams;
|
||||
@ -129,6 +151,7 @@ class RequestModel {
|
||||
responseStatus: responseStatus ?? this.responseStatus,
|
||||
message: message ?? this.message,
|
||||
responseModel: responseModel ?? this.responseModel,
|
||||
isWorking: isWorking ?? this.isWorking,
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
@ -156,22 +156,30 @@ class CollectionStateNotifier
|
||||
}
|
||||
|
||||
Future<void> sendRequest(String id) async {
|
||||
ref.read(sentRequestIdStateProvider.notifier).state = id;
|
||||
ref.read(codePaneVisibleStateProvider.notifier).state = false;
|
||||
final defaultUriScheme =
|
||||
ref.read(settingsProvider.select((value) => value.defaultUriScheme));
|
||||
final defaultUriScheme = ref.read(
|
||||
settingsProvider.select(
|
||||
(value) => value.defaultUriScheme,
|
||||
),
|
||||
);
|
||||
|
||||
RequestModel requestModel = state![id]!;
|
||||
|
||||
// set current model's isWorking to true and update state
|
||||
var map = {...state!};
|
||||
map[id] = requestModel.copyWith(isWorking: true);
|
||||
state = map;
|
||||
|
||||
(http.Response?, Duration?, String?)? responseRec = await request(
|
||||
requestModel,
|
||||
defaultUriScheme: defaultUriScheme,
|
||||
isMultiPartRequest:
|
||||
requestModel.requestBodyContentType == ContentType.formdata,
|
||||
);
|
||||
late final RequestModel newRequestModel;
|
||||
if (responseRec.$1 == null) {
|
||||
newRequestModel = requestModel.copyWith(
|
||||
responseStatus: -1,
|
||||
message: responseRec.$3,
|
||||
isWorking: false,
|
||||
);
|
||||
} else {
|
||||
final responseModel = baseResponseModel.fromResponse(
|
||||
@ -183,10 +191,12 @@ class CollectionStateNotifier
|
||||
responseStatus: statusCode,
|
||||
message: kResponseCodeReasons[statusCode],
|
||||
responseModel: responseModel,
|
||||
isWorking: false,
|
||||
);
|
||||
}
|
||||
ref.read(sentRequestIdStateProvider.notifier).state = null;
|
||||
var map = {...state!};
|
||||
|
||||
// update state with response data
|
||||
map = {...state!};
|
||||
map[id] = newRequestModel;
|
||||
state = map;
|
||||
}
|
||||
@ -203,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,
|
||||
|
@ -3,7 +3,6 @@ import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
|
||||
final navRailIndexStateProvider = StateProvider<int>((ref) => 0);
|
||||
final selectedIdEditStateProvider = StateProvider<String?>((ref) => null);
|
||||
final sentRequestIdStateProvider = StateProvider<String?>((ref) => null);
|
||||
final codePaneVisibleStateProvider = StateProvider<bool>((ref) => false);
|
||||
final saveDataStateProvider = StateProvider<bool>((ref) => false);
|
||||
final clearDataStateProvider = StateProvider<bool>((ref) => false);
|
||||
|
@ -9,13 +9,14 @@ class ResponsePane extends ConsumerWidget {
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context, WidgetRef ref) {
|
||||
final selectedId = ref.watch(selectedIdStateProvider);
|
||||
final sentRequestId = ref.watch(sentRequestIdStateProvider);
|
||||
final isWorking = ref.watch(
|
||||
selectedRequestModelProvider.select((value) => value?.isWorking)) ??
|
||||
false;
|
||||
final responseStatus = ref.watch(
|
||||
selectedRequestModelProvider.select((value) => value?.responseStatus));
|
||||
final message = ref
|
||||
.watch(selectedRequestModelProvider.select((value) => value?.message));
|
||||
if (sentRequestId != null && sentRequestId == selectedId) {
|
||||
if (isWorking) {
|
||||
return const SendingWidget();
|
||||
}
|
||||
if (responseStatus == null) {
|
||||
|
@ -1,4 +1,6 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:apidash/providers/collection_providers.dart';
|
||||
import 'package:apidash/consts.dart';
|
||||
import 'details_card/details_card.dart';
|
||||
import 'url_card.dart';
|
||||
@ -10,6 +12,7 @@ class RequestEditor extends StatelessWidget {
|
||||
Widget build(BuildContext context) {
|
||||
return const Column(
|
||||
children: [
|
||||
RequestEditorTopBar(),
|
||||
EditorPaneRequestURLCard(),
|
||||
kVSpacer10,
|
||||
Expanded(
|
||||
@ -19,3 +22,91 @@ class RequestEditor extends StatelessWidget {
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class RequestEditorTopBar extends ConsumerWidget {
|
||||
const RequestEditorTopBar({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context, WidgetRef ref) {
|
||||
final id = ref.watch(selectedIdStateProvider);
|
||||
final name =
|
||||
ref.watch(selectedRequestModelProvider.select((value) => value?.name));
|
||||
return Padding(
|
||||
padding: const EdgeInsets.only(
|
||||
left: 12.0,
|
||||
top: 4.0,
|
||||
right: 8.0,
|
||||
bottom: 4.0,
|
||||
),
|
||||
child: Row(
|
||||
children: [
|
||||
Expanded(
|
||||
child: Text(
|
||||
name ?? "",
|
||||
style: Theme.of(context).textTheme.bodyMedium,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
maxLines: 1,
|
||||
),
|
||||
),
|
||||
const SizedBox(
|
||||
width: 6,
|
||||
),
|
||||
SizedBox(
|
||||
width: 90,
|
||||
height: 24,
|
||||
child: FilledButton.tonalIcon(
|
||||
style: const ButtonStyle(
|
||||
padding: MaterialStatePropertyAll(EdgeInsets.zero),
|
||||
),
|
||||
onPressed: () {
|
||||
showDialog(
|
||||
context: context,
|
||||
builder: (context) {
|
||||
final controller =
|
||||
TextEditingController(text: name ?? "");
|
||||
controller.selection = TextSelection(
|
||||
baseOffset: 0, extentOffset: controller.text.length);
|
||||
return AlertDialog(
|
||||
title: const Text('Rename Request'),
|
||||
content: TextField(
|
||||
autofocus: true,
|
||||
controller: controller,
|
||||
decoration:
|
||||
const InputDecoration(hintText: "Enter new name"),
|
||||
),
|
||||
actions: <Widget>[
|
||||
OutlinedButton(
|
||||
onPressed: () {
|
||||
Navigator.pop(context);
|
||||
},
|
||||
child: const Text('CANCEL')),
|
||||
FilledButton(
|
||||
onPressed: () {
|
||||
final val = controller.text.trim();
|
||||
ref
|
||||
.read(collectionStateNotifierProvider
|
||||
.notifier)
|
||||
.update(id!, name: val);
|
||||
Navigator.pop(context);
|
||||
controller.dispose();
|
||||
},
|
||||
child: const Text('OK')),
|
||||
],
|
||||
);
|
||||
});
|
||||
},
|
||||
icon: const Icon(
|
||||
Icons.edit,
|
||||
size: 12,
|
||||
),
|
||||
label: Text(
|
||||
"Rename",
|
||||
style: Theme.of(context).textTheme.bodySmall,
|
||||
),
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -81,6 +81,11 @@ class URLTextField extends ConsumerWidget {
|
||||
.read(collectionStateNotifierProvider.notifier)
|
||||
.update(selectedId, url: value);
|
||||
},
|
||||
onFieldSubmitted: (value) {
|
||||
ref
|
||||
.read(collectionStateNotifierProvider.notifier)
|
||||
.sendRequest(selectedId);
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
@ -93,10 +98,11 @@ class SendButton extends ConsumerWidget {
|
||||
@override
|
||||
Widget build(BuildContext context, WidgetRef ref) {
|
||||
final selectedId = ref.watch(selectedIdStateProvider);
|
||||
final sentRequestId = ref.watch(sentRequestIdStateProvider);
|
||||
final isWorking = ref.watch(
|
||||
selectedRequestModelProvider.select((value) => value?.isWorking));
|
||||
|
||||
return SendRequestButton(
|
||||
selectedId: selectedId,
|
||||
sentRequestId: sentRequestId,
|
||||
isWorking: isWorking ?? false,
|
||||
onTap: () {
|
||||
ref
|
||||
.read(collectionStateNotifierProvider.notifier)
|
||||
|
@ -61,11 +61,11 @@ class SettingsPage extends ConsumerWidget {
|
||||
},
|
||||
),
|
||||
ListTile(
|
||||
contentPadding: EdgeInsets.zero,
|
||||
contentPadding: kPb10,
|
||||
hoverColor: kColorTransparent,
|
||||
title: const Text('Default URI Scheme'),
|
||||
subtitle: Text(
|
||||
'api.foss42.com → ${settings.defaultUriScheme}://api.foss42.com'),
|
||||
'$kDefaultUri → ${settings.defaultUriScheme}://$kDefaultUri'),
|
||||
trailing: DropdownMenu(
|
||||
onSelected: (value) {
|
||||
ref
|
||||
@ -82,7 +82,7 @@ class SettingsPage extends ConsumerWidget {
|
||||
}).toList()),
|
||||
),
|
||||
ListTile(
|
||||
contentPadding: EdgeInsets.zero,
|
||||
contentPadding: kPb10,
|
||||
hoverColor: kColorTransparent,
|
||||
title: const Text('Default Code Generator'),
|
||||
trailing: DropdownMenu(
|
||||
|
@ -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:
|
||||
|
@ -43,13 +43,18 @@ String getShortPath(String path) {
|
||||
var f = p.split(path);
|
||||
if (f.length > 2) {
|
||||
f = f.sublist(f.length - 2);
|
||||
return ".../${p.joinAll(f)}";
|
||||
return p.join("...", p.joinAll(f));
|
||||
}
|
||||
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 {
|
||||
|
@ -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,19 +115,37 @@ Map<String, dynamic> requestModelToHARJsonRequest(
|
||||
}
|
||||
}
|
||||
|
||||
var method = requestModel.method;
|
||||
var requestBody = requestModel.requestBody;
|
||||
if (kMethodsWithBody.contains(method) && requestBody != null) {
|
||||
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"] = "";
|
||||
}
|
||||
}
|
||||
|
||||
@ -135,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"] = "";
|
||||
@ -152,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;
|
||||
|
@ -2,6 +2,7 @@ Map<String, String> headers = {
|
||||
"Accept": "Specifies the media types that are acceptable for the response.",
|
||||
"Accept-Encoding":
|
||||
"Indicates the encoding methods the client can understand.",
|
||||
"Accept-Charset": "Specifies the character sets that are acceptable.",
|
||||
"Access-Control-Allow-Headers":
|
||||
"Specifies a list of HTTP headers that can be used in an actual request after a preflight request including the Access-Control-Request-Headers header is made.",
|
||||
"Access-Control-Allow-Methods":
|
||||
@ -41,11 +42,16 @@ Map<String, String> headers = {
|
||||
"Cross-Origin-Resource-Policy":
|
||||
"Controls how cross-origin requests for resources are handled.",
|
||||
"Date": "Indicates the date and time at which the message was sent.",
|
||||
"Device-Memory":
|
||||
"Indicates the approximate amount of device memory in gigabytes.",
|
||||
"DNT":
|
||||
"Informs websites whether the user's preference is to opt out of online tracking.",
|
||||
"Expect": "Indicates certain expectations that need to be met by the server.",
|
||||
"Expires":
|
||||
"Contains the date/time after which the response is considered expired",
|
||||
"Forwarded":
|
||||
"Contains information from the client-facing side of proxy servers that is altered or lost when a proxy is involved in the path of the request.",
|
||||
"From": "Contains an Internet email address for a human user who controls the requesting user agent.",
|
||||
"Host": "Specifies the domain name of the server and the port number.",
|
||||
"If-Match":
|
||||
"Used for conditional requests, allows the server to respond based on certain conditions.",
|
||||
@ -57,9 +63,15 @@ Map<String, String> headers = {
|
||||
"Used in conjunction with the Range header to conditionally request a partial resource.",
|
||||
"If-Unmodified-Since":
|
||||
"Used for conditional requests, allows the server to respond based on certain conditions.",
|
||||
"Keep-Alive":
|
||||
"Used to allow the connection to be reused for further requests.",
|
||||
"Location":
|
||||
"Indicates the URL a client should redirect to for further interaction.",
|
||||
"Max-Forwards":
|
||||
"Indicates the remaining number of times a request can be forwarded by proxies.",
|
||||
"Origin": "Specifies the origin of a cross-origin request.",
|
||||
"Proxy-Authorization":
|
||||
"Contains credentials for authenticating a client with a proxy server.",
|
||||
"Range":
|
||||
"Used to request only part of a resource, typically in the context of downloading large files.",
|
||||
"Referer":
|
||||
@ -68,10 +80,14 @@ Map<String, String> headers = {
|
||||
"Specifies how much information the browser should include in the Referer header when navigating to other pages.",
|
||||
"Retry-After":
|
||||
"Informs the client how long it should wait before making another request after a server has responded with a rate-limiting status code.",
|
||||
"Save-Data":
|
||||
"Indicates the client's preference for reduced data usage.",
|
||||
"Server": "Indicates the software used by the origin server.",
|
||||
"Strict-Transport-Security":
|
||||
"Instructs the browser to always use HTTPS for the given domain.",
|
||||
"TE": "Specifies the transfer encodings that are acceptable to the client.",
|
||||
"Upgrade-Insecure-Requests":
|
||||
"Instructs the browser to prefer secure connections when available.",
|
||||
"User-Agent":
|
||||
"Identifies the client software and version making the request.",
|
||||
"Via":
|
||||
|
@ -47,36 +47,37 @@ class CopyButton extends StatelessWidget {
|
||||
class SendRequestButton extends StatelessWidget {
|
||||
const SendRequestButton({
|
||||
super.key,
|
||||
required this.selectedId,
|
||||
required this.sentRequestId,
|
||||
required this.isWorking,
|
||||
required this.onTap,
|
||||
});
|
||||
|
||||
final String? selectedId;
|
||||
final String? sentRequestId;
|
||||
final bool isWorking;
|
||||
final void Function() onTap;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
bool disable = sentRequestId != null;
|
||||
return FilledButton(
|
||||
onPressed: disable ? null : onTap,
|
||||
onPressed: isWorking ? null : onTap,
|
||||
child: Row(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
Text(
|
||||
disable
|
||||
? (selectedId == sentRequestId ? kLabelSending : kLabelBusy)
|
||||
: kLabelSend,
|
||||
style: kTextStyleButton,
|
||||
),
|
||||
if (!disable) kHSpacer10,
|
||||
if (!disable)
|
||||
const Icon(
|
||||
size: 16,
|
||||
Icons.send,
|
||||
),
|
||||
],
|
||||
children: isWorking
|
||||
? const [
|
||||
Text(
|
||||
kLabelSending,
|
||||
style: kTextStyleButton,
|
||||
),
|
||||
]
|
||||
: const [
|
||||
Text(
|
||||
kLabelSend,
|
||||
style: kTextStyleButton,
|
||||
),
|
||||
kHSpacer10,
|
||||
Icon(
|
||||
size: 16,
|
||||
Icons.send,
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
@ -97,6 +97,9 @@ class SidebarRequestCard extends StatelessWidget {
|
||||
onTapOutsideNameEditor?.call();
|
||||
//FocusScope.of(context).unfocus();
|
||||
},
|
||||
onFieldSubmitted: (value) {
|
||||
onTapOutsideNameEditor?.call();
|
||||
},
|
||||
onChanged: onChangedNameEditor,
|
||||
decoration: const InputDecoration(
|
||||
isCollapsed: true,
|
||||
|
53
lib/widgets/csv_previewer.dart
Normal file
53
lib/widgets/csv_previewer.dart
Normal file
@ -0,0 +1,53 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:csv/csv.dart';
|
||||
import 'error_message.dart';
|
||||
import '../consts.dart';
|
||||
|
||||
class CsvPreviewer extends StatelessWidget {
|
||||
const CsvPreviewer({super.key, required this.body});
|
||||
|
||||
final String body;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
try {
|
||||
final List<List<dynamic>> csvData =
|
||||
const CsvToListConverter().convert(body, eol: '\n');
|
||||
return SingleChildScrollView(
|
||||
scrollDirection: Axis.vertical,
|
||||
child: SingleChildScrollView(
|
||||
scrollDirection: Axis.horizontal,
|
||||
child: DataTable(
|
||||
columns: csvData[0]
|
||||
.map(
|
||||
(item) => DataColumn(
|
||||
label: Text(
|
||||
item.toString(),
|
||||
),
|
||||
),
|
||||
)
|
||||
.toList(),
|
||||
rows: csvData
|
||||
.skip(1)
|
||||
.map(
|
||||
(csvrow) => DataRow(
|
||||
cells: csvrow
|
||||
.map(
|
||||
(csvItem) => DataCell(
|
||||
Text(
|
||||
csvItem.toString(),
|
||||
),
|
||||
),
|
||||
)
|
||||
.toList(),
|
||||
),
|
||||
)
|
||||
.toList(),
|
||||
),
|
||||
),
|
||||
);
|
||||
} catch (e) {
|
||||
return const ErrorMessage(message: kCsvError);
|
||||
}
|
||||
}
|
||||
}
|
@ -46,32 +46,34 @@ class _FormDataFieldState extends State<FormDataField> {
|
||||
color: colorScheme.onSurface,
|
||||
),
|
||||
decoration: InputDecoration(
|
||||
hintStyle: kCodeStyle.copyWith(
|
||||
color: colorScheme.outline.withOpacity(
|
||||
hintStyle: kCodeStyle.copyWith(
|
||||
color: colorScheme.outline.withOpacity(
|
||||
kHintOpacity,
|
||||
),
|
||||
),
|
||||
hintText: widget.hintText,
|
||||
contentPadding: const EdgeInsets.only(bottom: 16),
|
||||
focusedBorder: UnderlineInputBorder(
|
||||
borderSide: BorderSide(
|
||||
color: colorScheme.primary.withOpacity(
|
||||
kHintOpacity,
|
||||
),
|
||||
),
|
||||
hintText: widget.hintText,
|
||||
focusedBorder: UnderlineInputBorder(
|
||||
borderSide: BorderSide(
|
||||
color: colorScheme.primary.withOpacity(
|
||||
kHintOpacity,
|
||||
),
|
||||
),
|
||||
),
|
||||
enabledBorder: UnderlineInputBorder(
|
||||
borderSide: BorderSide(
|
||||
color: colorScheme.surfaceVariant,
|
||||
),
|
||||
enabledBorder: UnderlineInputBorder(
|
||||
borderSide: BorderSide(
|
||||
color: colorScheme.surfaceVariant,
|
||||
),
|
||||
),
|
||||
suffixIcon: DropdownButtonFormData(
|
||||
formDataType: widget.formDataType,
|
||||
onChanged: (p0) {
|
||||
if (widget.onFormDataTypeChanged != null) {
|
||||
widget.onFormDataTypeChanged!(p0);
|
||||
}
|
||||
},
|
||||
)),
|
||||
),
|
||||
suffixIcon: DropdownButtonFormData(
|
||||
formDataType: widget.formDataType,
|
||||
onChanged: (p0) {
|
||||
if (widget.onFormDataTypeChanged != null) {
|
||||
widget.onFormDataTypeChanged!(p0);
|
||||
}
|
||||
},
|
||||
),
|
||||
),
|
||||
onChanged: widget.onChanged,
|
||||
),
|
||||
),
|
||||
|
@ -1,6 +1,6 @@
|
||||
import 'package:apidash/consts.dart';
|
||||
import 'package:apidash/utils/header_utils.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:apidash/consts.dart';
|
||||
import 'package:flutter_typeahead/flutter_typeahead.dart';
|
||||
|
||||
class HeaderField extends StatefulWidget {
|
||||
@ -41,6 +41,7 @@ class _HeaderFieldState extends State<HeaderField> {
|
||||
|
||||
@override
|
||||
void didUpdateWidget(HeaderField oldWidget) {
|
||||
super.didUpdateWidget(oldWidget);
|
||||
if (oldWidget.initialValue != widget.initialValue) {
|
||||
controller.text = widget.initialValue ?? "";
|
||||
controller.selection =
|
||||
@ -54,8 +55,8 @@ class _HeaderFieldState extends State<HeaderField> {
|
||||
return TypeAheadField(
|
||||
key: Key(widget.keyId),
|
||||
hideOnEmpty: true,
|
||||
minCharsForSuggestions: 1,
|
||||
onSuggestionSelected: (value) {
|
||||
controller: controller,
|
||||
onSelected: (value) {
|
||||
setState(() {
|
||||
controller.text = value;
|
||||
});
|
||||
@ -68,19 +69,17 @@ class _HeaderFieldState extends State<HeaderField> {
|
||||
);
|
||||
},
|
||||
suggestionsCallback: headerSuggestionCallback,
|
||||
suggestionsBoxDecoration: suggestionBoxDecorations(context),
|
||||
textFieldConfiguration: TextFieldConfiguration(
|
||||
decorationBuilder: (context, child) =>
|
||||
suggestionBoxDecorations(context, child, colorScheme),
|
||||
constraints: const BoxConstraints(maxHeight: 400),
|
||||
builder: (context, controller, focusNode) => TextField(
|
||||
onChanged: widget.onChanged,
|
||||
controller: controller,
|
||||
style: kCodeStyle.copyWith(
|
||||
color: colorScheme.onSurface,
|
||||
),
|
||||
focusNode: focusNode,
|
||||
style: kCodeStyle.copyWith(color: colorScheme.onSurface),
|
||||
decoration: InputDecoration(
|
||||
hintStyle: kCodeStyle.copyWith(
|
||||
color: colorScheme.outline.withOpacity(
|
||||
kHintOpacity,
|
||||
),
|
||||
),
|
||||
color: colorScheme.outline.withOpacity(kHintOpacity)),
|
||||
hintText: widget.hintText,
|
||||
focusedBorder: UnderlineInputBorder(
|
||||
borderSide: BorderSide(
|
||||
@ -99,22 +98,26 @@ class _HeaderFieldState extends State<HeaderField> {
|
||||
);
|
||||
}
|
||||
|
||||
SuggestionsBoxDecoration suggestionBoxDecorations(BuildContext context) {
|
||||
return SuggestionsBoxDecoration(
|
||||
elevation: 4,
|
||||
constraints: const BoxConstraints(maxHeight: 400),
|
||||
shape: RoundedRectangleBorder(
|
||||
side: BorderSide(
|
||||
color: Theme.of(context).dividerColor,
|
||||
width: 1.2,
|
||||
Theme suggestionBoxDecorations(
|
||||
BuildContext context, Widget child, ColorScheme colorScheme) {
|
||||
return Theme(
|
||||
data: ThemeData(colorScheme: colorScheme),
|
||||
child: Material(
|
||||
elevation: 4,
|
||||
shape: RoundedRectangleBorder(
|
||||
side: BorderSide(color: Theme.of(context).dividerColor, width: 1.2),
|
||||
borderRadius: const BorderRadius.vertical(bottom: Radius.circular(8)),
|
||||
),
|
||||
borderRadius: const BorderRadius.vertical(bottom: Radius.circular(8)),
|
||||
clipBehavior: Clip.hardEdge,
|
||||
child: child,
|
||||
),
|
||||
clipBehavior: Clip.hardEdge,
|
||||
);
|
||||
}
|
||||
|
||||
Future<List<String>> headerSuggestionCallback(String pattern) async {
|
||||
Future<List<String>?> headerSuggestionCallback(String pattern) async {
|
||||
if (pattern.isEmpty) {
|
||||
return null;
|
||||
}
|
||||
return getHeaderSuggestions(pattern);
|
||||
}
|
||||
}
|
||||
|
@ -154,6 +154,7 @@ class _JsonPreviewerState extends State<JsonPreviewer> {
|
||||
|
||||
@override
|
||||
void didUpdateWidget(JsonPreviewer oldWidget) {
|
||||
super.didUpdateWidget(oldWidget);
|
||||
if (oldWidget.code != widget.code) {
|
||||
store.buildNodes(widget.code, areAllCollapsed: true);
|
||||
store.expandAll();
|
||||
|
@ -9,9 +9,12 @@ class CustomMarkdown extends StatelessWidget {
|
||||
super.key,
|
||||
required this.data,
|
||||
this.padding = const EdgeInsets.all(16.0),
|
||||
this.onTapLink,
|
||||
});
|
||||
|
||||
final String data;
|
||||
final EdgeInsets padding;
|
||||
final void Function(String text, String? href, String title)? onTapLink;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
@ -25,9 +28,10 @@ class CustomMarkdown extends StatelessWidget {
|
||||
data: data,
|
||||
selectable: true,
|
||||
extensionSet: md.ExtensionSet.gitHubFlavored,
|
||||
onTapLink: (text, href, title) {
|
||||
launchUrl(Uri.parse(href ?? ""));
|
||||
},
|
||||
onTapLink: onTapLink ??
|
||||
(text, href, title) {
|
||||
launchUrl(Uri.parse(href ?? ""));
|
||||
},
|
||||
builders: {
|
||||
"inlineButton": InlineButton(),
|
||||
},
|
||||
|
@ -7,6 +7,7 @@ import 'package:vector_graphics_compiler/vector_graphics_compiler.dart';
|
||||
import 'error_message.dart';
|
||||
import 'uint8_audio_player.dart';
|
||||
import 'json_previewer.dart';
|
||||
import 'csv_previewer.dart';
|
||||
import '../consts.dart';
|
||||
|
||||
class Previewer extends StatefulWidget {
|
||||
@ -81,6 +82,9 @@ class _PreviewerState extends State<Previewer> {
|
||||
},
|
||||
);
|
||||
}
|
||||
if (widget.type == kTypeText && widget.subtype == kSubTypeCsv) {
|
||||
return CsvPreviewer(body: widget.body);
|
||||
}
|
||||
if (widget.type == kTypeVideo) {
|
||||
// TODO: Video Player
|
||||
}
|
||||
|
@ -7,11 +7,13 @@ class URLField extends StatelessWidget {
|
||||
required this.selectedId,
|
||||
this.initialValue,
|
||||
this.onChanged,
|
||||
this.onFieldSubmitted,
|
||||
});
|
||||
|
||||
final String selectedId;
|
||||
final String? initialValue;
|
||||
final void Function(String)? onChanged;
|
||||
final void Function(String)? onFieldSubmitted;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
@ -29,6 +31,7 @@ class URLField extends StatelessWidget {
|
||||
border: InputBorder.none,
|
||||
),
|
||||
onChanged: onChanged,
|
||||
onFieldSubmitted: onFieldSubmitted,
|
||||
);
|
||||
}
|
||||
}
|
||||
@ -95,7 +98,6 @@ class JsonSearchField extends StatelessWidget {
|
||||
controller: controller,
|
||||
onChanged: onChanged,
|
||||
style: kCodeStyle,
|
||||
cursorHeight: 18,
|
||||
decoration: const InputDecoration(
|
||||
isDense: true,
|
||||
border: InputBorder.none,
|
||||
|
102
pubspec.lock
102
pubspec.lock
@ -217,6 +217,14 @@ packages:
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "3.0.3"
|
||||
csv:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: csv
|
||||
sha256: "63ed2871dd6471193dffc52c0e6c76fb86269c00244d244297abbb355c84a86e"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "5.1.1"
|
||||
dart_style:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
@ -306,10 +314,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: flutter_keyboard_visibility
|
||||
sha256: "4983655c26ab5b959252ee204c2fffa4afeb4413cd030455194ec0caa3b8e7cb"
|
||||
sha256: "98664be7be0e3ffca00de50f7f6a287ab62c763fc8c762e0a21584584a3ff4f8"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "5.4.1"
|
||||
version: "6.0.0"
|
||||
flutter_keyboard_visibility_linux:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -407,10 +415,10 @@ packages:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: flutter_typeahead
|
||||
sha256: b9942bd5b7611a6ec3f0730c477146cffa4cd4b051077983ba67ddfc9e7ee818
|
||||
sha256: d64712c65db240b1057559b952398ebb6e498077baeebf9b0731dade62438a6d
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "4.8.0"
|
||||
version: "5.2.0"
|
||||
flutter_web_plugins:
|
||||
dependency: transitive
|
||||
description: flutter
|
||||
@ -500,10 +508,10 @@ packages:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: http
|
||||
sha256: d4872660c46d929f6b8a9ef4e7a7eff7e49bbf0c4ec3f385ee32df5119175139
|
||||
sha256: "761a297c042deedc1ffbb156d6e2af13886bb305c2a343a4d972504cd67dd938"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.1.2"
|
||||
version: "1.2.1"
|
||||
http_multi_server:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -625,6 +633,30 @@ packages:
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.2.0"
|
||||
leak_tracker:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: leak_tracker
|
||||
sha256: "78eb209deea09858f5269f5a5b02be4049535f568c07b275096836f01ea323fa"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "10.0.0"
|
||||
leak_tracker_flutter_testing:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: leak_tracker_flutter_testing
|
||||
sha256: b46c5e37c19120a8a01918cfaf293547f47269f7cb4b0058f21531c2465d6ef0
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.0.1"
|
||||
leak_tracker_testing:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: leak_tracker_testing
|
||||
sha256: a597f72a664dbd293f3bfc51f9ba69816f84dcd403cdac7066cb3f6003f3ab47
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.0.1"
|
||||
lints:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -661,26 +693,26 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: matcher
|
||||
sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e"
|
||||
sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.12.16"
|
||||
version: "0.12.16+1"
|
||||
material_color_utilities:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: material_color_utilities
|
||||
sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41"
|
||||
sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.5.0"
|
||||
version: "0.8.0"
|
||||
meta:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: meta
|
||||
sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e
|
||||
sha256: d584fa6707a52763a52446f02cc621b077888fb63b93bbcb1143a7be5a0c0c04
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.10.0"
|
||||
version: "1.11.0"
|
||||
mime:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -757,10 +789,10 @@ packages:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: path
|
||||
sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917"
|
||||
sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.8.3"
|
||||
version: "1.9.0"
|
||||
path_parsing:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -853,10 +885,34 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: pointer_interceptor
|
||||
sha256: adf7a637f97c077041d36801b43be08559fd4322d2127b3f20bb7be1b9eebc22
|
||||
sha256: bd18321519718678d5fa98ad3a3359cbc7a31f018554eab80b73d08a7f0c165a
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.9.3+7"
|
||||
version: "0.10.1"
|
||||
pointer_interceptor_ios:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: pointer_interceptor_ios
|
||||
sha256: "2e73c39452830adc4695757130676a39412a3b7f3c34e3f752791b5384770877"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.10.0+2"
|
||||
pointer_interceptor_platform_interface:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: pointer_interceptor_platform_interface
|
||||
sha256: "0597b0560e14354baeb23f8375cd612e8bd4841bf8306ecb71fcd0bb78552506"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.10.0+1"
|
||||
pointer_interceptor_web:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: pointer_interceptor_web
|
||||
sha256: a6237528b46c411d8d55cdfad8fcb3269fc4cbb26060b14bff94879165887d1e
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.10.2"
|
||||
pointycastle:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -1178,10 +1234,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: url_launcher_web
|
||||
sha256: "7286aec002c8feecc338cc33269e96b73955ab227456e9fb2a91f7fab8a358e9"
|
||||
sha256: "3692a459204a33e04bc94f5fb91158faf4f2c8903281ddd82915adecdb1a901d"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.2.2"
|
||||
version: "2.3.0"
|
||||
url_launcher_windows:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -1247,13 +1303,13 @@ packages:
|
||||
source: hosted
|
||||
version: "1.1.0"
|
||||
web:
|
||||
dependency: transitive
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: web
|
||||
sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152
|
||||
sha256: "97da13628db363c635202ad97068d47c5b8aa555808e7a9411963c533b449b27"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.3.0"
|
||||
version: "0.5.1"
|
||||
web_socket_channel:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -1320,5 +1376,5 @@ packages:
|
||||
source: hosted
|
||||
version: "3.1.2"
|
||||
sdks:
|
||||
dart: ">=3.2.3 <4.0.0"
|
||||
flutter: ">=3.16.0"
|
||||
dart: ">=3.3.0 <4.0.0"
|
||||
flutter: ">=3.19.0"
|
||||
|
@ -5,11 +5,12 @@ version: 0.3.0+3
|
||||
|
||||
environment:
|
||||
sdk: ">=3.0.0 <4.0.0"
|
||||
flutter: ">=3.7.2"
|
||||
flutter: ">=3.16.0"
|
||||
|
||||
dependencies:
|
||||
flutter:
|
||||
sdk: flutter
|
||||
web: ^0.5.0
|
||||
multi_split_view: ^2.4.0
|
||||
url_launcher: ^6.1.12
|
||||
flutter_riverpod: ^2.3.7
|
||||
@ -41,7 +42,7 @@ dependencies:
|
||||
json_annotation: ^4.8.1
|
||||
printing: ^5.11.1
|
||||
package_info_plus: ^4.1.0
|
||||
flutter_typeahead: ^4.8.0
|
||||
flutter_typeahead: ^5.2.0
|
||||
provider: ^6.0.5
|
||||
json_data_explorer:
|
||||
git:
|
||||
@ -54,6 +55,7 @@ dependencies:
|
||||
code_builder: ^4.9.0
|
||||
dart_style: ^2.3.4
|
||||
json_text_field: ^1.1.0
|
||||
csv: ^5.1.1
|
||||
|
||||
dev_dependencies:
|
||||
flutter_test:
|
||||
|
@ -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.foss42.com'""";
|
||||
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.foss42.com');
|
||||
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.foss42.com');
|
||||
|
||||
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.foss42.com",
|
||||
"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.foss42.com',
|
||||
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.foss42.com';
|
||||
|
||||
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.foss42.com"
|
||||
|
||||
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.foss42.com',
|
||||
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.foss42.com';
|
||||
|
||||
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.foss42.com")
|
||||
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.foss42.com'
|
||||
|
||||
response = requests.get(url)
|
||||
|
||||
print('Status Code:', response.status_code)
|
||||
print('Response Body:', response.text)
|
||||
""";
|
||||
expect(
|
||||
codeGen.getCode(
|
||||
CodegenLanguage.pythonRequests, requestModelGet1, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
});
|
||||
}
|
@ -1,72 +1,83 @@
|
||||
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.foss42.com'""";
|
||||
expect(curlCodeGen.getCode(requestModelGet1, "https"), expectedCode);
|
||||
const expectedCode = r"""curl --url 'https://api.apidash.dev'""";
|
||||
expect(codeGen.getCode(CodegenLanguage.curl, requestModelGet1, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('GET 2', () {
|
||||
const expectedCode =
|
||||
r"""curl --url 'https://api.foss42.com/country/data?code=US'""";
|
||||
expect(curlCodeGen.getCode(requestModelGet2, "https"), expectedCode);
|
||||
r"""curl --url 'https://api.apidash.dev/country/data?code=US'""";
|
||||
expect(codeGen.getCode(CodegenLanguage.curl, requestModelGet2, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('GET 3', () {
|
||||
const expectedCode =
|
||||
r"""curl --url 'https://api.foss42.com/country/data?code=IND'""";
|
||||
expect(curlCodeGen.getCode(requestModelGet3, "https"), expectedCode);
|
||||
r"""curl --url 'https://api.apidash.dev/country/data?code=IND'""";
|
||||
expect(codeGen.getCode(CodegenLanguage.curl, requestModelGet3, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('GET 4', () {
|
||||
const expectedCode =
|
||||
r"""curl --url 'https://api.foss42.com/humanize/social?num=8700000&digits=3&system=SS&add_space=true&trailing_zeros=true'""";
|
||||
expect(curlCodeGen.getCode(requestModelGet4, "https"), expectedCode);
|
||||
r"""curl --url 'https://api.apidash.dev/humanize/social?num=8700000&digits=3&system=SS&add_space=true&trailing_zeros=true'""";
|
||||
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.foss42.com'""";
|
||||
expect(curlCodeGen.getCode(requestModelGet7, "https"), expectedCode);
|
||||
const expectedCode = r"""curl --url 'https://api.apidash.dev'""";
|
||||
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.foss42.com/humanize/social?num=8700000&add_space=true'""";
|
||||
expect(curlCodeGen.getCode(requestModelGet9, "https"), expectedCode);
|
||||
r"""curl --url 'https://api.apidash.dev/humanize/social?num=8700000&add_space=true'""";
|
||||
expect(codeGen.getCode(CodegenLanguage.curl, requestModelGet9, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('GET 10', () {
|
||||
const expectedCode =
|
||||
r"""curl --url 'https://api.foss42.com/humanize/social' \
|
||||
r"""curl --url 'https://api.apidash.dev/humanize/social' \
|
||||
--header 'User-Agent: Test Agent'""";
|
||||
expect(
|
||||
curlCodeGen.getCode(
|
||||
codeGen.getCode(
|
||||
CodegenLanguage.curl,
|
||||
requestModelGet10,
|
||||
"https",
|
||||
),
|
||||
@ -75,105 +86,183 @@ void main() {
|
||||
|
||||
test('GET 11', () {
|
||||
const expectedCode =
|
||||
r"""curl --url 'https://api.foss42.com/humanize/social?num=8700000&digits=3' \
|
||||
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.foss42.com/humanize/social'""";
|
||||
expect(curlCodeGen.getCode(requestModelGet12, "https"), expectedCode);
|
||||
r"""curl --url 'https://api.apidash.dev/humanize/social'""";
|
||||
expect(codeGen.getCode(CodegenLanguage.curl, requestModelGet12, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
});
|
||||
|
||||
group('HEAD Request', () {
|
||||
test('HEAD 1', () {
|
||||
const expectedCode = r"""curl --head --url 'https://api.foss42.com'""";
|
||||
expect(curlCodeGen.getCode(requestModelHead1, "https"), expectedCode);
|
||||
const expectedCode = r"""curl --head --url 'https://api.apidash.dev'""";
|
||||
expect(codeGen.getCode(CodegenLanguage.curl, requestModelHead1, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('HEAD 2', () {
|
||||
const expectedCode = r"""curl --head --url 'http://api.foss42.com'""";
|
||||
expect(curlCodeGen.getCode(requestModelHead2, "http"), expectedCode);
|
||||
const expectedCode = r"""curl --head --url 'http://api.apidash.dev'""";
|
||||
expect(codeGen.getCode(CodegenLanguage.curl, requestModelHead2, "http"),
|
||||
expectedCode);
|
||||
});
|
||||
});
|
||||
|
||||
group('POST Request', () {
|
||||
test('POST 1', () {
|
||||
const expectedCode = r"""curl --request POST \
|
||||
--url 'https://api.foss42.com/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.foss42.com/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.foss42.com/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);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
@ -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,7 +12,7 @@ void main() {
|
||||
|
||||
void main() async {
|
||||
try {
|
||||
final response = await dio.Dio.get('https://api.foss42.com');
|
||||
final response = await dio.Dio.get('https://api.apidash.dev');
|
||||
print(response.statusCode);
|
||||
print(response.data);
|
||||
} on DioException catch (e, 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', () {
|
||||
@ -35,7 +37,7 @@ void main() async {
|
||||
try {
|
||||
final queryParams = {'code': 'US'};
|
||||
final response = await dio.Dio.get(
|
||||
'https://api.foss42.com/country/data',
|
||||
'https://api.apidash.dev/country/data',
|
||||
queryParameters: queryParams,
|
||||
);
|
||||
print(response.statusCode);
|
||||
@ -50,7 +52,9 @@ void main() async {
|
||||
}
|
||||
}
|
||||
""";
|
||||
expect(dartDioCodeGen.getCode(requestModelGet2, "https"), expectedCode);
|
||||
expect(
|
||||
codeGen.getCode(CodegenLanguage.dartDio, requestModelGet2, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('GET 3', () {
|
||||
@ -60,7 +64,7 @@ void main() async {
|
||||
try {
|
||||
final queryParams = {'code': 'IND'};
|
||||
final response = await dio.Dio.get(
|
||||
'https://api.foss42.com/country/data?code=US',
|
||||
'https://api.apidash.dev/country/data?code=US',
|
||||
queryParameters: queryParams,
|
||||
);
|
||||
print(response.statusCode);
|
||||
@ -75,7 +79,9 @@ void main() async {
|
||||
}
|
||||
}
|
||||
""";
|
||||
expect(dartDioCodeGen.getCode(requestModelGet3, "https"), expectedCode);
|
||||
expect(
|
||||
codeGen.getCode(CodegenLanguage.dartDio, requestModelGet3, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('GET 4', () {
|
||||
@ -91,7 +97,7 @@ void main() async {
|
||||
'trailing_zeros': 'true',
|
||||
};
|
||||
final response = await dio.Dio.get(
|
||||
'https://api.foss42.com/humanize/social',
|
||||
'https://api.apidash.dev/humanize/social',
|
||||
queryParameters: queryParams,
|
||||
);
|
||||
print(response.statusCode);
|
||||
@ -106,7 +112,9 @@ void main() async {
|
||||
}
|
||||
}
|
||||
""";
|
||||
expect(dartDioCodeGen.getCode(requestModelGet4, "https"), expectedCode);
|
||||
expect(
|
||||
codeGen.getCode(CodegenLanguage.dartDio, requestModelGet4, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('GET 5', () {
|
||||
@ -131,7 +139,9 @@ void main() async {
|
||||
}
|
||||
}
|
||||
""";
|
||||
expect(dartDioCodeGen.getCode(requestModelGet5, "https"), expectedCode);
|
||||
expect(
|
||||
codeGen.getCode(CodegenLanguage.dartDio, requestModelGet5, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('GET 6', () {
|
||||
@ -158,7 +168,9 @@ void main() async {
|
||||
}
|
||||
}
|
||||
""";
|
||||
expect(dartDioCodeGen.getCode(requestModelGet6, "https"), expectedCode);
|
||||
expect(
|
||||
codeGen.getCode(CodegenLanguage.dartDio, requestModelGet6, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('GET 7', () {
|
||||
@ -166,7 +178,7 @@ void main() async {
|
||||
|
||||
void main() async {
|
||||
try {
|
||||
final response = await dio.Dio.get('https://api.foss42.com');
|
||||
final response = await dio.Dio.get('https://api.apidash.dev');
|
||||
print(response.statusCode);
|
||||
print(response.data);
|
||||
} on DioException catch (e, 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', () {
|
||||
@ -206,7 +220,9 @@ void main() async {
|
||||
}
|
||||
}
|
||||
""";
|
||||
expect(dartDioCodeGen.getCode(requestModelGet8, "https"), expectedCode);
|
||||
expect(
|
||||
codeGen.getCode(CodegenLanguage.dartDio, requestModelGet8, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('GET 9', () {
|
||||
@ -219,7 +235,7 @@ void main() async {
|
||||
'add_space': 'true',
|
||||
};
|
||||
final response = await dio.Dio.get(
|
||||
'https://api.foss42.com/humanize/social',
|
||||
'https://api.apidash.dev/humanize/social',
|
||||
queryParameters: queryParams,
|
||||
);
|
||||
print(response.statusCode);
|
||||
@ -234,7 +250,9 @@ void main() async {
|
||||
}
|
||||
}
|
||||
""";
|
||||
expect(dartDioCodeGen.getCode(requestModelGet9, "https"), expectedCode);
|
||||
expect(
|
||||
codeGen.getCode(CodegenLanguage.dartDio, requestModelGet9, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('GET 10', () {
|
||||
@ -244,7 +262,7 @@ void main() async {
|
||||
try {
|
||||
final headers = {'User-Agent': 'Test Agent'};
|
||||
final response = await dio.Dio.get(
|
||||
'https://api.foss42.com/humanize/social',
|
||||
'https://api.apidash.dev/humanize/social',
|
||||
options: Options(headers: headers),
|
||||
);
|
||||
print(response.statusCode);
|
||||
@ -260,7 +278,8 @@ void main() async {
|
||||
}
|
||||
""";
|
||||
expect(
|
||||
dartDioCodeGen.getCode(
|
||||
codeGen.getCode(
|
||||
CodegenLanguage.dartDio,
|
||||
requestModelGet10,
|
||||
"https",
|
||||
),
|
||||
@ -278,7 +297,7 @@ void main() async {
|
||||
};
|
||||
final headers = {'User-Agent': 'Test Agent'};
|
||||
final response = await dio.Dio.get(
|
||||
'https://api.foss42.com/humanize/social',
|
||||
'https://api.apidash.dev/humanize/social',
|
||||
queryParameters: queryParams,
|
||||
options: Options(headers: headers),
|
||||
);
|
||||
@ -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,7 +323,7 @@ void main() async {
|
||||
|
||||
void main() async {
|
||||
try {
|
||||
final response = await dio.Dio.get('https://api.foss42.com/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) {
|
||||
@ -315,7 +336,9 @@ void main() async {
|
||||
}
|
||||
}
|
||||
""";
|
||||
expect(dartDioCodeGen.getCode(requestModelGet12, "https"), expectedCode);
|
||||
expect(
|
||||
codeGen.getCode(CodegenLanguage.dartDio, requestModelGet12, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
});
|
||||
|
||||
@ -325,7 +348,7 @@ void main() async {
|
||||
|
||||
void main() async {
|
||||
try {
|
||||
final response = await dio.Dio.head('https://api.foss42.com');
|
||||
final response = await dio.Dio.head('https://api.apidash.dev');
|
||||
print(response.statusCode);
|
||||
print(response.data);
|
||||
} on DioException catch (e, 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,7 +371,7 @@ void main() async {
|
||||
|
||||
void main() async {
|
||||
try {
|
||||
final response = await dio.Dio.head('http://api.foss42.com');
|
||||
final response = await dio.Dio.head('http://api.apidash.dev');
|
||||
print(response.statusCode);
|
||||
print(response.data);
|
||||
} on DioException catch (e, s) {
|
||||
@ -359,7 +384,9 @@ void main() async {
|
||||
}
|
||||
}
|
||||
""";
|
||||
expect(dartDioCodeGen.getCode(requestModelHead2, "http"), expectedCode);
|
||||
expect(
|
||||
codeGen.getCode(CodegenLanguage.dartDio, requestModelHead2, "http"),
|
||||
expectedCode);
|
||||
});
|
||||
});
|
||||
|
||||
@ -373,7 +400,7 @@ void main() async {
|
||||
"text": "I LOVE Flutter"
|
||||
}''';
|
||||
final response = await dio.Dio.post(
|
||||
'https://api.foss42.com/case/lower',
|
||||
'https://api.apidash.dev/case/lower',
|
||||
data: data,
|
||||
);
|
||||
print(response.statusCode);
|
||||
@ -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,10 +427,15 @@ import 'dart:convert' as convert;
|
||||
void main() async {
|
||||
try {
|
||||
final data = convert.json.decode(r'''{
|
||||
"text": "I LOVE Flutter"
|
||||
"text": "I LOVE Flutter",
|
||||
"flag": null,
|
||||
"male": true,
|
||||
"female": false,
|
||||
"no": 1.2,
|
||||
"arr": ["null", "true", "false", null]
|
||||
}''');
|
||||
final response = await dio.Dio.post(
|
||||
'https://api.foss42.com/case/lower',
|
||||
'https://api.apidash.dev/case/lower',
|
||||
data: data,
|
||||
);
|
||||
print(response.statusCode);
|
||||
@ -416,7 +450,9 @@ void main() async {
|
||||
}
|
||||
}
|
||||
""";
|
||||
expect(dartDioCodeGen.getCode(requestModelPost2, "https"), expectedCode);
|
||||
expect(
|
||||
codeGen.getCode(CodegenLanguage.dartDio, requestModelPost2, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('POST 3', () {
|
||||
@ -430,7 +466,7 @@ void main() async {
|
||||
"text": "I LOVE Flutter"
|
||||
}''');
|
||||
final response = await dio.Dio.post(
|
||||
'https://api.foss42.com/case/lower',
|
||||
'https://api.apidash.dev/case/lower',
|
||||
options: Options(headers: headers),
|
||||
data: data,
|
||||
);
|
||||
@ -446,7 +482,9 @@ void main() async {
|
||||
}
|
||||
}
|
||||
""";
|
||||
expect(dartDioCodeGen.getCode(requestModelPost3, "https"), expectedCode);
|
||||
expect(
|
||||
codeGen.getCode(CodegenLanguage.dartDio, requestModelPost3, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
});
|
||||
|
||||
@ -477,7 +515,9 @@ void main() async {
|
||||
}
|
||||
}
|
||||
""";
|
||||
expect(dartDioCodeGen.getCode(requestModelPut1, "https"), expectedCode);
|
||||
expect(
|
||||
codeGen.getCode(CodegenLanguage.dartDio, requestModelPut1, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
});
|
||||
|
||||
@ -508,7 +548,9 @@ void main() async {
|
||||
}
|
||||
}
|
||||
""";
|
||||
expect(dartDioCodeGen.getCode(requestModelPatch1, "https"), expectedCode);
|
||||
expect(
|
||||
codeGen.getCode(CodegenLanguage.dartDio, requestModelPatch1, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
});
|
||||
|
||||
@ -532,7 +574,9 @@ void main() async {
|
||||
}
|
||||
""";
|
||||
expect(
|
||||
dartDioCodeGen.getCode(requestModelDelete1, "https"), expectedCode);
|
||||
codeGen.getCode(
|
||||
CodegenLanguage.dartDio, requestModelDelete1, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('DELETE 2', () {
|
||||
@ -562,7 +606,9 @@ void main() async {
|
||||
}
|
||||
""";
|
||||
expect(
|
||||
dartDioCodeGen.getCode(requestModelDelete2, "https"), expectedCode);
|
||||
codeGen.getCode(
|
||||
CodegenLanguage.dartDio, requestModelDelete2, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
@ -1,17 +1,17 @@
|
||||
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', () {
|
||||
const expectedCode = r"""import 'package:http/http.dart' as http;
|
||||
|
||||
void main() async {
|
||||
var uri = Uri.parse('https://api.foss42.com');
|
||||
var uri = Uri.parse('https://api.apidash.dev');
|
||||
|
||||
final response = await http.get(uri);
|
||||
|
||||
@ -25,14 +25,16 @@ void main() async {
|
||||
}
|
||||
}
|
||||
""";
|
||||
expect(dartHttpCodeGen.getCode(requestModelGet1, "https"), expectedCode);
|
||||
expect(
|
||||
codeGen.getCode(CodegenLanguage.dartHttp, requestModelGet1, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('GET 2', () {
|
||||
const expectedCode = r"""import 'package:http/http.dart' as http;
|
||||
|
||||
void main() async {
|
||||
var uri = Uri.parse('https://api.foss42.com/country/data');
|
||||
var uri = Uri.parse('https://api.apidash.dev/country/data');
|
||||
|
||||
var queryParams = {'code': 'US'};
|
||||
uri = uri.replace(queryParameters: queryParams);
|
||||
@ -50,14 +52,16 @@ void main() async {
|
||||
}
|
||||
""";
|
||||
|
||||
expect(dartHttpCodeGen.getCode(requestModelGet2, "https"), expectedCode);
|
||||
expect(
|
||||
codeGen.getCode(CodegenLanguage.dartHttp, requestModelGet2, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('GET 3', () {
|
||||
const expectedCode = r"""import 'package:http/http.dart' as http;
|
||||
|
||||
void main() async {
|
||||
var uri = Uri.parse('https://api.foss42.com/country/data?code=US');
|
||||
var uri = Uri.parse('https://api.apidash.dev/country/data?code=US');
|
||||
|
||||
var queryParams = {'code': 'IND'};
|
||||
var urlQueryParams = Map<String, String>.from(uri.queryParameters);
|
||||
@ -76,14 +80,16 @@ void main() async {
|
||||
}
|
||||
}
|
||||
""";
|
||||
expect(dartHttpCodeGen.getCode(requestModelGet3, "https"), expectedCode);
|
||||
expect(
|
||||
codeGen.getCode(CodegenLanguage.dartHttp, requestModelGet3, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('GET 4', () {
|
||||
const expectedCode = r"""import 'package:http/http.dart' as http;
|
||||
|
||||
void main() async {
|
||||
var uri = Uri.parse('https://api.foss42.com/humanize/social');
|
||||
var uri = Uri.parse('https://api.apidash.dev/humanize/social');
|
||||
|
||||
var queryParams = {
|
||||
'num': '8700000',
|
||||
@ -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,14 +171,16 @@ void main() async {
|
||||
}
|
||||
}
|
||||
""";
|
||||
expect(dartHttpCodeGen.getCode(requestModelGet6, "https"), expectedCode);
|
||||
expect(
|
||||
codeGen.getCode(CodegenLanguage.dartHttp, requestModelGet6, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('GET 7', () {
|
||||
const expectedCode = r"""import 'package:http/http.dart' as http;
|
||||
|
||||
void main() async {
|
||||
var uri = Uri.parse('https://api.foss42.com');
|
||||
var uri = Uri.parse('https://api.apidash.dev');
|
||||
|
||||
final response = await http.get(uri);
|
||||
|
||||
@ -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,14 +225,16 @@ void main() async {
|
||||
}
|
||||
}
|
||||
""";
|
||||
expect(dartHttpCodeGen.getCode(requestModelGet8, "https"), expectedCode);
|
||||
expect(
|
||||
codeGen.getCode(CodegenLanguage.dartHttp, requestModelGet8, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('GET 9', () {
|
||||
const expectedCode = r"""import 'package:http/http.dart' as http;
|
||||
|
||||
void main() async {
|
||||
var uri = Uri.parse('https://api.foss42.com/humanize/social');
|
||||
var uri = Uri.parse('https://api.apidash.dev/humanize/social');
|
||||
|
||||
var queryParams = {
|
||||
'num': '8700000',
|
||||
@ -238,14 +254,16 @@ void main() async {
|
||||
}
|
||||
}
|
||||
""";
|
||||
expect(dartHttpCodeGen.getCode(requestModelGet9, "https"), expectedCode);
|
||||
expect(
|
||||
codeGen.getCode(CodegenLanguage.dartHttp, requestModelGet9, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('GET 10', () {
|
||||
const expectedCode = r"""import 'package:http/http.dart' as http;
|
||||
|
||||
void main() async {
|
||||
var uri = Uri.parse('https://api.foss42.com/humanize/social');
|
||||
var uri = Uri.parse('https://api.apidash.dev/humanize/social');
|
||||
|
||||
var headers = {'User-Agent': 'Test Agent'};
|
||||
|
||||
@ -265,7 +283,8 @@ void main() async {
|
||||
}
|
||||
""";
|
||||
expect(
|
||||
dartHttpCodeGen.getCode(
|
||||
codeGen.getCode(
|
||||
CodegenLanguage.dartHttp,
|
||||
requestModelGet10,
|
||||
"https",
|
||||
),
|
||||
@ -276,7 +295,7 @@ void main() async {
|
||||
const expectedCode = r"""import 'package:http/http.dart' as http;
|
||||
|
||||
void main() async {
|
||||
var uri = Uri.parse('https://api.foss42.com/humanize/social');
|
||||
var uri = Uri.parse('https://api.apidash.dev/humanize/social');
|
||||
|
||||
var queryParams = {
|
||||
'num': '8700000',
|
||||
@ -301,14 +320,16 @@ void main() async {
|
||||
}
|
||||
}
|
||||
""";
|
||||
expect(dartHttpCodeGen.getCode(requestModelGet11, "https"), expectedCode);
|
||||
expect(
|
||||
codeGen.getCode(CodegenLanguage.dartHttp, requestModelGet11, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('GET 12', () {
|
||||
const expectedCode = r"""import 'package:http/http.dart' as http;
|
||||
|
||||
void main() async {
|
||||
var uri = Uri.parse('https://api.foss42.com/humanize/social');
|
||||
var uri = Uri.parse('https://api.apidash.dev/humanize/social');
|
||||
|
||||
final response = await http.get(uri);
|
||||
|
||||
@ -322,7 +343,9 @@ void main() async {
|
||||
}
|
||||
}
|
||||
""";
|
||||
expect(dartHttpCodeGen.getCode(requestModelGet12, "https"), expectedCode);
|
||||
expect(
|
||||
codeGen.getCode(CodegenLanguage.dartHttp, requestModelGet12, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
});
|
||||
|
||||
@ -331,7 +354,7 @@ void main() async {
|
||||
const expectedCode = r"""import 'package:http/http.dart' as http;
|
||||
|
||||
void main() async {
|
||||
var uri = Uri.parse('https://api.foss42.com');
|
||||
var uri = Uri.parse('https://api.apidash.dev');
|
||||
|
||||
final response = await http.head(uri);
|
||||
|
||||
@ -345,14 +368,16 @@ void main() async {
|
||||
}
|
||||
}
|
||||
""";
|
||||
expect(dartHttpCodeGen.getCode(requestModelHead1, "https"), expectedCode);
|
||||
expect(
|
||||
codeGen.getCode(CodegenLanguage.dartHttp, requestModelHead1, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('HEAD 2', () {
|
||||
const expectedCode = r"""import 'package:http/http.dart' as http;
|
||||
|
||||
void main() async {
|
||||
var uri = Uri.parse('http://api.foss42.com');
|
||||
var uri = Uri.parse('http://api.apidash.dev');
|
||||
|
||||
final response = await http.head(uri);
|
||||
|
||||
@ -366,7 +391,9 @@ void main() async {
|
||||
}
|
||||
}
|
||||
""";
|
||||
expect(dartHttpCodeGen.getCode(requestModelHead2, "http"), expectedCode);
|
||||
expect(
|
||||
codeGen.getCode(CodegenLanguage.dartHttp, requestModelHead2, "http"),
|
||||
expectedCode);
|
||||
});
|
||||
});
|
||||
|
||||
@ -375,7 +402,7 @@ void main() async {
|
||||
const expectedCode = r"""import 'package:http/http.dart' as http;
|
||||
|
||||
void main() async {
|
||||
var uri = Uri.parse('https://api.foss42.com/case/lower');
|
||||
var uri = Uri.parse('https://api.apidash.dev/case/lower');
|
||||
|
||||
String body = r'''{
|
||||
"text": "I LOVE Flutter"
|
||||
@ -399,17 +426,24 @@ void main() async {
|
||||
}
|
||||
}
|
||||
""";
|
||||
expect(dartHttpCodeGen.getCode(requestModelPost1, "https"), expectedCode);
|
||||
expect(
|
||||
codeGen.getCode(CodegenLanguage.dartHttp, requestModelPost1, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('POST 2', () {
|
||||
const expectedCode = r"""import 'package:http/http.dart' as http;
|
||||
|
||||
void main() async {
|
||||
var uri = Uri.parse('https://api.foss42.com/case/lower');
|
||||
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,14 +464,16 @@ void main() async {
|
||||
}
|
||||
}
|
||||
""";
|
||||
expect(dartHttpCodeGen.getCode(requestModelPost2, "https"), expectedCode);
|
||||
expect(
|
||||
codeGen.getCode(CodegenLanguage.dartHttp, requestModelPost2, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('POST 3', () {
|
||||
const expectedCode = r"""import 'package:http/http.dart' as http;
|
||||
|
||||
void main() async {
|
||||
var uri = Uri.parse('https://api.foss42.com/case/lower');
|
||||
var uri = Uri.parse('https://api.apidash.dev/case/lower');
|
||||
|
||||
String body = r'''{
|
||||
"text": "I LOVE Flutter"
|
||||
@ -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);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
@ -1,26 +1,28 @@
|
||||
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', () {
|
||||
const expectedCode = r"""{
|
||||
"method": "GET",
|
||||
"url": "https://api.foss42.com",
|
||||
"url": "https://api.apidash.dev",
|
||||
"httpVersion": "HTTP/1.1",
|
||||
"queryString": [],
|
||||
"headers": []
|
||||
}""";
|
||||
expect(harCodeGen.getCode(requestModelGet1, "https"), expectedCode);
|
||||
expect(codeGen.getCode(CodegenLanguage.har, requestModelGet1, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('GET 2', () {
|
||||
const expectedCode = r"""{
|
||||
"method": "GET",
|
||||
"url": "https://api.foss42.com/country/data?code=US",
|
||||
"url": "https://api.apidash.dev/country/data?code=US",
|
||||
"httpVersion": "HTTP/1.1",
|
||||
"queryString": [
|
||||
{
|
||||
@ -30,13 +32,14 @@ void main() {
|
||||
],
|
||||
"headers": []
|
||||
}""";
|
||||
expect(harCodeGen.getCode(requestModelGet2, "https"), expectedCode);
|
||||
expect(codeGen.getCode(CodegenLanguage.har, requestModelGet2, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('GET 3', () {
|
||||
const expectedCode = r"""{
|
||||
"method": "GET",
|
||||
"url": "https://api.foss42.com/country/data?code=IND",
|
||||
"url": "https://api.apidash.dev/country/data?code=IND",
|
||||
"httpVersion": "HTTP/1.1",
|
||||
"queryString": [
|
||||
{
|
||||
@ -46,13 +49,14 @@ void main() {
|
||||
],
|
||||
"headers": []
|
||||
}""";
|
||||
expect(harCodeGen.getCode(requestModelGet3, "https"), expectedCode);
|
||||
expect(codeGen.getCode(CodegenLanguage.har, requestModelGet3, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('GET 4', () {
|
||||
const expectedCode = r"""{
|
||||
"method": "GET",
|
||||
"url": "https://api.foss42.com/humanize/social?num=8700000&digits=3&system=SS&add_space=true&trailing_zeros=true",
|
||||
"url": "https://api.apidash.dev/humanize/social?num=8700000&digits=3&system=SS&add_space=true&trailing_zeros=true",
|
||||
"httpVersion": "HTTP/1.1",
|
||||
"queryString": [
|
||||
{
|
||||
@ -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,18 +121,20 @@ void main() {
|
||||
}
|
||||
]
|
||||
}""";
|
||||
expect(harCodeGen.getCode(requestModelGet6, "https"), expectedCode);
|
||||
expect(codeGen.getCode(CodegenLanguage.har, requestModelGet6, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('GET 7', () {
|
||||
const expectedCode = r"""{
|
||||
"method": "GET",
|
||||
"url": "https://api.foss42.com",
|
||||
"url": "https://api.apidash.dev",
|
||||
"httpVersion": "HTTP/1.1",
|
||||
"queryString": [],
|
||||
"headers": []
|
||||
}""";
|
||||
expect(harCodeGen.getCode(requestModelGet7, "https"), expectedCode);
|
||||
expect(codeGen.getCode(CodegenLanguage.har, requestModelGet7, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('GET 8', () {
|
||||
@ -147,13 +155,14 @@ void main() {
|
||||
}
|
||||
]
|
||||
}""";
|
||||
expect(harCodeGen.getCode(requestModelGet8, "https"), expectedCode);
|
||||
expect(codeGen.getCode(CodegenLanguage.har, requestModelGet8, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('GET 9', () {
|
||||
const expectedCode = r"""{
|
||||
"method": "GET",
|
||||
"url": "https://api.foss42.com/humanize/social?num=8700000&add_space=true",
|
||||
"url": "https://api.apidash.dev/humanize/social?num=8700000&add_space=true",
|
||||
"httpVersion": "HTTP/1.1",
|
||||
"queryString": [
|
||||
{
|
||||
@ -167,13 +176,14 @@ void main() {
|
||||
],
|
||||
"headers": []
|
||||
}""";
|
||||
expect(harCodeGen.getCode(requestModelGet9, "https"), expectedCode);
|
||||
expect(codeGen.getCode(CodegenLanguage.har, requestModelGet9, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('GET 10', () {
|
||||
const expectedCode = r"""{
|
||||
"method": "GET",
|
||||
"url": "https://api.foss42.com/humanize/social",
|
||||
"url": "https://api.apidash.dev/humanize/social",
|
||||
"httpVersion": "HTTP/1.1",
|
||||
"queryString": [],
|
||||
"headers": [
|
||||
@ -184,7 +194,8 @@ void main() {
|
||||
]
|
||||
}""";
|
||||
expect(
|
||||
harCodeGen.getCode(
|
||||
codeGen.getCode(
|
||||
CodegenLanguage.har,
|
||||
requestModelGet10,
|
||||
"https",
|
||||
),
|
||||
@ -194,7 +205,7 @@ void main() {
|
||||
test('GET 11', () {
|
||||
const expectedCode = r"""{
|
||||
"method": "GET",
|
||||
"url": "https://api.foss42.com/humanize/social?num=8700000&digits=3",
|
||||
"url": "https://api.apidash.dev/humanize/social?num=8700000&digits=3",
|
||||
"httpVersion": "HTTP/1.1",
|
||||
"queryString": [
|
||||
{
|
||||
@ -213,18 +224,20 @@ void main() {
|
||||
}
|
||||
]
|
||||
}""";
|
||||
expect(harCodeGen.getCode(requestModelGet11, "https"), expectedCode);
|
||||
expect(codeGen.getCode(CodegenLanguage.har, requestModelGet11, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('GET 12', () {
|
||||
const expectedCode = r"""{
|
||||
"method": "GET",
|
||||
"url": "https://api.foss42.com/humanize/social",
|
||||
"url": "https://api.apidash.dev/humanize/social",
|
||||
"httpVersion": "HTTP/1.1",
|
||||
"queryString": [],
|
||||
"headers": []
|
||||
}""";
|
||||
expect(harCodeGen.getCode(requestModelGet12, "https"), expectedCode);
|
||||
expect(codeGen.getCode(CodegenLanguage.har, requestModelGet12, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
});
|
||||
|
||||
@ -232,23 +245,25 @@ void main() {
|
||||
test('HEAD 1', () {
|
||||
const expectedCode = r"""{
|
||||
"method": "HEAD",
|
||||
"url": "https://api.foss42.com",
|
||||
"url": "https://api.apidash.dev",
|
||||
"httpVersion": "HTTP/1.1",
|
||||
"queryString": [],
|
||||
"headers": []
|
||||
}""";
|
||||
expect(harCodeGen.getCode(requestModelHead1, "https"), expectedCode);
|
||||
expect(codeGen.getCode(CodegenLanguage.har, requestModelHead1, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('HEAD 2', () {
|
||||
const expectedCode = r"""{
|
||||
"method": "HEAD",
|
||||
"url": "http://api.foss42.com",
|
||||
"url": "http://api.apidash.dev",
|
||||
"httpVersion": "HTTP/1.1",
|
||||
"queryString": [],
|
||||
"headers": []
|
||||
}""";
|
||||
expect(harCodeGen.getCode(requestModelHead2, "http"), expectedCode);
|
||||
expect(codeGen.getCode(CodegenLanguage.har, requestModelHead2, "http"),
|
||||
expectedCode);
|
||||
});
|
||||
});
|
||||
|
||||
@ -256,7 +271,7 @@ void main() {
|
||||
test('POST 1', () {
|
||||
const expectedCode = r"""{
|
||||
"method": "POST",
|
||||
"url": "https://api.foss42.com/case/lower",
|
||||
"url": "https://api.apidash.dev/case/lower",
|
||||
"httpVersion": "HTTP/1.1",
|
||||
"queryString": [],
|
||||
"headers": [
|
||||
@ -270,13 +285,14 @@ 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', () {
|
||||
const expectedCode = r"""{
|
||||
"method": "POST",
|
||||
"url": "https://api.foss42.com/case/lower",
|
||||
"url": "https://api.apidash.dev/case/lower",
|
||||
"httpVersion": "HTTP/1.1",
|
||||
"queryString": [],
|
||||
"headers": [
|
||||
@ -287,16 +303,17 @@ 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', () {
|
||||
const expectedCode = r"""{
|
||||
"method": "POST",
|
||||
"url": "https://api.foss42.com/case/lower",
|
||||
"url": "https://api.apidash.dev/case/lower",
|
||||
"httpVersion": "HTTP/1.1",
|
||||
"queryString": [],
|
||||
"headers": [
|
||||
@ -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);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
@ -1,14 +1,15 @@
|
||||
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', () {
|
||||
const expectedCode = r"""let config = {
|
||||
url: 'https://api.foss42.com',
|
||||
url: 'https://api.apidash.dev',
|
||||
method: 'get'
|
||||
};
|
||||
|
||||
@ -24,12 +25,14 @@ axios(config)
|
||||
console.log(error);
|
||||
});
|
||||
""";
|
||||
expect(axiosCodeGen.getCode(requestModelGet1, "https"), expectedCode);
|
||||
expect(
|
||||
codeGen.getCode(CodegenLanguage.jsAxios, requestModelGet1, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('GET 2', () {
|
||||
const expectedCode = r"""let config = {
|
||||
url: 'https://api.foss42.com/country/data',
|
||||
url: 'https://api.apidash.dev/country/data',
|
||||
method: 'get',
|
||||
params: {
|
||||
"code": "US"
|
||||
@ -48,12 +51,14 @@ axios(config)
|
||||
console.log(error);
|
||||
});
|
||||
""";
|
||||
expect(axiosCodeGen.getCode(requestModelGet2, "https"), expectedCode);
|
||||
expect(
|
||||
codeGen.getCode(CodegenLanguage.jsAxios, requestModelGet2, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('GET 3', () {
|
||||
const expectedCode = r"""let config = {
|
||||
url: 'https://api.foss42.com/country/data',
|
||||
url: 'https://api.apidash.dev/country/data',
|
||||
method: 'get',
|
||||
params: {
|
||||
"code": "IND"
|
||||
@ -72,12 +77,14 @@ axios(config)
|
||||
console.log(error);
|
||||
});
|
||||
""";
|
||||
expect(axiosCodeGen.getCode(requestModelGet3, "https"), expectedCode);
|
||||
expect(
|
||||
codeGen.getCode(CodegenLanguage.jsAxios, requestModelGet3, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('GET 4', () {
|
||||
const expectedCode = r"""let config = {
|
||||
url: 'https://api.foss42.com/humanize/social',
|
||||
url: 'https://api.apidash.dev/humanize/social',
|
||||
method: 'get',
|
||||
params: {
|
||||
"num": "8700000",
|
||||
@ -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,12 +162,14 @@ axios(config)
|
||||
console.log(error);
|
||||
});
|
||||
""";
|
||||
expect(axiosCodeGen.getCode(requestModelGet6, "https"), expectedCode);
|
||||
expect(
|
||||
codeGen.getCode(CodegenLanguage.jsAxios, requestModelGet6, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('GET 7', () {
|
||||
const expectedCode = r"""let config = {
|
||||
url: 'https://api.foss42.com',
|
||||
url: 'https://api.apidash.dev',
|
||||
method: 'get'
|
||||
};
|
||||
|
||||
@ -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,12 +214,14 @@ axios(config)
|
||||
console.log(error);
|
||||
});
|
||||
""";
|
||||
expect(axiosCodeGen.getCode(requestModelGet8, "https"), expectedCode);
|
||||
expect(
|
||||
codeGen.getCode(CodegenLanguage.jsAxios, requestModelGet8, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('GET 9', () {
|
||||
const expectedCode = r"""let config = {
|
||||
url: 'https://api.foss42.com/humanize/social',
|
||||
url: 'https://api.apidash.dev/humanize/social',
|
||||
method: 'get',
|
||||
params: {
|
||||
"num": "8700000",
|
||||
@ -224,12 +241,14 @@ axios(config)
|
||||
console.log(error);
|
||||
});
|
||||
""";
|
||||
expect(axiosCodeGen.getCode(requestModelGet9, "https"), expectedCode);
|
||||
expect(
|
||||
codeGen.getCode(CodegenLanguage.jsAxios, requestModelGet9, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('GET 10', () {
|
||||
const expectedCode = r"""let config = {
|
||||
url: 'https://api.foss42.com/humanize/social',
|
||||
url: 'https://api.apidash.dev/humanize/social',
|
||||
method: 'get',
|
||||
headers: {
|
||||
"User-Agent": "Test Agent"
|
||||
@ -249,7 +268,8 @@ axios(config)
|
||||
});
|
||||
""";
|
||||
expect(
|
||||
axiosCodeGen.getCode(
|
||||
codeGen.getCode(
|
||||
CodegenLanguage.jsAxios,
|
||||
requestModelGet10,
|
||||
"https",
|
||||
),
|
||||
@ -258,7 +278,7 @@ axios(config)
|
||||
|
||||
test('GET 11', () {
|
||||
const expectedCode = r"""let config = {
|
||||
url: 'https://api.foss42.com/humanize/social',
|
||||
url: 'https://api.apidash.dev/humanize/social',
|
||||
method: 'get',
|
||||
params: {
|
||||
"num": "8700000",
|
||||
@ -281,12 +301,14 @@ axios(config)
|
||||
console.log(error);
|
||||
});
|
||||
""";
|
||||
expect(axiosCodeGen.getCode(requestModelGet11, "https"), expectedCode);
|
||||
expect(
|
||||
codeGen.getCode(CodegenLanguage.jsAxios, requestModelGet11, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('GET 12', () {
|
||||
const expectedCode = r"""let config = {
|
||||
url: 'https://api.foss42.com/humanize/social',
|
||||
url: 'https://api.apidash.dev/humanize/social',
|
||||
method: 'get'
|
||||
};
|
||||
|
||||
@ -302,14 +324,16 @@ axios(config)
|
||||
console.log(error);
|
||||
});
|
||||
""";
|
||||
expect(axiosCodeGen.getCode(requestModelGet12, "https"), expectedCode);
|
||||
expect(
|
||||
codeGen.getCode(CodegenLanguage.jsAxios, requestModelGet12, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
});
|
||||
|
||||
group('HEAD Request', () {
|
||||
test('HEAD 1', () {
|
||||
const expectedCode = r"""let config = {
|
||||
url: 'https://api.foss42.com',
|
||||
url: 'https://api.apidash.dev',
|
||||
method: 'head'
|
||||
};
|
||||
|
||||
@ -325,12 +349,14 @@ axios(config)
|
||||
console.log(error);
|
||||
});
|
||||
""";
|
||||
expect(axiosCodeGen.getCode(requestModelHead1, "https"), expectedCode);
|
||||
expect(
|
||||
codeGen.getCode(CodegenLanguage.jsAxios, requestModelHead1, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('HEAD 2', () {
|
||||
const expectedCode = r"""let config = {
|
||||
url: 'http://api.foss42.com',
|
||||
url: 'http://api.apidash.dev',
|
||||
method: 'head'
|
||||
};
|
||||
|
||||
@ -346,14 +372,16 @@ axios(config)
|
||||
console.log(error);
|
||||
});
|
||||
""";
|
||||
expect(axiosCodeGen.getCode(requestModelHead2, "http"), expectedCode);
|
||||
expect(
|
||||
codeGen.getCode(CodegenLanguage.jsAxios, requestModelHead2, "http"),
|
||||
expectedCode);
|
||||
});
|
||||
});
|
||||
|
||||
group('POST Request', () {
|
||||
test('POST 1', () {
|
||||
const expectedCode = r"""let config = {
|
||||
url: 'https://api.foss42.com/case/lower',
|
||||
url: 'https://api.apidash.dev/case/lower',
|
||||
method: 'post',
|
||||
headers: {
|
||||
"Content-Type": "text/plain"
|
||||
@ -373,17 +401,19 @@ axios(config)
|
||||
console.log(error);
|
||||
});
|
||||
""";
|
||||
expect(axiosCodeGen.getCode(requestModelPost1, "https"), expectedCode);
|
||||
expect(
|
||||
codeGen.getCode(CodegenLanguage.jsAxios, requestModelPost1, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('POST 2', () {
|
||||
const expectedCode = r"""let config = {
|
||||
url: 'https://api.foss42.com/case/lower',
|
||||
url: 'https://api.apidash.dev/case/lower',
|
||||
method: 'post',
|
||||
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,12 +428,14 @@ axios(config)
|
||||
console.log(error);
|
||||
});
|
||||
""";
|
||||
expect(axiosCodeGen.getCode(requestModelPost2, "https"), expectedCode);
|
||||
expect(
|
||||
codeGen.getCode(CodegenLanguage.jsAxios, requestModelPost2, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('POST 3', () {
|
||||
const expectedCode = r"""let config = {
|
||||
url: 'https://api.foss42.com/case/lower',
|
||||
url: 'https://api.apidash.dev/case/lower',
|
||||
method: 'post',
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
@ -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);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
@ -1,13 +1,14 @@
|
||||
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', () {
|
||||
const expectedCode = r"""let url = 'https://api.foss42.com';
|
||||
const expectedCode = r"""let url = 'https://api.apidash.dev';
|
||||
|
||||
let options = {
|
||||
method: 'GET'
|
||||
@ -28,12 +29,14 @@ fetch(url, options)
|
||||
console.error('error:' + err);
|
||||
});
|
||||
""";
|
||||
expect(fetchCodeGen.getCode(requestModelGet1, "https"), expectedCode);
|
||||
expect(
|
||||
codeGen.getCode(CodegenLanguage.jsFetch, requestModelGet1, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('GET 2', () {
|
||||
const expectedCode =
|
||||
r"""let url = 'https://api.foss42.com/country/data?code=US';
|
||||
r"""let url = 'https://api.apidash.dev/country/data?code=US';
|
||||
|
||||
let options = {
|
||||
method: 'GET'
|
||||
@ -54,12 +57,14 @@ fetch(url, options)
|
||||
console.error('error:' + err);
|
||||
});
|
||||
""";
|
||||
expect(fetchCodeGen.getCode(requestModelGet2, "https"), expectedCode);
|
||||
expect(
|
||||
codeGen.getCode(CodegenLanguage.jsFetch, requestModelGet2, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('GET 3', () {
|
||||
const expectedCode =
|
||||
r"""let url = 'https://api.foss42.com/country/data?code=IND';
|
||||
r"""let url = 'https://api.apidash.dev/country/data?code=IND';
|
||||
|
||||
let options = {
|
||||
method: 'GET'
|
||||
@ -80,12 +85,14 @@ fetch(url, options)
|
||||
console.error('error:' + err);
|
||||
});
|
||||
""";
|
||||
expect(fetchCodeGen.getCode(requestModelGet3, "https"), expectedCode);
|
||||
expect(
|
||||
codeGen.getCode(CodegenLanguage.jsFetch, requestModelGet3, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('GET 4', () {
|
||||
const expectedCode =
|
||||
r"""let url = 'https://api.foss42.com/humanize/social?num=8700000&digits=3&system=SS&add_space=true&trailing_zeros=true';
|
||||
r"""let url = 'https://api.apidash.dev/humanize/social?num=8700000&digits=3&system=SS&add_space=true&trailing_zeros=true';
|
||||
|
||||
let options = {
|
||||
method: 'GET'
|
||||
@ -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,11 +175,13 @@ fetch(url, options)
|
||||
console.error('error:' + err);
|
||||
});
|
||||
""";
|
||||
expect(fetchCodeGen.getCode(requestModelGet6, "https"), expectedCode);
|
||||
expect(
|
||||
codeGen.getCode(CodegenLanguage.jsFetch, requestModelGet6, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('GET 7', () {
|
||||
const expectedCode = r"""let url = 'https://api.foss42.com';
|
||||
const expectedCode = r"""let url = 'https://api.apidash.dev';
|
||||
|
||||
let options = {
|
||||
method: 'GET'
|
||||
@ -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,12 +233,14 @@ fetch(url, options)
|
||||
console.error('error:' + err);
|
||||
});
|
||||
""";
|
||||
expect(fetchCodeGen.getCode(requestModelGet8, "https"), expectedCode);
|
||||
expect(
|
||||
codeGen.getCode(CodegenLanguage.jsFetch, requestModelGet8, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('GET 9', () {
|
||||
const expectedCode =
|
||||
r"""let url = 'https://api.foss42.com/humanize/social?num=8700000&add_space=true';
|
||||
r"""let url = 'https://api.apidash.dev/humanize/social?num=8700000&add_space=true';
|
||||
|
||||
let options = {
|
||||
method: 'GET'
|
||||
@ -244,12 +261,14 @@ fetch(url, options)
|
||||
console.error('error:' + err);
|
||||
});
|
||||
""";
|
||||
expect(fetchCodeGen.getCode(requestModelGet9, "https"), expectedCode);
|
||||
expect(
|
||||
codeGen.getCode(CodegenLanguage.jsFetch, requestModelGet9, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('GET 10', () {
|
||||
const expectedCode =
|
||||
r"""let url = 'https://api.foss42.com/humanize/social';
|
||||
r"""let url = 'https://api.apidash.dev/humanize/social';
|
||||
|
||||
let options = {
|
||||
method: 'GET',
|
||||
@ -274,7 +293,8 @@ fetch(url, options)
|
||||
});
|
||||
""";
|
||||
expect(
|
||||
fetchCodeGen.getCode(
|
||||
codeGen.getCode(
|
||||
CodegenLanguage.jsFetch,
|
||||
requestModelGet10,
|
||||
"https",
|
||||
),
|
||||
@ -283,7 +303,7 @@ fetch(url, options)
|
||||
|
||||
test('GET 11', () {
|
||||
const expectedCode =
|
||||
r"""let url = 'https://api.foss42.com/humanize/social?num=8700000&digits=3';
|
||||
r"""let url = 'https://api.apidash.dev/humanize/social?num=8700000&digits=3';
|
||||
|
||||
let options = {
|
||||
method: 'GET',
|
||||
@ -307,12 +327,14 @@ fetch(url, options)
|
||||
console.error('error:' + err);
|
||||
});
|
||||
""";
|
||||
expect(fetchCodeGen.getCode(requestModelGet11, "https"), expectedCode);
|
||||
expect(
|
||||
codeGen.getCode(CodegenLanguage.jsFetch, requestModelGet11, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('GET 12', () {
|
||||
const expectedCode =
|
||||
r"""let url = 'https://api.foss42.com/humanize/social';
|
||||
r"""let url = 'https://api.apidash.dev/humanize/social';
|
||||
|
||||
let options = {
|
||||
method: 'GET'
|
||||
@ -333,13 +355,15 @@ fetch(url, options)
|
||||
console.error('error:' + err);
|
||||
});
|
||||
""";
|
||||
expect(fetchCodeGen.getCode(requestModelGet12, "https"), expectedCode);
|
||||
expect(
|
||||
codeGen.getCode(CodegenLanguage.jsFetch, requestModelGet12, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
});
|
||||
|
||||
group('HEAD Request', () {
|
||||
test('HEAD 1', () {
|
||||
const expectedCode = r"""let url = 'https://api.foss42.com';
|
||||
const expectedCode = r"""let url = 'https://api.apidash.dev';
|
||||
|
||||
let options = {
|
||||
method: 'HEAD'
|
||||
@ -360,11 +384,13 @@ fetch(url, options)
|
||||
console.error('error:' + err);
|
||||
});
|
||||
""";
|
||||
expect(fetchCodeGen.getCode(requestModelHead1, "https"), expectedCode);
|
||||
expect(
|
||||
codeGen.getCode(CodegenLanguage.jsFetch, requestModelHead1, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('HEAD 2', () {
|
||||
const expectedCode = r"""let url = 'http://api.foss42.com';
|
||||
const expectedCode = r"""let url = 'http://api.apidash.dev';
|
||||
|
||||
let options = {
|
||||
method: 'HEAD'
|
||||
@ -385,13 +411,15 @@ fetch(url, options)
|
||||
console.error('error:' + err);
|
||||
});
|
||||
""";
|
||||
expect(fetchCodeGen.getCode(requestModelHead2, "http"), expectedCode);
|
||||
expect(
|
||||
codeGen.getCode(CodegenLanguage.jsFetch, requestModelHead2, "http"),
|
||||
expectedCode);
|
||||
});
|
||||
});
|
||||
|
||||
group('POST Request', () {
|
||||
test('POST 1', () {
|
||||
const expectedCode = r"""let url = 'https://api.foss42.com/case/lower';
|
||||
const expectedCode = r"""let url = 'https://api.apidash.dev/case/lower';
|
||||
|
||||
let options = {
|
||||
method: 'POST',
|
||||
@ -417,11 +445,13 @@ fetch(url, options)
|
||||
console.error('error:' + err);
|
||||
});
|
||||
""";
|
||||
expect(fetchCodeGen.getCode(requestModelPost1, "https"), expectedCode);
|
||||
expect(
|
||||
codeGen.getCode(CodegenLanguage.jsFetch, requestModelPost1, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('POST 2', () {
|
||||
const expectedCode = r"""let url = 'https://api.foss42.com/case/lower';
|
||||
const expectedCode = r"""let url = 'https://api.apidash.dev/case/lower';
|
||||
|
||||
let options = {
|
||||
method: 'POST',
|
||||
@ -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,11 +477,13 @@ fetch(url, options)
|
||||
console.error('error:' + err);
|
||||
});
|
||||
""";
|
||||
expect(fetchCodeGen.getCode(requestModelPost2, "https"), expectedCode);
|
||||
expect(
|
||||
codeGen.getCode(CodegenLanguage.jsFetch, requestModelPost2, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('POST 3', () {
|
||||
const expectedCode = r"""let url = 'https://api.foss42.com/case/lower';
|
||||
const expectedCode = r"""let url = 'https://api.apidash.dev/case/lower';
|
||||
|
||||
let options = {
|
||||
method: 'POST',
|
||||
@ -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);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
@ -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', () {
|
||||
@ -13,7 +14,7 @@ import okhttp3.Request
|
||||
fun main() {
|
||||
val client = OkHttpClient()
|
||||
|
||||
val url = "https://api.foss42.com"
|
||||
val url = "https://api.apidash.dev"
|
||||
|
||||
val request = Request.Builder()
|
||||
.url(url)
|
||||
@ -27,7 +28,9 @@ fun main() {
|
||||
}
|
||||
""";
|
||||
expect(
|
||||
kotlinOkHttpCodeGen.getCode(requestModelGet1, "https"), expectedCode);
|
||||
codeGen.getCode(
|
||||
CodegenLanguage.kotlinOkHttp, requestModelGet1, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('GET 2', () {
|
||||
@ -38,7 +41,7 @@ import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||
fun main() {
|
||||
val client = OkHttpClient()
|
||||
|
||||
val url = "https://api.foss42.com/country/data".toHttpUrl().newBuilder()
|
||||
val url = "https://api.apidash.dev/country/data".toHttpUrl().newBuilder()
|
||||
.addQueryParameter("code", "US")
|
||||
.build()
|
||||
|
||||
@ -54,7 +57,9 @@ fun main() {
|
||||
}
|
||||
""";
|
||||
expect(
|
||||
kotlinOkHttpCodeGen.getCode(requestModelGet2, "https"), expectedCode);
|
||||
codeGen.getCode(
|
||||
CodegenLanguage.kotlinOkHttp, requestModelGet2, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('GET 3', () {
|
||||
@ -65,7 +70,7 @@ import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||
fun main() {
|
||||
val client = OkHttpClient()
|
||||
|
||||
val url = "https://api.foss42.com/country/data".toHttpUrl().newBuilder()
|
||||
val url = "https://api.apidash.dev/country/data".toHttpUrl().newBuilder()
|
||||
.addQueryParameter("code", "IND")
|
||||
.build()
|
||||
|
||||
@ -81,7 +86,9 @@ fun main() {
|
||||
}
|
||||
""";
|
||||
expect(
|
||||
kotlinOkHttpCodeGen.getCode(requestModelGet3, "https"), expectedCode);
|
||||
codeGen.getCode(
|
||||
CodegenLanguage.kotlinOkHttp, requestModelGet3, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('GET 4', () {
|
||||
@ -92,7 +99,7 @@ import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||
fun main() {
|
||||
val client = OkHttpClient()
|
||||
|
||||
val url = "https://api.foss42.com/humanize/social".toHttpUrl().newBuilder()
|
||||
val url = "https://api.apidash.dev/humanize/social".toHttpUrl().newBuilder()
|
||||
.addQueryParameter("num", "8700000")
|
||||
.addQueryParameter("digits", "3")
|
||||
.addQueryParameter("system", "SS")
|
||||
@ -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', () {
|
||||
@ -175,7 +188,7 @@ import okhttp3.Request
|
||||
fun main() {
|
||||
val client = OkHttpClient()
|
||||
|
||||
val url = "https://api.foss42.com"
|
||||
val url = "https://api.apidash.dev"
|
||||
|
||||
val request = Request.Builder()
|
||||
.url(url)
|
||||
@ -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', () {
|
||||
@ -228,7 +245,7 @@ import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||
fun main() {
|
||||
val client = OkHttpClient()
|
||||
|
||||
val url = "https://api.foss42.com/humanize/social".toHttpUrl().newBuilder()
|
||||
val url = "https://api.apidash.dev/humanize/social".toHttpUrl().newBuilder()
|
||||
.addQueryParameter("num", "8700000")
|
||||
.addQueryParameter("add_space", "true")
|
||||
.build()
|
||||
@ -245,7 +262,9 @@ fun main() {
|
||||
}
|
||||
""";
|
||||
expect(
|
||||
kotlinOkHttpCodeGen.getCode(requestModelGet9, "https"), expectedCode);
|
||||
codeGen.getCode(
|
||||
CodegenLanguage.kotlinOkHttp, requestModelGet9, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('GET 10', () {
|
||||
@ -255,7 +274,7 @@ import okhttp3.Request
|
||||
fun main() {
|
||||
val client = OkHttpClient()
|
||||
|
||||
val url = "https://api.foss42.com/humanize/social"
|
||||
val url = "https://api.apidash.dev/humanize/social"
|
||||
|
||||
val request = Request.Builder()
|
||||
.url(url)
|
||||
@ -270,7 +289,8 @@ fun main() {
|
||||
}
|
||||
""";
|
||||
expect(
|
||||
kotlinOkHttpCodeGen.getCode(
|
||||
codeGen.getCode(
|
||||
CodegenLanguage.kotlinOkHttp,
|
||||
requestModelGet10,
|
||||
"https",
|
||||
),
|
||||
@ -285,7 +305,7 @@ import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||
fun main() {
|
||||
val client = OkHttpClient()
|
||||
|
||||
val url = "https://api.foss42.com/humanize/social".toHttpUrl().newBuilder()
|
||||
val url = "https://api.apidash.dev/humanize/social".toHttpUrl().newBuilder()
|
||||
.addQueryParameter("num", "8700000")
|
||||
.addQueryParameter("digits", "3")
|
||||
.build()
|
||||
@ -302,7 +322,9 @@ fun main() {
|
||||
println(response.body?.string())
|
||||
}
|
||||
""";
|
||||
expect(kotlinOkHttpCodeGen.getCode(requestModelGet11, "https"),
|
||||
expect(
|
||||
codeGen.getCode(
|
||||
CodegenLanguage.kotlinOkHttp, requestModelGet11, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
@ -313,7 +335,7 @@ import okhttp3.Request
|
||||
fun main() {
|
||||
val client = OkHttpClient()
|
||||
|
||||
val url = "https://api.foss42.com/humanize/social"
|
||||
val url = "https://api.apidash.dev/humanize/social"
|
||||
|
||||
val request = Request.Builder()
|
||||
.url(url)
|
||||
@ -326,7 +348,9 @@ fun main() {
|
||||
println(response.body?.string())
|
||||
}
|
||||
""";
|
||||
expect(kotlinOkHttpCodeGen.getCode(requestModelGet12, "https"),
|
||||
expect(
|
||||
codeGen.getCode(
|
||||
CodegenLanguage.kotlinOkHttp, requestModelGet12, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
});
|
||||
@ -339,31 +363,7 @@ import okhttp3.Request
|
||||
fun main() {
|
||||
val client = OkHttpClient()
|
||||
|
||||
val url = "https://api.foss42.com"
|
||||
|
||||
val request = Request.Builder()
|
||||
.url(url)
|
||||
.head()
|
||||
.build()
|
||||
|
||||
val response = client.newCall(request).execute()
|
||||
|
||||
println(response.code)
|
||||
println(response.body?.string())
|
||||
}
|
||||
""";
|
||||
expect(kotlinOkHttpCodeGen.getCode(requestModelHead1, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('HEAD 2', () {
|
||||
const expectedCode = r"""import okhttp3.OkHttpClient
|
||||
import okhttp3.Request
|
||||
|
||||
fun main() {
|
||||
val client = OkHttpClient()
|
||||
|
||||
val url = "http://api.foss42.com"
|
||||
val url = "https://api.apidash.dev"
|
||||
|
||||
val request = Request.Builder()
|
||||
.url(url)
|
||||
@ -377,7 +377,35 @@ fun main() {
|
||||
}
|
||||
""";
|
||||
expect(
|
||||
kotlinOkHttpCodeGen.getCode(requestModelHead2, "http"), expectedCode);
|
||||
codeGen.getCode(
|
||||
CodegenLanguage.kotlinOkHttp, requestModelHead1, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('HEAD 2', () {
|
||||
const expectedCode = r"""import okhttp3.OkHttpClient
|
||||
import okhttp3.Request
|
||||
|
||||
fun main() {
|
||||
val client = OkHttpClient()
|
||||
|
||||
val url = "http://api.apidash.dev"
|
||||
|
||||
val request = Request.Builder()
|
||||
.url(url)
|
||||
.head()
|
||||
.build()
|
||||
|
||||
val response = client.newCall(request).execute()
|
||||
|
||||
println(response.code)
|
||||
println(response.body?.string())
|
||||
}
|
||||
""";
|
||||
expect(
|
||||
codeGen.getCode(
|
||||
CodegenLanguage.kotlinOkHttp, requestModelHead2, "http"),
|
||||
expectedCode);
|
||||
});
|
||||
});
|
||||
|
||||
@ -391,7 +419,7 @@ import okhttp3.MediaType.Companion.toMediaType
|
||||
fun main() {
|
||||
val client = OkHttpClient()
|
||||
|
||||
val url = "https://api.foss42.com/case/lower"
|
||||
val url = "https://api.apidash.dev/case/lower"
|
||||
|
||||
val mediaType = "text/plain".toMediaType()
|
||||
|
||||
@ -410,7 +438,9 @@ fun main() {
|
||||
println(response.body?.string())
|
||||
}
|
||||
''';
|
||||
expect(kotlinOkHttpCodeGen.getCode(requestModelPost1, "https"),
|
||||
expect(
|
||||
codeGen.getCode(
|
||||
CodegenLanguage.kotlinOkHttp, requestModelPost1, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
@ -423,12 +453,17 @@ import okhttp3.MediaType.Companion.toMediaType
|
||||
fun main() {
|
||||
val client = OkHttpClient()
|
||||
|
||||
val url = "https://api.foss42.com/case/lower"
|
||||
val url = "https://api.apidash.dev/case/lower"
|
||||
|
||||
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);
|
||||
});
|
||||
|
||||
@ -455,7 +492,7 @@ import okhttp3.MediaType.Companion.toMediaType
|
||||
fun main() {
|
||||
val client = OkHttpClient()
|
||||
|
||||
val url = "https://api.foss42.com/case/lower"
|
||||
val url = "https://api.apidash.dev/case/lower"
|
||||
|
||||
val mediaType = "application/json".toMediaType()
|
||||
|
||||
@ -475,7 +512,40 @@ fun main() {
|
||||
println(response.body?.string())
|
||||
}
|
||||
''';
|
||||
expect(kotlinOkHttpCodeGen.getCode(requestModelPost3, "https"),
|
||||
expect(
|
||||
codeGen.getCode(
|
||||
CodegenLanguage.kotlinOkHttp, requestModelPost3, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('POST 5', () {
|
||||
const expectedCode = r'''import okhttp3.OkHttpClient
|
||||
import okhttp3.Request
|
||||
import okhttp3.MultipartBody
|
||||
|
||||
fun main() {
|
||||
val client = OkHttpClient()
|
||||
|
||||
val url = "https://api.apidash.dev/io/form"
|
||||
val body = MultipartBody.Builder().setType(MultipartBody.FORM).addFormDataPart("text","API")
|
||||
.addFormDataPart("sep","|")
|
||||
.addFormDataPart("times","3")
|
||||
.build()
|
||||
val request = Request.Builder()
|
||||
.url(url)
|
||||
.addHeader("User-Agent", "Test Agent")
|
||||
.post(body)
|
||||
.build()
|
||||
|
||||
val response = client.newCall(request).execute()
|
||||
|
||||
println(response.code)
|
||||
println(response.body?.string())
|
||||
}
|
||||
''';
|
||||
expect(
|
||||
codeGen.getCode(
|
||||
CodegenLanguage.kotlinOkHttp, requestModelPost5, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
});
|
||||
@ -511,7 +581,9 @@ fun main() {
|
||||
}
|
||||
''';
|
||||
expect(
|
||||
kotlinOkHttpCodeGen.getCode(requestModelPut1, "https"), expectedCode);
|
||||
codeGen.getCode(
|
||||
CodegenLanguage.kotlinOkHttp, requestModelPut1, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
});
|
||||
|
||||
@ -545,7 +617,9 @@ fun main() {
|
||||
println(response.body?.string())
|
||||
}
|
||||
''';
|
||||
expect(kotlinOkHttpCodeGen.getCode(requestModelPatch1, "https"),
|
||||
expect(
|
||||
codeGen.getCode(
|
||||
CodegenLanguage.kotlinOkHttp, requestModelPatch1, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
});
|
||||
@ -571,7 +645,9 @@ fun main() {
|
||||
println(response.body?.string())
|
||||
}
|
||||
""";
|
||||
expect(kotlinOkHttpCodeGen.getCode(requestModelDelete1, "https"),
|
||||
expect(
|
||||
codeGen.getCode(
|
||||
CodegenLanguage.kotlinOkHttp, requestModelDelete1, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
@ -604,7 +680,9 @@ fun main() {
|
||||
println(response.body?.string())
|
||||
}
|
||||
''';
|
||||
expect(kotlinOkHttpCodeGen.getCode(requestModelDelete2, "https"),
|
||||
expect(
|
||||
codeGen.getCode(
|
||||
CodegenLanguage.kotlinOkHttp, requestModelDelete2, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
});
|
||||
|
@ -1,16 +1,17 @@
|
||||
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', () {
|
||||
const expectedCode = r"""import axios from 'axios';
|
||||
|
||||
let config = {
|
||||
url: 'https://api.foss42.com',
|
||||
url: 'https://api.apidash.dev',
|
||||
method: 'get'
|
||||
};
|
||||
|
||||
@ -26,14 +27,17 @@ axios(config)
|
||||
console.log(error);
|
||||
});
|
||||
""";
|
||||
expect(axiosCodeGen.getCode(requestModelGet1, "https"), expectedCode);
|
||||
expect(
|
||||
codeGen.getCode(
|
||||
CodegenLanguage.nodejsAxios, requestModelGet1, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('GET 2', () {
|
||||
const expectedCode = r"""import axios from 'axios';
|
||||
|
||||
let config = {
|
||||
url: 'https://api.foss42.com/country/data',
|
||||
url: 'https://api.apidash.dev/country/data',
|
||||
method: 'get',
|
||||
params: {
|
||||
"code": "US"
|
||||
@ -52,14 +56,17 @@ axios(config)
|
||||
console.log(error);
|
||||
});
|
||||
""";
|
||||
expect(axiosCodeGen.getCode(requestModelGet2, "https"), expectedCode);
|
||||
expect(
|
||||
codeGen.getCode(
|
||||
CodegenLanguage.nodejsAxios, requestModelGet2, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('GET 3', () {
|
||||
const expectedCode = r"""import axios from 'axios';
|
||||
|
||||
let config = {
|
||||
url: 'https://api.foss42.com/country/data',
|
||||
url: 'https://api.apidash.dev/country/data',
|
||||
method: 'get',
|
||||
params: {
|
||||
"code": "IND"
|
||||
@ -78,14 +85,17 @@ axios(config)
|
||||
console.log(error);
|
||||
});
|
||||
""";
|
||||
expect(axiosCodeGen.getCode(requestModelGet3, "https"), expectedCode);
|
||||
expect(
|
||||
codeGen.getCode(
|
||||
CodegenLanguage.nodejsAxios, requestModelGet3, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('GET 4', () {
|
||||
const expectedCode = r"""import axios from 'axios';
|
||||
|
||||
let config = {
|
||||
url: 'https://api.foss42.com/humanize/social',
|
||||
url: 'https://api.apidash.dev/humanize/social',
|
||||
method: 'get',
|
||||
params: {
|
||||
"num": "8700000",
|
||||
@ -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,14 +179,17 @@ axios(config)
|
||||
console.log(error);
|
||||
});
|
||||
""";
|
||||
expect(axiosCodeGen.getCode(requestModelGet6, "https"), expectedCode);
|
||||
expect(
|
||||
codeGen.getCode(
|
||||
CodegenLanguage.nodejsAxios, requestModelGet6, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('GET 7', () {
|
||||
const expectedCode = r"""import axios from 'axios';
|
||||
|
||||
let config = {
|
||||
url: 'https://api.foss42.com',
|
||||
url: 'https://api.apidash.dev',
|
||||
method: 'get'
|
||||
};
|
||||
|
||||
@ -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,14 +237,17 @@ axios(config)
|
||||
console.log(error);
|
||||
});
|
||||
""";
|
||||
expect(axiosCodeGen.getCode(requestModelGet8, "https"), expectedCode);
|
||||
expect(
|
||||
codeGen.getCode(
|
||||
CodegenLanguage.nodejsAxios, requestModelGet8, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('GET 9', () {
|
||||
const expectedCode = r"""import axios from 'axios';
|
||||
|
||||
let config = {
|
||||
url: 'https://api.foss42.com/humanize/social',
|
||||
url: 'https://api.apidash.dev/humanize/social',
|
||||
method: 'get',
|
||||
params: {
|
||||
"num": "8700000",
|
||||
@ -242,14 +267,17 @@ axios(config)
|
||||
console.log(error);
|
||||
});
|
||||
""";
|
||||
expect(axiosCodeGen.getCode(requestModelGet9, "https"), expectedCode);
|
||||
expect(
|
||||
codeGen.getCode(
|
||||
CodegenLanguage.nodejsAxios, requestModelGet9, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('GET 10', () {
|
||||
const expectedCode = r"""import axios from 'axios';
|
||||
|
||||
let config = {
|
||||
url: 'https://api.foss42.com/humanize/social',
|
||||
url: 'https://api.apidash.dev/humanize/social',
|
||||
method: 'get',
|
||||
headers: {
|
||||
"User-Agent": "Test Agent"
|
||||
@ -269,7 +297,8 @@ axios(config)
|
||||
});
|
||||
""";
|
||||
expect(
|
||||
axiosCodeGen.getCode(
|
||||
codeGen.getCode(
|
||||
CodegenLanguage.nodejsAxios,
|
||||
requestModelGet10,
|
||||
"https",
|
||||
),
|
||||
@ -280,7 +309,7 @@ axios(config)
|
||||
const expectedCode = r"""import axios from 'axios';
|
||||
|
||||
let config = {
|
||||
url: 'https://api.foss42.com/humanize/social',
|
||||
url: 'https://api.apidash.dev/humanize/social',
|
||||
method: 'get',
|
||||
params: {
|
||||
"num": "8700000",
|
||||
@ -303,14 +332,17 @@ axios(config)
|
||||
console.log(error);
|
||||
});
|
||||
""";
|
||||
expect(axiosCodeGen.getCode(requestModelGet11, "https"), expectedCode);
|
||||
expect(
|
||||
codeGen.getCode(
|
||||
CodegenLanguage.nodejsAxios, requestModelGet11, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('GET 12', () {
|
||||
const expectedCode = r"""import axios from 'axios';
|
||||
|
||||
let config = {
|
||||
url: 'https://api.foss42.com/humanize/social',
|
||||
url: 'https://api.apidash.dev/humanize/social',
|
||||
method: 'get'
|
||||
};
|
||||
|
||||
@ -326,7 +358,10 @@ axios(config)
|
||||
console.log(error);
|
||||
});
|
||||
""";
|
||||
expect(axiosCodeGen.getCode(requestModelGet12, "https"), expectedCode);
|
||||
expect(
|
||||
codeGen.getCode(
|
||||
CodegenLanguage.nodejsAxios, requestModelGet12, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
});
|
||||
|
||||
@ -335,7 +370,7 @@ axios(config)
|
||||
const expectedCode = r"""import axios from 'axios';
|
||||
|
||||
let config = {
|
||||
url: 'https://api.foss42.com',
|
||||
url: 'https://api.apidash.dev',
|
||||
method: 'head'
|
||||
};
|
||||
|
||||
@ -351,14 +386,17 @@ axios(config)
|
||||
console.log(error);
|
||||
});
|
||||
""";
|
||||
expect(axiosCodeGen.getCode(requestModelHead1, "https"), expectedCode);
|
||||
expect(
|
||||
codeGen.getCode(
|
||||
CodegenLanguage.nodejsAxios, requestModelHead1, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('HEAD 2', () {
|
||||
const expectedCode = r"""import axios from 'axios';
|
||||
|
||||
let config = {
|
||||
url: 'http://api.foss42.com',
|
||||
url: 'http://api.apidash.dev',
|
||||
method: 'head'
|
||||
};
|
||||
|
||||
@ -374,7 +412,10 @@ axios(config)
|
||||
console.log(error);
|
||||
});
|
||||
""";
|
||||
expect(axiosCodeGen.getCode(requestModelHead2, "http"), expectedCode);
|
||||
expect(
|
||||
codeGen.getCode(
|
||||
CodegenLanguage.nodejsAxios, requestModelHead2, "http"),
|
||||
expectedCode);
|
||||
});
|
||||
});
|
||||
|
||||
@ -383,7 +424,7 @@ axios(config)
|
||||
const expectedCode = r"""import axios from 'axios';
|
||||
|
||||
let config = {
|
||||
url: 'https://api.foss42.com/case/lower',
|
||||
url: 'https://api.apidash.dev/case/lower',
|
||||
method: 'post',
|
||||
headers: {
|
||||
"Content-Type": "text/plain"
|
||||
@ -403,19 +444,22 @@ axios(config)
|
||||
console.log(error);
|
||||
});
|
||||
""";
|
||||
expect(axiosCodeGen.getCode(requestModelPost1, "https"), expectedCode);
|
||||
expect(
|
||||
codeGen.getCode(
|
||||
CodegenLanguage.nodejsAxios, requestModelPost1, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('POST 2', () {
|
||||
const expectedCode = r"""import axios from 'axios';
|
||||
|
||||
let config = {
|
||||
url: 'https://api.foss42.com/case/lower',
|
||||
url: 'https://api.apidash.dev/case/lower',
|
||||
method: 'post',
|
||||
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,14 +474,17 @@ axios(config)
|
||||
console.log(error);
|
||||
});
|
||||
""";
|
||||
expect(axiosCodeGen.getCode(requestModelPost2, "https"), expectedCode);
|
||||
expect(
|
||||
codeGen.getCode(
|
||||
CodegenLanguage.nodejsAxios, requestModelPost2, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('POST 3', () {
|
||||
const expectedCode = r"""import axios from 'axios';
|
||||
|
||||
let config = {
|
||||
url: 'https://api.foss42.com/case/lower',
|
||||
url: 'https://api.apidash.dev/case/lower',
|
||||
method: 'post',
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
@ -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);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
@ -1,15 +1,16 @@
|
||||
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', () {
|
||||
const expectedCode = r"""import fetch from 'node-fetch';
|
||||
|
||||
let url = 'https://api.foss42.com';
|
||||
let url = 'https://api.apidash.dev';
|
||||
|
||||
let options = {
|
||||
method: 'GET'
|
||||
@ -30,13 +31,16 @@ fetch(url, options)
|
||||
console.error('error:' + err);
|
||||
});
|
||||
""";
|
||||
expect(fetchCodeGen.getCode(requestModelGet1, "https"), expectedCode);
|
||||
expect(
|
||||
codeGen.getCode(
|
||||
CodegenLanguage.nodejsFetch, requestModelGet1, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('GET 2', () {
|
||||
const expectedCode = r"""import fetch from 'node-fetch';
|
||||
|
||||
let url = 'https://api.foss42.com/country/data?code=US';
|
||||
let url = 'https://api.apidash.dev/country/data?code=US';
|
||||
|
||||
let options = {
|
||||
method: 'GET'
|
||||
@ -57,13 +61,16 @@ fetch(url, options)
|
||||
console.error('error:' + err);
|
||||
});
|
||||
""";
|
||||
expect(fetchCodeGen.getCode(requestModelGet2, "https"), expectedCode);
|
||||
expect(
|
||||
codeGen.getCode(
|
||||
CodegenLanguage.nodejsFetch, requestModelGet2, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('GET 3', () {
|
||||
const expectedCode = r"""import fetch from 'node-fetch';
|
||||
|
||||
let url = 'https://api.foss42.com/country/data?code=IND';
|
||||
let url = 'https://api.apidash.dev/country/data?code=IND';
|
||||
|
||||
let options = {
|
||||
method: 'GET'
|
||||
@ -84,13 +91,16 @@ fetch(url, options)
|
||||
console.error('error:' + err);
|
||||
});
|
||||
""";
|
||||
expect(fetchCodeGen.getCode(requestModelGet3, "https"), expectedCode);
|
||||
expect(
|
||||
codeGen.getCode(
|
||||
CodegenLanguage.nodejsFetch, requestModelGet3, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('GET 4', () {
|
||||
const expectedCode = r"""import fetch from 'node-fetch';
|
||||
|
||||
let url = 'https://api.foss42.com/humanize/social?num=8700000&digits=3&system=SS&add_space=true&trailing_zeros=true';
|
||||
let url = 'https://api.apidash.dev/humanize/social?num=8700000&digits=3&system=SS&add_space=true&trailing_zeros=true';
|
||||
|
||||
let options = {
|
||||
method: 'GET'
|
||||
@ -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,13 +187,16 @@ fetch(url, options)
|
||||
console.error('error:' + err);
|
||||
});
|
||||
""";
|
||||
expect(fetchCodeGen.getCode(requestModelGet6, "https"), expectedCode);
|
||||
expect(
|
||||
codeGen.getCode(
|
||||
CodegenLanguage.nodejsFetch, requestModelGet6, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('GET 7', () {
|
||||
const expectedCode = r"""import fetch from 'node-fetch';
|
||||
|
||||
let url = 'https://api.foss42.com';
|
||||
let url = 'https://api.apidash.dev';
|
||||
|
||||
let options = {
|
||||
method: 'GET'
|
||||
@ -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,13 +250,16 @@ fetch(url, options)
|
||||
console.error('error:' + err);
|
||||
});
|
||||
""";
|
||||
expect(fetchCodeGen.getCode(requestModelGet8, "https"), expectedCode);
|
||||
expect(
|
||||
codeGen.getCode(
|
||||
CodegenLanguage.nodejsFetch, requestModelGet8, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('GET 9', () {
|
||||
const expectedCode = r"""import fetch from 'node-fetch';
|
||||
|
||||
let url = 'https://api.foss42.com/humanize/social?num=8700000&add_space=true';
|
||||
let url = 'https://api.apidash.dev/humanize/social?num=8700000&add_space=true';
|
||||
|
||||
let options = {
|
||||
method: 'GET'
|
||||
@ -255,13 +280,16 @@ fetch(url, options)
|
||||
console.error('error:' + err);
|
||||
});
|
||||
""";
|
||||
expect(fetchCodeGen.getCode(requestModelGet9, "https"), expectedCode);
|
||||
expect(
|
||||
codeGen.getCode(
|
||||
CodegenLanguage.nodejsFetch, requestModelGet9, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('GET 10', () {
|
||||
const expectedCode = r"""import fetch from 'node-fetch';
|
||||
|
||||
let url = 'https://api.foss42.com/humanize/social';
|
||||
let url = 'https://api.apidash.dev/humanize/social';
|
||||
|
||||
let options = {
|
||||
method: 'GET',
|
||||
@ -286,7 +314,8 @@ fetch(url, options)
|
||||
});
|
||||
""";
|
||||
expect(
|
||||
fetchCodeGen.getCode(
|
||||
codeGen.getCode(
|
||||
CodegenLanguage.nodejsFetch,
|
||||
requestModelGet10,
|
||||
"https",
|
||||
),
|
||||
@ -296,7 +325,7 @@ fetch(url, options)
|
||||
test('GET 11', () {
|
||||
const expectedCode = r"""import fetch from 'node-fetch';
|
||||
|
||||
let url = 'https://api.foss42.com/humanize/social?num=8700000&digits=3';
|
||||
let url = 'https://api.apidash.dev/humanize/social?num=8700000&digits=3';
|
||||
|
||||
let options = {
|
||||
method: 'GET',
|
||||
@ -320,13 +349,16 @@ fetch(url, options)
|
||||
console.error('error:' + err);
|
||||
});
|
||||
""";
|
||||
expect(fetchCodeGen.getCode(requestModelGet11, "https"), expectedCode);
|
||||
expect(
|
||||
codeGen.getCode(
|
||||
CodegenLanguage.nodejsFetch, requestModelGet11, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('GET 12', () {
|
||||
const expectedCode = r"""import fetch from 'node-fetch';
|
||||
|
||||
let url = 'https://api.foss42.com/humanize/social';
|
||||
let url = 'https://api.apidash.dev/humanize/social';
|
||||
|
||||
let options = {
|
||||
method: 'GET'
|
||||
@ -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);
|
||||
});
|
||||
});
|
||||
|
||||
@ -355,7 +390,7 @@ fetch(url, options)
|
||||
test('HEAD 1', () {
|
||||
const expectedCode = r"""import fetch from 'node-fetch';
|
||||
|
||||
let url = 'https://api.foss42.com';
|
||||
let url = 'https://api.apidash.dev';
|
||||
|
||||
let options = {
|
||||
method: 'HEAD'
|
||||
@ -376,13 +411,16 @@ fetch(url, options)
|
||||
console.error('error:' + err);
|
||||
});
|
||||
""";
|
||||
expect(fetchCodeGen.getCode(requestModelHead1, "https"), expectedCode);
|
||||
expect(
|
||||
codeGen.getCode(
|
||||
CodegenLanguage.nodejsFetch, requestModelHead1, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('HEAD 2', () {
|
||||
const expectedCode = r"""import fetch from 'node-fetch';
|
||||
|
||||
let url = 'http://api.foss42.com';
|
||||
let url = 'http://api.apidash.dev';
|
||||
|
||||
let options = {
|
||||
method: 'HEAD'
|
||||
@ -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);
|
||||
});
|
||||
});
|
||||
|
||||
@ -411,7 +452,7 @@ fetch(url, options)
|
||||
test('POST 1', () {
|
||||
const expectedCode = r"""import fetch from 'node-fetch';
|
||||
|
||||
let url = 'https://api.foss42.com/case/lower';
|
||||
let url = 'https://api.apidash.dev/case/lower';
|
||||
|
||||
let options = {
|
||||
method: 'POST',
|
||||
@ -437,13 +478,16 @@ fetch(url, options)
|
||||
console.error('error:' + err);
|
||||
});
|
||||
""";
|
||||
expect(fetchCodeGen.getCode(requestModelPost1, "https"), expectedCode);
|
||||
expect(
|
||||
codeGen.getCode(
|
||||
CodegenLanguage.nodejsFetch, requestModelPost1, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('POST 2', () {
|
||||
const expectedCode = r"""import fetch from 'node-fetch';
|
||||
|
||||
let url = 'https://api.foss42.com/case/lower';
|
||||
let url = 'https://api.apidash.dev/case/lower';
|
||||
|
||||
let options = {
|
||||
method: 'POST',
|
||||
@ -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,13 +513,16 @@ fetch(url, options)
|
||||
console.error('error:' + err);
|
||||
});
|
||||
""";
|
||||
expect(fetchCodeGen.getCode(requestModelPost2, "https"), expectedCode);
|
||||
expect(
|
||||
codeGen.getCode(
|
||||
CodegenLanguage.nodejsFetch, requestModelPost2, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('POST 3', () {
|
||||
const expectedCode = r"""import fetch from 'node-fetch';
|
||||
|
||||
let url = 'https://api.foss42.com/case/lower';
|
||||
let url = 'https://api.apidash.dev/case/lower';
|
||||
|
||||
let options = {
|
||||
method: 'POST',
|
||||
@ -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);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
@ -1,15 +1,16 @@
|
||||
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', () {
|
||||
const expectedCode = r"""import http.client
|
||||
|
||||
conn = http.client.HTTPSConnection("api.foss42.com")
|
||||
conn = http.client.HTTPSConnection("api.apidash.dev")
|
||||
conn.request("GET", "")
|
||||
|
||||
res = conn.getresponse()
|
||||
@ -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);
|
||||
});
|
||||
|
||||
@ -30,7 +33,7 @@ queryParams = {
|
||||
}
|
||||
queryParamsStr = '?' + urlencode(queryParams)
|
||||
|
||||
conn = http.client.HTTPSConnection("api.foss42.com")
|
||||
conn = http.client.HTTPSConnection("api.apidash.dev")
|
||||
conn.request("GET", "/country/data" + queryParamsStr)
|
||||
|
||||
res = conn.getresponse()
|
||||
@ -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);
|
||||
});
|
||||
|
||||
@ -51,7 +56,7 @@ queryParams = {
|
||||
}
|
||||
queryParamsStr = '?' + urlencode(queryParams)
|
||||
|
||||
conn = http.client.HTTPSConnection("api.foss42.com")
|
||||
conn = http.client.HTTPSConnection("api.apidash.dev")
|
||||
conn.request("GET", "/country/data" + queryParamsStr)
|
||||
|
||||
res = conn.getresponse()
|
||||
@ -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);
|
||||
});
|
||||
|
||||
@ -76,7 +83,7 @@ queryParams = {
|
||||
}
|
||||
queryParamsStr = '?' + urlencode(queryParams)
|
||||
|
||||
conn = http.client.HTTPSConnection("api.foss42.com")
|
||||
conn = http.client.HTTPSConnection("api.apidash.dev")
|
||||
conn.request("GET", "/humanize/social" + queryParamsStr)
|
||||
|
||||
res = conn.getresponse()
|
||||
@ -84,7 +91,9 @@ data = res.read()
|
||||
|
||||
print(data.decode("utf-8"))
|
||||
""";
|
||||
expect(pythonHttpClientCodeGen.getCode(requestModelGet4, "https"),
|
||||
expect(
|
||||
codeGen.getCode(
|
||||
CodegenLanguage.pythonHttpClient, requestModelGet4, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
@ -104,7 +113,9 @@ data = res.read()
|
||||
|
||||
print(data.decode("utf-8"))
|
||||
""";
|
||||
expect(pythonHttpClientCodeGen.getCode(requestModelGet5, "https"),
|
||||
expect(
|
||||
codeGen.getCode(
|
||||
CodegenLanguage.pythonHttpClient, requestModelGet5, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
@ -130,14 +141,16 @@ data = res.read()
|
||||
|
||||
print(data.decode("utf-8"))
|
||||
""";
|
||||
expect(pythonHttpClientCodeGen.getCode(requestModelGet6, "https"),
|
||||
expect(
|
||||
codeGen.getCode(
|
||||
CodegenLanguage.pythonHttpClient, requestModelGet6, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('GET 7', () {
|
||||
const expectedCode = r"""import http.client
|
||||
|
||||
conn = http.client.HTTPSConnection("api.foss42.com")
|
||||
conn = http.client.HTTPSConnection("api.apidash.dev")
|
||||
conn.request("GET", "")
|
||||
|
||||
res = conn.getresponse()
|
||||
@ -145,7 +158,9 @@ data = res.read()
|
||||
|
||||
print(data.decode("utf-8"))
|
||||
""";
|
||||
expect(pythonHttpClientCodeGen.getCode(requestModelGet7, "https"),
|
||||
expect(
|
||||
codeGen.getCode(
|
||||
CodegenLanguage.pythonHttpClient, requestModelGet7, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
@ -171,7 +186,9 @@ data = res.read()
|
||||
|
||||
print(data.decode("utf-8"))
|
||||
""";
|
||||
expect(pythonHttpClientCodeGen.getCode(requestModelGet8, "https"),
|
||||
expect(
|
||||
codeGen.getCode(
|
||||
CodegenLanguage.pythonHttpClient, requestModelGet8, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
@ -185,7 +202,7 @@ queryParams = {
|
||||
}
|
||||
queryParamsStr = '?' + urlencode(queryParams)
|
||||
|
||||
conn = http.client.HTTPSConnection("api.foss42.com")
|
||||
conn = http.client.HTTPSConnection("api.apidash.dev")
|
||||
conn.request("GET", "/humanize/social" + queryParamsStr)
|
||||
|
||||
res = conn.getresponse()
|
||||
@ -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);
|
||||
});
|
||||
|
||||
@ -204,7 +223,7 @@ headers = {
|
||||
"User-Agent": "Test Agent"
|
||||
}
|
||||
|
||||
conn = http.client.HTTPSConnection("api.foss42.com")
|
||||
conn = http.client.HTTPSConnection("api.apidash.dev")
|
||||
conn.request("GET", "/humanize/social",
|
||||
headers= headers)
|
||||
|
||||
@ -214,7 +233,8 @@ data = res.read()
|
||||
print(data.decode("utf-8"))
|
||||
""";
|
||||
expect(
|
||||
pythonHttpClientCodeGen.getCode(
|
||||
codeGen.getCode(
|
||||
CodegenLanguage.pythonHttpClient,
|
||||
requestModelGet10,
|
||||
"https",
|
||||
),
|
||||
@ -235,7 +255,7 @@ headers = {
|
||||
"User-Agent": "Test Agent"
|
||||
}
|
||||
|
||||
conn = http.client.HTTPSConnection("api.foss42.com")
|
||||
conn = http.client.HTTPSConnection("api.apidash.dev")
|
||||
conn.request("GET", "/humanize/social" + queryParamsStr,
|
||||
headers= headers)
|
||||
|
||||
@ -244,14 +264,16 @@ data = res.read()
|
||||
|
||||
print(data.decode("utf-8"))
|
||||
""";
|
||||
expect(pythonHttpClientCodeGen.getCode(requestModelGet11, "https"),
|
||||
expect(
|
||||
codeGen.getCode(
|
||||
CodegenLanguage.pythonHttpClient, requestModelGet11, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('GET 12', () {
|
||||
const expectedCode = r"""import http.client
|
||||
|
||||
conn = http.client.HTTPSConnection("api.foss42.com")
|
||||
conn = http.client.HTTPSConnection("api.apidash.dev")
|
||||
conn.request("GET", "/humanize/social")
|
||||
|
||||
res = conn.getresponse()
|
||||
@ -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);
|
||||
});
|
||||
});
|
||||
@ -268,7 +292,7 @@ print(data.decode("utf-8"))
|
||||
test('HEAD 1', () {
|
||||
const expectedCode = r"""import http.client
|
||||
|
||||
conn = http.client.HTTPSConnection("api.foss42.com")
|
||||
conn = http.client.HTTPSConnection("api.apidash.dev")
|
||||
conn.request("HEAD", "")
|
||||
|
||||
res = conn.getresponse()
|
||||
@ -276,14 +300,16 @@ data = res.read()
|
||||
|
||||
print(data.decode("utf-8"))
|
||||
""";
|
||||
expect(pythonHttpClientCodeGen.getCode(requestModelHead1, "https"),
|
||||
expect(
|
||||
codeGen.getCode(
|
||||
CodegenLanguage.pythonHttpClient, requestModelHead1, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('HEAD 2', () {
|
||||
const expectedCode = r"""import http.client
|
||||
|
||||
conn = http.client.HTTPConnection("api.foss42.com")
|
||||
conn = http.client.HTTPConnection("api.apidash.dev")
|
||||
conn.request("HEAD", "")
|
||||
|
||||
res = conn.getresponse()
|
||||
@ -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);
|
||||
});
|
||||
});
|
||||
@ -308,7 +336,7 @@ headers = {
|
||||
"content-type": "text/plain"
|
||||
}
|
||||
|
||||
conn = http.client.HTTPSConnection("api.foss42.com")
|
||||
conn = http.client.HTTPSConnection("api.apidash.dev")
|
||||
conn.request("POST", "/case/lower",
|
||||
body= body,
|
||||
headers= headers)
|
||||
@ -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,14 +356,19 @@ 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"
|
||||
}
|
||||
|
||||
conn = http.client.HTTPSConnection("api.foss42.com")
|
||||
conn = http.client.HTTPSConnection("api.apidash.dev")
|
||||
conn.request("POST", "/case/lower",
|
||||
body= body,
|
||||
headers= headers)
|
||||
@ -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);
|
||||
});
|
||||
|
||||
@ -359,7 +396,7 @@ headers = {
|
||||
"content-type": "application/json"
|
||||
}
|
||||
|
||||
conn = http.client.HTTPSConnection("api.foss42.com")
|
||||
conn = http.client.HTTPSConnection("api.apidash.dev")
|
||||
conn.request("POST", "/case/lower",
|
||||
body= body,
|
||||
headers= headers)
|
||||
@ -369,7 +406,9 @@ data = res.read()
|
||||
|
||||
print(data.decode("utf-8"))
|
||||
""";
|
||||
expect(pythonHttpClientCodeGen.getCode(requestModelPost3, "https"),
|
||||
expect(
|
||||
codeGen.getCode(
|
||||
CodegenLanguage.pythonHttpClient, requestModelPost3, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
});
|
||||
@ -397,7 +436,9 @@ data = res.read()
|
||||
|
||||
print(data.decode("utf-8"))
|
||||
""";
|
||||
expect(pythonHttpClientCodeGen.getCode(requestModelPut1, "https"),
|
||||
expect(
|
||||
codeGen.getCode(
|
||||
CodegenLanguage.pythonHttpClient, requestModelPut1, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
});
|
||||
@ -425,7 +466,9 @@ data = res.read()
|
||||
|
||||
print(data.decode("utf-8"))
|
||||
""";
|
||||
expect(pythonHttpClientCodeGen.getCode(requestModelPatch1, "https"),
|
||||
expect(
|
||||
codeGen.getCode(
|
||||
CodegenLanguage.pythonHttpClient, requestModelPatch1, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
});
|
||||
@ -442,7 +485,9 @@ data = res.read()
|
||||
|
||||
print(data.decode("utf-8"))
|
||||
""";
|
||||
expect(pythonHttpClientCodeGen.getCode(requestModelDelete1, "https"),
|
||||
expect(
|
||||
codeGen.getCode(
|
||||
CodegenLanguage.pythonHttpClient, requestModelDelete1, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
@ -468,7 +513,9 @@ data = res.read()
|
||||
|
||||
print(data.decode("utf-8"))
|
||||
""";
|
||||
expect(pythonHttpClientCodeGen.getCode(requestModelDelete2, "https"),
|
||||
expect(
|
||||
codeGen.getCode(
|
||||
CodegenLanguage.pythonHttpClient, requestModelDelete2, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
});
|
||||
|
@ -1,80 +1,89 @@
|
||||
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', () {
|
||||
const expectedCode = r"""import requests
|
||||
|
||||
url = 'https://api.foss42.com'
|
||||
url = 'https://api.apidash.dev'
|
||||
|
||||
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);
|
||||
});
|
||||
|
||||
test('GET 2', () {
|
||||
const expectedCode = r"""import requests
|
||||
|
||||
url = 'https://api.foss42.com/country/data'
|
||||
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);
|
||||
});
|
||||
|
||||
test('GET 3', () {
|
||||
const expectedCode = r"""import requests
|
||||
|
||||
url = 'https://api.foss42.com/country/data'
|
||||
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);
|
||||
});
|
||||
|
||||
test('GET 4', () {
|
||||
const expectedCode = r"""import requests
|
||||
|
||||
url = 'https://api.foss42.com/humanize/social'
|
||||
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,33 +113,37 @@ 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);
|
||||
});
|
||||
|
||||
test('GET 7', () {
|
||||
const expectedCode = r"""import requests
|
||||
|
||||
url = 'https://api.foss42.com'
|
||||
url = 'https://api.apidash.dev'
|
||||
|
||||
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,49 +153,53 @@ 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);
|
||||
});
|
||||
|
||||
test('GET 9', () {
|
||||
const expectedCode = r"""import requests
|
||||
|
||||
url = 'https://api.foss42.com/humanize/social'
|
||||
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);
|
||||
});
|
||||
|
||||
test('GET 10', () {
|
||||
const expectedCode = r"""import requests
|
||||
|
||||
url = 'https://api.foss42.com/humanize/social'
|
||||
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",
|
||||
),
|
||||
@ -198,37 +218,41 @@ print('Response Body:', response.text)
|
||||
test('GET 11', () {
|
||||
const expectedCode = r"""import requests
|
||||
|
||||
url = 'https://api.foss42.com/humanize/social'
|
||||
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);
|
||||
});
|
||||
|
||||
test('GET 12', () {
|
||||
const expectedCode = r"""import requests
|
||||
|
||||
url = 'https://api.foss42.com/humanize/social'
|
||||
url = 'https://api.apidash.dev/humanize/social'
|
||||
|
||||
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);
|
||||
});
|
||||
});
|
||||
@ -237,28 +261,32 @@ print('Response Body:', response.text)
|
||||
test('HEAD 1', () {
|
||||
const expectedCode = r"""import requests
|
||||
|
||||
url = 'https://api.foss42.com'
|
||||
url = 'https://api.apidash.dev'
|
||||
|
||||
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);
|
||||
});
|
||||
|
||||
test('HEAD 2', () {
|
||||
const expectedCode = r"""import requests
|
||||
|
||||
url = 'http://api.foss42.com'
|
||||
url = 'http://api.apidash.dev'
|
||||
|
||||
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);
|
||||
});
|
||||
});
|
||||
@ -267,32 +295,39 @@ print('Response Body:', response.text)
|
||||
test('POST 1', () {
|
||||
const expectedCode = r"""import requests
|
||||
|
||||
url = 'https://api.foss42.com/case/lower'
|
||||
url = 'https://api.apidash.dev/case/lower'
|
||||
|
||||
payload = r'''{
|
||||
"text": "I LOVE Flutter"
|
||||
}'''
|
||||
|
||||
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);
|
||||
});
|
||||
|
||||
test('POST 2', () {
|
||||
const expectedCode = r"""import requests
|
||||
|
||||
url = 'https://api.foss42.com/case/lower'
|
||||
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,29 +335,205 @@ 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);
|
||||
});
|
||||
|
||||
test('POST 3', () {
|
||||
const expectedCode = r"""import requests
|
||||
|
||||
url = 'https://api.foss42.com/case/lower'
|
||||
url = 'https://api.apidash.dev/case/lower'
|
||||
|
||||
payload = {
|
||||
"text": "I LOVE Flutter"
|
||||
}
|
||||
|
||||
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);
|
||||
});
|
||||
});
|
||||
|
@ -1,16 +1,17 @@
|
||||
import 'package:apidash/codegen/rust/reqwest.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 rustReqwestCodeGen = RustReqwestCodeGen();
|
||||
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.foss42.com";
|
||||
let url = "https://api.apidash.dev";
|
||||
|
||||
let response = client
|
||||
.get(url)
|
||||
@ -23,14 +24,16 @@ void main() {
|
||||
}
|
||||
""";
|
||||
expect(
|
||||
rustReqwestCodeGen.getCode(requestModelGet1, "https"), expectedCode);
|
||||
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.foss42.com/country/data";
|
||||
let url = "https://api.apidash.dev/country/data";
|
||||
|
||||
let response = client
|
||||
.get(url)
|
||||
@ -44,14 +47,16 @@ void main() {
|
||||
}
|
||||
""";
|
||||
expect(
|
||||
rustReqwestCodeGen.getCode(requestModelGet2, "https"), expectedCode);
|
||||
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.foss42.com/country/data";
|
||||
let url = "https://api.apidash.dev/country/data";
|
||||
|
||||
let response = client
|
||||
.get(url)
|
||||
@ -65,14 +70,16 @@ void main() {
|
||||
}
|
||||
""";
|
||||
expect(
|
||||
rustReqwestCodeGen.getCode(requestModelGet3, "https"), expectedCode);
|
||||
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.foss42.com/humanize/social";
|
||||
let url = "https://api.apidash.dev/humanize/social";
|
||||
|
||||
let response = client
|
||||
.get(url)
|
||||
@ -86,7 +93,9 @@ void main() {
|
||||
}
|
||||
""";
|
||||
expect(
|
||||
rustReqwestCodeGen.getCode(requestModelGet4, "https"), expectedCode);
|
||||
codeGen.getCode(
|
||||
CodegenLanguage.rustReqwest, requestModelGet4, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('GET 5', () {
|
||||
@ -107,7 +116,9 @@ void main() {
|
||||
}
|
||||
""";
|
||||
expect(
|
||||
rustReqwestCodeGen.getCode(requestModelGet5, "https"), expectedCode);
|
||||
codeGen.getCode(
|
||||
CodegenLanguage.rustReqwest, requestModelGet5, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('GET 6', () {
|
||||
@ -129,14 +140,16 @@ void main() {
|
||||
}
|
||||
""";
|
||||
expect(
|
||||
rustReqwestCodeGen.getCode(requestModelGet6, "https"), expectedCode);
|
||||
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.foss42.com";
|
||||
let url = "https://api.apidash.dev";
|
||||
|
||||
let response = client
|
||||
.get(url)
|
||||
@ -149,7 +162,9 @@ void main() {
|
||||
}
|
||||
""";
|
||||
expect(
|
||||
rustReqwestCodeGen.getCode(requestModelGet7, "https"), expectedCode);
|
||||
codeGen.getCode(
|
||||
CodegenLanguage.rustReqwest, requestModelGet7, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('GET 8', () {
|
||||
@ -171,14 +186,16 @@ void main() {
|
||||
}
|
||||
""";
|
||||
expect(
|
||||
rustReqwestCodeGen.getCode(requestModelGet8, "https"), expectedCode);
|
||||
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.foss42.com/humanize/social";
|
||||
let url = "https://api.apidash.dev/humanize/social";
|
||||
|
||||
let response = client
|
||||
.get(url)
|
||||
@ -192,14 +209,16 @@ void main() {
|
||||
}
|
||||
""";
|
||||
expect(
|
||||
rustReqwestCodeGen.getCode(requestModelGet9, "https"), expectedCode);
|
||||
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.foss42.com/humanize/social";
|
||||
let url = "https://api.apidash.dev/humanize/social";
|
||||
|
||||
let response = client
|
||||
.get(url)
|
||||
@ -213,7 +232,8 @@ void main() {
|
||||
}
|
||||
""";
|
||||
expect(
|
||||
rustReqwestCodeGen.getCode(
|
||||
codeGen.getCode(
|
||||
CodegenLanguage.rustReqwest,
|
||||
requestModelGet10,
|
||||
"https",
|
||||
),
|
||||
@ -224,7 +244,7 @@ void main() {
|
||||
const expectedCode =
|
||||
r"""fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||
let client = reqwest::blocking::Client::new();
|
||||
let url = "https://api.foss42.com/humanize/social";
|
||||
let url = "https://api.apidash.dev/humanize/social";
|
||||
|
||||
let response = client
|
||||
.get(url)
|
||||
@ -239,14 +259,16 @@ void main() {
|
||||
}
|
||||
""";
|
||||
expect(
|
||||
rustReqwestCodeGen.getCode(requestModelGet11, "https"), expectedCode);
|
||||
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.foss42.com/humanize/social";
|
||||
let url = "https://api.apidash.dev/humanize/social";
|
||||
|
||||
let response = client
|
||||
.get(url)
|
||||
@ -259,7 +281,9 @@ void main() {
|
||||
}
|
||||
""";
|
||||
expect(
|
||||
rustReqwestCodeGen.getCode(requestModelGet12, "https"), expectedCode);
|
||||
codeGen.getCode(
|
||||
CodegenLanguage.rustReqwest, requestModelGet12, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
});
|
||||
|
||||
@ -268,7 +292,7 @@ void main() {
|
||||
const expectedCode =
|
||||
r"""fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||
let client = reqwest::blocking::Client::new();
|
||||
let url = "https://api.foss42.com";
|
||||
let url = "https://api.apidash.dev";
|
||||
|
||||
let response = client
|
||||
.head(url)
|
||||
@ -281,14 +305,16 @@ void main() {
|
||||
}
|
||||
""";
|
||||
expect(
|
||||
rustReqwestCodeGen.getCode(requestModelHead1, "https"), expectedCode);
|
||||
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.foss42.com";
|
||||
let url = "http://api.apidash.dev";
|
||||
|
||||
let response = client
|
||||
.head(url)
|
||||
@ -301,7 +327,9 @@ void main() {
|
||||
}
|
||||
""";
|
||||
expect(
|
||||
rustReqwestCodeGen.getCode(requestModelHead2, "http"), expectedCode);
|
||||
codeGen.getCode(
|
||||
CodegenLanguage.rustReqwest, requestModelHead2, "http"),
|
||||
expectedCode);
|
||||
});
|
||||
});
|
||||
|
||||
@ -310,7 +338,7 @@ void main() {
|
||||
const expectedCode =
|
||||
r"""fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||
let client = reqwest::blocking::Client::new();
|
||||
let url = "https://api.foss42.com/case/lower";
|
||||
let url = "https://api.apidash.dev/case/lower";
|
||||
|
||||
let payload = r#"{
|
||||
"text": "I LOVE Flutter"
|
||||
@ -329,17 +357,24 @@ void main() {
|
||||
}
|
||||
""";
|
||||
expect(
|
||||
rustReqwestCodeGen.getCode(requestModelPost1, "https"), expectedCode);
|
||||
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.foss42.com/case/lower";
|
||||
let url = "https://api.apidash.dev/case/lower";
|
||||
|
||||
let payload = serde_json::json!({
|
||||
"text": "I LOVE Flutter"
|
||||
"text": "I LOVE Flutter",
|
||||
"flag": null,
|
||||
"male": true,
|
||||
"female": false,
|
||||
"no": 1.2,
|
||||
"arr": ["null", "true", "false", null]
|
||||
});
|
||||
|
||||
let response = client
|
||||
@ -354,14 +389,16 @@ void main() {
|
||||
}
|
||||
""";
|
||||
expect(
|
||||
rustReqwestCodeGen.getCode(requestModelPost2, "https"), expectedCode);
|
||||
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.foss42.com/case/lower";
|
||||
let url = "https://api.apidash.dev/case/lower";
|
||||
|
||||
let payload = serde_json::json!({
|
||||
"text": "I LOVE Flutter"
|
||||
@ -380,7 +417,9 @@ void main() {
|
||||
}
|
||||
""";
|
||||
expect(
|
||||
rustReqwestCodeGen.getCode(requestModelPost3, "https"), expectedCode);
|
||||
codeGen.getCode(
|
||||
CodegenLanguage.rustReqwest, requestModelPost3, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
});
|
||||
|
||||
@ -408,7 +447,9 @@ void main() {
|
||||
}
|
||||
""";
|
||||
expect(
|
||||
rustReqwestCodeGen.getCode(requestModelPut1, "https"), expectedCode);
|
||||
codeGen.getCode(
|
||||
CodegenLanguage.rustReqwest, requestModelPut1, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
});
|
||||
|
||||
@ -435,7 +476,9 @@ void main() {
|
||||
Ok(())
|
||||
}
|
||||
""";
|
||||
expect(rustReqwestCodeGen.getCode(requestModelPatch1, "https"),
|
||||
expect(
|
||||
codeGen.getCode(
|
||||
CodegenLanguage.rustReqwest, requestModelPatch1, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
});
|
||||
@ -457,7 +500,9 @@ void main() {
|
||||
Ok(())
|
||||
}
|
||||
""";
|
||||
expect(rustReqwestCodeGen.getCode(requestModelDelete1, "https"),
|
||||
expect(
|
||||
codeGen.getCode(
|
||||
CodegenLanguage.rustReqwest, requestModelDelete1, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
@ -483,7 +528,9 @@ void main() {
|
||||
Ok(())
|
||||
}
|
||||
""";
|
||||
expect(rustReqwestCodeGen.getCode(requestModelDelete2, "https"),
|
||||
expect(
|
||||
codeGen.getCode(
|
||||
CodegenLanguage.rustReqwest, requestModelDelete2, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
});
|
||||
|
@ -52,7 +52,7 @@ void main() {
|
||||
RequestModel requestModel = RequestModel(
|
||||
id: '1',
|
||||
method: HTTPVerb.post,
|
||||
url: 'api.foss42.com/case/lower',
|
||||
url: 'api.apidash.dev/case/lower',
|
||||
name: 'foss42 api',
|
||||
requestHeaders: const [
|
||||
NameValueModel(name: 'content-length', value: '18'),
|
||||
@ -69,7 +69,7 @@ void main() {
|
||||
RequestModel requestModelDup = const RequestModel(
|
||||
id: '1',
|
||||
method: HTTPVerb.post,
|
||||
url: 'api.foss42.com/case/lower',
|
||||
url: 'api.apidash.dev/case/lower',
|
||||
name: 'foss42 api',
|
||||
requestHeaders: [
|
||||
NameValueModel(name: 'content-length', value: '18'),
|
||||
@ -84,7 +84,7 @@ void main() {
|
||||
RequestModel requestModelCopy = const RequestModel(
|
||||
id: '1',
|
||||
method: HTTPVerb.post,
|
||||
url: 'api.foss42.com/case/lower',
|
||||
url: 'api.apidash.dev/case/lower',
|
||||
name: 'foss42 api (copy)',
|
||||
requestHeaders: [
|
||||
NameValueModel(name: 'content-length', value: '18'),
|
||||
@ -99,7 +99,7 @@ void main() {
|
||||
Map<String, dynamic> requestModelAsJson = {
|
||||
"id": '1',
|
||||
"method": 'post',
|
||||
"url": 'api.foss42.com/case/lower',
|
||||
"url": 'api.apidash.dev/case/lower',
|
||||
"name": 'foss42 api',
|
||||
'description': '',
|
||||
"requestHeaders": {
|
||||
@ -138,7 +138,7 @@ void main() {
|
||||
final requestModeDupString = [
|
||||
"Request Id: 1",
|
||||
"Request Method: post",
|
||||
"Request URL: api.foss42.com/case/lower",
|
||||
"Request URL: api.apidash.dev/case/lower",
|
||||
"Request Name: foss42 api",
|
||||
"Request Description: ",
|
||||
"Request Tab Index: 0",
|
||||
@ -175,7 +175,7 @@ void main() {
|
||||
});
|
||||
expect(requestModel.paramsMap, {});
|
||||
expect(requestModel.formDataMapList, []);
|
||||
expect(requestModel.isFormDataRequest, false);
|
||||
expect(requestModel.hasFormData, false);
|
||||
expect(requestModel.hasContentTypeHeader, true);
|
||||
});
|
||||
|
||||
|
@ -81,19 +81,19 @@ void main() {
|
||||
|
||||
test('Testing fromResponse', () async {
|
||||
final response = await http.get(
|
||||
Uri.parse('https://api.foss42.com/'),
|
||||
Uri.parse('https://api.apidash.dev/'),
|
||||
);
|
||||
final responseData = responseModel.fromResponse(response: response);
|
||||
expect(responseData.statusCode, 200);
|
||||
expect(responseData.body,
|
||||
'{"message":"Check out https://foss42.com for API docs to get started."}');
|
||||
'{"data":"Check out https://api.apidash.dev/docs to get started."}');
|
||||
expect(responseData.formattedBody, '''{
|
||||
"message": "Check out https://foss42.com for API docs to get started."
|
||||
"data": "Check out https://api.apidash.dev/docs to get started."
|
||||
}''');
|
||||
});
|
||||
test('Testing fromResponse for contentType not Json', () async {
|
||||
final response = await http.get(
|
||||
Uri.parse('https://foss42.com/'),
|
||||
Uri.parse('https://apidash.dev/'),
|
||||
);
|
||||
final responseData = responseModel.fromResponse(response: response);
|
||||
expect(responseData.statusCode, 200);
|
||||
|
@ -1,17 +1,18 @@
|
||||
import 'package:apidash/models/models.dart' show NameValueModel, RequestModel;
|
||||
import 'package:apidash/models/models.dart'
|
||||
show FormDataModel, NameValueModel, RequestModel;
|
||||
import 'package:apidash/consts.dart';
|
||||
|
||||
/// Basic GET request model
|
||||
const requestModelGet1 = RequestModel(
|
||||
id: 'get1',
|
||||
url: 'https://api.foss42.com',
|
||||
url: 'https://api.apidash.dev',
|
||||
method: HTTPVerb.get,
|
||||
);
|
||||
|
||||
/// GET request model with query params
|
||||
const requestModelGet2 = RequestModel(
|
||||
id: 'get2',
|
||||
url: 'https://api.foss42.com/country/data',
|
||||
url: 'https://api.apidash.dev/country/data',
|
||||
method: HTTPVerb.get,
|
||||
requestParams: [
|
||||
NameValueModel(name: 'code', value: 'US'),
|
||||
@ -21,7 +22,7 @@ const requestModelGet2 = RequestModel(
|
||||
/// GET request model with override query params
|
||||
const requestModelGet3 = RequestModel(
|
||||
id: 'get3',
|
||||
url: 'https://api.foss42.com/country/data?code=US',
|
||||
url: 'https://api.apidash.dev/country/data?code=US',
|
||||
method: HTTPVerb.get,
|
||||
requestParams: [
|
||||
NameValueModel(name: 'code', value: 'IND'),
|
||||
@ -31,7 +32,7 @@ const requestModelGet3 = RequestModel(
|
||||
/// GET request model with different types of query params
|
||||
const requestModelGet4 = RequestModel(
|
||||
id: 'get4',
|
||||
url: 'https://api.foss42.com/humanize/social',
|
||||
url: 'https://api.apidash.dev/humanize/social',
|
||||
method: HTTPVerb.get,
|
||||
requestParams: [
|
||||
NameValueModel(name: 'num', value: '8700000'),
|
||||
@ -68,7 +69,7 @@ const requestModelGet6 = RequestModel(
|
||||
/// GET request model with body
|
||||
const requestModelGet7 = RequestModel(
|
||||
id: 'get7',
|
||||
url: 'https://api.foss42.com',
|
||||
url: 'https://api.apidash.dev',
|
||||
method: HTTPVerb.get,
|
||||
requestBodyContentType: ContentType.text,
|
||||
requestBody:
|
||||
@ -92,8 +93,8 @@ const requestModelGet8 = RequestModel(
|
||||
|
||||
/// GET request model with some params enabled
|
||||
const requestModelGet9 = RequestModel(
|
||||
id: 'enabledParams',
|
||||
url: 'https://api.foss42.com/humanize/social',
|
||||
id: 'get9',
|
||||
url: 'https://api.apidash.dev/humanize/social',
|
||||
method: HTTPVerb.get,
|
||||
requestParams: [
|
||||
NameValueModel(name: 'num', value: '8700000'),
|
||||
@ -111,8 +112,8 @@ const requestModelGet9 = RequestModel(
|
||||
|
||||
/// GET Request model with some headers enabled
|
||||
const requestModelGet10 = RequestModel(
|
||||
id: 'enabledParams',
|
||||
url: 'https://api.foss42.com/humanize/social',
|
||||
id: 'get10',
|
||||
url: 'https://api.apidash.dev/humanize/social',
|
||||
method: HTTPVerb.get,
|
||||
requestHeaders: [
|
||||
NameValueModel(name: 'User-Agent', value: 'Test Agent'),
|
||||
@ -126,8 +127,8 @@ const requestModelGet10 = RequestModel(
|
||||
|
||||
/// GET Request model with some headers & URL parameters enabled
|
||||
const requestModelGet11 = RequestModel(
|
||||
id: 'enabledRows',
|
||||
url: 'https://api.foss42.com/humanize/social',
|
||||
id: 'get11',
|
||||
url: 'https://api.apidash.dev/humanize/social',
|
||||
method: HTTPVerb.get,
|
||||
requestParams: [
|
||||
NameValueModel(name: 'num', value: '8700000'),
|
||||
@ -153,8 +154,8 @@ const requestModelGet11 = RequestModel(
|
||||
|
||||
/// Request model with all headers & URL parameters disabled
|
||||
const requestModelGet12 = RequestModel(
|
||||
id: 'disabledRows',
|
||||
url: 'https://api.foss42.com/humanize/social',
|
||||
id: 'get12',
|
||||
url: 'https://api.apidash.dev/humanize/social',
|
||||
method: HTTPVerb.get,
|
||||
requestParams: [
|
||||
NameValueModel(name: 'num', value: '8700000'),
|
||||
@ -181,21 +182,21 @@ const requestModelGet12 = RequestModel(
|
||||
/// Basic HEAD request model
|
||||
const requestModelHead1 = RequestModel(
|
||||
id: 'head1',
|
||||
url: 'https://api.foss42.com',
|
||||
url: 'https://api.apidash.dev',
|
||||
method: HTTPVerb.head,
|
||||
);
|
||||
|
||||
/// Without URI Scheme (pass default as http)
|
||||
const requestModelHead2 = RequestModel(
|
||||
id: 'head2',
|
||||
url: 'api.foss42.com',
|
||||
url: 'api.apidash.dev',
|
||||
method: HTTPVerb.head,
|
||||
);
|
||||
|
||||
/// Basic POST request model (txt body)
|
||||
const requestModelPost1 = RequestModel(
|
||||
id: 'post1',
|
||||
url: 'https://api.foss42.com/case/lower',
|
||||
url: 'https://api.apidash.dev/case/lower',
|
||||
method: HTTPVerb.post,
|
||||
requestBody: r"""{
|
||||
"text": "I LOVE Flutter"
|
||||
@ -205,17 +206,22 @@ const requestModelPost1 = RequestModel(
|
||||
/// POST request model with JSON body
|
||||
const requestModelPost2 = RequestModel(
|
||||
id: 'post2',
|
||||
url: 'https://api.foss42.com/case/lower',
|
||||
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]
|
||||
}""",
|
||||
);
|
||||
|
||||
/// POST request model with headers
|
||||
const requestModelPost3 = RequestModel(
|
||||
id: 'post3',
|
||||
url: 'https://api.foss42.com/case/lower',
|
||||
url: 'https://api.apidash.dev/case/lower',
|
||||
method: HTTPVerb.post,
|
||||
requestBody: r"""{
|
||||
"text": "I LOVE Flutter"
|
||||
@ -226,6 +232,105 @@ const requestModelPost3 = RequestModel(
|
||||
],
|
||||
);
|
||||
|
||||
/// POST request model with multipart body(text)
|
||||
const requestModelPost4 = RequestModel(
|
||||
id: 'post4',
|
||||
url: 'https://api.apidash.dev/io/form',
|
||||
method: HTTPVerb.post,
|
||||
requestFormDataList: [
|
||||
FormDataModel(name: "text", value: "API", type: FormDataType.text),
|
||||
FormDataModel(name: "sep", value: "|", type: FormDataType.text),
|
||||
FormDataModel(name: "times", value: "3", type: FormDataType.text),
|
||||
],
|
||||
requestBodyContentType: ContentType.formdata,
|
||||
);
|
||||
|
||||
/// POST request model with multipart body and headers
|
||||
const requestModelPost5 = RequestModel(
|
||||
id: 'post5',
|
||||
url: 'https://api.apidash.dev/io/form',
|
||||
method: HTTPVerb.post,
|
||||
requestFormDataList: [
|
||||
FormDataModel(name: "text", value: "API", type: FormDataType.text),
|
||||
FormDataModel(name: "sep", value: "|", type: FormDataType.text),
|
||||
FormDataModel(name: "times", value: "3", type: FormDataType.text),
|
||||
],
|
||||
requestHeaders: [
|
||||
NameValueModel(name: 'User-Agent', value: 'Test Agent'),
|
||||
],
|
||||
requestBodyContentType: ContentType.formdata,
|
||||
);
|
||||
|
||||
/// POST request model with multipart body(text, file)
|
||||
const requestModelPost6 = RequestModel(
|
||||
id: 'post6',
|
||||
url: 'https://api.apidash.dev/io/img',
|
||||
method: HTTPVerb.post,
|
||||
requestFormDataList: [
|
||||
FormDataModel(name: "token", value: "xyz", type: FormDataType.text),
|
||||
FormDataModel(
|
||||
name: "imfile", value: "/Documents/up/1.png", type: FormDataType.file),
|
||||
],
|
||||
requestBodyContentType: ContentType.formdata,
|
||||
);
|
||||
|
||||
/// POST request model with multipart body and requestBody (the requestBody shouldn't be in codegen)
|
||||
const requestModelPost7 = RequestModel(
|
||||
id: 'post7',
|
||||
url: 'https://api.apidash.dev/io/img',
|
||||
method: HTTPVerb.post,
|
||||
requestBody: r"""{
|
||||
"text": "I LOVE Flutter"
|
||||
}""",
|
||||
requestFormDataList: [
|
||||
FormDataModel(name: "token", value: "xyz", type: FormDataType.text),
|
||||
FormDataModel(
|
||||
name: "imfile", value: "/Documents/up/1.png", type: FormDataType.file),
|
||||
],
|
||||
requestBodyContentType: ContentType.formdata,
|
||||
);
|
||||
|
||||
/// POST request model with multipart body and requestParams
|
||||
const requestModelPost8 = RequestModel(
|
||||
id: 'post8',
|
||||
url: 'https://api.apidash.dev/io/form',
|
||||
method: HTTPVerb.post,
|
||||
requestFormDataList: [
|
||||
FormDataModel(name: "text", value: "API", type: FormDataType.text),
|
||||
FormDataModel(name: "sep", value: "|", type: FormDataType.text),
|
||||
FormDataModel(name: "times", value: "3", type: FormDataType.text),
|
||||
],
|
||||
requestParams: [
|
||||
NameValueModel(name: 'size', value: '2'),
|
||||
NameValueModel(name: 'len', value: '3'),
|
||||
],
|
||||
requestBodyContentType: ContentType.formdata,
|
||||
);
|
||||
|
||||
/// POST request model with multipart body(file and text), requestParams, requestHeaders and requestBody
|
||||
const requestModelPost9 = RequestModel(
|
||||
id: 'post9',
|
||||
url: 'https://api.apidash.dev/io/img',
|
||||
method: HTTPVerb.post,
|
||||
requestBody: r"""{
|
||||
"text": "I LOVE Flutter"
|
||||
}""",
|
||||
requestFormDataList: [
|
||||
FormDataModel(name: "token", value: "xyz", type: FormDataType.text),
|
||||
FormDataModel(
|
||||
name: "imfile", value: "/Documents/up/1.png", type: FormDataType.file),
|
||||
],
|
||||
requestParams: [
|
||||
NameValueModel(name: 'size', value: '2'),
|
||||
NameValueModel(name: 'len', value: '3'),
|
||||
],
|
||||
requestHeaders: [
|
||||
NameValueModel(name: 'User-Agent', value: 'Test Agent'),
|
||||
NameValueModel(name: 'Keep-Alive', value: 'true'),
|
||||
],
|
||||
requestBodyContentType: ContentType.formdata,
|
||||
);
|
||||
|
||||
/// PUT request model
|
||||
const requestModelPut1 = RequestModel(
|
||||
id: 'put1',
|
||||
|
@ -1,3 +1,4 @@
|
||||
import 'package:apidash/consts.dart';
|
||||
import 'package:test/test.dart';
|
||||
import 'package:apidash/utils/file_utils.dart';
|
||||
|
||||
@ -11,8 +12,13 @@ void main() {
|
||||
});
|
||||
|
||||
test('Test getShortPath', () {
|
||||
String path = "A/B/C/D.csv";
|
||||
expect(getShortPath(path), ".../C/D.csv");
|
||||
if (kIsWindows) {
|
||||
String path = r"A\B\C\D.csv";
|
||||
expect(getShortPath(path), r"...\C\D.csv");
|
||||
} else {
|
||||
String path = "A/B/C/D.csv";
|
||||
expect(getShortPath(path), ".../C/D.csv");
|
||||
}
|
||||
});
|
||||
|
||||
test('Test getTempFileName', () {
|
||||
|
@ -68,7 +68,7 @@ void main() {
|
||||
},
|
||||
{
|
||||
'startedDateTime': 'ABC',
|
||||
'comment': 'id:enabledRows',
|
||||
'comment': 'id:get11',
|
||||
'serverIPAddress': '',
|
||||
'time': 0,
|
||||
'timings': {
|
||||
@ -101,7 +101,7 @@ void main() {
|
||||
'request': {
|
||||
'method': 'GET',
|
||||
'url':
|
||||
'https://api.foss42.com/humanize/social?num=8700000&digits=3&system=SS&add_space=true',
|
||||
'https://api.apidash.dev/humanize/social?num=8700000&digits=3&system=SS&add_space=true',
|
||||
'httpVersion': 'HTTP/1.1',
|
||||
'queryString': [
|
||||
{'name': 'num', 'value': '8700000', 'comment': ''},
|
||||
@ -162,7 +162,7 @@ void main() {
|
||||
},
|
||||
'request': {
|
||||
'method': 'POST',
|
||||
'url': 'https://api.foss42.com/case/lower',
|
||||
'url': 'https://api.apidash.dev/case/lower',
|
||||
'httpVersion': 'HTTP/1.1',
|
||||
'queryString': [],
|
||||
'headers': [
|
||||
@ -252,7 +252,7 @@ void main() {
|
||||
test('Test requestModelToHARJsonRequest exportMode=true', () {
|
||||
Map<String, dynamic> expectedResult = {
|
||||
'method': 'POST',
|
||||
'url': 'https://api.foss42.com/case/lower',
|
||||
'url': 'https://api.apidash.dev/case/lower',
|
||||
'httpVersion': 'HTTP/1.1',
|
||||
'queryString': [],
|
||||
'headers': [
|
||||
@ -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(
|
||||
@ -282,7 +287,7 @@ void main() {
|
||||
Map<String, dynamic> expectedResult = {
|
||||
'method': 'GET',
|
||||
'url':
|
||||
'https://api.foss42.com/humanize/social?num=8700000&digits=3&system=SS&add_space=true',
|
||||
'https://api.apidash.dev/humanize/social?num=8700000&digits=3&system=SS&add_space=true',
|
||||
'httpVersion': 'HTTP/1.1',
|
||||
'queryString': [
|
||||
{'name': 'num', 'value': '8700000'},
|
||||
@ -301,7 +306,7 @@ void main() {
|
||||
test('Test requestModelToHARJsonRequest useEnabled=true', () {
|
||||
Map<String, dynamic> expectedResult = {
|
||||
'method': 'GET',
|
||||
'url': 'https://api.foss42.com/humanize/social?num=8700000&digits=3',
|
||||
'url': 'https://api.apidash.dev/humanize/social?num=8700000&digits=3',
|
||||
'httpVersion': 'HTTP/1.1',
|
||||
'queryString': [
|
||||
{'name': 'num', 'value': '8700000'},
|
||||
|
@ -115,6 +115,7 @@ void main() {
|
||||
String pattern = "x-";
|
||||
List<String> expected = [
|
||||
"Access-Control-Max-Age",
|
||||
"Max-Forwards",
|
||||
"X-Api-Key",
|
||||
"X-Content-Type-Options",
|
||||
"X-CSRF-Token",
|
||||
|
@ -19,14 +19,14 @@ void main() {
|
||||
});
|
||||
|
||||
test('Testing getRequestTitleFromUrl using url3', () {
|
||||
String url3 = "https://api.foss42.com/country/codes";
|
||||
String title3Expected = "api.foss42.com/country/codes";
|
||||
String url3 = "https://api.apidash.dev/country/codes";
|
||||
String title3Expected = "api.apidash.dev/country/codes";
|
||||
expect(getRequestTitleFromUrl(url3), title3Expected);
|
||||
});
|
||||
|
||||
test('Testing getRequestTitleFromUrl using url4', () {
|
||||
String url4 = "api.foss42.com/country/data";
|
||||
String title4Expected = "api.foss42.com/country/data";
|
||||
String url4 = "api.apidash.dev/country/data";
|
||||
String title4Expected = "api.apidash.dev/country/data";
|
||||
expect(getRequestTitleFromUrl(url4), title4Expected);
|
||||
});
|
||||
|
||||
@ -175,11 +175,11 @@ void main() {
|
||||
|
||||
group("Testing getValidRequestUri", () {
|
||||
test('Testing getValidRequestUri for normal values', () {
|
||||
String url1 = "https://api.foss42.com/country/data";
|
||||
String url1 = "https://api.apidash.dev/country/data";
|
||||
const kvRow1 = NameValueModel(name: "code", value: "US");
|
||||
Uri uri1Expected = Uri(
|
||||
scheme: 'https',
|
||||
host: 'api.foss42.com',
|
||||
host: 'api.apidash.dev',
|
||||
path: 'country/data',
|
||||
queryParameters: {'code': 'US'});
|
||||
expect(getValidRequestUri(url1, [kvRow1]), (uri1Expected, null));
|
||||
@ -193,11 +193,11 @@ void main() {
|
||||
expect(getValidRequestUri("", [kvRow3]), (null, "URL is missing!"));
|
||||
});
|
||||
test('Testing getValidRequestUri when https is not provided in url', () {
|
||||
String url4 = "api.foss42.com/country/data";
|
||||
String url4 = "api.apidash.dev/country/data";
|
||||
const kvRow4 = NameValueModel(name: "code", value: "US");
|
||||
Uri uri4Expected = Uri(
|
||||
scheme: 'https',
|
||||
host: 'api.foss42.com',
|
||||
host: 'api.apidash.dev',
|
||||
path: 'country/data',
|
||||
queryParameters: {'code': 'US'});
|
||||
expect(getValidRequestUri(url4, [kvRow4]), (uri4Expected, null));
|
||||
@ -217,20 +217,20 @@ void main() {
|
||||
});
|
||||
test('Testing getValidRequestUri when query params in both url and kvrow',
|
||||
() {
|
||||
String url6 = "api.foss42.com/country/data?code=IND";
|
||||
String url6 = "api.apidash.dev/country/data?code=IND";
|
||||
const kvRow6 = NameValueModel(name: "code", value: "US");
|
||||
Uri uri6Expected = Uri(
|
||||
scheme: 'https',
|
||||
host: 'api.foss42.com',
|
||||
host: 'api.apidash.dev',
|
||||
path: 'country/data',
|
||||
queryParameters: {'code': 'US'});
|
||||
expect(getValidRequestUri(url6, [kvRow6]), (uri6Expected, null));
|
||||
});
|
||||
test('Testing getValidRequestUri when kvrow is null', () {
|
||||
String url7 = "api.foss42.com/country/data?code=US";
|
||||
String url7 = "api.apidash.dev/country/data?code=US";
|
||||
Uri uri7Expected = Uri(
|
||||
scheme: 'https',
|
||||
host: 'api.foss42.com',
|
||||
host: 'api.apidash.dev',
|
||||
path: 'country/data',
|
||||
queryParameters: {'code': 'US'});
|
||||
expect(getValidRequestUri(url7, null), (uri7Expected, null));
|
||||
|
@ -1,3 +1,6 @@
|
||||
// ignore_for_file: unused_import
|
||||
// TODO: Added ignore to calculate code coverage
|
||||
|
||||
import 'package:apidash/main.dart';
|
||||
import 'package:apidash/app.dart';
|
||||
import 'package:apidash/common/utils.dart';
|
||||
|
@ -36,8 +36,7 @@ void main() {
|
||||
theme: kThemeDataLight,
|
||||
home: Scaffold(
|
||||
body: SendRequestButton(
|
||||
selectedId: '1',
|
||||
sentRequestId: null,
|
||||
isWorking: false,
|
||||
onTap: () {
|
||||
changedValue = 'Send';
|
||||
},
|
||||
@ -55,7 +54,8 @@ void main() {
|
||||
expect(changedValue, 'Send');
|
||||
});
|
||||
|
||||
testWidgets('Testing for Send Request button when sentRequestId is not null',
|
||||
testWidgets(
|
||||
'Testing for Send Request button when RequestModel is viewed and is waiting for response',
|
||||
(tester) async {
|
||||
await tester.pumpWidget(
|
||||
MaterialApp(
|
||||
@ -63,32 +63,7 @@ void main() {
|
||||
theme: kThemeDataLight,
|
||||
home: Scaffold(
|
||||
body: SendRequestButton(
|
||||
selectedId: '1',
|
||||
sentRequestId: '2',
|
||||
onTap: () {},
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
expect(find.byIcon(Icons.send), findsNothing);
|
||||
expect(find.text(kLabelBusy), findsOneWidget);
|
||||
final button1 = find.byType(FilledButton);
|
||||
expect(button1, findsOneWidget);
|
||||
|
||||
expect(tester.widget<FilledButton>(button1).enabled, isFalse);
|
||||
});
|
||||
|
||||
testWidgets('Testing for Send Request button when sentRequestId = selectedId',
|
||||
(tester) async {
|
||||
await tester.pumpWidget(
|
||||
MaterialApp(
|
||||
title: 'Send Request button',
|
||||
theme: kThemeDataLight,
|
||||
home: Scaffold(
|
||||
body: SendRequestButton(
|
||||
selectedId: '1',
|
||||
sentRequestId: '1',
|
||||
isWorking: true,
|
||||
onTap: () {},
|
||||
),
|
||||
),
|
||||
|
@ -17,7 +17,7 @@ void main() {
|
||||
SidebarRequestCard(
|
||||
id: '23',
|
||||
selectedId: '2',
|
||||
url: 'https://api.foss42.com',
|
||||
url: 'https://api.apidash.dev',
|
||||
method: HTTPVerb.get,
|
||||
onTap: () {
|
||||
changedValue = 'Single Tapped';
|
||||
@ -34,11 +34,11 @@ void main() {
|
||||
|
||||
expect(find.byType(InkWell), findsOneWidget);
|
||||
|
||||
expect(find.text('api.foss42.com'), findsOneWidget);
|
||||
expect(find.widgetWithText(SizedBox, 'api.foss42.com'), findsOneWidget);
|
||||
expect(find.widgetWithText(Card, 'api.foss42.com'), findsOneWidget);
|
||||
expect(find.text('api.apidash.dev'), findsOneWidget);
|
||||
expect(find.widgetWithText(SizedBox, 'api.apidash.dev'), findsOneWidget);
|
||||
expect(find.widgetWithText(Card, 'api.apidash.dev'), findsOneWidget);
|
||||
await tester.pumpAndSettle();
|
||||
var tappable = find.widgetWithText(Card, 'api.foss42.com');
|
||||
var tappable = find.widgetWithText(Card, 'api.apidash.dev');
|
||||
await tester.tap(tappable);
|
||||
await tester.pumpAndSettle(const Duration(seconds: 2));
|
||||
expect(changedValue, 'Single Tapped');
|
||||
@ -63,7 +63,7 @@ void main() {
|
||||
id: '2',
|
||||
selectedId: '2',
|
||||
editRequestId: '2',
|
||||
url: 'https://api.foss42.com',
|
||||
url: 'https://api.apidash.dev',
|
||||
method: HTTPVerb.get,
|
||||
onTapOutsideNameEditor: () {
|
||||
changedValue = 'Tapped Outside';
|
||||
|
@ -9,7 +9,7 @@ void main() {
|
||||
String code = r'''import 'package:http/http.dart' as http;
|
||||
|
||||
void main() async {
|
||||
var uri = Uri.parse('https://api.foss42.com/country/codes');
|
||||
var uri = Uri.parse('https://api.apidash.dev/country/codes');
|
||||
|
||||
final response = await http.get(uri);
|
||||
|
||||
|
@ -9,7 +9,7 @@ void main() {
|
||||
String code = r'''import 'package:http/http.dart' as http;
|
||||
|
||||
void main() async {
|
||||
var uri = Uri.parse('https://api.foss42.com/country/codes');
|
||||
var uri = Uri.parse('https://api.apidash.dev/country/codes');
|
||||
|
||||
final response = await http.get(uri);
|
||||
|
||||
|
@ -1,9 +1,16 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:apidash/widgets/intro_message.dart';
|
||||
import 'package:package_info_plus/package_info_plus.dart';
|
||||
|
||||
void main() {
|
||||
testWidgets('Testing Intro Message', (tester) async {
|
||||
PackageInfo.setMockInitialValues(
|
||||
appName: 'API Dash',
|
||||
packageName: 'dev.apidash.apidash',
|
||||
version: '1.0.0',
|
||||
buildNumber: '1',
|
||||
buildSignature: 'buildSignature');
|
||||
await tester.pumpWidget(
|
||||
const MaterialApp(
|
||||
title: 'Intro Message',
|
||||
@ -13,7 +20,7 @@ void main() {
|
||||
),
|
||||
);
|
||||
|
||||
await tester.pumpAndSettle();
|
||||
await tester.pump();
|
||||
expect(find.text('Welcome to API Dash ⚡️'), findsOneWidget);
|
||||
|
||||
expect(find.byType(RichText), findsAtLeastNWidgets(1));
|
||||
@ -25,5 +32,5 @@ void main() {
|
||||
expect(find.byIcon(Icons.star), findsOneWidget);
|
||||
expect(find.text('Star on GitHub'), findsOneWidget);
|
||||
await tester.tap(find.byIcon(Icons.star));
|
||||
}, skip: true);
|
||||
});
|
||||
}
|
||||
|
@ -1,16 +1,85 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_markdown/flutter_markdown.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:apidash/widgets/markdown.dart';
|
||||
|
||||
void main() {
|
||||
testWidgets('Testing CustomMarkdown', (tester) async {
|
||||
const markdown = CustomMarkdown(data: """Is a markdown ~`star on github`~
|
||||
group('CustomMarkdown Widget Tests', () {
|
||||
testWidgets('Testing CustomMarkdown buttons and tags renders',
|
||||
(tester) async {
|
||||
const markdown = CustomMarkdown(
|
||||
data: """Is a markdown ~`star on github`~
|
||||
|
||||
#br
|
||||
#br
|
||||
#br
|
||||
#br
|
||||
|
||||
~`github repo`~ ~`Discord Server`~""");
|
||||
await tester.pumpWidget(markdown);
|
||||
//expectTextStrings(tester.allWidgets, <String>['Data1']);
|
||||
}, skip: true);
|
||||
~`github repo`~ ~`Discord Server`~""",
|
||||
);
|
||||
await tester.pumpWidget(const MaterialApp(home: markdown));
|
||||
|
||||
expect(find.byIcon(Icons.star), findsOneWidget);
|
||||
expect(find.text("star on github"), findsOneWidget);
|
||||
|
||||
expect(find.byIcon(Icons.discord), findsOneWidget);
|
||||
expect(find.text("Discord Server"), findsOneWidget);
|
||||
|
||||
expect(find.byIcon(Icons.code_rounded), findsOneWidget);
|
||||
expect(find.text("github repo"), findsOneWidget);
|
||||
|
||||
expect(find.text('#br'), findsNothing);
|
||||
});
|
||||
|
||||
testWidgets('CustomMarkdown renders correctly',
|
||||
(WidgetTester tester) async {
|
||||
await tester.pumpWidget(const MaterialApp(
|
||||
home: CustomMarkdown(
|
||||
data: '# Hello World\nThis is some *markdown* text.',
|
||||
),
|
||||
));
|
||||
|
||||
final headlineTextFinder = find.text('Hello World');
|
||||
final markdownTextFinder = find.text('This is some markdown text.');
|
||||
|
||||
expect(headlineTextFinder, findsOneWidget);
|
||||
expect(markdownTextFinder, findsOneWidget);
|
||||
});
|
||||
|
||||
testWidgets('CustomMarkdown has proper text rendered',
|
||||
(WidgetTester tester) async {
|
||||
await tester.pumpWidget(MaterialApp(
|
||||
home: GestureDetector(
|
||||
child: const CustomMarkdown(
|
||||
data: '[Link Text](https://apidash.dev/)',
|
||||
),
|
||||
),
|
||||
));
|
||||
|
||||
await tester.tap(find.text('Link Text'));
|
||||
await tester.pump();
|
||||
|
||||
expect(find.text('Link Text'), findsOneWidget);
|
||||
|
||||
expect(find.text('https://apidash.dev/'), findsNothing);
|
||||
});
|
||||
|
||||
testWidgets('CustomMarkdown creates hyperlink',
|
||||
(WidgetTester tester) async {
|
||||
bool linkTapped = false;
|
||||
await tester.pumpWidget(MaterialApp(
|
||||
home: CustomMarkdown(
|
||||
data: '[Link Text](https://apidash.dev/)',
|
||||
onTapLink: (text, href, title) {
|
||||
linkTapped = true;
|
||||
expect(text, 'Link Text');
|
||||
expect(href, 'https://apidash.dev/');
|
||||
},
|
||||
),
|
||||
));
|
||||
expect(find.byType(Markdown), findsOneWidget);
|
||||
final markdownWidget = tester.widget<Markdown>(find.byType(Markdown));
|
||||
expect(markdownWidget.data, '[Link Text](https://apidash.dev/)');
|
||||
await tester.tap(find.text('Link Text'));
|
||||
expect(linkTapped, true);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
@ -231,4 +231,26 @@ void main() {
|
||||
await tester.pumpAndSettle();
|
||||
expect(find.text(kSvgError), findsOneWidget);
|
||||
});
|
||||
|
||||
testWidgets('Testing when type/subtype is text/csv', (tester) async {
|
||||
String csvDataString =
|
||||
'Id,Name,Age\n1,John Doe,40\n2,Dbestech,41\n3,Voldermort,71\n4,Joe Biden,80\n5,Ryo Hanamura,35';
|
||||
|
||||
await tester.pumpWidget(
|
||||
MaterialApp(
|
||||
home: Scaffold(
|
||||
body: Previewer(
|
||||
type: kTypeText,
|
||||
subtype: kSubTypeCsv,
|
||||
bytes: Uint8List.fromList([]),
|
||||
body: csvDataString,
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
expect(find.byType(DataTable), findsOneWidget);
|
||||
expect(find.text('John Doe'), findsOneWidget);
|
||||
expect(find.text('41'), findsOneWidget);
|
||||
});
|
||||
}
|
||||
|
@ -201,7 +201,7 @@ void main() {
|
||||
RequestModel requestModel = const RequestModel(
|
||||
id: '1',
|
||||
method: HTTPVerb.post,
|
||||
url: 'api.foss42.com/case/lower',
|
||||
url: 'api.apidash.dev/case/lower',
|
||||
name: 'foss42 api',
|
||||
requestHeaders: [
|
||||
NameValueModel(name: 'content-length', value: '18'),
|
||||
@ -372,7 +372,7 @@ void main() {
|
||||
String code = r'''import 'package:http/http.dart' as http;
|
||||
|
||||
void main() async {
|
||||
var uri = Uri.parse('https://api.foss42.com/country/codes');
|
||||
var uri = Uri.parse('https://api.apidash.dev/country/codes');
|
||||
|
||||
final response = await http.get(uri);
|
||||
|
||||
|
@ -57,4 +57,41 @@ void main() {
|
||||
await tester.pumpAndSettle();
|
||||
expect(find.text('entering 123 for cell field'), findsOneWidget);
|
||||
});
|
||||
|
||||
testWidgets('URL Field sends request on enter keystroke', (tester) async {
|
||||
bool wasSubmitCalled = false;
|
||||
|
||||
void testSubmit(String val) {
|
||||
wasSubmitCalled = true;
|
||||
}
|
||||
|
||||
await tester.pumpWidget(
|
||||
MaterialApp(
|
||||
title: 'URL Field',
|
||||
theme: kThemeDataDark,
|
||||
home: Scaffold(
|
||||
body: Column(children: [
|
||||
URLField(
|
||||
selectedId: '2',
|
||||
onFieldSubmitted: testSubmit,
|
||||
)
|
||||
]),
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
// ensure URLField is blank
|
||||
expect(find.byType(TextFormField), findsOneWidget);
|
||||
expect(find.textContaining('Enter API endpoint '), findsOneWidget);
|
||||
expect(wasSubmitCalled, false);
|
||||
|
||||
// modify value and press enter
|
||||
var txtForm = find.byKey(const Key("url-2"));
|
||||
await tester.enterText(txtForm, 'entering 123');
|
||||
await tester.testTextInput.receiveAction(TextInputAction.done);
|
||||
await tester.pump();
|
||||
|
||||
// check if value was updated
|
||||
expect(wasSubmitCalled, true);
|
||||
});
|
||||
}
|
||||
|
Reference in New Issue
Block a user