diff --git a/packages/curl_parser/lib/models/curl.dart b/packages/curl_parser/lib/models/curl.dart index a0316401..f51d9d05 100644 --- a/packages/curl_parser/lib/models/curl.dart +++ b/packages/curl_parser/lib/models/curl.dart @@ -1,8 +1,10 @@ -import 'package:apidash_core/apidash_core.dart'; import 'package:args/args.dart'; import 'package:equatable/equatable.dart'; +import 'package:seed/seed.dart'; import '../utils/string.dart'; +const kHeaderContentType = "Content-Type"; + /// A representation of a cURL command in Dart. /// /// The Curl class provides methods for parsing a cURL command string @@ -164,7 +166,10 @@ class Curl extends Equatable { formData.add(formDataModel); } headers ??= {}; - headers[kHeaderContentType] = ContentType.formdata.header; + if (!(headers.containsKey(kHeaderContentType) || + headers.containsKey(kHeaderContentType.toLowerCase()))) { + headers[kHeaderContentType] = "multipart/form-data"; + } } // Handle URL and query parameters diff --git a/packages/curl_parser/pubspec.yaml b/packages/curl_parser/pubspec.yaml index 85e37f8f..1f3c969f 100644 --- a/packages/curl_parser/pubspec.yaml +++ b/packages/curl_parser/pubspec.yaml @@ -19,9 +19,8 @@ environment: dependencies: args: ^2.5.0 equatable: ^2.0.5 + seed: ^0.0.1 shlex: ^2.0.2 - apidash_core: - path: ../apidash_core dev_dependencies: lints: ^2.1.0 diff --git a/packages/curl_parser/test/curl_model_test.dart b/packages/curl_parser/test/curl_model_test.dart index 2521b35c..34a8e40a 100644 --- a/packages/curl_parser/test/curl_model_test.dart +++ b/packages/curl_parser/test/curl_model_test.dart @@ -1,5 +1,5 @@ -import 'package:apidash_core/apidash_core.dart'; import 'package:curl_parser/curl_parser.dart'; +import 'package:seed/seed.dart'; import 'package:test/test.dart'; void main() { diff --git a/packages/curl_parser/test/curl_parser_test.dart b/packages/curl_parser/test/curl_parser_test.dart index 97037355..53570dc8 100644 --- a/packages/curl_parser/test/curl_parser_test.dart +++ b/packages/curl_parser/test/curl_parser_test.dart @@ -1,6 +1,6 @@ import 'dart:io'; -import 'package:apidash_core/apidash_core.dart'; import 'package:curl_parser/curl_parser.dart'; +import 'package:seed/seed.dart'; import 'package:test/test.dart'; 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', () { const curl = r'''curl -X 'POST' \ 'https://api.apidash.dev/io/form' \ diff --git a/packages/curl_parser/test/dart_to_curl_test.dart b/packages/curl_parser/test/dart_to_curl_test.dart index 1f874a32..6be1ed38 100644 --- a/packages/curl_parser/test/dart_to_curl_test.dart +++ b/packages/curl_parser/test/dart_to_curl_test.dart @@ -1,5 +1,5 @@ -import 'package:apidash_core/apidash_core.dart'; import 'package:curl_parser/curl_parser.dart'; +import 'package:seed/seed.dart'; import 'package:test/test.dart'; void main() {