mirror of
https://github.com/foss42/apidash.git
synced 2025-08-02 01:37:38 +08:00
Update HAR codegen
This commit is contained in:
@ -1,6 +1,10 @@
|
||||
// http://www.softwareishard.com/blog/har-12-spec/
|
||||
// https://github.com/ahmadnassri/har-spec/blob/master/versions/1.2.md
|
||||
|
||||
import 'dart:convert';
|
||||
import 'package:apidash/consts.dart';
|
||||
import 'package:apidash/utils/utils.dart' show getValidRequestUri;
|
||||
import 'package:apidash/utils/utils.dart'
|
||||
show getValidRequestUri, getNewUuid, getFilenameFromPath;
|
||||
import 'package:apidash/models/models.dart' show RequestModel;
|
||||
import 'package:package_info_plus/package_info_plus.dart';
|
||||
|
||||
@ -75,6 +79,7 @@ Map<String, dynamic> requestModelToHARJsonRequest(
|
||||
defaultUriScheme = kDefaultUriScheme,
|
||||
bool exportMode = false,
|
||||
bool useEnabled = false,
|
||||
String? boundary,
|
||||
}) {
|
||||
Map<String, dynamic> json = {};
|
||||
bool hasBody = false;
|
||||
@ -110,21 +115,37 @@ Map<String, dynamic> requestModelToHARJsonRequest(
|
||||
}
|
||||
}
|
||||
|
||||
var method = requestModel.method;
|
||||
var requestBody = requestModel.requestBody;
|
||||
if (kMethodsWithBody.contains(method) &&
|
||||
requestBody != null &&
|
||||
!requestModel.isFormDataRequest) {
|
||||
var contentLength = utf8.encode(requestBody).length;
|
||||
if (contentLength > 0) {
|
||||
hasBody = true;
|
||||
json["postData"] = {};
|
||||
json["postData"]["mimeType"] =
|
||||
requestModel.requestBodyContentType.header;
|
||||
json["postData"]["text"] = requestBody;
|
||||
if (exportMode) {
|
||||
json["postData"]["comment"] = "";
|
||||
if (requestModel.hasJsonData || requestModel.hasTextData) {
|
||||
hasBody = true;
|
||||
json["postData"] = {};
|
||||
json["postData"]["mimeType"] = requestModel.requestBodyContentType.header;
|
||||
json["postData"]["text"] = requestModel.requestBody;
|
||||
if (exportMode) {
|
||||
json["postData"]["comment"] = "";
|
||||
}
|
||||
}
|
||||
|
||||
if (requestModel.hasFormData) {
|
||||
boundary = boundary ?? getNewUuid();
|
||||
hasBody = true;
|
||||
json["postData"] = {};
|
||||
json["postData"]["mimeType"] =
|
||||
"${requestModel.requestBodyContentType.header}; boundary=$boundary";
|
||||
json["postData"]["params"] = [];
|
||||
for (var item in requestModel.formDataList) {
|
||||
Map<String, String> d = exportMode ? {"comment": ""} : {};
|
||||
if (item.type == FormDataType.text) {
|
||||
d["name"] = item.name;
|
||||
d["value"] = item.value;
|
||||
}
|
||||
if (item.type == FormDataType.file) {
|
||||
d["name"] = item.name;
|
||||
d["fileName"] = getFilenameFromPath(item.value);
|
||||
}
|
||||
json["postData"]["params"].add(d);
|
||||
}
|
||||
if (exportMode) {
|
||||
json["postData"]["comment"] = "";
|
||||
}
|
||||
}
|
||||
|
||||
@ -137,8 +158,8 @@ Map<String, dynamic> requestModelToHARJsonRequest(
|
||||
if (headers.isNotEmpty || hasBody) {
|
||||
if (hasBody && !requestModel.hasContentTypeHeader) {
|
||||
var m = {
|
||||
"name": "Content-Type",
|
||||
"value": requestModel.requestBodyContentType.header
|
||||
"name": kHeaderContentType,
|
||||
"value": json["postData"]["mimeType"]
|
||||
};
|
||||
if (exportMode) {
|
||||
m["comment"] = "";
|
||||
@ -154,14 +175,12 @@ Map<String, dynamic> requestModelToHARJsonRequest(
|
||||
}
|
||||
}
|
||||
}
|
||||
if (requestModel.isFormDataRequest) {
|
||||
json["formData"] = requestModel.formDataMapList;
|
||||
}
|
||||
if (exportMode) {
|
||||
json["comment"] = "";
|
||||
json["cookies"] = [];
|
||||
json["headersSize"] = -1;
|
||||
json["bodySize"] = hasBody ? utf8.encode(requestBody!).length : 0;
|
||||
json["bodySize"] =
|
||||
hasBody ? utf8.encode(json["postData"]["text"] ?? "").length : 0;
|
||||
}
|
||||
}
|
||||
return json;
|
||||
|
@ -1,9 +1,10 @@
|
||||
import 'package:apidash/codegen/others/har.dart';
|
||||
import '../request_models.dart';
|
||||
import 'package:apidash/codegen/codegen.dart';
|
||||
import 'package:apidash/consts.dart';
|
||||
import 'package:test/test.dart';
|
||||
import '../request_models.dart';
|
||||
|
||||
void main() {
|
||||
final harCodeGen = HARCodeGen();
|
||||
final codeGen = Codegen();
|
||||
|
||||
group('GET Request', () {
|
||||
test('GET 1', () {
|
||||
@ -14,7 +15,8 @@ void main() {
|
||||
"queryString": [],
|
||||
"headers": []
|
||||
}""";
|
||||
expect(harCodeGen.getCode(requestModelGet1, "https"), expectedCode);
|
||||
expect(codeGen.getCode(CodegenLanguage.har, requestModelGet1, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('GET 2', () {
|
||||
@ -30,7 +32,8 @@ void main() {
|
||||
],
|
||||
"headers": []
|
||||
}""";
|
||||
expect(harCodeGen.getCode(requestModelGet2, "https"), expectedCode);
|
||||
expect(codeGen.getCode(CodegenLanguage.har, requestModelGet2, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('GET 3', () {
|
||||
@ -46,7 +49,8 @@ void main() {
|
||||
],
|
||||
"headers": []
|
||||
}""";
|
||||
expect(harCodeGen.getCode(requestModelGet3, "https"), expectedCode);
|
||||
expect(codeGen.getCode(CodegenLanguage.har, requestModelGet3, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('GET 4', () {
|
||||
@ -78,7 +82,8 @@ void main() {
|
||||
],
|
||||
"headers": []
|
||||
}""";
|
||||
expect(harCodeGen.getCode(requestModelGet4, "https"), expectedCode);
|
||||
expect(codeGen.getCode(CodegenLanguage.har, requestModelGet4, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('GET 5', () {
|
||||
@ -94,7 +99,8 @@ void main() {
|
||||
}
|
||||
]
|
||||
}""";
|
||||
expect(harCodeGen.getCode(requestModelGet5, "https"), expectedCode);
|
||||
expect(codeGen.getCode(CodegenLanguage.har, requestModelGet5, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('GET 6', () {
|
||||
@ -115,7 +121,8 @@ void main() {
|
||||
}
|
||||
]
|
||||
}""";
|
||||
expect(harCodeGen.getCode(requestModelGet6, "https"), expectedCode);
|
||||
expect(codeGen.getCode(CodegenLanguage.har, requestModelGet6, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('GET 7', () {
|
||||
@ -126,7 +133,8 @@ void main() {
|
||||
"queryString": [],
|
||||
"headers": []
|
||||
}""";
|
||||
expect(harCodeGen.getCode(requestModelGet7, "https"), expectedCode);
|
||||
expect(codeGen.getCode(CodegenLanguage.har, requestModelGet7, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('GET 8', () {
|
||||
@ -147,7 +155,8 @@ void main() {
|
||||
}
|
||||
]
|
||||
}""";
|
||||
expect(harCodeGen.getCode(requestModelGet8, "https"), expectedCode);
|
||||
expect(codeGen.getCode(CodegenLanguage.har, requestModelGet8, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('GET 9', () {
|
||||
@ -167,7 +176,8 @@ void main() {
|
||||
],
|
||||
"headers": []
|
||||
}""";
|
||||
expect(harCodeGen.getCode(requestModelGet9, "https"), expectedCode);
|
||||
expect(codeGen.getCode(CodegenLanguage.har, requestModelGet9, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('GET 10', () {
|
||||
@ -184,7 +194,8 @@ void main() {
|
||||
]
|
||||
}""";
|
||||
expect(
|
||||
harCodeGen.getCode(
|
||||
codeGen.getCode(
|
||||
CodegenLanguage.har,
|
||||
requestModelGet10,
|
||||
"https",
|
||||
),
|
||||
@ -213,7 +224,8 @@ void main() {
|
||||
}
|
||||
]
|
||||
}""";
|
||||
expect(harCodeGen.getCode(requestModelGet11, "https"), expectedCode);
|
||||
expect(codeGen.getCode(CodegenLanguage.har, requestModelGet11, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('GET 12', () {
|
||||
@ -224,7 +236,8 @@ void main() {
|
||||
"queryString": [],
|
||||
"headers": []
|
||||
}""";
|
||||
expect(harCodeGen.getCode(requestModelGet12, "https"), expectedCode);
|
||||
expect(codeGen.getCode(CodegenLanguage.har, requestModelGet12, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
});
|
||||
|
||||
@ -237,7 +250,8 @@ void main() {
|
||||
"queryString": [],
|
||||
"headers": []
|
||||
}""";
|
||||
expect(harCodeGen.getCode(requestModelHead1, "https"), expectedCode);
|
||||
expect(codeGen.getCode(CodegenLanguage.har, requestModelHead1, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('HEAD 2', () {
|
||||
@ -248,7 +262,8 @@ void main() {
|
||||
"queryString": [],
|
||||
"headers": []
|
||||
}""";
|
||||
expect(harCodeGen.getCode(requestModelHead2, "http"), expectedCode);
|
||||
expect(codeGen.getCode(CodegenLanguage.har, requestModelHead2, "http"),
|
||||
expectedCode);
|
||||
});
|
||||
});
|
||||
|
||||
@ -270,7 +285,8 @@ void main() {
|
||||
"text": "{\n\"text\": \"I LOVE Flutter\"\n}"
|
||||
}
|
||||
}""";
|
||||
expect(harCodeGen.getCode(requestModelPost1, "https"), expectedCode);
|
||||
expect(codeGen.getCode(CodegenLanguage.har, requestModelPost1, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('POST 2', () {
|
||||
@ -287,10 +303,11 @@ void main() {
|
||||
],
|
||||
"postData": {
|
||||
"mimeType": "application/json",
|
||||
"text": "{\n\"text\": \"I LOVE Flutter\"\n}"
|
||||
"text": "{\n\"text\": \"I LOVE Flutter\",\n\"flag\": null,\n\"male\": true,\n\"female\": false,\n\"no\": 1.2,\n\"arr\": [\"null\", \"true\", \"false\", null]\n}"
|
||||
}
|
||||
}""";
|
||||
expect(harCodeGen.getCode(requestModelPost2, "https"), expectedCode);
|
||||
expect(codeGen.getCode(CodegenLanguage.har, requestModelPost2, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('POST 3', () {
|
||||
@ -314,7 +331,242 @@ void main() {
|
||||
"text": "{\n\"text\": \"I LOVE Flutter\"\n}"
|
||||
}
|
||||
}""";
|
||||
expect(harCodeGen.getCode(requestModelPost3, "https"), expectedCode);
|
||||
expect(codeGen.getCode(CodegenLanguage.har, requestModelPost3, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('POST 4', () {
|
||||
const expectedCode = r"""{
|
||||
"method": "POST",
|
||||
"url": "https://api.apidash.dev/io/form",
|
||||
"httpVersion": "HTTP/1.1",
|
||||
"queryString": [],
|
||||
"headers": [
|
||||
{
|
||||
"name": "Content-Type",
|
||||
"value": "multipart/form-data; boundary=d43e2510-a25e-1f08-b0a5-591aeb704467"
|
||||
}
|
||||
],
|
||||
"postData": {
|
||||
"mimeType": "multipart/form-data; boundary=d43e2510-a25e-1f08-b0a5-591aeb704467",
|
||||
"params": [
|
||||
{
|
||||
"name": "text",
|
||||
"value": "API"
|
||||
},
|
||||
{
|
||||
"name": "sep",
|
||||
"value": "|"
|
||||
},
|
||||
{
|
||||
"name": "times",
|
||||
"value": "3"
|
||||
}
|
||||
]
|
||||
}
|
||||
}""";
|
||||
expect(
|
||||
codeGen.getCode(CodegenLanguage.har, requestModelPost4, "https",
|
||||
boundary: "d43e2510-a25e-1f08-b0a5-591aeb704467"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('POST 5', () {
|
||||
const expectedCode = r"""{
|
||||
"method": "POST",
|
||||
"url": "https://api.apidash.dev/io/form",
|
||||
"httpVersion": "HTTP/1.1",
|
||||
"queryString": [],
|
||||
"headers": [
|
||||
{
|
||||
"name": "Content-Type",
|
||||
"value": "multipart/form-data; boundary=ce268b20-a3e6-1f08-b0a5-591aeb704467"
|
||||
},
|
||||
{
|
||||
"name": "User-Agent",
|
||||
"value": "Test Agent"
|
||||
}
|
||||
],
|
||||
"postData": {
|
||||
"mimeType": "multipart/form-data; boundary=ce268b20-a3e6-1f08-b0a5-591aeb704467",
|
||||
"params": [
|
||||
{
|
||||
"name": "text",
|
||||
"value": "API"
|
||||
},
|
||||
{
|
||||
"name": "sep",
|
||||
"value": "|"
|
||||
},
|
||||
{
|
||||
"name": "times",
|
||||
"value": "3"
|
||||
}
|
||||
]
|
||||
}
|
||||
}""";
|
||||
expect(
|
||||
codeGen.getCode(CodegenLanguage.har, requestModelPost5, "https",
|
||||
boundary: "ce268b20-a3e6-1f08-b0a5-591aeb704467"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('POST 6', () {
|
||||
const expectedCode = r"""{
|
||||
"method": "POST",
|
||||
"url": "https://api.apidash.dev/io/img",
|
||||
"httpVersion": "HTTP/1.1",
|
||||
"queryString": [],
|
||||
"headers": [
|
||||
{
|
||||
"name": "Content-Type",
|
||||
"value": "multipart/form-data; boundary=c90d21a0-a44d-1f08-b0a5-591aeb704467"
|
||||
}
|
||||
],
|
||||
"postData": {
|
||||
"mimeType": "multipart/form-data; boundary=c90d21a0-a44d-1f08-b0a5-591aeb704467",
|
||||
"params": [
|
||||
{
|
||||
"name": "token",
|
||||
"value": "xyz"
|
||||
},
|
||||
{
|
||||
"name": "imfile",
|
||||
"fileName": "1.png"
|
||||
}
|
||||
]
|
||||
}
|
||||
}""";
|
||||
expect(
|
||||
codeGen.getCode(CodegenLanguage.har, requestModelPost6, "https",
|
||||
boundary: "c90d21a0-a44d-1f08-b0a5-591aeb704467"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('POST 7', () {
|
||||
const expectedCode = r"""{
|
||||
"method": "POST",
|
||||
"url": "https://api.apidash.dev/io/img",
|
||||
"httpVersion": "HTTP/1.1",
|
||||
"queryString": [],
|
||||
"headers": [
|
||||
{
|
||||
"name": "Content-Type",
|
||||
"value": "multipart/form-data; boundary=4ac86770-a4dc-1f08-b0a5-591aeb704467"
|
||||
}
|
||||
],
|
||||
"postData": {
|
||||
"mimeType": "multipart/form-data; boundary=4ac86770-a4dc-1f08-b0a5-591aeb704467",
|
||||
"params": [
|
||||
{
|
||||
"name": "token",
|
||||
"value": "xyz"
|
||||
},
|
||||
{
|
||||
"name": "imfile",
|
||||
"fileName": "1.png"
|
||||
}
|
||||
]
|
||||
}
|
||||
}""";
|
||||
expect(
|
||||
codeGen.getCode(CodegenLanguage.har, requestModelPost7, "https",
|
||||
boundary: "4ac86770-a4dc-1f08-b0a5-591aeb704467"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('POST 8', () {
|
||||
const expectedCode = r"""{
|
||||
"method": "POST",
|
||||
"url": "https://api.apidash.dev/io/form?size=2&len=3",
|
||||
"httpVersion": "HTTP/1.1",
|
||||
"queryString": [
|
||||
{
|
||||
"name": "size",
|
||||
"value": "2"
|
||||
},
|
||||
{
|
||||
"name": "len",
|
||||
"value": "3"
|
||||
}
|
||||
],
|
||||
"headers": [
|
||||
{
|
||||
"name": "Content-Type",
|
||||
"value": "multipart/form-data; boundary=78403a20-a54a-1f08-b0a5-591aeb704467"
|
||||
}
|
||||
],
|
||||
"postData": {
|
||||
"mimeType": "multipart/form-data; boundary=78403a20-a54a-1f08-b0a5-591aeb704467",
|
||||
"params": [
|
||||
{
|
||||
"name": "text",
|
||||
"value": "API"
|
||||
},
|
||||
{
|
||||
"name": "sep",
|
||||
"value": "|"
|
||||
},
|
||||
{
|
||||
"name": "times",
|
||||
"value": "3"
|
||||
}
|
||||
]
|
||||
}
|
||||
}""";
|
||||
expect(
|
||||
codeGen.getCode(CodegenLanguage.har, requestModelPost8, "https",
|
||||
boundary: "78403a20-a54a-1f08-b0a5-591aeb704467"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('POST 9', () {
|
||||
const expectedCode = r"""{
|
||||
"method": "POST",
|
||||
"url": "https://api.apidash.dev/io/img?size=2&len=3",
|
||||
"httpVersion": "HTTP/1.1",
|
||||
"queryString": [
|
||||
{
|
||||
"name": "size",
|
||||
"value": "2"
|
||||
},
|
||||
{
|
||||
"name": "len",
|
||||
"value": "3"
|
||||
}
|
||||
],
|
||||
"headers": [
|
||||
{
|
||||
"name": "Content-Type",
|
||||
"value": "multipart/form-data; boundary=2d9cd390-a593-1f08-b0a5-591aeb704467"
|
||||
},
|
||||
{
|
||||
"name": "User-Agent",
|
||||
"value": "Test Agent"
|
||||
},
|
||||
{
|
||||
"name": "Keep-Alive",
|
||||
"value": "true"
|
||||
}
|
||||
],
|
||||
"postData": {
|
||||
"mimeType": "multipart/form-data; boundary=2d9cd390-a593-1f08-b0a5-591aeb704467",
|
||||
"params": [
|
||||
{
|
||||
"name": "token",
|
||||
"value": "xyz"
|
||||
},
|
||||
{
|
||||
"name": "imfile",
|
||||
"fileName": "1.png"
|
||||
}
|
||||
]
|
||||
}
|
||||
}""";
|
||||
expect(
|
||||
codeGen.getCode(CodegenLanguage.har, requestModelPost9, "https",
|
||||
boundary: "2d9cd390-a593-1f08-b0a5-591aeb704467"),
|
||||
expectedCode);
|
||||
});
|
||||
});
|
||||
|
||||
@ -336,7 +588,8 @@ void main() {
|
||||
"text": "{\n\"name\": \"morpheus\",\n\"job\": \"zion resident\"\n}"
|
||||
}
|
||||
}""";
|
||||
expect(harCodeGen.getCode(requestModelPut1, "https"), expectedCode);
|
||||
expect(codeGen.getCode(CodegenLanguage.har, requestModelPut1, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
});
|
||||
|
||||
@ -358,7 +611,8 @@ void main() {
|
||||
"text": "{\n\"name\": \"marfeus\",\n\"job\": \"accountant\"\n}"
|
||||
}
|
||||
}""";
|
||||
expect(harCodeGen.getCode(requestModelPatch1, "https"), expectedCode);
|
||||
expect(codeGen.getCode(CodegenLanguage.har, requestModelPatch1, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
});
|
||||
|
||||
@ -371,7 +625,8 @@ void main() {
|
||||
"queryString": [],
|
||||
"headers": []
|
||||
}""";
|
||||
expect(harCodeGen.getCode(requestModelDelete1, "https"), expectedCode);
|
||||
expect(codeGen.getCode(CodegenLanguage.har, requestModelDelete1, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
|
||||
test('DELETE 2', () {
|
||||
@ -391,7 +646,8 @@ void main() {
|
||||
"text": "{\n\"name\": \"marfeus\",\n\"job\": \"accountant\"\n}"
|
||||
}
|
||||
}""";
|
||||
expect(harCodeGen.getCode(requestModelDelete2, "https"), expectedCode);
|
||||
expect(codeGen.getCode(CodegenLanguage.har, requestModelDelete2, "https"),
|
||||
expectedCode);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
Reference in New Issue
Block a user