From f495d7b2336e2225cdc95d73e6b53e07c7f0f39a Mon Sep 17 00:00:00 2001 From: Nishant Kumar Date: Tue, 12 Mar 2024 23:57:42 +0530 Subject: [PATCH] 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;