From f495d7b2336e2225cdc95d73e6b53e07c7f0f39a Mon Sep 17 00:00:00 2001 From: Nishant Kumar Date: Tue, 12 Mar 2024 23:57:42 +0530 Subject: [PATCH 1/7] fix: testcases and dart dio codegen --- lib/codegen/dart/dio.dart | 8 +- test/codegen/dart_dio_codegen_test.dart | 336 +++++++++++++++++++++++- 2 files changed, 339 insertions(+), 5 deletions(-) diff --git a/lib/codegen/dart/dio.dart b/lib/codegen/dart/dio.dart index c05b0b68..a32ba18c 100644 --- a/lib/codegen/dart/dio.dart +++ b/lib/codegen/dart/dio.dart @@ -55,12 +55,12 @@ class DartDioCodeGen { final List> formDataList = ${json.encode(formData)}; for (var formField in formDataList) { if (formField['type'] == 'file') { - formData.files.add(MapEntry( + data.files.add(MapEntry( formField['name'], await MultipartFile.fromFile(formField['value'], filename: formField['value']), )); } else { - formData.fields.add(MapEntry(formField['name'], formField['value'])); + data.fields.add(MapEntry(formField['name'], formField['value'])); } } '''); @@ -79,11 +79,11 @@ class DartDioCodeGen { dataExp = declareFinal('data').assign(strContent); // when add new type of [ContentType], need update [dataExp]. case ContentType.formdata: - dataExp = declareFinal('data').assign(refer('FormData()')); + dataExp = declareFinal('data').assign(refer('dio.FormData()')); } } final responseExp = declareFinal('response').assign(InvokeExpression.newOf( - refer('dio.Dio'), + refer('dio.Dio()'), [literalString(url)], { if (queryParamExp != null) 'queryParameters': refer('queryParams'), diff --git a/test/codegen/dart_dio_codegen_test.dart b/test/codegen/dart_dio_codegen_test.dart index 84ae29d4..8439b291 100644 --- a/test/codegen/dart_dio_codegen_test.dart +++ b/test/codegen/dart_dio_codegen_test.dart @@ -486,8 +486,342 @@ void main() async { codeGen.getCode(CodegenLanguage.dartDio, requestModelPost3, "https"), expectedCode); }); - }); + test('POST 4', () { + const expectedCode = r"""import 'package:dio/dio.dart' as dio; +void main() async { + try { + final queryParams = { + 'size': '2', + 'len': '3', + }; + final data = dio.FormData(); + final List> formDataList = [ + {"name": "token", "value": "xyz", "type": "text"}, + {"name": "sep", "value": "|", "type": "text"}, + {"name": "times", "value": "3", "type": "text"} + ]; + for (var formField in formDataList) { + if (formField['type'] == 'file') { + data.files.add(MapEntry( + formField['name'], + await MultipartFile.fromFile(formField['value'], + filename: formField['value']), + )); + } else { + data.fields + .add(MapEntry(formField['name'], formField['value'])); + } + } + + final response = await dio.Dio().post( + 'https://api.apidash.dev/io/form', + queryParameters: queryParams, + options: Options(headers: headers), + data: data, + ); + print(response.statusCode); + print(response.data); + } on DioException catch (e, s) { + print(e.response?.statusCode); + print(e.response?.data); + print(s); + } catch (e, s) { + print(e); + print(s); + } +} +"""; + expect( + codeGen.getCode( + CodegenLanguage.pythonRequests, requestModelPost4, "https"), + expectedCode); + }); + + test('POST 5', () { + const expectedCode = r"""import 'package:dio/dio.dart' as dio; + +void main() async { + try { + final queryParams = { + 'size': '2', + 'len': '3', + }; + final headers = { + 'User-Agent': 'Test Agent', + 'Keep-Alive': 'true', + }; + final data = dio.FormData(); + final List> formDataList = [ + {"name": "token", "value": "xyz", "type": "text"}, + {"name": "sep", "value": "|", "type": "text"}, + {"name": "times", "value": "3", "type": "text"} + ]; + for (var formField in formDataList) { + if (formField['type'] == 'file') { + data.files.add(MapEntry( + formField['name'], + await MultipartFile.fromFile(formField['value'], + filename: formField['value']), + )); + } else { + data.fields + .add(MapEntry(formField['name'], formField['value'])); + } + } + + final response = await dio.Dio().post( + 'https://api.apidash.dev/io/form', + queryParameters: queryParams, + options: Options(headers: headers), + data: data, + ); + print(response.statusCode); + print(response.data); + } on DioException catch (e, s) { + print(e.response?.statusCode); + print(e.response?.data); + print(s); + } catch (e, s) { + print(e); + print(s); + } +} +"""; + expect( + codeGen.getCode( + CodegenLanguage.pythonRequests, requestModelPost5, "https"), + expectedCode); + }); + + test('POST 6', () { + const expectedCode = r"""iimport 'package:dio/dio.dart' as dio; + +void main() async { + try { + final queryParams = { + 'size': '2', + 'len': '3', + }; + final data = dio.FormData(); + final List> formDataList = [ + {"name": "token", "value": "xyz", "type": "text"}, + { + "name": "imfile", + "value": + "/Desktop/mp.jpg", + "type": "file" + } + ]; + for (var formField in formDataList) { + if (formField['type'] == 'file') { + data.files.add(MapEntry( + formField['name'], + await MultipartFile.fromFile(formField['value'], + filename: formField['value']), + )); + } else { + data.fields + .add(MapEntry(formField['name'], formField['value'])); + } + } + + final response = await dio.Dio().post( + 'https://api.apidash.dev/io/img', + queryParameters: queryParams, + options: Options(headers: headers), + data: data, + ); + print(response.statusCode); + print(response.data); + } on DioException catch (e, s) { + print(e.response?.statusCode); + print(e.response?.data); + print(s); + } catch (e, s) { + print(e); + print(s); + } +} +"""; + expect( + codeGen.getCode( + CodegenLanguage.pythonRequests, requestModelPost6, "https"), + expectedCode); + }); + + test('POST 7', () { + const expectedCode = r"""import 'package:dio/dio.dart' as dio; + +void main() async { + try { + final queryParams = { + 'size': '2', + 'len': '3', + }; + final data = dio.FormData(); + final List> formDataList = [ + {"name": "token", "value": "xyz", "type": "text"}, + { + "name": "imfile", + "value": + "/Desktop/mp.jpg", + "type": "file" + } + ]; + for (var formField in formDataList) { + if (formField['type'] == 'file') { + data.files.add(MapEntry( + formField['name'], + await MultipartFile.fromFile(formField['value'], + filename: formField['value']), + )); + } else { + data.fields + .add(MapEntry(formField['name'], formField['value'])); + } + } + + final response = await dio.Dio().post( + 'https://api.apidash.dev/io/img', + queryParameters: queryParams, + options: Options(headers: headers), + data: data, + ); + print(response.statusCode); + print(response.data); + } on DioException catch (e, s) { + print(e.response?.statusCode); + print(e.response?.data); + print(s); + } catch (e, s) { + print(e); + print(s); + } +} +"""; + expect( + codeGen.getCode( + CodegenLanguage.pythonRequests, requestModelPost7, "https"), + expectedCode); + }); + + test('POST 8', () { + const expectedCode = r"""import 'package:dio/dio.dart' as dio; + +void main() async { + try { + final queryParams = { + 'size': '2', + 'len': '3', + }; + final headers = { + 'User-Agent': 'Test Agent', + 'Keep-Alive': 'true', + }; + final data = dio.FormData(); + final List> formDataList = [ + {"name": "token", "value": "xyz", "type": "text"}, + {"name": "sep", "value": "|", "type": "text"}, + {"name": "times", "value": "3", "type": "text"} + ]; + for (var formField in formDataList) { + if (formField['type'] == 'file') { + data.files.add(MapEntry( + formField['name'], + await MultipartFile.fromFile(formField['value'], + filename: formField['value']), + )); + } else { + data.fields + .add(MapEntry(formField['name'], formField['value'])); + } + } + + final response = await dio.Dio().post( + 'https://api.apidash.dev/io/form', + queryParameters: queryParams, + options: Options(headers: headers), + data: data, + ); + print(response.statusCode); + print(response.data); + } on DioException catch (e, s) { + print(e.response?.statusCode); + print(e.response?.data); + print(s); + } catch (e, s) { + print(e); + print(s); + } +} +"""; + expect( + codeGen.getCode( + CodegenLanguage.pythonRequests, requestModelPost8, "https"), + expectedCode); + }); + + test('POST 9', () { + const expectedCode = r"""import 'package:dio/dio.dart' as dio; + +void main() async { + try { + final queryParams = { + 'size': '2', + 'len': '3', + }; + final headers = { + 'User-Agent': 'Test Agent', + 'Keep-Alive': 'true', + }; + final data = dio.FormData(); + final List> formDataList = [ + {"name": "token", "value": "xyz", "type": "text"}, + { + "name": "imfile", + "value": + "/Desktop/mp.jpg", + "type": "file" + } + ]; + for (var formField in formDataList) { + if (formField['type'] == 'file') { + data.files.add(MapEntry( + formField['name'], + await MultipartFile.fromFile(formField['value'], + filename: formField['value']), + )); + } else { + data.fields + .add(MapEntry(formField['name'], formField['value'])); + } + } + + final response = await dio.Dio().post( + 'https://api.apidash.dev/io/img', + queryParameters: queryParams, + options: Options(headers: headers), + data: data, + ); + print(response.statusCode); + print(response.data); + } on DioException catch (e, s) { + print(e.response?.statusCode); + print(e.response?.data); + print(s); + } catch (e, s) { + print(e); + print(s); + } +} +"""; + expect( + codeGen.getCode( + CodegenLanguage.pythonRequests, requestModelPost9, "https"), + expectedCode); + }); + }); group('PUT Request', () { test('PUT 1', () { const expectedCode = r"""import 'package:dio/dio.dart' as dio; From 378f16035bac555546b2abb6fb16db43e1c92e45 Mon Sep 17 00:00:00 2001 From: Nishant Kumar Date: Wed, 13 Mar 2024 00:09:12 +0530 Subject: [PATCH 2/7] package updation --- lib/codegen/dart/dio.dart | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/codegen/dart/dio.dart b/lib/codegen/dart/dio.dart index a32ba18c..63569e28 100644 --- a/lib/codegen/dart/dio.dart +++ b/lib/codegen/dart/dio.dart @@ -57,7 +57,7 @@ class DartDioCodeGen { if (formField['type'] == 'file') { data.files.add(MapEntry( formField['name'], - await MultipartFile.fromFile(formField['value'], filename: formField['value']), + await dio.MultipartFile.fromFile(formField['value'], filename: formField['value']), )); } else { data.fields.add(MapEntry(formField['name'], formField['value'])); @@ -88,7 +88,7 @@ class DartDioCodeGen { { if (queryParamExp != null) 'queryParameters': refer('queryParams'), if (headerExp != null) - 'options': refer('Options').newInstance( + 'options': refer('dio.Options').newInstance( [], {'headers': refer('headers')}, ), @@ -112,7 +112,7 @@ class DartDioCodeGen { refer('print').call([refer('response').property('data')]), ], onError: { - 'DioException': [ + 'dio.DioException': [ refer('print').call([ refer('e').property('response').nullSafeProperty('statusCode'), ]), From 5ae4d0415683204635c2a6a3d191301cf4d0c77f Mon Sep 17 00:00:00 2001 From: Nishant Kumar Date: Wed, 13 Mar 2024 21:53:03 +0530 Subject: [PATCH 3/7] all test cases has been updated regarding dart dio --- test/codegen/dart_dio_codegen_test.dart | 116 ++++++++++++------------ 1 file changed, 58 insertions(+), 58 deletions(-) diff --git a/test/codegen/dart_dio_codegen_test.dart b/test/codegen/dart_dio_codegen_test.dart index 8439b291..d12d7307 100644 --- a/test/codegen/dart_dio_codegen_test.dart +++ b/test/codegen/dart_dio_codegen_test.dart @@ -12,10 +12,10 @@ void main() { void main() async { try { - final response = await dio.Dio.get('https://api.apidash.dev'); + final response = await dio.Dio().get('https://api.apidash.dev'); print(response.statusCode); print(response.data); - } on DioException catch (e, s) { + } on dio.DioException catch (e, s) { print(e.response?.statusCode); print(e.response?.data); print(s); @@ -36,13 +36,13 @@ void main() async { void main() async { try { final queryParams = {'code': 'US'}; - final response = await dio.Dio.get( + final response = await dio.Dio().get( 'https://api.apidash.dev/country/data', queryParameters: queryParams, ); print(response.statusCode); print(response.data); - } on DioException catch (e, s) { + } on dio.DioException catch (e, s) { print(e.response?.statusCode); print(e.response?.data); print(s); @@ -63,13 +63,13 @@ void main() async { void main() async { try { final queryParams = {'code': 'IND'}; - final response = await dio.Dio.get( + final response = await dio.Dio().get( 'https://api.apidash.dev/country/data?code=US', queryParameters: queryParams, ); print(response.statusCode); print(response.data); - } on DioException catch (e, s) { + } on dio.DioException catch (e, s) { print(e.response?.statusCode); print(e.response?.data); print(s); @@ -96,13 +96,13 @@ void main() async { 'add_space': 'true', 'trailing_zeros': 'true', }; - final response = await dio.Dio.get( + final response = await dio.Dio().get( 'https://api.apidash.dev/humanize/social', queryParameters: queryParams, ); print(response.statusCode); print(response.data); - } on DioException catch (e, s) { + } on dio.DioException catch (e, s) { print(e.response?.statusCode); print(e.response?.data); print(s); @@ -123,13 +123,13 @@ void main() async { void main() async { try { final headers = {'User-Agent': 'Test Agent'}; - final response = await dio.Dio.get( + final response = await dio.Dio().get( 'https://api.github.com/repos/foss42/apidash', options: Options(headers: headers), ); print(response.statusCode); print(response.data); - } on DioException catch (e, s) { + } on dio.DioException catch (e, s) { print(e.response?.statusCode); print(e.response?.data); print(s); @@ -151,14 +151,14 @@ void main() async { try { final queryParams = {'raw': 'true'}; final headers = {'User-Agent': 'Test Agent'}; - final response = await dio.Dio.get( + final response = await dio.Dio().get( 'https://api.github.com/repos/foss42/apidash', queryParameters: queryParams, - options: Options(headers: headers), + options: dio.Options(headers: headers), ); print(response.statusCode); print(response.data); - } on DioException catch (e, s) { + } on dio.DioException catch (e, s) { print(e.response?.statusCode); print(e.response?.data); print(s); @@ -178,10 +178,10 @@ void main() async { void main() async { try { - final response = await dio.Dio.get('https://api.apidash.dev'); + final response = await dio.Dio().get('https://api.apidash.dev'); print(response.statusCode); print(response.data); - } on DioException catch (e, s) { + } on dio.DioException catch (e, s) { print(e.response?.statusCode); print(e.response?.data); print(s); @@ -203,14 +203,14 @@ void main() async { try { final queryParams = {'raw': 'true'}; final headers = {'User-Agent': 'Test Agent'}; - final response = await dio.Dio.get( + final response = await dio.Dio().get( 'https://api.github.com/repos/foss42/apidash', queryParameters: queryParams, - options: Options(headers: headers), + options: dio.Options(headers: headers), ); print(response.statusCode); print(response.data); - } on DioException catch (e, s) { + } on dio.DioException catch (e, s) { print(e.response?.statusCode); print(e.response?.data); print(s); @@ -234,13 +234,13 @@ void main() async { 'num': '8700000', 'add_space': 'true', }; - final response = await dio.Dio.get( + final response = await dio.Dio().get( 'https://api.apidash.dev/humanize/social', queryParameters: queryParams, ); print(response.statusCode); print(response.data); - } on DioException catch (e, s) { + } on dio.DioException catch (e, s) { print(e.response?.statusCode); print(e.response?.data); print(s); @@ -261,13 +261,13 @@ void main() async { void main() async { try { final headers = {'User-Agent': 'Test Agent'}; - final response = await dio.Dio.get( + final response = await dio.Dio().get( 'https://api.apidash.dev/humanize/social', - options: Options(headers: headers), + options: dio.Options(headers: headers), ); print(response.statusCode); print(response.data); - } on DioException catch (e, s) { + } on dio.DioException catch (e, s) { print(e.response?.statusCode); print(e.response?.data); print(s); @@ -296,14 +296,14 @@ void main() async { 'digits': '3', }; final headers = {'User-Agent': 'Test Agent'}; - final response = await dio.Dio.get( + final response = await dio.Dio().get( 'https://api.apidash.dev/humanize/social', queryParameters: queryParams, - options: Options(headers: headers), + options: dio.Options(headers: headers), ); print(response.statusCode); print(response.data); - } on DioException catch (e, s) { + } on dio.DioException catch (e, s) { print(e.response?.statusCode); print(e.response?.data); print(s); @@ -323,10 +323,10 @@ void main() async { void main() async { try { - final response = await dio.Dio.get('https://api.apidash.dev/humanize/social'); + final response = await dio.Dio().get('https://api.apidash.dev/humanize/social'); print(response.statusCode); print(response.data); - } on DioException catch (e, s) { + } on dio.DioException catch (e, s) { print(e.response?.statusCode); print(e.response?.data); print(s); @@ -348,10 +348,10 @@ void main() async { void main() async { try { - final response = await dio.Dio.head('https://api.apidash.dev'); + final response = await dio.Dio().head('https://api.apidash.dev'); print(response.statusCode); print(response.data); - } on DioException catch (e, s) { + } on dio.DioException catch (e, s) { print(e.response?.statusCode); print(e.response?.data); print(s); @@ -371,10 +371,10 @@ void main() async { void main() async { try { - final response = await dio.Dio.head('http://api.apidash.dev'); + final response = await dio.Dio().head('http://api.apidash.dev'); print(response.statusCode); print(response.data); - } on DioException catch (e, s) { + } on dio.DioException catch (e, s) { print(e.response?.statusCode); print(e.response?.data); print(s); @@ -399,13 +399,13 @@ void main() async { final data = r'''{ "text": "I LOVE Flutter" }'''; - final response = await dio.Dio.post( + final response = await dio.Dio().post( 'https://api.apidash.dev/case/lower', data: data, ); print(response.statusCode); print(response.data); - } on DioException catch (e, s) { + } on dio.DioException catch (e, s) { print(e.response?.statusCode); print(e.response?.data); print(s); @@ -434,13 +434,13 @@ void main() async { "no": 1.2, "arr": ["null", "true", "false", null] }'''); - final response = await dio.Dio.post( + final response = await dio.Dio().post( 'https://api.apidash.dev/case/lower', data: data, ); print(response.statusCode); print(response.data); - } on DioException catch (e, s) { + } on dio.DioException catch (e, s) { print(e.response?.statusCode); print(e.response?.data); print(s); @@ -465,14 +465,14 @@ void main() async { final data = convert.json.decode(r'''{ "text": "I LOVE Flutter" }'''); - final response = await dio.Dio.post( + final response = await dio.Dio().post( 'https://api.apidash.dev/case/lower', options: Options(headers: headers), data: data, ); print(response.statusCode); print(response.data); - } on DioException catch (e, s) { + } on dio.DioException catch (e, s) { print(e.response?.statusCode); print(e.response?.data); print(s); @@ -517,12 +517,12 @@ void main() async { final response = await dio.Dio().post( 'https://api.apidash.dev/io/form', queryParameters: queryParams, - options: Options(headers: headers), + options: dio.Options(headers: headers), data: data, ); print(response.statusCode); print(response.data); - } on DioException catch (e, s) { + } on dio.DioException catch (e, s) { print(e.response?.statusCode); print(e.response?.data); print(s); @@ -573,12 +573,12 @@ void main() async { final response = await dio.Dio().post( 'https://api.apidash.dev/io/form', queryParameters: queryParams, - options: Options(headers: headers), + options: dio.Options(headers: headers), data: data, ); print(response.statusCode); print(response.data); - } on DioException catch (e, s) { + } on dio.DioException catch (e, s) { print(e.response?.statusCode); print(e.response?.data); print(s); @@ -629,12 +629,12 @@ void main() async { final response = await dio.Dio().post( 'https://api.apidash.dev/io/img', queryParameters: queryParams, - options: Options(headers: headers), + options: dio.Options(headers: headers), data: data, ); print(response.statusCode); print(response.data); - } on DioException catch (e, s) { + } on dio.DioException catch (e, s) { print(e.response?.statusCode); print(e.response?.data); print(s); @@ -685,12 +685,12 @@ void main() async { final response = await dio.Dio().post( 'https://api.apidash.dev/io/img', queryParameters: queryParams, - options: Options(headers: headers), + options: dio.Options(headers: headers), data: data, ); print(response.statusCode); print(response.data); - } on DioException catch (e, s) { + } on dio.DioException catch (e, s) { print(e.response?.statusCode); print(e.response?.data); print(s); @@ -741,12 +741,12 @@ void main() async { final response = await dio.Dio().post( 'https://api.apidash.dev/io/form', queryParameters: queryParams, - options: Options(headers: headers), + options: dio.Options(headers: headers), data: data, ); print(response.statusCode); print(response.data); - } on DioException catch (e, s) { + } on dio.DioException catch (e, s) { print(e.response?.statusCode); print(e.response?.data); print(s); @@ -801,12 +801,12 @@ void main() async { final response = await dio.Dio().post( 'https://api.apidash.dev/io/img', queryParameters: queryParams, - options: Options(headers: headers), + options: dio.Options(headers: headers), data: data, ); print(response.statusCode); print(response.data); - } on DioException catch (e, s) { + } on dio.DioException catch (e, s) { print(e.response?.statusCode); print(e.response?.data); print(s); @@ -833,13 +833,13 @@ void main() async { "name": "morpheus", "job": "zion resident" }'''); - final response = await dio.Dio.put( + final response = await dio.Dio().put( 'https://reqres.in/api/users/2', data: data, ); print(response.statusCode); print(response.data); - } on DioException catch (e, s) { + } on dio.DioException catch (e, s) { print(e.response?.statusCode); print(e.response?.data); print(s); @@ -866,13 +866,13 @@ void main() async { "name": "marfeus", "job": "accountant" }'''); - final response = await dio.Dio.patch( + final response = await dio.Dio().patch( 'https://reqres.in/api/users/2', data: data, ); print(response.statusCode); print(response.data); - } on DioException catch (e, s) { + } on dio.DioException catch (e, s) { print(e.response?.statusCode); print(e.response?.data); print(s); @@ -894,10 +894,10 @@ void main() async { void main() async { try { - final response = await dio.Dio.delete('https://reqres.in/api/users/2'); + final response = await dio.Dio().delete('https://reqres.in/api/users/2'); print(response.statusCode); print(response.data); - } on DioException catch (e, s) { + } on dio.DioException catch (e, s) { print(e.response?.statusCode); print(e.response?.data); print(s); @@ -923,13 +923,13 @@ void main() async { "name": "marfeus", "job": "accountant" }'''); - final response = await dio.Dio.delete( + final response = await dio.Dio().delete( 'https://reqres.in/api/users/2', data: data, ); print(response.statusCode); print(response.data); - } on DioException catch (e, s) { + } on dio.DioException catch (e, s) { print(e.response?.statusCode); print(e.response?.data); print(s); From bacc221452659012483fcb188bbc3866313fbd5d Mon Sep 17 00:00:00 2001 From: Nishant Kumar Date: Wed, 13 Mar 2024 22:24:11 +0530 Subject: [PATCH 4/7] minor changes in test cases --- test/codegen/dart_dio_codegen_test.dart | 77 ++++++++----------------- 1 file changed, 24 insertions(+), 53 deletions(-) diff --git a/test/codegen/dart_dio_codegen_test.dart b/test/codegen/dart_dio_codegen_test.dart index d12d7307..1a612a9a 100644 --- a/test/codegen/dart_dio_codegen_test.dart +++ b/test/codegen/dart_dio_codegen_test.dart @@ -125,7 +125,7 @@ void main() async { final headers = {'User-Agent': 'Test Agent'}; final response = await dio.Dio().get( 'https://api.github.com/repos/foss42/apidash', - options: Options(headers: headers), + options: dio.Options(headers: headers), ); print(response.statusCode); print(response.data); @@ -467,7 +467,7 @@ void main() async { }'''); final response = await dio.Dio().post( 'https://api.apidash.dev/case/lower', - options: Options(headers: headers), + options: dio.Options(headers: headers), data: data, ); print(response.statusCode); @@ -491,13 +491,9 @@ void main() async { void main() async { try { - final queryParams = { - 'size': '2', - 'len': '3', - }; final data = dio.FormData(); final List> formDataList = [ - {"name": "token", "value": "xyz", "type": "text"}, + {"name": "text", "value": "xyz", "type": "text"}, {"name": "sep", "value": "|", "type": "text"}, {"name": "times", "value": "3", "type": "text"} ]; @@ -505,7 +501,7 @@ void main() async { if (formField['type'] == 'file') { data.files.add(MapEntry( formField['name'], - await MultipartFile.fromFile(formField['value'], + await dio.MultipartFile.fromFile(formField['value'], filename: formField['value']), )); } else { @@ -533,8 +529,7 @@ void main() async { } """; expect( - codeGen.getCode( - CodegenLanguage.pythonRequests, requestModelPost4, "https"), + codeGen.getCode(CodegenLanguage.dartDio, requestModelPost4, "https"), expectedCode); }); @@ -543,17 +538,13 @@ void main() async { void main() async { try { - final queryParams = { - 'size': '2', - 'len': '3', - }; final headers = { 'User-Agent': 'Test Agent', 'Keep-Alive': 'true', }; final data = dio.FormData(); final List> formDataList = [ - {"name": "token", "value": "xyz", "type": "text"}, + {"name": "text", "value": "xyz", "type": "text"}, {"name": "sep", "value": "|", "type": "text"}, {"name": "times", "value": "3", "type": "text"} ]; @@ -561,7 +552,7 @@ void main() async { if (formField['type'] == 'file') { data.files.add(MapEntry( formField['name'], - await MultipartFile.fromFile(formField['value'], + await dio.MultipartFile.fromFile(formField['value'], filename: formField['value']), )); } else { @@ -589,27 +580,21 @@ void main() async { } """; expect( - codeGen.getCode( - CodegenLanguage.pythonRequests, requestModelPost5, "https"), + codeGen.getCode(CodegenLanguage.dartDio, requestModelPost5, "https"), expectedCode); }); test('POST 6', () { - const expectedCode = r"""iimport 'package:dio/dio.dart' as dio; + const expectedCode = r"""import 'package:dio/dio.dart' as dio; void main() async { try { - final queryParams = { - 'size': '2', - 'len': '3', - }; final data = dio.FormData(); final List> formDataList = [ - {"name": "token", "value": "xyz", "type": "text"}, + {"name": "text", "value": "xyz", "type": "text"}, { "name": "imfile", - "value": - "/Desktop/mp.jpg", + "value": "/Desktop/mp.jpg", "type": "file" } ]; @@ -617,7 +602,7 @@ void main() async { if (formField['type'] == 'file') { data.files.add(MapEntry( formField['name'], - await MultipartFile.fromFile(formField['value'], + await dio.MultipartFile.fromFile(formField['value'], filename: formField['value']), )); } else { @@ -645,8 +630,7 @@ void main() async { } """; expect( - codeGen.getCode( - CodegenLanguage.pythonRequests, requestModelPost6, "https"), + codeGen.getCode(CodegenLanguage.dartDio, requestModelPost6, "https"), expectedCode); }); @@ -655,17 +639,12 @@ void main() async { void main() async { try { - final queryParams = { - 'size': '2', - 'len': '3', - }; final data = dio.FormData(); final List> formDataList = [ - {"name": "token", "value": "xyz", "type": "text"}, + {"name": "text", "value": "xyz", "type": "text"}, { "name": "imfile", - "value": - "/Desktop/mp.jpg", + "value": "/Desktop/mp.jpg", "type": "file" } ]; @@ -673,7 +652,7 @@ void main() async { if (formField['type'] == 'file') { data.files.add(MapEntry( formField['name'], - await MultipartFile.fromFile(formField['value'], + await dio.MultipartFile.fromFile(formField['value'], filename: formField['value']), )); } else { @@ -701,8 +680,7 @@ void main() async { } """; expect( - codeGen.getCode( - CodegenLanguage.pythonRequests, requestModelPost7, "https"), + codeGen.getCode(CodegenLanguage.dartDio, requestModelPost7, "https"), expectedCode); }); @@ -715,13 +693,9 @@ void main() async { 'size': '2', 'len': '3', }; - final headers = { - 'User-Agent': 'Test Agent', - 'Keep-Alive': 'true', - }; final data = dio.FormData(); final List> formDataList = [ - {"name": "token", "value": "xyz", "type": "text"}, + {"name": "text", "value": "xyz", "type": "text"}, {"name": "sep", "value": "|", "type": "text"}, {"name": "times", "value": "3", "type": "text"} ]; @@ -729,7 +703,7 @@ void main() async { if (formField['type'] == 'file') { data.files.add(MapEntry( formField['name'], - await MultipartFile.fromFile(formField['value'], + await dio.MultipartFile.fromFile(formField['value'], filename: formField['value']), )); } else { @@ -757,8 +731,7 @@ void main() async { } """; expect( - codeGen.getCode( - CodegenLanguage.pythonRequests, requestModelPost8, "https"), + codeGen.getCode(CodegenLanguage.dartDio, requestModelPost8, "https"), expectedCode); }); @@ -777,11 +750,10 @@ void main() async { }; final data = dio.FormData(); final List> formDataList = [ - {"name": "token", "value": "xyz", "type": "text"}, + {"name": "text", "value": "xyz", "type": "text"}, { "name": "imfile", - "value": - "/Desktop/mp.jpg", + "value": "/Documents/up/1.png", "type": "file" } ]; @@ -789,7 +761,7 @@ void main() async { if (formField['type'] == 'file') { data.files.add(MapEntry( formField['name'], - await MultipartFile.fromFile(formField['value'], + await dio.MultipartFile.fromFile(formField['value'], filename: formField['value']), )); } else { @@ -817,8 +789,7 @@ void main() async { } """; expect( - codeGen.getCode( - CodegenLanguage.pythonRequests, requestModelPost9, "https"), + codeGen.getCode(CodegenLanguage.dartDio, requestModelPost9, "https"), expectedCode); }); }); From 1c43e8d8634a0a70e8ce21c25fd31f9e19715073 Mon Sep 17 00:00:00 2001 From: Nishant Kumar Date: Thu, 14 Mar 2024 00:11:15 +0530 Subject: [PATCH 5/7] cofigured with mail --- test/codegen/dart_dio_codegen_test.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/codegen/dart_dio_codegen_test.dart b/test/codegen/dart_dio_codegen_test.dart index 1a612a9a..f14af748 100644 --- a/test/codegen/dart_dio_codegen_test.dart +++ b/test/codegen/dart_dio_codegen_test.dart @@ -493,7 +493,7 @@ void main() async { try { final data = dio.FormData(); final List> formDataList = [ - {"name": "text", "value": "xyz", "type": "text"}, + {"name": "token", "value": "xyz", "type": "text"}, {"name": "sep", "value": "|", "type": "text"}, {"name": "times", "value": "3", "type": "text"} ]; From 41d72d21d74af655d90865b8bbd0815584976e0e Mon Sep 17 00:00:00 2001 From: Nishant Kumar Date: Thu, 14 Mar 2024 00:25:09 +0530 Subject: [PATCH 6/7] flutter test all cases passed --- test/codegen/dart_dio_codegen_test.dart | 29 ++++++++----------------- 1 file changed, 9 insertions(+), 20 deletions(-) diff --git a/test/codegen/dart_dio_codegen_test.dart b/test/codegen/dart_dio_codegen_test.dart index f14af748..22fb3159 100644 --- a/test/codegen/dart_dio_codegen_test.dart +++ b/test/codegen/dart_dio_codegen_test.dart @@ -493,7 +493,7 @@ void main() async { try { final data = dio.FormData(); final List> formDataList = [ - {"name": "token", "value": "xyz", "type": "text"}, + {"name": "text", "value": "API", "type": "text"}, {"name": "sep", "value": "|", "type": "text"}, {"name": "times", "value": "3", "type": "text"} ]; @@ -512,8 +512,6 @@ void main() async { final response = await dio.Dio().post( 'https://api.apidash.dev/io/form', - queryParameters: queryParams, - options: dio.Options(headers: headers), data: data, ); print(response.statusCode); @@ -538,13 +536,10 @@ void main() async { void main() async { try { - final headers = { - 'User-Agent': 'Test Agent', - 'Keep-Alive': 'true', - }; + final headers = {'User-Agent': 'Test Agent'}; final data = dio.FormData(); final List> formDataList = [ - {"name": "text", "value": "xyz", "type": "text"}, + {"name": "text", "value": "API", "type": "text"}, {"name": "sep", "value": "|", "type": "text"}, {"name": "times", "value": "3", "type": "text"} ]; @@ -563,7 +558,6 @@ void main() async { final response = await dio.Dio().post( 'https://api.apidash.dev/io/form', - queryParameters: queryParams, options: dio.Options(headers: headers), data: data, ); @@ -591,10 +585,10 @@ void main() async { try { final data = dio.FormData(); final List> formDataList = [ - {"name": "text", "value": "xyz", "type": "text"}, + {"name": "token", "value": "xyz", "type": "text"}, { "name": "imfile", - "value": "/Desktop/mp.jpg", + "value": "/Documents/up/1.png", "type": "file" } ]; @@ -613,8 +607,6 @@ void main() async { final response = await dio.Dio().post( 'https://api.apidash.dev/io/img', - queryParameters: queryParams, - options: dio.Options(headers: headers), data: data, ); print(response.statusCode); @@ -641,10 +633,10 @@ void main() async { try { final data = dio.FormData(); final List> formDataList = [ - {"name": "text", "value": "xyz", "type": "text"}, + {"name": "token", "value": "xyz", "type": "text"}, { "name": "imfile", - "value": "/Desktop/mp.jpg", + "value": "/Documents/up/1.png", "type": "file" } ]; @@ -663,8 +655,6 @@ void main() async { final response = await dio.Dio().post( 'https://api.apidash.dev/io/img', - queryParameters: queryParams, - options: dio.Options(headers: headers), data: data, ); print(response.statusCode); @@ -695,7 +685,7 @@ void main() async { }; final data = dio.FormData(); final List> formDataList = [ - {"name": "text", "value": "xyz", "type": "text"}, + {"name": "text", "value": "API", "type": "text"}, {"name": "sep", "value": "|", "type": "text"}, {"name": "times", "value": "3", "type": "text"} ]; @@ -715,7 +705,6 @@ void main() async { final response = await dio.Dio().post( 'https://api.apidash.dev/io/form', queryParameters: queryParams, - options: dio.Options(headers: headers), data: data, ); print(response.statusCode); @@ -750,7 +739,7 @@ void main() async { }; final data = dio.FormData(); final List> formDataList = [ - {"name": "text", "value": "xyz", "type": "text"}, + {"name": "token", "value": "xyz", "type": "text"}, { "name": "imfile", "value": "/Documents/up/1.png", From d56b2b6489c2cf3ce1b4c79834133b211880d8e3 Mon Sep 17 00:00:00 2001 From: Nishant Kumar Date: Thu, 14 Mar 2024 02:13:01 +0530 Subject: [PATCH 7/7] handling of null string and test cases updated --- lib/codegen/dart/dio.dart | 11 ++- test/codegen/dart_dio_codegen_test.dart | 108 +++++++++++++++--------- 2 files changed, 74 insertions(+), 45 deletions(-) diff --git a/lib/codegen/dart/dio.dart b/lib/codegen/dart/dio.dart index 63569e28..e9590f79 100644 --- a/lib/codegen/dart/dio.dart +++ b/lib/codegen/dart/dio.dart @@ -55,12 +55,17 @@ class DartDioCodeGen { final List> formDataList = ${json.encode(formData)}; for (var formField in formDataList) { if (formField['type'] == 'file') { + if (formField['value'] != null) { data.files.add(MapEntry( - formField['name'], - await dio.MultipartFile.fromFile(formField['value'], filename: formField['value']), + formField['name']!, + await dio.MultipartFile.fromFile(formField['value']!, + filename: formField['value']!), )); + } } else { - data.fields.add(MapEntry(formField['name'], formField['value'])); + if (formField['value'] != null) { + data.fields.add(MapEntry(formField['name']!, formField['value']!)); + } } } '''); diff --git a/test/codegen/dart_dio_codegen_test.dart b/test/codegen/dart_dio_codegen_test.dart index 22fb3159..8f111d41 100644 --- a/test/codegen/dart_dio_codegen_test.dart +++ b/test/codegen/dart_dio_codegen_test.dart @@ -499,14 +499,18 @@ void main() async { ]; for (var formField in formDataList) { if (formField['type'] == 'file') { - data.files.add(MapEntry( - formField['name'], - await dio.MultipartFile.fromFile(formField['value'], - filename: formField['value']), - )); + if (formField['value'] != null) { + data.files.add(MapEntry( + formField['name']!, + await dio.MultipartFile.fromFile(formField['value']!, + filename: formField['value']!), + )); + } } else { - data.fields - .add(MapEntry(formField['name'], formField['value'])); + if (formField['value'] != null) { + data.fields + .add(MapEntry(formField['name']!, formField['value']!)); + } } } @@ -545,14 +549,18 @@ void main() async { ]; for (var formField in formDataList) { if (formField['type'] == 'file') { - data.files.add(MapEntry( - formField['name'], - await dio.MultipartFile.fromFile(formField['value'], - filename: formField['value']), - )); + if (formField['value'] != null) { + data.files.add(MapEntry( + formField['name']!, + await dio.MultipartFile.fromFile(formField['value']!, + filename: formField['value']!), + )); + } } else { - data.fields - .add(MapEntry(formField['name'], formField['value'])); + if (formField['value'] != null) { + data.fields + .add(MapEntry(formField['name']!, formField['value']!)); + } } } @@ -594,14 +602,18 @@ void main() async { ]; for (var formField in formDataList) { if (formField['type'] == 'file') { - data.files.add(MapEntry( - formField['name'], - await dio.MultipartFile.fromFile(formField['value'], - filename: formField['value']), - )); + if (formField['value'] != null) { + data.files.add(MapEntry( + formField['name']!, + await dio.MultipartFile.fromFile(formField['value']!, + filename: formField['value']!), + )); + } } else { - data.fields - .add(MapEntry(formField['name'], formField['value'])); + if (formField['value'] != null) { + data.fields + .add(MapEntry(formField['name']!, formField['value']!)); + } } } @@ -642,14 +654,18 @@ void main() async { ]; for (var formField in formDataList) { if (formField['type'] == 'file') { - data.files.add(MapEntry( - formField['name'], - await dio.MultipartFile.fromFile(formField['value'], - filename: formField['value']), - )); + if (formField['value'] != null) { + data.files.add(MapEntry( + formField['name']!, + await dio.MultipartFile.fromFile(formField['value']!, + filename: formField['value']!), + )); + } } else { - data.fields - .add(MapEntry(formField['name'], formField['value'])); + if (formField['value'] != null) { + data.fields + .add(MapEntry(formField['name']!, formField['value']!)); + } } } @@ -691,14 +707,18 @@ void main() async { ]; for (var formField in formDataList) { if (formField['type'] == 'file') { - data.files.add(MapEntry( - formField['name'], - await dio.MultipartFile.fromFile(formField['value'], - filename: formField['value']), - )); + if (formField['value'] != null) { + data.files.add(MapEntry( + formField['name']!, + await dio.MultipartFile.fromFile(formField['value']!, + filename: formField['value']!), + )); + } } else { - data.fields - .add(MapEntry(formField['name'], formField['value'])); + if (formField['value'] != null) { + data.fields + .add(MapEntry(formField['name']!, formField['value']!)); + } } } @@ -748,14 +768,18 @@ void main() async { ]; for (var formField in formDataList) { if (formField['type'] == 'file') { - data.files.add(MapEntry( - formField['name'], - await dio.MultipartFile.fromFile(formField['value'], - filename: formField['value']), - )); + if (formField['value'] != null) { + data.files.add(MapEntry( + formField['name']!, + await dio.MultipartFile.fromFile(formField['value']!, + filename: formField['value']!), + )); + } } else { - data.fields - .add(MapEntry(formField['name'], formField['value'])); + if (formField['value'] != null) { + data.fields + .add(MapEntry(formField['name']!, formField['value']!)); + } } }