diff --git a/lib/codegen/codegen.dart b/lib/codegen/codegen.dart index 1aec7144..7276ed29 100644 --- a/lib/codegen/codegen.dart +++ b/lib/codegen/codegen.dart @@ -9,6 +9,7 @@ import 'js/axios.dart'; import 'js/fetch.dart'; import 'others/har.dart'; import 'others/curl.dart'; +import 'java/httpclient.dart'; class Codegen { String? getCode( @@ -42,6 +43,8 @@ class Codegen { .getCode(requestModel, defaultUriScheme); case CodegenLanguage.pythonRequests: return PythonRequestsCodeGen().getCode(requestModel, defaultUriScheme); + case CodegenLanguage.javaHttpClient: + return JavaHttpClientCodeGen().getCode(requestModel, defaultUriScheme); } } } diff --git a/lib/codegen/java/httpclient.dart b/lib/codegen/java/httpclient.dart new file mode 100644 index 00000000..d57c73f3 --- /dev/null +++ b/lib/codegen/java/httpclient.dart @@ -0,0 +1,181 @@ + +import 'dart:convert'; +import 'package:jinja/jinja.dart' as jj; +import 'package:apidash/utils/utils.dart' show getValidRequestUri, requestModelToHARJsonRequest, stripUriParams; +import '../../models/request_model.dart'; +import 'package:apidash/consts.dart'; + +class JavaHttpClientCodeGen { + final String kTemplateStart = """ +import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.net.http.HttpHeaders; +import java.net.http.HttpRequest.BodyPublishers; +import java.net.http.HttpResponse.BodyHandlers; + +public class JavaHttpClientExample { + + public static void main(String[] args) throws IOException, InterruptedException { + HttpClient client = HttpClient.newHttpClient(); +"""; + final String kTemplateUrl = ''' + + String url = "{{url}}"; + +'''; + + final String kTemplateUrlQuery = ''' + + String url = "{{url}}"; + try { + URI uri = new URI(url); + url = uri.resolve("{{params}}").toString(); + } catch (URISyntaxException e) { + e.printStackTrace(); + } + +'''; + + String kTemplateRequestBody = ''' + + String body = "{{body}}"; + +'''; + + final String kStringRequestStart = """ + + HttpRequest request = HttpRequest.newBuilder() + .uri(URI.create(url)) +"""; + + final String kTemplateRequestEnd = """ + .{{method}}({{body}}) + .build(); + + HttpResponse response = client.send(request, BodyHandlers.ofString()); + System.out.println(response.statusCode()); + System.out.println(response.body()); + } +} +\n +"""; + + String? getCode( + RequestModel requestModel, + String defaultUriScheme, + ) { + try { + String result = ""; + bool hasQuery = false; + bool hasBody = false; + bool hasJsonBody = false; + + String url = requestModel.url; + if (!url.contains("://") && url.isNotEmpty) { + url = "$defaultUriScheme://$url"; + } + + var rec = getValidRequestUri( + 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": uri.query}); + } + } + + if(!hasQuery) { + var templateUrl = jj.Template(kTemplateUrl); + result += templateUrl.render({"url": url}); + } + var rM = requestModel.copyWith(url: url); + + var harJson = requestModelToHARJsonRequest(rM, useEnabled: true); + + var method = requestModel.method; + var requestBody = requestModel.requestBody; + if (requestModel.isFormDataRequest && requestModel.formDataMapList.isNotEmpty && kMethodsWithBody.contains(method)) { + var formDataList = requestModel.formDataMapList; + result += """ + StringBuilder formData = new StringBuilder(); + formData.append("""; + + for (var formDataMap in formDataList) { + result += '"""${formDataMap['name']}=${formDataMap['value']}&""",'; + } + + result = result.substring(0, result.length - 1); + result += ");\n"; + hasBody = true; + } else if (kMethodsWithBody.contains(method) && requestBody != null) { + var contentLength = utf8.encode(requestBody).length; + if (contentLength > 0) { + var templateBody = jj.Template(kTemplateRequestBody);hasBody = true; + hasJsonBody = requestBody.startsWith("{") && requestBody.endsWith("}"); + if (harJson["postData"]?["text"] != null) { + result += templateBody + .render({"body": kEncoder.convert(harJson["postData"]["text"]).substring(1, kEncoder.convert(harJson["postData"]["text"]).length - 1)}); + } + } + } + + result = kTemplateStart + result; + result += kStringRequestStart; + + var headersList = requestModel.enabledRequestHeaders; + var contentType = requestModel.requestBodyContentType.header; + if(hasBody && !requestModel.enabledHeadersMap.containsKey('Content-Type')){ + result = """$result .header("Content-Type", "$contentType")\n"""; + } + if (headersList != null) { + var headers = requestModel.enabledHeadersMap; + if (headers.isNotEmpty) { + result += getHeaders(headers,hasJsonBody); + } + } + + var templateRequestEnd = jj.Template(kTemplateRequestEnd); + + if(kMethodsWithBody.contains(method)){ + result += templateRequestEnd.render({ + "method": method.name.toUpperCase(), + "body": hasBody ? "BodyPublishers.ofString(body)" : "BodyPublishers.noBody()" + }); + } else { + result += templateRequestEnd.render({ + "method": method.name.toUpperCase(), + "body": "" + }); + } + } + return result; + } catch (e) { + return null; + } + } + + String getHeaders(Map headers,hasJsonBody) { + String result = ""; + for (final k in headers.keys) { + if(k.toLowerCase() == 'authorization') { + result = """$result .header("$k", "${headers[k]}")\n"""; + } else { + result = """$result .header("$k", "${headers[k]}")\n"""; + } + } + return result; + } +} diff --git a/lib/consts.dart b/lib/consts.dart index f8f9f97c..5c460043 100644 --- a/lib/consts.dart +++ b/lib/consts.dart @@ -268,7 +268,9 @@ enum CodegenLanguage { nodejsFetch("node.js (fetch)", "javascript", "js"), kotlinOkHttp("Kotlin (okhttp3)", "java", "kt"), pythonHttpClient("Python (http.client)", "python", "py"), - pythonRequests("Python (requests)", "python", "py"); + pythonRequests("Python (requests)", "python", "py"), + javaHttpClient("Java (HttpClient)", "java", "java") + ; const CodegenLanguage(this.label, this.codeHighlightLang, this.ext); final String label; diff --git a/test/codegen/java_http_client_codegen_test.dart b/test/codegen/java_http_client_codegen_test.dart new file mode 100644 index 00000000..83b71d2f --- /dev/null +++ b/test/codegen/java_http_client_codegen_test.dart @@ -0,0 +1,800 @@ +import 'package:test/test.dart'; +import 'package:apidash/codegen/java/httpclient.dart'; +import '../request_models.dart'; + +void main() { + final javaHttpClientCodeGen = JavaHttpClientCodeGen(); + + group('GET Request', () { + test('GET 1', () { + const expectedCode = """ +import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.net.http.HttpHeaders; +import java.net.http.HttpRequest.BodyPublishers; +import java.net.http.HttpResponse.BodyHandlers; + +public class JavaHttpClientExample { + + public static void main(String[] args) throws IOException, InterruptedException { + HttpClient client = HttpClient.newHttpClient(); + + String url = "https://api.foss42.com"; + + HttpRequest request = HttpRequest.newBuilder() + .uri(URI.create(url)) + .GET() + .build(); + + HttpResponse response = client.send(request, BodyHandlers.ofString()); + System.out.println(response.statusCode()); + System.out.println(response.body()); + } +} + +"""; + expect(javaHttpClientCodeGen.getCode(requestModelGet1, "https"), expectedCode); + }); + + test('GET 2', () { + const expectedCode = """ +import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.net.http.HttpHeaders; +import java.net.http.HttpRequest.BodyPublishers; +import java.net.http.HttpResponse.BodyHandlers; + +public class JavaHttpClientExample { + + public static void main(String[] args) throws IOException, InterruptedException { + HttpClient client = HttpClient.newHttpClient(); + + String url = "https://api.foss42.com/country/data"; + try { + URI uri = new URI(url); + url = uri.resolve("code=US").toString(); + } catch (URISyntaxException e) { + e.printStackTrace(); + } + + HttpRequest request = HttpRequest.newBuilder() + .uri(URI.create(url)) + .GET() + .build(); + + HttpResponse response = client.send(request, BodyHandlers.ofString()); + System.out.println(response.statusCode()); + System.out.println(response.body()); + } +} + +"""; + expect(javaHttpClientCodeGen.getCode(requestModelGet2, "https"), expectedCode); + }); + + test('GET 3', () { + const expectedCode = """ +import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.net.http.HttpHeaders; +import java.net.http.HttpRequest.BodyPublishers; +import java.net.http.HttpResponse.BodyHandlers; + +public class JavaHttpClientExample { + + public static void main(String[] args) throws IOException, InterruptedException { + HttpClient client = HttpClient.newHttpClient(); + + String url = "https://api.foss42.com/country/data"; + try { + URI uri = new URI(url); + url = uri.resolve("code=IND").toString(); + } catch (URISyntaxException e) { + e.printStackTrace(); + } + + HttpRequest request = HttpRequest.newBuilder() + .uri(URI.create(url)) + .GET() + .build(); + + HttpResponse response = client.send(request, BodyHandlers.ofString()); + System.out.println(response.statusCode()); + System.out.println(response.body()); + } +} + +"""; + expect(javaHttpClientCodeGen.getCode(requestModelGet3, "https"), expectedCode); + }); + + test('GET 4', () { + const expectedCode = """ +import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.net.http.HttpHeaders; +import java.net.http.HttpRequest.BodyPublishers; +import java.net.http.HttpResponse.BodyHandlers; + +public class JavaHttpClientExample { + + public static void main(String[] args) throws IOException, InterruptedException { + HttpClient client = HttpClient.newHttpClient(); + + String url = "https://api.foss42.com/humanize/social"; + try { + URI uri = new URI(url); + url = uri.resolve("num=8700000&digits=3&system=SS&add_space=true&trailing_zeros=true").toString(); + } catch (URISyntaxException e) { + e.printStackTrace(); + } + + HttpRequest request = HttpRequest.newBuilder() + .uri(URI.create(url)) + .GET() + .build(); + + HttpResponse response = client.send(request, BodyHandlers.ofString()); + System.out.println(response.statusCode()); + System.out.println(response.body()); + } +} + +"""; + expect(javaHttpClientCodeGen.getCode(requestModelGet4, "https"), expectedCode); + }); + + test('GET 5', () { + const expectedCode = """ +import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.net.http.HttpHeaders; +import java.net.http.HttpRequest.BodyPublishers; +import java.net.http.HttpResponse.BodyHandlers; + +public class JavaHttpClientExample { + + public static void main(String[] args) throws IOException, InterruptedException { + HttpClient client = HttpClient.newHttpClient(); + + String url = "https://api.github.com/repos/foss42/apidash"; + + HttpRequest request = HttpRequest.newBuilder() + .uri(URI.create(url)) + .header("User-Agent", "Test Agent") + .GET() + .build(); + + HttpResponse response = client.send(request, BodyHandlers.ofString()); + System.out.println(response.statusCode()); + System.out.println(response.body()); + } +} + +"""; + expect(javaHttpClientCodeGen.getCode(requestModelGet5, "https"), expectedCode); + }); + + test('GET 6', () { + const expectedCode = """ +import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.net.http.HttpHeaders; +import java.net.http.HttpRequest.BodyPublishers; +import java.net.http.HttpResponse.BodyHandlers; + +public class JavaHttpClientExample { + + public static void main(String[] args) throws IOException, InterruptedException { + HttpClient client = HttpClient.newHttpClient(); + + String url = "https://api.github.com/repos/foss42/apidash"; + try { + URI uri = new URI(url); + url = uri.resolve("raw=true").toString(); + } catch (URISyntaxException e) { + e.printStackTrace(); + } + + HttpRequest request = HttpRequest.newBuilder() + .uri(URI.create(url)) + .header("User-Agent", "Test Agent") + .GET() + .build(); + + HttpResponse response = client.send(request, BodyHandlers.ofString()); + System.out.println(response.statusCode()); + System.out.println(response.body()); + } +} + +"""; + expect(javaHttpClientCodeGen.getCode(requestModelGet6, "https"), expectedCode); + }); + + test('GET 7', () { + const expectedCode = """ +import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.net.http.HttpHeaders; +import java.net.http.HttpRequest.BodyPublishers; +import java.net.http.HttpResponse.BodyHandlers; + +public class JavaHttpClientExample { + + public static void main(String[] args) throws IOException, InterruptedException { + HttpClient client = HttpClient.newHttpClient(); + + String url = "https://api.foss42.com"; + + HttpRequest request = HttpRequest.newBuilder() + .uri(URI.create(url)) + .GET() + .build(); + + HttpResponse response = client.send(request, BodyHandlers.ofString()); + System.out.println(response.statusCode()); + System.out.println(response.body()); + } +} + +"""; + expect(javaHttpClientCodeGen.getCode(requestModelGet7, "https"), expectedCode); + }); + + test('GET 8', () { + const expectedCode = """ +import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.net.http.HttpHeaders; +import java.net.http.HttpRequest.BodyPublishers; +import java.net.http.HttpResponse.BodyHandlers; + +public class JavaHttpClientExample { + + public static void main(String[] args) throws IOException, InterruptedException { + HttpClient client = HttpClient.newHttpClient(); + + String url = "https://api.github.com/repos/foss42/apidash"; + try { + URI uri = new URI(url); + url = uri.resolve("raw=true").toString(); + } catch (URISyntaxException e) { + e.printStackTrace(); + } + + HttpRequest request = HttpRequest.newBuilder() + .uri(URI.create(url)) + .header("User-Agent", "Test Agent") + .GET() + .build(); + + HttpResponse response = client.send(request, BodyHandlers.ofString()); + System.out.println(response.statusCode()); + System.out.println(response.body()); + } +} + +"""; + expect(javaHttpClientCodeGen.getCode(requestModelGet8, "https"), expectedCode); + }); + + test('GET 9', () { + const expectedCode = """ +import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.net.http.HttpHeaders; +import java.net.http.HttpRequest.BodyPublishers; +import java.net.http.HttpResponse.BodyHandlers; + +public class JavaHttpClientExample { + + public static void main(String[] args) throws IOException, InterruptedException { + HttpClient client = HttpClient.newHttpClient(); + + String url = "https://api.foss42.com/humanize/social"; + try { + URI uri = new URI(url); + url = uri.resolve("num=8700000&add_space=true").toString(); + } catch (URISyntaxException e) { + e.printStackTrace(); + } + + HttpRequest request = HttpRequest.newBuilder() + .uri(URI.create(url)) + .GET() + .build(); + + HttpResponse response = client.send(request, BodyHandlers.ofString()); + System.out.println(response.statusCode()); + System.out.println(response.body()); + } +} + +"""; + expect(javaHttpClientCodeGen.getCode(requestModelGet9, "https"), expectedCode); + }); + + test('GET 10', () { + const expectedCode = """ +import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.net.http.HttpHeaders; +import java.net.http.HttpRequest.BodyPublishers; +import java.net.http.HttpResponse.BodyHandlers; + +public class JavaHttpClientExample { + + public static void main(String[] args) throws IOException, InterruptedException { + HttpClient client = HttpClient.newHttpClient(); + + String url = "https://api.foss42.com/humanize/social"; + + HttpRequest request = HttpRequest.newBuilder() + .uri(URI.create(url)) + .header("User-Agent", "Test Agent") + .GET() + .build(); + + HttpResponse response = client.send(request, BodyHandlers.ofString()); + System.out.println(response.statusCode()); + System.out.println(response.body()); + } +} + +"""; + expect(javaHttpClientCodeGen.getCode(requestModelGet10, "https"), expectedCode); + }); + + test('GET 11', () { + const expectedCode = """ +import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.net.http.HttpHeaders; +import java.net.http.HttpRequest.BodyPublishers; +import java.net.http.HttpResponse.BodyHandlers; + +public class JavaHttpClientExample { + + public static void main(String[] args) throws IOException, InterruptedException { + HttpClient client = HttpClient.newHttpClient(); + + String url = "https://api.foss42.com/humanize/social"; + try { + URI uri = new URI(url); + url = uri.resolve("num=8700000&digits=3").toString(); + } catch (URISyntaxException e) { + e.printStackTrace(); + } + + HttpRequest request = HttpRequest.newBuilder() + .uri(URI.create(url)) + .header("User-Agent", "Test Agent") + .GET() + .build(); + + HttpResponse response = client.send(request, BodyHandlers.ofString()); + System.out.println(response.statusCode()); + System.out.println(response.body()); + } +} + +"""; + expect(javaHttpClientCodeGen.getCode(requestModelGet11, "https"), expectedCode); + }); + + test('GET 12', () { + const expectedCode = """ +import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.net.http.HttpHeaders; +import java.net.http.HttpRequest.BodyPublishers; +import java.net.http.HttpResponse.BodyHandlers; + +public class JavaHttpClientExample { + + public static void main(String[] args) throws IOException, InterruptedException { + HttpClient client = HttpClient.newHttpClient(); + + String url = "https://api.foss42.com/humanize/social"; + + HttpRequest request = HttpRequest.newBuilder() + .uri(URI.create(url)) + .GET() + .build(); + + HttpResponse response = client.send(request, BodyHandlers.ofString()); + System.out.println(response.statusCode()); + System.out.println(response.body()); + } +} + +"""; + expect(javaHttpClientCodeGen.getCode(requestModelGet12, "https"), expectedCode); + }); + + test('HEAD 1', () { + const expectedCode = """ +import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.net.http.HttpHeaders; +import java.net.http.HttpRequest.BodyPublishers; +import java.net.http.HttpResponse.BodyHandlers; + +public class JavaHttpClientExample { + + public static void main(String[] args) throws IOException, InterruptedException { + HttpClient client = HttpClient.newHttpClient(); + + String url = "https://api.foss42.com"; + + HttpRequest request = HttpRequest.newBuilder() + .uri(URI.create(url)) + .HEAD() + .build(); + + HttpResponse response = client.send(request, BodyHandlers.ofString()); + System.out.println(response.statusCode()); + System.out.println(response.body()); + } +} + +"""; + expect(javaHttpClientCodeGen.getCode(requestModelHead1, "https"), expectedCode); + }); + + test('HEAD 2', () { + const expectedCode = """ +import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.net.http.HttpHeaders; +import java.net.http.HttpRequest.BodyPublishers; +import java.net.http.HttpResponse.BodyHandlers; + +public class JavaHttpClientExample { + + public static void main(String[] args) throws IOException, InterruptedException { + HttpClient client = HttpClient.newHttpClient(); + + String url = "https://api.foss42.com"; + + HttpRequest request = HttpRequest.newBuilder() + .uri(URI.create(url)) + .HEAD() + .build(); + + HttpResponse response = client.send(request, BodyHandlers.ofString()); + System.out.println(response.statusCode()); + System.out.println(response.body()); + } +} + +"""; + expect(javaHttpClientCodeGen.getCode(requestModelHead2, "https"), expectedCode); + }); +}); + +group('POST Request', () { + test('POST 1', () { + const expectedCode = """ +import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.net.http.HttpHeaders; +import java.net.http.HttpRequest.BodyPublishers; +import java.net.http.HttpResponse.BodyHandlers; + +public class JavaHttpClientExample { + + public static void main(String[] args) throws IOException, InterruptedException { + HttpClient client = HttpClient.newHttpClient(); + + String url = "https://api.foss42.com/case/lower"; + + String body = "{\\n\\"text\\": \\"I LOVE Flutter\\"\\n}"; + + HttpRequest request = HttpRequest.newBuilder() + .uri(URI.create(url)) + .header("Content-Type", "text/plain") + .POST(BodyPublishers.ofString(body)) + .build(); + + HttpResponse response = client.send(request, BodyHandlers.ofString()); + System.out.println(response.statusCode()); + System.out.println(response.body()); + } +} + +"""; + expect(javaHttpClientCodeGen.getCode(requestModelPost1, "https"), expectedCode); + }); + + test('POST 2', () { + const expectedCode = """ +import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.net.http.HttpHeaders; +import java.net.http.HttpRequest.BodyPublishers; +import java.net.http.HttpResponse.BodyHandlers; + +public class JavaHttpClientExample { + + public static void main(String[] args) throws IOException, InterruptedException { + HttpClient client = HttpClient.newHttpClient(); + + String url = "https://api.foss42.com/case/lower"; + + String body = "{\\n\\"text\\": \\"I LOVE Flutter\\"\\n}"; + + HttpRequest request = HttpRequest.newBuilder() + .uri(URI.create(url)) + .header("Content-Type", "application/json") + .POST(BodyPublishers.ofString(body)) + .build(); + + HttpResponse response = client.send(request, BodyHandlers.ofString()); + System.out.println(response.statusCode()); + System.out.println(response.body()); + } +} + +"""; + expect(javaHttpClientCodeGen.getCode(requestModelPost2, "https"), expectedCode); + }); + + test('POST 3', () { + const expectedCode = """ +import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.net.http.HttpHeaders; +import java.net.http.HttpRequest.BodyPublishers; +import java.net.http.HttpResponse.BodyHandlers; + +public class JavaHttpClientExample { + + public static void main(String[] args) throws IOException, InterruptedException { + HttpClient client = HttpClient.newHttpClient(); + + String url = "https://api.foss42.com/case/lower"; + + String body = "{\\n\\"text\\": \\"I LOVE Flutter\\"\\n}"; + + HttpRequest request = HttpRequest.newBuilder() + .uri(URI.create(url)) + .header("Content-Type", "application/json") + .header("User-Agent", "Test Agent") + .POST(BodyPublishers.ofString(body)) + .build(); + + HttpResponse response = client.send(request, BodyHandlers.ofString()); + System.out.println(response.statusCode()); + System.out.println(response.body()); + } +} + +"""; + expect(javaHttpClientCodeGen.getCode(requestModelPost3, "https"), expectedCode); + }); +}); + +group('PUT Request', () { + test('PUT 1', () { + const expectedCode = """ +import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.net.http.HttpHeaders; +import java.net.http.HttpRequest.BodyPublishers; +import java.net.http.HttpResponse.BodyHandlers; + +public class JavaHttpClientExample { + + public static void main(String[] args) throws IOException, InterruptedException { + HttpClient client = HttpClient.newHttpClient(); + + String url = "https://reqres.in/api/users/2"; + + String body = "{\\n\\"name\\": \\"morpheus\\",\\n\\"job\\": \\"zion resident\\"\\n}"; + + HttpRequest request = HttpRequest.newBuilder() + .uri(URI.create(url)) + .header("Content-Type", "application/json") + .PUT(BodyPublishers.ofString(body)) + .build(); + + HttpResponse response = client.send(request, BodyHandlers.ofString()); + System.out.println(response.statusCode()); + System.out.println(response.body()); + } +} + +"""; + expect(javaHttpClientCodeGen.getCode(requestModelPut1, "https"), expectedCode); + }); +}); + +group('PATCH Request', () { + test('PATCH 1', () { + const expectedCode = """ +import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.net.http.HttpHeaders; +import java.net.http.HttpRequest.BodyPublishers; +import java.net.http.HttpResponse.BodyHandlers; + +public class JavaHttpClientExample { + + public static void main(String[] args) throws IOException, InterruptedException { + HttpClient client = HttpClient.newHttpClient(); + + String url = "https://reqres.in/api/users/2"; + + String body = "{\\n\\"name\\": \\"marfeus\\",\\n\\"job\\": \\"accountant\\"\\n}"; + + HttpRequest request = HttpRequest.newBuilder() + .uri(URI.create(url)) + .header("Content-Type", "application/json") + .PATCH(BodyPublishers.ofString(body)) + .build(); + + HttpResponse response = client.send(request, BodyHandlers.ofString()); + System.out.println(response.statusCode()); + System.out.println(response.body()); + } +} + +"""; + expect(javaHttpClientCodeGen.getCode(requestModelPatch1, "https"), expectedCode); + }); +}); + +group('DELETE Request', () { + test('DELETE 1', () { + const expectedCode = """ +import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.net.http.HttpHeaders; +import java.net.http.HttpRequest.BodyPublishers; +import java.net.http.HttpResponse.BodyHandlers; + +public class JavaHttpClientExample { + + public static void main(String[] args) throws IOException, InterruptedException { + HttpClient client = HttpClient.newHttpClient(); + + String url = "https://reqres.in/api/users/2"; + + HttpRequest request = HttpRequest.newBuilder() + .uri(URI.create(url)) + .DELETE(BodyPublishers.noBody()) + .build(); + + HttpResponse response = client.send(request, BodyHandlers.ofString()); + System.out.println(response.statusCode()); + System.out.println(response.body()); + } +} + +"""; + expect(javaHttpClientCodeGen.getCode(requestModelDelete1, "https"), expectedCode); + }); + + test('DELETE 2', () { + const expectedCode = """ +import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.net.http.HttpHeaders; +import java.net.http.HttpRequest.BodyPublishers; +import java.net.http.HttpResponse.BodyHandlers; + +public class JavaHttpClientExample { + + public static void main(String[] args) throws IOException, InterruptedException { + HttpClient client = HttpClient.newHttpClient(); + + String url = "https://reqres.in/api/users/2"; + + String body = "{\\n\\"name\\": \\"marfeus\\",\\n\\"job\\": \\"accountant\\"\\n}"; + + HttpRequest request = HttpRequest.newBuilder() + .uri(URI.create(url)) + .header("Content-Type", "application/json") + .DELETE(BodyPublishers.ofString(body)) + .build(); + + HttpResponse response = client.send(request, BodyHandlers.ofString()); + System.out.println(response.statusCode()); + System.out.println(response.body()); + } +} + +"""; + expect(javaHttpClientCodeGen.getCode(requestModelDelete2, "https"), expectedCode); + }); +}); + + + +} \ No newline at end of file