Skip to content

Commit 63f5322

Browse files
authored
Merge pull request #302 from PCoder23/kotlin-okhttp-tests
added test cases for kotli okhttp3
2 parents bd2df8c + 8b3a356 commit 63f5322

File tree

2 files changed

+202
-4
lines changed

2 files changed

+202
-4
lines changed

lib/codegen/kotlin/okhttp.dart

Lines changed: 38 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import 'package:apidash/consts.dart';
77

88
class KotlinOkHttpCodeGen {
99
final String kTemplateStart = """import okhttp3.OkHttpClient
10-
import okhttp3.Request{{importForQuery}}{{importForBody}}{{importForFormData}}
10+
import okhttp3.Request{{importForQuery}}{{importForBody}}{{importForFormData}}{{importForFile}}
1111
1212
fun main() {
1313
val client = OkHttpClient()
@@ -27,6 +27,12 @@ import okhttp3.MediaType.Companion.toMediaType""";
2727
2828
import okhttp3.MultipartBody""";
2929

30+
final String kStringImportForFile = """
31+
32+
import java.io.File
33+
import okhttp3.RequestBody.Companion.asRequestBody
34+
import okhttp3.MediaType.Companion.toMediaType""";
35+
3036
final String kTemplateUrl = '''
3137
3238
val url = "{{url}}"
@@ -68,7 +74,7 @@ import okhttp3.MultipartBody""";
6874
// Converting list of form data objects to kolin multi part data
6975
String kFormDataBody = '''
7076
val body = MultipartBody.Builder().setType(MultipartBody.FORM){% for item in formDataList %}{% if item.type == 'file' %}
71-
.addFormDataPart("{{item.name}}",null,File("{{item.value}}").asRequestBody("application/octet-stream".toMediaType()))
77+
.addFormDataPart("{{item.name}}",File("{{item.value}}").name,File("{{item.value}}").asRequestBody("application/octet-stream".toMediaType()))
7278
{% else %}.addFormDataPart("{{item.name}}","{{item.value}}")
7379
{% endif %}{% endfor %}.build()
7480
''';
@@ -81,6 +87,7 @@ import okhttp3.MultipartBody""";
8187
bool hasQuery = false;
8288
bool hasBody = false;
8389
bool hasFormData = false;
90+
bool hasFile = false;
8491

8592
var rec = getValidRequestUri(
8693
requestModel.url,
@@ -111,8 +118,34 @@ import okhttp3.MultipartBody""";
111118
hasFormData = true;
112119
var formDataTemplate = jj.Template(kFormDataBody);
113120

121+
List<Map<String,String>> modifiedFormDataList = [];
122+
for (var item in requestModel.formDataList) {
123+
if (item.type == FormDataType.file ) {
124+
if (item.value[0] == "/") {
125+
modifiedFormDataList.add({
126+
"name": item.name,
127+
"value": item.value.substring(1),
128+
"type": "file"
129+
});
130+
}else{
131+
modifiedFormDataList.add({
132+
"name": item.name,
133+
"value": item.value,
134+
"type": "file"
135+
});
136+
}
137+
hasFile = true;
138+
}else{
139+
modifiedFormDataList.add({
140+
"name": item.name,
141+
"value": item.value,
142+
"type": "text"
143+
});
144+
}
145+
}
146+
114147
result += formDataTemplate.render({
115-
"formDataList": requestModel.formDataMapList,
148+
"formDataList": modifiedFormDataList,
116149
});
117150
} else if (kMethodsWithBody.contains(method) && requestBody != null) {
118151
var contentLength = utf8.encode(requestBody).length;
@@ -129,7 +162,8 @@ import okhttp3.MultipartBody""";
129162
var stringStart = templateStart.render({
130163
"importForQuery": hasQuery ? kStringImportForQuery : "",
131164
"importForBody": hasBody ? kStringImportForBody : "",
132-
"importForFormData": hasFormData ? kStringImportForFormData : ""
165+
"importForFormData": hasFormData ? kStringImportForFormData : "",
166+
"importForFile": hasFile ? kStringImportForFile : "",
133167
});
134168

135169
result = stringStart + result;

test/codegen/kotlin_okhttp_codegen_test.dart

Lines changed: 164 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -517,6 +517,35 @@ fun main() {
517517
CodegenLanguage.kotlinOkHttp, requestModelPost3, "https"),
518518
expectedCode);
519519
});
520+
test('POST 4', () {
521+
const expectedCode = r'''import okhttp3.OkHttpClient
522+
import okhttp3.Request
523+
import okhttp3.MultipartBody
524+
525+
fun main() {
526+
val client = OkHttpClient()
527+
528+
val url = "https://api.apidash.dev/io/form"
529+
val body = MultipartBody.Builder().setType(MultipartBody.FORM).addFormDataPart("text","API")
530+
.addFormDataPart("sep","|")
531+
.addFormDataPart("times","3")
532+
.build()
533+
val request = Request.Builder()
534+
.url(url)
535+
.post(body)
536+
.build()
537+
538+
val response = client.newCall(request).execute()
539+
540+
println(response.code)
541+
println(response.body?.string())
542+
}
543+
''';
544+
expect(
545+
codeGen.getCode(
546+
CodegenLanguage.kotlinOkHttp, requestModelPost4, "https"),
547+
expectedCode);
548+
});
520549

521550
test('POST 5', () {
522551
const expectedCode = r'''import okhttp3.OkHttpClient
@@ -548,6 +577,141 @@ fun main() {
548577
CodegenLanguage.kotlinOkHttp, requestModelPost5, "https"),
549578
expectedCode);
550579
});
580+
test('POST 6', () {
581+
const expectedCode = r'''import okhttp3.OkHttpClient
582+
import okhttp3.Request
583+
import okhttp3.MultipartBody
584+
import java.io.File
585+
import okhttp3.RequestBody.Companion.asRequestBody
586+
import okhttp3.MediaType.Companion.toMediaType
587+
588+
fun main() {
589+
val client = OkHttpClient()
590+
591+
val url = "https://api.apidash.dev/io/img"
592+
val body = MultipartBody.Builder().setType(MultipartBody.FORM).addFormDataPart("token","xyz")
593+
594+
.addFormDataPart("imfile",File("Documents/up/1.png").name,File("Documents/up/1.png").asRequestBody("application/octet-stream".toMediaType()))
595+
.build()
596+
val request = Request.Builder()
597+
.url(url)
598+
.post(body)
599+
.build()
600+
601+
val response = client.newCall(request).execute()
602+
603+
println(response.code)
604+
println(response.body?.string())
605+
}
606+
''';
607+
expect(
608+
codeGen.getCode(
609+
CodegenLanguage.kotlinOkHttp, requestModelPost6, "https"),
610+
expectedCode);
611+
});
612+
test('POST 7', () {
613+
const expectedCode = r'''import okhttp3.OkHttpClient
614+
import okhttp3.Request
615+
import okhttp3.MultipartBody
616+
import java.io.File
617+
import okhttp3.RequestBody.Companion.asRequestBody
618+
import okhttp3.MediaType.Companion.toMediaType
619+
620+
fun main() {
621+
val client = OkHttpClient()
622+
623+
val url = "https://api.apidash.dev/io/img"
624+
val body = MultipartBody.Builder().setType(MultipartBody.FORM).addFormDataPart("token","xyz")
625+
626+
.addFormDataPart("imfile",File("Documents/up/1.png").name,File("Documents/up/1.png").asRequestBody("application/octet-stream".toMediaType()))
627+
.build()
628+
val request = Request.Builder()
629+
.url(url)
630+
.post(body)
631+
.build()
632+
633+
val response = client.newCall(request).execute()
634+
635+
println(response.code)
636+
println(response.body?.string())
637+
}
638+
''';
639+
expect(
640+
codeGen.getCode(
641+
CodegenLanguage.kotlinOkHttp, requestModelPost7, "https"),
642+
expectedCode);
643+
});
644+
test('POST 8', () {
645+
const expectedCode = r'''import okhttp3.OkHttpClient
646+
import okhttp3.Request
647+
import okhttp3.HttpUrl.Companion.toHttpUrl
648+
import okhttp3.MultipartBody
649+
650+
fun main() {
651+
val client = OkHttpClient()
652+
653+
val url = "https://api.apidash.dev/io/form".toHttpUrl().newBuilder()
654+
.addQueryParameter("size", "2")
655+
.addQueryParameter("len", "3")
656+
.build()
657+
val body = MultipartBody.Builder().setType(MultipartBody.FORM).addFormDataPart("text","API")
658+
.addFormDataPart("sep","|")
659+
.addFormDataPart("times","3")
660+
.build()
661+
val request = Request.Builder()
662+
.url(url)
663+
.post(body)
664+
.build()
665+
666+
val response = client.newCall(request).execute()
667+
668+
println(response.code)
669+
println(response.body?.string())
670+
}
671+
''';
672+
expect(
673+
codeGen.getCode(
674+
CodegenLanguage.kotlinOkHttp, requestModelPost8, "https"),
675+
expectedCode);
676+
});
677+
test('POST 9', () {
678+
const expectedCode = r'''import okhttp3.OkHttpClient
679+
import okhttp3.Request
680+
import okhttp3.HttpUrl.Companion.toHttpUrl
681+
import okhttp3.MultipartBody
682+
import java.io.File
683+
import okhttp3.RequestBody.Companion.asRequestBody
684+
import okhttp3.MediaType.Companion.toMediaType
685+
686+
fun main() {
687+
val client = OkHttpClient()
688+
689+
val url = "https://api.apidash.dev/io/img".toHttpUrl().newBuilder()
690+
.addQueryParameter("size", "2")
691+
.addQueryParameter("len", "3")
692+
.build()
693+
val body = MultipartBody.Builder().setType(MultipartBody.FORM).addFormDataPart("token","xyz")
694+
695+
.addFormDataPart("imfile",File("Documents/up/1.png").name,File("Documents/up/1.png").asRequestBody("application/octet-stream".toMediaType()))
696+
.build()
697+
val request = Request.Builder()
698+
.url(url)
699+
.addHeader("User-Agent", "Test Agent")
700+
.addHeader("Keep-Alive", "true")
701+
.post(body)
702+
.build()
703+
704+
val response = client.newCall(request).execute()
705+
706+
println(response.code)
707+
println(response.body?.string())
708+
}
709+
''';
710+
expect(
711+
codeGen.getCode(
712+
CodegenLanguage.kotlinOkHttp, requestModelPost9, "https"),
713+
expectedCode);
714+
});
551715
});
552716

553717
group('PUT Request', () {

0 commit comments

Comments
 (0)