diff --git a/README.md b/README.md index 1beea998..c2760f5d 100644 --- a/README.md +++ b/README.md @@ -135,6 +135,7 @@ API Dash currently supports API integration code generation for the following la | Python | `http.client` | | Python | `requests` | | Kotlin | `okhttp3` | +| Java | `okhttp3` | We welcome contributions to support other programming languages/libraries/frameworks. Please check out more details [here](https://github.com/foss42/apidash/discussions/80). diff --git a/lib/codegen/codegen.dart b/lib/codegen/codegen.dart index 854ca241..2409bb63 100644 --- a/lib/codegen/codegen.dart +++ b/lib/codegen/codegen.dart @@ -15,6 +15,7 @@ import 'js/fetch.dart'; import 'others/har.dart'; import 'others/curl.dart'; import 'julia/http.dart'; +import 'java/okhttp.dart'; class Codegen { String? getCode( @@ -52,6 +53,8 @@ class Codegen { return FetchCodeGen(isNodeJs: true).getCode(rM); case CodegenLanguage.kotlinOkHttp: return KotlinOkHttpCodeGen().getCode(rM); + case CodegenLanguage.javaOkHttp: + return JavaOkHttpCodeGen().getCode(rM); case CodegenLanguage.pythonHttpClient: return PythonHttpClientCodeGen() .getCode(rM, boundary: boundary ?? getNewUuid()); diff --git a/lib/codegen/java/okhttp.dart b/lib/codegen/java/okhttp.dart new file mode 100644 index 00000000..ac7a6b09 --- /dev/null +++ b/lib/codegen/java/okhttp.dart @@ -0,0 +1,190 @@ +import 'dart:convert'; +import 'package:jinja/jinja.dart' as jj; +import 'package:apidash/utils/utils.dart' + show getValidRequestUri, stripUriParams; +import '../../models/request_model.dart'; +import 'package:apidash/consts.dart'; + +class JavaOkHttpCodeGen { + final String kTemplateStart = """ +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response;{{importForQuery}}{{importForBody}}{{importForFormData}} + +import java.io.IOException; + +public class Main { + public static void main(String[] args) { + OkHttpClient client = new OkHttpClient().newBuilder().build(); + +"""; + + final String kStringImportForQuery = """ + +import okhttp3.HttpUrl;"""; + + final String kStringImportForBody = """ + +import okhttp3.RequestBody; +import okhttp3.MediaType;"""; + + final String kStringImportForFormData = """ + +import okhttp3.RequestBody; +import okhttp3.MultipartBody;"""; + + final String kTemplateUrl = ''' + + String url = "{{url}}"; + +'''; + + final String kTemplateUrlQuery = ''' + + HttpUrl url = HttpUrl.parse("{{url}}").newBuilder() + {{params}} + .build(); + +'''; + + String kTemplateRequestBody = ''' + + MediaType mediaType = MediaType.parse("{{contentType}}"); + + RequestBody body = RequestBody.create({{body}}, mediaType); + +'''; + + final String kStringRequestStart = """ + + Request request = new Request.Builder() + .url(url) +"""; + + final String kTemplateRequestEnd = """ + .{{method}}({{hasBody}}) + .build(); + + try (Response response = client.newCall(request).execute()) { + System.out.println(response.code()); + if (response.body() != null) { + System.out.println(response.body().string()); + } + } catch (IOException e) { + System.out.println(e.getMessage()); + } + } +} + +"""; +// Converting list of form data objects to kolin multi part data + String kFormDataBody = ''' + RequestBody body = new MultipartBody.Builder().setType(MultipartBody.FORM) + {%- for item in formDataList -%} + {% if item.type == 'file' %} + .addFormDataPart("{{ item.name }}",null,RequestBody.create(MediaType.parse("application/octet-stream"),new File("{{ item.value }}"))) + {%- else %} + .addFormDataPart("{{ item.name }}","{{ item.value }}") + {%- endif %} + {%- endfor %} + .build(); + +'''; + + String? getCode( + RequestModel requestModel, + ) { + try { + String result = ""; + bool hasQuery = false; + bool hasBody = false; + bool hasFormData = false; + + var rec = getValidRequestUri( + requestModel.url, + requestModel.enabledRequestParams, + ); + Uri? uri = rec.$1; + + if (uri != null) { + String url = stripUriParams(uri); + + if (uri.hasQuery) { + var params = uri.queryParameters; + if (params.isNotEmpty) { + hasQuery = true; + var templateParams = jj.Template(kTemplateUrlQuery); + result += templateParams + .render({"url": url, "params": getQueryParams(params)}); + } + } + if (!hasQuery) { + var templateUrl = jj.Template(kTemplateUrl); + result += templateUrl.render({"url": url}); + } + + var method = requestModel.method; + var requestBody = requestModel.requestBody; + if (requestModel.hasFormData) { + hasFormData = true; + var formDataTemplate = jj.Template(kFormDataBody); + + result += formDataTemplate.render({ + "formDataList": requestModel.formDataMapList, + }); + } else if (kMethodsWithBody.contains(method) && requestBody != null) { + var contentLength = utf8.encode(requestBody).length; + if (contentLength > 0) { + hasBody = true; + String contentType = requestModel.requestBodyContentType.header; + var templateBody = jj.Template(kTemplateRequestBody); + result += templateBody.render({ + "contentType": contentType, + "body": kEncoder.convert(requestBody) + }); + } + } + + var templateStart = jj.Template(kTemplateStart); + var stringStart = templateStart.render({ + "importForQuery": hasQuery ? kStringImportForQuery : "", + "importForBody": hasBody ? kStringImportForBody : "", + "importForFormData": hasFormData ? kStringImportForFormData : "" + }); + + result = stringStart + result; + result += kStringRequestStart; + + var headersList = requestModel.enabledRequestHeaders; + if (headersList != null) { + var headers = requestModel.enabledHeadersMap; + if (headers.isNotEmpty) { + result += getHeaders(headers); + } + } + + var templateRequestEnd = jj.Template(kTemplateRequestEnd); + result += templateRequestEnd.render({ + "method": method.name.toLowerCase(), + "hasBody": (hasBody || requestModel.hasFormData) ? "body" : "", + }); + } + return result; + } catch (e) { + return null; + } + } + + String getQueryParams(Map params) { + final paramStrings = params.entries.map((entry) => '.addQueryParameter("${entry.key}", "${entry.value}")').toList(); + return paramStrings.join('\n '); + } + + String getHeaders(Map headers) { + String result = ""; + for (final k in headers.keys) { + result = """$result .addHeader("$k", "${headers[k]}")\n"""; + } + return result; + } +} \ No newline at end of file diff --git a/lib/consts.dart b/lib/consts.dart index a557023d..b912db9b 100644 --- a/lib/consts.dart +++ b/lib/consts.dart @@ -272,6 +272,7 @@ enum CodegenLanguage { nodejsAxios("node.js (axios)", "javascript", "js"), nodejsFetch("node.js (fetch)", "javascript", "js"), kotlinOkHttp("Kotlin (okhttp3)", "java", "kt"), + javaOkHttp("Java (okhttp3)", "java", 'java'), pythonHttpClient("Python (http.client)", "python", "py"), pythonRequests("Python (requests)", "python", "py"), rustActix("Rust (Actix Client)", "rust", "rs"), diff --git a/test/codegen/java_okhttp_codegen_test.dart b/test/codegen/java_okhttp_codegen_test.dart new file mode 100644 index 00000000..20a8a17a --- /dev/null +++ b/test/codegen/java_okhttp_codegen_test.dart @@ -0,0 +1,1032 @@ +import 'package:apidash/codegen/java/okhttp.dart'; +import 'package:test/test.dart'; +import '../request_models.dart'; + +void main() { + final javaOkHttpCodeGen = JavaOkHttpCodeGen(); + + group('GET Request', () { + test('GET 1', () { + const expectedCode = r"""import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; + +import java.io.IOException; + +public class Main { + public static void main(String[] args) { + OkHttpClient client = new OkHttpClient().newBuilder().build(); + + String url = "https://api.apidash.dev"; + + Request request = new Request.Builder() + .url(url) + .get() + .build(); + + try (Response response = client.newCall(request).execute()) { + System.out.println(response.code()); + if (response.body() != null) { + System.out.println(response.body().string()); + } + } catch (IOException e) { + System.out.println(e.getMessage()); + } + } +} +"""; + expect( + javaOkHttpCodeGen.getCode(requestModelGet1), expectedCode); + }); + + test('GET 2', () { + const expectedCode = r"""import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; +import okhttp3.HttpUrl; + +import java.io.IOException; + +public class Main { + public static void main(String[] args) { + OkHttpClient client = new OkHttpClient().newBuilder().build(); + + HttpUrl url = HttpUrl.parse("https://api.apidash.dev/country/data").newBuilder() + .addQueryParameter("code", "US") + .build(); + + Request request = new Request.Builder() + .url(url) + .get() + .build(); + + try (Response response = client.newCall(request).execute()) { + System.out.println(response.code()); + if (response.body() != null) { + System.out.println(response.body().string()); + } + } catch (IOException e) { + System.out.println(e.getMessage()); + } + } +} +"""; + expect( + javaOkHttpCodeGen.getCode(requestModelGet2), expectedCode); + }); + + test('GET 3', () { + const expectedCode = r"""import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; +import okhttp3.HttpUrl; + +import java.io.IOException; + +public class Main { + public static void main(String[] args) { + OkHttpClient client = new OkHttpClient().newBuilder().build(); + + HttpUrl url = HttpUrl.parse("https://api.apidash.dev/country/data").newBuilder() + .addQueryParameter("code", "IND") + .build(); + + Request request = new Request.Builder() + .url(url) + .get() + .build(); + + try (Response response = client.newCall(request).execute()) { + System.out.println(response.code()); + if (response.body() != null) { + System.out.println(response.body().string()); + } + } catch (IOException e) { + System.out.println(e.getMessage()); + } + } +} +"""; + expect( + javaOkHttpCodeGen.getCode(requestModelGet3), expectedCode); + }); + + test('GET 4', () { + const expectedCode = r"""import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; +import okhttp3.HttpUrl; + +import java.io.IOException; + +public class Main { + public static void main(String[] args) { + OkHttpClient client = new OkHttpClient().newBuilder().build(); + + HttpUrl url = HttpUrl.parse("https://api.apidash.dev/humanize/social").newBuilder() + .addQueryParameter("num", "8700000") + .addQueryParameter("digits", "3") + .addQueryParameter("system", "SS") + .addQueryParameter("add_space", "true") + .addQueryParameter("trailing_zeros", "true") + .build(); + + Request request = new Request.Builder() + .url(url) + .get() + .build(); + + try (Response response = client.newCall(request).execute()) { + System.out.println(response.code()); + if (response.body() != null) { + System.out.println(response.body().string()); + } + } catch (IOException e) { + System.out.println(e.getMessage()); + } + } +} +"""; + expect( + javaOkHttpCodeGen.getCode(requestModelGet4), expectedCode); + }); + + test('GET 5', () { + const expectedCode = r"""import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; + +import java.io.IOException; + +public class Main { + public static void main(String[] args) { + OkHttpClient client = new OkHttpClient().newBuilder().build(); + + String url = "https://api.github.com/repos/foss42/apidash"; + + Request request = new Request.Builder() + .url(url) + .addHeader("User-Agent", "Test Agent") + .get() + .build(); + + try (Response response = client.newCall(request).execute()) { + System.out.println(response.code()); + if (response.body() != null) { + System.out.println(response.body().string()); + } + } catch (IOException e) { + System.out.println(e.getMessage()); + } + } +} +"""; + expect( + javaOkHttpCodeGen.getCode(requestModelGet5), expectedCode); + }); + + test('GET 6', () { + const expectedCode = r"""import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; +import okhttp3.HttpUrl; + +import java.io.IOException; + +public class Main { + public static void main(String[] args) { + OkHttpClient client = new OkHttpClient().newBuilder().build(); + + HttpUrl url = HttpUrl.parse("https://api.github.com/repos/foss42/apidash").newBuilder() + .addQueryParameter("raw", "true") + .build(); + + Request request = new Request.Builder() + .url(url) + .addHeader("User-Agent", "Test Agent") + .get() + .build(); + + try (Response response = client.newCall(request).execute()) { + System.out.println(response.code()); + if (response.body() != null) { + System.out.println(response.body().string()); + } + } catch (IOException e) { + System.out.println(e.getMessage()); + } + } +} +"""; + expect( + javaOkHttpCodeGen.getCode(requestModelGet6), expectedCode); + }); + + test('GET 7', () { + const expectedCode = r"""import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; + +import java.io.IOException; + +public class Main { + public static void main(String[] args) { + OkHttpClient client = new OkHttpClient().newBuilder().build(); + + String url = "https://api.apidash.dev"; + + Request request = new Request.Builder() + .url(url) + .get() + .build(); + + try (Response response = client.newCall(request).execute()) { + System.out.println(response.code()); + if (response.body() != null) { + System.out.println(response.body().string()); + } + } catch (IOException e) { + System.out.println(e.getMessage()); + } + } +} +"""; + expect( + javaOkHttpCodeGen.getCode(requestModelGet7), expectedCode); + }); + + test('GET 8', () { + const expectedCode = r"""import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; +import okhttp3.HttpUrl; + +import java.io.IOException; + +public class Main { + public static void main(String[] args) { + OkHttpClient client = new OkHttpClient().newBuilder().build(); + + HttpUrl url = HttpUrl.parse("https://api.github.com/repos/foss42/apidash").newBuilder() + .addQueryParameter("raw", "true") + .build(); + + Request request = new Request.Builder() + .url(url) + .addHeader("User-Agent", "Test Agent") + .get() + .build(); + + try (Response response = client.newCall(request).execute()) { + System.out.println(response.code()); + if (response.body() != null) { + System.out.println(response.body().string()); + } + } catch (IOException e) { + System.out.println(e.getMessage()); + } + } +} +"""; + expect( + javaOkHttpCodeGen.getCode(requestModelGet8), expectedCode); + }); + + test('GET 9', () { + const expectedCode = r"""import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; +import okhttp3.HttpUrl; + +import java.io.IOException; + +public class Main { + public static void main(String[] args) { + OkHttpClient client = new OkHttpClient().newBuilder().build(); + + HttpUrl url = HttpUrl.parse("https://api.apidash.dev/humanize/social").newBuilder() + .addQueryParameter("num", "8700000") + .addQueryParameter("add_space", "true") + .build(); + + Request request = new Request.Builder() + .url(url) + .get() + .build(); + + try (Response response = client.newCall(request).execute()) { + System.out.println(response.code()); + if (response.body() != null) { + System.out.println(response.body().string()); + } + } catch (IOException e) { + System.out.println(e.getMessage()); + } + } +} +"""; + expect( + javaOkHttpCodeGen.getCode(requestModelGet9), expectedCode); + }); + + test('GET 10', () { + const expectedCode = r"""import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; + +import java.io.IOException; + +public class Main { + public static void main(String[] args) { + OkHttpClient client = new OkHttpClient().newBuilder().build(); + + String url = "https://api.apidash.dev/humanize/social"; + + Request request = new Request.Builder() + .url(url) + .addHeader("User-Agent", "Test Agent") + .get() + .build(); + + try (Response response = client.newCall(request).execute()) { + System.out.println(response.code()); + if (response.body() != null) { + System.out.println(response.body().string()); + } + } catch (IOException e) { + System.out.println(e.getMessage()); + } + } +} +"""; + expect( + javaOkHttpCodeGen.getCode( + requestModelGet10, + ), + expectedCode); + }); + + test('GET 11', () { + const expectedCode = r"""import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; +import okhttp3.HttpUrl; + +import java.io.IOException; + +public class Main { + public static void main(String[] args) { + OkHttpClient client = new OkHttpClient().newBuilder().build(); + + HttpUrl url = HttpUrl.parse("https://api.apidash.dev/humanize/social").newBuilder() + .addQueryParameter("num", "8700000") + .addQueryParameter("digits", "3") + .build(); + + Request request = new Request.Builder() + .url(url) + .addHeader("User-Agent", "Test Agent") + .get() + .build(); + + try (Response response = client.newCall(request).execute()) { + System.out.println(response.code()); + if (response.body() != null) { + System.out.println(response.body().string()); + } + } catch (IOException e) { + System.out.println(e.getMessage()); + } + } +} +"""; + expect( + javaOkHttpCodeGen.getCode(requestModelGet11), expectedCode); + }); + + test('GET 12', () { + const expectedCode = r"""import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; + +import java.io.IOException; + +public class Main { + public static void main(String[] args) { + OkHttpClient client = new OkHttpClient().newBuilder().build(); + + String url = "https://api.apidash.dev/humanize/social"; + + Request request = new Request.Builder() + .url(url) + .get() + .build(); + + try (Response response = client.newCall(request).execute()) { + System.out.println(response.code()); + if (response.body() != null) { + System.out.println(response.body().string()); + } + } catch (IOException e) { + System.out.println(e.getMessage()); + } + } +} +"""; + expect( + javaOkHttpCodeGen.getCode(requestModelGet12), expectedCode); + }); + }); + + group('HEAD Request', () { + test('HEAD 1', () { + const expectedCode = r"""import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; + +import java.io.IOException; + +public class Main { + public static void main(String[] args) { + OkHttpClient client = new OkHttpClient().newBuilder().build(); + + String url = "https://api.apidash.dev"; + + Request request = new Request.Builder() + .url(url) + .head() + .build(); + + try (Response response = client.newCall(request).execute()) { + System.out.println(response.code()); + if (response.body() != null) { + System.out.println(response.body().string()); + } + } catch (IOException e) { + System.out.println(e.getMessage()); + } + } +} +"""; + expect( + javaOkHttpCodeGen.getCode(requestModelHead1), expectedCode); + }); + + test('HEAD 2', () { + const expectedCode = r"""import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; + +import java.io.IOException; + +public class Main { + public static void main(String[] args) { + OkHttpClient client = new OkHttpClient().newBuilder().build(); + + String url = "https://api.apidash.dev"; + + Request request = new Request.Builder() + .url(url) + .head() + .build(); + + try (Response response = client.newCall(request).execute()) { + System.out.println(response.code()); + if (response.body() != null) { + System.out.println(response.body().string()); + } + } catch (IOException e) { + System.out.println(e.getMessage()); + } + } +} +"""; + expect( + javaOkHttpCodeGen.getCode(requestModelHead2), expectedCode); + }); + }); + + group('POST Request', () { + test('POST 1', () { + const expectedCode = r'''import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; +import okhttp3.RequestBody; +import okhttp3.MediaType; + +import java.io.IOException; + +public class Main { + public static void main(String[] args) { + OkHttpClient client = new OkHttpClient().newBuilder().build(); + + String url = "https://api.apidash.dev/case/lower"; + + MediaType mediaType = MediaType.parse("text/plain"); + + RequestBody body = RequestBody.create("{\n\"text\": \"I LOVE Flutter\"\n}", mediaType); + + Request request = new Request.Builder() + .url(url) + .post(body) + .build(); + + try (Response response = client.newCall(request).execute()) { + System.out.println(response.code()); + if (response.body() != null) { + System.out.println(response.body().string()); + } + } catch (IOException e) { + System.out.println(e.getMessage()); + } + } +} +'''; + expect( + javaOkHttpCodeGen.getCode(requestModelPost1), expectedCode); + }); + + test('POST 2', () { + const expectedCode = r'''import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; +import okhttp3.RequestBody; +import okhttp3.MediaType; + +import java.io.IOException; + +public class Main { + public static void main(String[] args) { + OkHttpClient client = new OkHttpClient().newBuilder().build(); + + String url = "https://api.apidash.dev/case/lower"; + + MediaType mediaType = MediaType.parse("application/json"); + + RequestBody body = RequestBody.create("{\n\"text\": \"I LOVE Flutter\",\n\"flag\": null,\n\"male\": true,\n\"female\": false,\n\"no\": 1.2,\n\"arr\": [\"null\", \"true\", \"false\", null]\n}", mediaType); + + Request request = new Request.Builder() + .url(url) + .post(body) + .build(); + + try (Response response = client.newCall(request).execute()) { + System.out.println(response.code()); + if (response.body() != null) { + System.out.println(response.body().string()); + } + } catch (IOException e) { + System.out.println(e.getMessage()); + } + } +} +'''; + expect( + javaOkHttpCodeGen.getCode(requestModelPost2), expectedCode); + }); + + test('POST 3', () { + const expectedCode = r'''import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; +import okhttp3.RequestBody; +import okhttp3.MediaType; + +import java.io.IOException; + +public class Main { + public static void main(String[] args) { + OkHttpClient client = new OkHttpClient().newBuilder().build(); + + String url = "https://api.apidash.dev/case/lower"; + + MediaType mediaType = MediaType.parse("application/json"); + + RequestBody body = RequestBody.create("{\n\"text\": \"I LOVE Flutter\"\n}", mediaType); + + Request request = new Request.Builder() + .url(url) + .addHeader("User-Agent", "Test Agent") + .post(body) + .build(); + + try (Response response = client.newCall(request).execute()) { + System.out.println(response.code()); + if (response.body() != null) { + System.out.println(response.body().string()); + } + } catch (IOException e) { + System.out.println(e.getMessage()); + } + } +} +'''; + expect( + javaOkHttpCodeGen.getCode(requestModelPost3), expectedCode); + }); + + test('POST 4', () { + const expectedCode = r'''import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; +import okhttp3.RequestBody; +import okhttp3.MultipartBody; + +import java.io.IOException; + +public class Main { + public static void main(String[] args) { + OkHttpClient client = new OkHttpClient().newBuilder().build(); + + String url = "https://api.apidash.dev/io/form"; + RequestBody body = new MultipartBody.Builder().setType(MultipartBody.FORM) + .addFormDataPart("text","API") + .addFormDataPart("sep","|") + .addFormDataPart("times","3") + .build(); + + Request request = new Request.Builder() + .url(url) + .post(body) + .build(); + + try (Response response = client.newCall(request).execute()) { + System.out.println(response.code()); + if (response.body() != null) { + System.out.println(response.body().string()); + } + } catch (IOException e) { + System.out.println(e.getMessage()); + } + } +} +'''; + expect( + javaOkHttpCodeGen.getCode(requestModelPost4), expectedCode); + }); + + test('POST 5', () { + const expectedCode = r'''import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; +import okhttp3.RequestBody; +import okhttp3.MultipartBody; + +import java.io.IOException; + +public class Main { + public static void main(String[] args) { + OkHttpClient client = new OkHttpClient().newBuilder().build(); + + String url = "https://api.apidash.dev/io/form"; + RequestBody body = new MultipartBody.Builder().setType(MultipartBody.FORM) + .addFormDataPart("text","API") + .addFormDataPart("sep","|") + .addFormDataPart("times","3") + .build(); + + Request request = new Request.Builder() + .url(url) + .addHeader("User-Agent", "Test Agent") + .post(body) + .build(); + + try (Response response = client.newCall(request).execute()) { + System.out.println(response.code()); + if (response.body() != null) { + System.out.println(response.body().string()); + } + } catch (IOException e) { + System.out.println(e.getMessage()); + } + } +} +'''; + expect( + javaOkHttpCodeGen.getCode(requestModelPost5), expectedCode); + }); + + test('POST 6', () { + const expectedCode = r'''import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; +import okhttp3.RequestBody; +import okhttp3.MultipartBody; + +import java.io.IOException; + +public class Main { + public static void main(String[] args) { + OkHttpClient client = new OkHttpClient().newBuilder().build(); + + String url = "https://api.apidash.dev/io/img"; + RequestBody body = new MultipartBody.Builder().setType(MultipartBody.FORM) + .addFormDataPart("token","xyz") + .addFormDataPart("imfile",null,RequestBody.create(MediaType.parse("application/octet-stream"),new File("/Documents/up/1.png"))) + .build(); + + Request request = new Request.Builder() + .url(url) + .post(body) + .build(); + + try (Response response = client.newCall(request).execute()) { + System.out.println(response.code()); + if (response.body() != null) { + System.out.println(response.body().string()); + } + } catch (IOException e) { + System.out.println(e.getMessage()); + } + } +} +'''; + expect( + javaOkHttpCodeGen.getCode(requestModelPost6), expectedCode); + }); + + test('POST 7', () { + const expectedCode = r'''import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; +import okhttp3.RequestBody; +import okhttp3.MultipartBody; + +import java.io.IOException; + +public class Main { + public static void main(String[] args) { + OkHttpClient client = new OkHttpClient().newBuilder().build(); + + String url = "https://api.apidash.dev/io/img"; + RequestBody body = new MultipartBody.Builder().setType(MultipartBody.FORM) + .addFormDataPart("token","xyz") + .addFormDataPart("imfile",null,RequestBody.create(MediaType.parse("application/octet-stream"),new File("/Documents/up/1.png"))) + .build(); + + Request request = new Request.Builder() + .url(url) + .post(body) + .build(); + + try (Response response = client.newCall(request).execute()) { + System.out.println(response.code()); + if (response.body() != null) { + System.out.println(response.body().string()); + } + } catch (IOException e) { + System.out.println(e.getMessage()); + } + } +} +'''; + expect( + javaOkHttpCodeGen.getCode(requestModelPost7), expectedCode); + }); + + test('POST 8', () { + const expectedCode = r'''import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; +import okhttp3.HttpUrl; +import okhttp3.RequestBody; +import okhttp3.MultipartBody; + +import java.io.IOException; + +public class Main { + public static void main(String[] args) { + OkHttpClient client = new OkHttpClient().newBuilder().build(); + + HttpUrl url = HttpUrl.parse("https://api.apidash.dev/io/form").newBuilder() + .addQueryParameter("size", "2") + .addQueryParameter("len", "3") + .build(); + RequestBody body = new MultipartBody.Builder().setType(MultipartBody.FORM) + .addFormDataPart("text","API") + .addFormDataPart("sep","|") + .addFormDataPart("times","3") + .build(); + + Request request = new Request.Builder() + .url(url) + .post(body) + .build(); + + try (Response response = client.newCall(request).execute()) { + System.out.println(response.code()); + if (response.body() != null) { + System.out.println(response.body().string()); + } + } catch (IOException e) { + System.out.println(e.getMessage()); + } + } +} +'''; + expect( + javaOkHttpCodeGen.getCode(requestModelPost8), expectedCode); + }); + + test('POST 9', () { + const expectedCode = r'''import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; +import okhttp3.HttpUrl; +import okhttp3.RequestBody; +import okhttp3.MultipartBody; + +import java.io.IOException; + +public class Main { + public static void main(String[] args) { + OkHttpClient client = new OkHttpClient().newBuilder().build(); + + HttpUrl url = HttpUrl.parse("https://api.apidash.dev/io/img").newBuilder() + .addQueryParameter("size", "2") + .addQueryParameter("len", "3") + .build(); + RequestBody body = new MultipartBody.Builder().setType(MultipartBody.FORM) + .addFormDataPart("token","xyz") + .addFormDataPart("imfile",null,RequestBody.create(MediaType.parse("application/octet-stream"),new File("/Documents/up/1.png"))) + .build(); + + Request request = new Request.Builder() + .url(url) + .addHeader("User-Agent", "Test Agent") + .addHeader("Keep-Alive", "true") + .post(body) + .build(); + + try (Response response = client.newCall(request).execute()) { + System.out.println(response.code()); + if (response.body() != null) { + System.out.println(response.body().string()); + } + } catch (IOException e) { + System.out.println(e.getMessage()); + } + } +} +'''; + expect( + javaOkHttpCodeGen.getCode(requestModelPost9), expectedCode); + }); + }); + + group('PUT Request', () { + test('PUT 1', () { + const expectedCode = r'''import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; +import okhttp3.RequestBody; +import okhttp3.MediaType; + +import java.io.IOException; + +public class Main { + public static void main(String[] args) { + OkHttpClient client = new OkHttpClient().newBuilder().build(); + + String url = "https://reqres.in/api/users/2"; + + MediaType mediaType = MediaType.parse("application/json"); + + RequestBody body = RequestBody.create("{\n\"name\": \"morpheus\",\n\"job\": \"zion resident\"\n}", mediaType); + + Request request = new Request.Builder() + .url(url) + .put(body) + .build(); + + try (Response response = client.newCall(request).execute()) { + System.out.println(response.code()); + if (response.body() != null) { + System.out.println(response.body().string()); + } + } catch (IOException e) { + System.out.println(e.getMessage()); + } + } +} +'''; + expect( + javaOkHttpCodeGen.getCode(requestModelPut1), expectedCode); + }); + }); + + group('PATCH Request', () { + test('PATCH 1', () { + const expectedCode = r'''import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; +import okhttp3.RequestBody; +import okhttp3.MediaType; + +import java.io.IOException; + +public class Main { + public static void main(String[] args) { + OkHttpClient client = new OkHttpClient().newBuilder().build(); + + String url = "https://reqres.in/api/users/2"; + + MediaType mediaType = MediaType.parse("application/json"); + + RequestBody body = RequestBody.create("{\n\"name\": \"marfeus\",\n\"job\": \"accountant\"\n}", mediaType); + + Request request = new Request.Builder() + .url(url) + .patch(body) + .build(); + + try (Response response = client.newCall(request).execute()) { + System.out.println(response.code()); + if (response.body() != null) { + System.out.println(response.body().string()); + } + } catch (IOException e) { + System.out.println(e.getMessage()); + } + } +} +'''; + expect( + javaOkHttpCodeGen.getCode(requestModelPatch1), expectedCode); + }); + }); + + group('DELETE Request', () { + test('DELETE 1', () { + const expectedCode = r"""import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; + +import java.io.IOException; + +public class Main { + public static void main(String[] args) { + OkHttpClient client = new OkHttpClient().newBuilder().build(); + + String url = "https://reqres.in/api/users/2"; + + Request request = new Request.Builder() + .url(url) + .delete() + .build(); + + try (Response response = client.newCall(request).execute()) { + System.out.println(response.code()); + if (response.body() != null) { + System.out.println(response.body().string()); + } + } catch (IOException e) { + System.out.println(e.getMessage()); + } + } +} +"""; + expect(javaOkHttpCodeGen.getCode(requestModelDelete1), + expectedCode); + }); + + test('DELETE 2', () { + const expectedCode = r'''import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; +import okhttp3.RequestBody; +import okhttp3.MediaType; + +import java.io.IOException; + +public class Main { + public static void main(String[] args) { + OkHttpClient client = new OkHttpClient().newBuilder().build(); + + String url = "https://reqres.in/api/users/2"; + + MediaType mediaType = MediaType.parse("application/json"); + + RequestBody body = RequestBody.create("{\n\"name\": \"marfeus\",\n\"job\": \"accountant\"\n}", mediaType); + + Request request = new Request.Builder() + .url(url) + .delete(body) + .build(); + + try (Response response = client.newCall(request).execute()) { + System.out.println(response.code()); + if (response.body() != null) { + System.out.println(response.body().string()); + } + } catch (IOException e) { + System.out.println(e.getMessage()); + } + } +} +'''; + expect(javaOkHttpCodeGen.getCode(requestModelDelete2), + expectedCode); + }); + }); +} \ No newline at end of file