From 9e007faf101a542d8e3fcc602957980009566661 Mon Sep 17 00:00:00 2001 From: PCoder23 Date: Fri, 15 Mar 2024 17:51:41 +0530 Subject: [PATCH 1/2] added post test 4, and 6 to 9 --- test/codegen/kotlin_okhttp_codegen_test.dart | 155 +++++++++++++++++++ 1 file changed, 155 insertions(+) diff --git a/test/codegen/kotlin_okhttp_codegen_test.dart b/test/codegen/kotlin_okhttp_codegen_test.dart index f91f183c..076339c9 100644 --- a/test/codegen/kotlin_okhttp_codegen_test.dart +++ b/test/codegen/kotlin_okhttp_codegen_test.dart @@ -517,6 +517,35 @@ fun main() { CodegenLanguage.kotlinOkHttp, requestModelPost3, "https"), expectedCode); }); + test('POST 4', () { + const expectedCode = r'''import okhttp3.OkHttpClient +import okhttp3.Request +import okhttp3.MultipartBody + +fun main() { + val client = OkHttpClient() + + val url = "https://api.apidash.dev/io/form" + val body = MultipartBody.Builder().setType(MultipartBody.FORM).addFormDataPart("text","API") + .addFormDataPart("sep","|") + .addFormDataPart("times","3") + .build() + val request = Request.Builder() + .url(url) + .post(body) + .build() + + val response = client.newCall(request).execute() + + println(response.code) + println(response.body?.string()) +} +'''; + expect( + codeGen.getCode( + CodegenLanguage.kotlinOkHttp, requestModelPost4, "https"), + expectedCode); + }); test('POST 5', () { const expectedCode = r'''import okhttp3.OkHttpClient @@ -548,6 +577,132 @@ fun main() { CodegenLanguage.kotlinOkHttp, requestModelPost5, "https"), expectedCode); }); + test('POST 6', () { + const expectedCode = r'''import okhttp3.OkHttpClient +import okhttp3.Request +import okhttp3.MultipartBody + +fun main() { + val client = OkHttpClient() + + val url = "https://api.apidash.dev/io/img" + val body = MultipartBody.Builder().setType(MultipartBody.FORM).addFormDataPart("token","xyz") + + .addFormDataPart("imfile",null,File("/Documents/up/1.png").asRequestBody("application/octet-stream".toMediaType())) + .build() + val request = Request.Builder() + .url(url) + .post(body) + .build() + + val response = client.newCall(request).execute() + + println(response.code) + println(response.body?.string()) +} +'''; + expect( + codeGen.getCode( + CodegenLanguage.kotlinOkHttp, requestModelPost6, "https"), + expectedCode); + }); + test('POST 7', () { + const expectedCode = r'''import okhttp3.OkHttpClient +import okhttp3.Request +import okhttp3.MultipartBody + +fun main() { + val client = OkHttpClient() + + val url = "https://api.apidash.dev/io/img" + val body = MultipartBody.Builder().setType(MultipartBody.FORM).addFormDataPart("token","xyz") + + .addFormDataPart("imfile",null,File("/Documents/up/1.png").asRequestBody("application/octet-stream".toMediaType())) + .build() + val request = Request.Builder() + .url(url) + .post(body) + .build() + + val response = client.newCall(request).execute() + + println(response.code) + println(response.body?.string()) +} +'''; + expect( + codeGen.getCode( + CodegenLanguage.kotlinOkHttp, requestModelPost7, "https"), + expectedCode); + }); + test('POST 8', () { + const expectedCode = r'''import okhttp3.OkHttpClient +import okhttp3.Request +import okhttp3.HttpUrl.Companion.toHttpUrl +import okhttp3.MultipartBody + +fun main() { + val client = OkHttpClient() + + val url = "https://api.apidash.dev/io/form".toHttpUrl().newBuilder() + .addQueryParameter("size", "2") + .addQueryParameter("len", "3") + .build() + val body = MultipartBody.Builder().setType(MultipartBody.FORM).addFormDataPart("text","API") + .addFormDataPart("sep","|") + .addFormDataPart("times","3") + .build() + val request = Request.Builder() + .url(url) + .post(body) + .build() + + val response = client.newCall(request).execute() + + println(response.code) + println(response.body?.string()) +} +'''; + expect( + codeGen.getCode( + CodegenLanguage.kotlinOkHttp, requestModelPost8, "https"), + expectedCode); + }); + test('POST 9', () { + const expectedCode = r'''import okhttp3.OkHttpClient +import okhttp3.Request +import okhttp3.HttpUrl.Companion.toHttpUrl +import okhttp3.MultipartBody + +fun main() { + val client = OkHttpClient() + + val url = "https://api.apidash.dev/io/img".toHttpUrl().newBuilder() + .addQueryParameter("size", "2") + .addQueryParameter("len", "3") + .build() + val body = MultipartBody.Builder().setType(MultipartBody.FORM).addFormDataPart("token","xyz") + + .addFormDataPart("imfile",null,File("/Documents/up/1.png").asRequestBody("application/octet-stream".toMediaType())) + .build() + val request = Request.Builder() + .url(url) + .addHeader("User-Agent", "Test Agent") + .addHeader("Keep-Alive", "true") + .post(body) + .build() + + val response = client.newCall(request).execute() + + println(response.code) + println(response.body?.string()) +} +'''; + expect( + codeGen.getCode( + CodegenLanguage.kotlinOkHttp, requestModelPost9, "https"), + expectedCode); + }); }); group('PUT Request', () { From 8b3a3568d89660554ba1f08783a942371afacb43 Mon Sep 17 00:00:00 2001 From: PCoder23 Date: Fri, 15 Mar 2024 22:43:57 +0530 Subject: [PATCH 2/2] fixed issues --- lib/codegen/kotlin/okhttp.dart | 42 ++++++++++++++++++-- test/codegen/kotlin_okhttp_codegen_test.dart | 15 +++++-- 2 files changed, 50 insertions(+), 7 deletions(-) diff --git a/lib/codegen/kotlin/okhttp.dart b/lib/codegen/kotlin/okhttp.dart index c717dc97..a3a2fb89 100644 --- a/lib/codegen/kotlin/okhttp.dart +++ b/lib/codegen/kotlin/okhttp.dart @@ -7,7 +7,7 @@ import 'package:apidash/consts.dart'; class KotlinOkHttpCodeGen { final String kTemplateStart = """import okhttp3.OkHttpClient -import okhttp3.Request{{importForQuery}}{{importForBody}}{{importForFormData}} +import okhttp3.Request{{importForQuery}}{{importForBody}}{{importForFormData}}{{importForFile}} fun main() { val client = OkHttpClient() @@ -27,6 +27,12 @@ import okhttp3.MediaType.Companion.toMediaType"""; import okhttp3.MultipartBody"""; + final String kStringImportForFile = """ + +import java.io.File +import okhttp3.RequestBody.Companion.asRequestBody +import okhttp3.MediaType.Companion.toMediaType"""; + final String kTemplateUrl = ''' val url = "{{url}}" @@ -68,7 +74,7 @@ import okhttp3.MultipartBody"""; // Converting list of form data objects to kolin multi part data String kFormDataBody = ''' val body = MultipartBody.Builder().setType(MultipartBody.FORM){% for item in formDataList %}{% if item.type == 'file' %} - .addFormDataPart("{{item.name}}",null,File("{{item.value}}").asRequestBody("application/octet-stream".toMediaType())) + .addFormDataPart("{{item.name}}",File("{{item.value}}").name,File("{{item.value}}").asRequestBody("application/octet-stream".toMediaType())) {% else %}.addFormDataPart("{{item.name}}","{{item.value}}") {% endif %}{% endfor %}.build() '''; @@ -81,6 +87,7 @@ import okhttp3.MultipartBody"""; bool hasQuery = false; bool hasBody = false; bool hasFormData = false; + bool hasFile = false; var rec = getValidRequestUri( requestModel.url, @@ -111,8 +118,34 @@ import okhttp3.MultipartBody"""; hasFormData = true; var formDataTemplate = jj.Template(kFormDataBody); + List> modifiedFormDataList = []; + for (var item in requestModel.formDataList) { + if (item.type == FormDataType.file ) { + if (item.value[0] == "/") { + modifiedFormDataList.add({ + "name": item.name, + "value": item.value.substring(1), + "type": "file" + }); + }else{ + modifiedFormDataList.add({ + "name": item.name, + "value": item.value, + "type": "file" + }); + } + hasFile = true; + }else{ + modifiedFormDataList.add({ + "name": item.name, + "value": item.value, + "type": "text" + }); + } + } + result += formDataTemplate.render({ - "formDataList": requestModel.formDataMapList, + "formDataList": modifiedFormDataList, }); } else if (kMethodsWithBody.contains(method) && requestBody != null) { var contentLength = utf8.encode(requestBody).length; @@ -129,7 +162,8 @@ import okhttp3.MultipartBody"""; var stringStart = templateStart.render({ "importForQuery": hasQuery ? kStringImportForQuery : "", "importForBody": hasBody ? kStringImportForBody : "", - "importForFormData": hasFormData ? kStringImportForFormData : "" + "importForFormData": hasFormData ? kStringImportForFormData : "", + "importForFile": hasFile ? kStringImportForFile : "", }); result = stringStart + result; diff --git a/test/codegen/kotlin_okhttp_codegen_test.dart b/test/codegen/kotlin_okhttp_codegen_test.dart index 076339c9..7b6850f3 100644 --- a/test/codegen/kotlin_okhttp_codegen_test.dart +++ b/test/codegen/kotlin_okhttp_codegen_test.dart @@ -581,6 +581,9 @@ fun main() { const expectedCode = r'''import okhttp3.OkHttpClient import okhttp3.Request import okhttp3.MultipartBody +import java.io.File +import okhttp3.RequestBody.Companion.asRequestBody +import okhttp3.MediaType.Companion.toMediaType fun main() { val client = OkHttpClient() @@ -588,7 +591,7 @@ fun main() { val url = "https://api.apidash.dev/io/img" val body = MultipartBody.Builder().setType(MultipartBody.FORM).addFormDataPart("token","xyz") - .addFormDataPart("imfile",null,File("/Documents/up/1.png").asRequestBody("application/octet-stream".toMediaType())) + .addFormDataPart("imfile",File("Documents/up/1.png").name,File("Documents/up/1.png").asRequestBody("application/octet-stream".toMediaType())) .build() val request = Request.Builder() .url(url) @@ -610,6 +613,9 @@ fun main() { const expectedCode = r'''import okhttp3.OkHttpClient import okhttp3.Request import okhttp3.MultipartBody +import java.io.File +import okhttp3.RequestBody.Companion.asRequestBody +import okhttp3.MediaType.Companion.toMediaType fun main() { val client = OkHttpClient() @@ -617,7 +623,7 @@ fun main() { val url = "https://api.apidash.dev/io/img" val body = MultipartBody.Builder().setType(MultipartBody.FORM).addFormDataPart("token","xyz") - .addFormDataPart("imfile",null,File("/Documents/up/1.png").asRequestBody("application/octet-stream".toMediaType())) + .addFormDataPart("imfile",File("Documents/up/1.png").name,File("Documents/up/1.png").asRequestBody("application/octet-stream".toMediaType())) .build() val request = Request.Builder() .url(url) @@ -673,6 +679,9 @@ fun main() { import okhttp3.Request import okhttp3.HttpUrl.Companion.toHttpUrl import okhttp3.MultipartBody +import java.io.File +import okhttp3.RequestBody.Companion.asRequestBody +import okhttp3.MediaType.Companion.toMediaType fun main() { val client = OkHttpClient() @@ -683,7 +692,7 @@ fun main() { .build() val body = MultipartBody.Builder().setType(MultipartBody.FORM).addFormDataPart("token","xyz") - .addFormDataPart("imfile",null,File("/Documents/up/1.png").asRequestBody("application/octet-stream".toMediaType())) + .addFormDataPart("imfile",File("Documents/up/1.png").name,File("Documents/up/1.png").asRequestBody("application/octet-stream".toMediaType())) .build() val request = Request.Builder() .url(url)