mirror of
https://github.com/foss42/apidash.git
synced 2025-06-28 11:27:06 +08:00
Update curl_parser
This commit is contained in:
@ -1,8 +1,10 @@
|
|||||||
import 'package:apidash_core/apidash_core.dart';
|
|
||||||
import 'package:args/args.dart';
|
import 'package:args/args.dart';
|
||||||
import 'package:equatable/equatable.dart';
|
import 'package:equatable/equatable.dart';
|
||||||
|
import 'package:seed/seed.dart';
|
||||||
import '../utils/string.dart';
|
import '../utils/string.dart';
|
||||||
|
|
||||||
|
const kHeaderContentType = "Content-Type";
|
||||||
|
|
||||||
/// A representation of a cURL command in Dart.
|
/// A representation of a cURL command in Dart.
|
||||||
///
|
///
|
||||||
/// The Curl class provides methods for parsing a cURL command string
|
/// The Curl class provides methods for parsing a cURL command string
|
||||||
@ -164,7 +166,10 @@ class Curl extends Equatable {
|
|||||||
formData.add(formDataModel);
|
formData.add(formDataModel);
|
||||||
}
|
}
|
||||||
headers ??= <String, String>{};
|
headers ??= <String, String>{};
|
||||||
headers[kHeaderContentType] = ContentType.formdata.header;
|
if (!(headers.containsKey(kHeaderContentType) ||
|
||||||
|
headers.containsKey(kHeaderContentType.toLowerCase()))) {
|
||||||
|
headers[kHeaderContentType] = "multipart/form-data";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Handle URL and query parameters
|
// Handle URL and query parameters
|
||||||
|
@ -19,9 +19,8 @@ environment:
|
|||||||
dependencies:
|
dependencies:
|
||||||
args: ^2.5.0
|
args: ^2.5.0
|
||||||
equatable: ^2.0.5
|
equatable: ^2.0.5
|
||||||
|
seed: ^0.0.1
|
||||||
shlex: ^2.0.2
|
shlex: ^2.0.2
|
||||||
apidash_core:
|
|
||||||
path: ../apidash_core
|
|
||||||
|
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
lints: ^2.1.0
|
lints: ^2.1.0
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import 'package:apidash_core/apidash_core.dart';
|
|
||||||
import 'package:curl_parser/curl_parser.dart';
|
import 'package:curl_parser/curl_parser.dart';
|
||||||
|
import 'package:seed/seed.dart';
|
||||||
import 'package:test/test.dart';
|
import 'package:test/test.dart';
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
import 'package:apidash_core/apidash_core.dart';
|
|
||||||
import 'package:curl_parser/curl_parser.dart';
|
import 'package:curl_parser/curl_parser.dart';
|
||||||
|
import 'package:seed/seed.dart';
|
||||||
import 'package:test/test.dart';
|
import 'package:test/test.dart';
|
||||||
|
|
||||||
final apiUri = Uri.parse('https://api.apidash.dev');
|
final apiUri = Uri.parse('https://api.apidash.dev');
|
||||||
@ -49,6 +49,69 @@ void main() {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test(
|
||||||
|
'parse POST request with multipart/form-data if not specified in headers',
|
||||||
|
() {
|
||||||
|
const curl = r'''curl -X POST 'https://api.apidash.dev/io/img' \
|
||||||
|
-F "imfile=@/path/to/image.jpg" \
|
||||||
|
-F "token=john"
|
||||||
|
''';
|
||||||
|
|
||||||
|
expect(
|
||||||
|
Curl.parse(curl),
|
||||||
|
Curl(
|
||||||
|
method: 'POST',
|
||||||
|
uri: Uri.parse('https://api.apidash.dev/io/img'),
|
||||||
|
headers: {"Content-Type": "multipart/form-data"},
|
||||||
|
form: true,
|
||||||
|
formData: [
|
||||||
|
FormDataModel(
|
||||||
|
name: "imfile",
|
||||||
|
value: "/path/to/image.jpg",
|
||||||
|
type: FormDataType.file,
|
||||||
|
),
|
||||||
|
FormDataModel(
|
||||||
|
name: "token",
|
||||||
|
value: "john",
|
||||||
|
type: FormDataType.text,
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
test(
|
||||||
|
'parse POST request with multipart/form-data but some other content type provided by user',
|
||||||
|
() {
|
||||||
|
const curl = r'''curl -X POST 'https://api.apidash.dev/io/img' \
|
||||||
|
-H 'content-type: some-data' \
|
||||||
|
-F "imfile=@/path/to/image.jpg" \
|
||||||
|
-F "token=john"
|
||||||
|
''';
|
||||||
|
|
||||||
|
expect(
|
||||||
|
Curl.parse(curl),
|
||||||
|
Curl(
|
||||||
|
method: 'POST',
|
||||||
|
uri: Uri.parse('https://api.apidash.dev/io/img'),
|
||||||
|
headers: {"content-type": "some-data"},
|
||||||
|
form: true,
|
||||||
|
formData: [
|
||||||
|
FormDataModel(
|
||||||
|
name: "imfile",
|
||||||
|
value: "/path/to/image.jpg",
|
||||||
|
type: FormDataType.file,
|
||||||
|
),
|
||||||
|
FormDataModel(
|
||||||
|
name: "token",
|
||||||
|
value: "john",
|
||||||
|
type: FormDataType.text,
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
test('parse POST request with x-www-form-urlencoded', () {
|
test('parse POST request with x-www-form-urlencoded', () {
|
||||||
const curl = r'''curl -X 'POST' \
|
const curl = r'''curl -X 'POST' \
|
||||||
'https://api.apidash.dev/io/form' \
|
'https://api.apidash.dev/io/form' \
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import 'package:apidash_core/apidash_core.dart';
|
|
||||||
import 'package:curl_parser/curl_parser.dart';
|
import 'package:curl_parser/curl_parser.dart';
|
||||||
|
import 'package:seed/seed.dart';
|
||||||
import 'package:test/test.dart';
|
import 'package:test/test.dart';
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
|
Reference in New Issue
Block a user