diff --git a/test/codegen/java_httpclient_codegen_test.dart b/test/codegen/java_httpclient_codegen_test.dart new file mode 100644 index 00000000..7ae82b89 --- /dev/null +++ b/test/codegen/java_httpclient_codegen_test.dart @@ -0,0 +1,1119 @@ +import 'package:apidash/codegen/codegen.dart'; +import 'package:apidash/consts.dart'; +import 'package:test/test.dart'; +import '../request_models.dart'; + +void main() { + final codeGen = Codegen(); + + group('GET Request', () { + test('GET1', () { + const expectedCode = r''' +import java.net.URI; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.io.IOException; + +public class Main { + public static void main(String[] args) { + try { + HttpClient client = HttpClient.newHttpClient(); + URI uri = URI.create("https://api.apidash.dev"); + + HttpRequest.Builder requestBuilder = HttpRequest.newBuilder(uri).GET(); + HttpResponse response = client.send(requestBuilder.build(), HttpResponse.BodyHandlers.ofString()); + System.out.println("Response body: " + response.body()); + System.out.println("Response code: " + response.statusCode()); + } catch (IOException | InterruptedException e) { + System.out.println("An error occurred: " + e.getMessage()); + } + } + +}'''; + expect( + codeGen.getCode( + CodegenLanguage.javaHttpClient, requestModelGet1, "https"), + expectedCode); + }); + test('GET2', () { + const expectedCode = r''' +import java.net.URI; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.io.IOException; + +public class Main { + public static void main(String[] args) { + try { + HttpClient client = HttpClient.newHttpClient(); + URI uri = URI.create("https://api.apidash.dev/country/data?code=US"); + + HttpRequest.Builder requestBuilder = HttpRequest.newBuilder(uri).GET(); + HttpResponse response = client.send(requestBuilder.build(), HttpResponse.BodyHandlers.ofString()); + System.out.println("Response body: " + response.body()); + System.out.println("Response code: " + response.statusCode()); + } catch (IOException | InterruptedException e) { + System.out.println("An error occurred: " + e.getMessage()); + } + } + +}'''; + expect( + codeGen.getCode( + CodegenLanguage.javaHttpClient, requestModelGet2, "https"), + expectedCode); + }); + test('GET3', () { + const expectedCode = r''' +import java.net.URI; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.io.IOException; + +public class Main { + public static void main(String[] args) { + try { + HttpClient client = HttpClient.newHttpClient(); + URI uri = URI.create("https://api.apidash.dev/country/data?code=IND"); + + HttpRequest.Builder requestBuilder = HttpRequest.newBuilder(uri).GET(); + HttpResponse response = client.send(requestBuilder.build(), HttpResponse.BodyHandlers.ofString()); + System.out.println("Response body: " + response.body()); + System.out.println("Response code: " + response.statusCode()); + } catch (IOException | InterruptedException e) { + System.out.println("An error occurred: " + e.getMessage()); + } + } + +}'''; + expect( + codeGen.getCode( + CodegenLanguage.javaHttpClient, requestModelGet3, "https"), + expectedCode); + }); + test('GET4', () { + const expectedCode = r''' +import java.net.URI; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.io.IOException; + +public class Main { + public static void main(String[] args) { + try { + HttpClient client = HttpClient.newHttpClient(); + URI uri = URI.create("https://api.apidash.dev/humanize/social?num=8700000&digits=3&system=SS&add_space=true&trailing_zeros=true"); + + HttpRequest.Builder requestBuilder = HttpRequest.newBuilder(uri).GET(); + HttpResponse response = client.send(requestBuilder.build(), HttpResponse.BodyHandlers.ofString()); + System.out.println("Response body: " + response.body()); + System.out.println("Response code: " + response.statusCode()); + } catch (IOException | InterruptedException e) { + System.out.println("An error occurred: " + e.getMessage()); + } + } + +}'''; + expect( + codeGen.getCode( + CodegenLanguage.javaHttpClient, requestModelGet4, "https"), + expectedCode); + }); + test('GET5', () { + const expectedCode = r''' +import java.net.URI; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.io.IOException; + +public class Main { + public static void main(String[] args) { + try { + HttpClient client = HttpClient.newHttpClient(); + URI uri = URI.create("https://api.github.com/repos/foss42/apidash"); + + HttpRequest.Builder requestBuilder = HttpRequest.newBuilder(uri).GET(); + requestBuilder = requestBuilder.headers( + "User-Agent", "Test Agent" + ); + HttpResponse response = client.send(requestBuilder.build(), HttpResponse.BodyHandlers.ofString()); + System.out.println("Response body: " + response.body()); + System.out.println("Response code: " + response.statusCode()); + } catch (IOException | InterruptedException e) { + System.out.println("An error occurred: " + e.getMessage()); + } + } + +}'''; + expect( + codeGen.getCode( + CodegenLanguage.javaHttpClient, requestModelGet5, "https"), + expectedCode); + }); + test('GET6', () { + const expectedCode = r''' +import java.net.URI; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.io.IOException; + +public class Main { + public static void main(String[] args) { + try { + HttpClient client = HttpClient.newHttpClient(); + URI uri = URI.create("https://api.github.com/repos/foss42/apidash?raw=true"); + + HttpRequest.Builder requestBuilder = HttpRequest.newBuilder(uri).GET(); + requestBuilder = requestBuilder.headers( + "User-Agent", "Test Agent" + ); + HttpResponse response = client.send(requestBuilder.build(), HttpResponse.BodyHandlers.ofString()); + System.out.println("Response body: " + response.body()); + System.out.println("Response code: " + response.statusCode()); + } catch (IOException | InterruptedException e) { + System.out.println("An error occurred: " + e.getMessage()); + } + } + +}'''; + expect( + codeGen.getCode( + CodegenLanguage.javaHttpClient, requestModelGet6, "https"), + expectedCode); + }); + test('GET7', () { + const expectedCode = r''' +import java.net.URI; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.io.IOException; + +public class Main { + public static void main(String[] args) { + try { + HttpClient client = HttpClient.newHttpClient(); + URI uri = URI.create("https://api.apidash.dev"); + + HttpRequest.Builder requestBuilder = HttpRequest.newBuilder(uri).GET(); + HttpResponse response = client.send(requestBuilder.build(), HttpResponse.BodyHandlers.ofString()); + System.out.println("Response body: " + response.body()); + System.out.println("Response code: " + response.statusCode()); + } catch (IOException | InterruptedException e) { + System.out.println("An error occurred: " + e.getMessage()); + } + } + +}'''; + expect( + codeGen.getCode( + CodegenLanguage.javaHttpClient, requestModelGet7, "https"), + expectedCode); + }); + test('GET8', () { + const expectedCode = r''' +import java.net.URI; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.io.IOException; + +public class Main { + public static void main(String[] args) { + try { + HttpClient client = HttpClient.newHttpClient(); + URI uri = URI.create("https://api.github.com/repos/foss42/apidash?raw=true"); + + HttpRequest.Builder requestBuilder = HttpRequest.newBuilder(uri).GET(); + requestBuilder = requestBuilder.headers( + "User-Agent", "Test Agent" + ); + HttpResponse response = client.send(requestBuilder.build(), HttpResponse.BodyHandlers.ofString()); + System.out.println("Response body: " + response.body()); + System.out.println("Response code: " + response.statusCode()); + } catch (IOException | InterruptedException e) { + System.out.println("An error occurred: " + e.getMessage()); + } + } + +}'''; + expect( + codeGen.getCode( + CodegenLanguage.javaHttpClient, requestModelGet8, "https"), + expectedCode); + }); + test('GET9', () { + const expectedCode = r''' +import java.net.URI; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.io.IOException; + +public class Main { + public static void main(String[] args) { + try { + HttpClient client = HttpClient.newHttpClient(); + URI uri = URI.create("https://api.apidash.dev/humanize/social?num=8700000&add_space=true"); + + HttpRequest.Builder requestBuilder = HttpRequest.newBuilder(uri).GET(); + HttpResponse response = client.send(requestBuilder.build(), HttpResponse.BodyHandlers.ofString()); + System.out.println("Response body: " + response.body()); + System.out.println("Response code: " + response.statusCode()); + } catch (IOException | InterruptedException e) { + System.out.println("An error occurred: " + e.getMessage()); + } + } + +}'''; + expect( + codeGen.getCode( + CodegenLanguage.javaHttpClient, requestModelGet9, "https"), + expectedCode); + }); + test('GET10', () { + const expectedCode = r''' +import java.net.URI; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.io.IOException; + +public class Main { + public static void main(String[] args) { + try { + HttpClient client = HttpClient.newHttpClient(); + URI uri = URI.create("https://api.apidash.dev/humanize/social"); + + HttpRequest.Builder requestBuilder = HttpRequest.newBuilder(uri).GET(); + requestBuilder = requestBuilder.headers( + "User-Agent", "Test Agent" + ); + HttpResponse response = client.send(requestBuilder.build(), HttpResponse.BodyHandlers.ofString()); + System.out.println("Response body: " + response.body()); + System.out.println("Response code: " + response.statusCode()); + } catch (IOException | InterruptedException e) { + System.out.println("An error occurred: " + e.getMessage()); + } + } + +}'''; + expect( + codeGen.getCode( + CodegenLanguage.javaHttpClient, requestModelGet10, "https"), + expectedCode); + }); + test('GET11', () { + const expectedCode = r''' +import java.net.URI; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.io.IOException; + +public class Main { + public static void main(String[] args) { + try { + HttpClient client = HttpClient.newHttpClient(); + URI uri = URI.create("https://api.apidash.dev/humanize/social?num=8700000&digits=3"); + + HttpRequest.Builder requestBuilder = HttpRequest.newBuilder(uri).GET(); + requestBuilder = requestBuilder.headers( + "User-Agent", "Test Agent" + ); + HttpResponse response = client.send(requestBuilder.build(), HttpResponse.BodyHandlers.ofString()); + System.out.println("Response body: " + response.body()); + System.out.println("Response code: " + response.statusCode()); + } catch (IOException | InterruptedException e) { + System.out.println("An error occurred: " + e.getMessage()); + } + } + +}'''; + expect( + codeGen.getCode( + CodegenLanguage.javaHttpClient, requestModelGet11, "https"), + expectedCode); + }); + test('GET12', () { + const expectedCode = r''' +import java.net.URI; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.io.IOException; + +public class Main { + public static void main(String[] args) { + try { + HttpClient client = HttpClient.newHttpClient(); + URI uri = URI.create("https://api.apidash.dev/humanize/social"); + + HttpRequest.Builder requestBuilder = HttpRequest.newBuilder(uri).GET(); + HttpResponse response = client.send(requestBuilder.build(), HttpResponse.BodyHandlers.ofString()); + System.out.println("Response body: " + response.body()); + System.out.println("Response code: " + response.statusCode()); + } catch (IOException | InterruptedException e) { + System.out.println("An error occurred: " + e.getMessage()); + } + } + +}'''; + expect( + codeGen.getCode( + CodegenLanguage.javaHttpClient, requestModelGet12, "https"), + expectedCode); + }); + }); + + group('HEAD Request', () { + test('HEAD1', () { + const expectedCode = r''' +import java.net.URI; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.io.IOException; + +public class Main { + public static void main(String[] args) { + try { + HttpClient client = HttpClient.newHttpClient(); + URI uri = URI.create("https://api.apidash.dev"); + + HttpRequest.Builder requestBuilder = HttpRequest.newBuilder(uri).method("HEAD", HttpRequest.BodyPublishers.noBody()); + HttpResponse response = client.send(requestBuilder.build(), HttpResponse.BodyHandlers.ofString()); + System.out.println("Response body: " + response.body()); + System.out.println("Response code: " + response.statusCode()); + } catch (IOException | InterruptedException e) { + System.out.println("An error occurred: " + e.getMessage()); + } + } + +}'''; + expect( + codeGen.getCode( + CodegenLanguage.javaHttpClient, requestModelHead1, "https"), + expectedCode); + }); + test('HEAD2', () { + const expectedCode = r''' +import java.net.URI; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.io.IOException; + +public class Main { + public static void main(String[] args) { + try { + HttpClient client = HttpClient.newHttpClient(); + URI uri = URI.create("https://api.apidash.dev"); + + HttpRequest.Builder requestBuilder = HttpRequest.newBuilder(uri).method("HEAD", HttpRequest.BodyPublishers.noBody()); + HttpResponse response = client.send(requestBuilder.build(), HttpResponse.BodyHandlers.ofString()); + System.out.println("Response body: " + response.body()); + System.out.println("Response code: " + response.statusCode()); + } catch (IOException | InterruptedException e) { + System.out.println("An error occurred: " + e.getMessage()); + } + } + +}'''; + expect( + codeGen.getCode( + CodegenLanguage.javaHttpClient, requestModelHead2, "https"), + expectedCode); + }); + }); + + group('POST Request', () { + test('POST1', () { + const expectedCode = r''' +import java.net.URI; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.io.IOException; + +public class Main { + public static void main(String[] args) { + try { + HttpClient client = HttpClient.newHttpClient(); + URI uri = URI.create("https://api.apidash.dev/case/lower"); + HttpRequest.BodyPublisher bodyPublisher = HttpRequest.BodyPublishers.ofString(""" + { +"text": "I LOVE Flutter" +}"""); + HttpRequest.Builder requestBuilder = HttpRequest.newBuilder(uri).POST(bodyPublisher); + requestBuilder = requestBuilder.headers( + "Content-Type", "text/plain" + ); + HttpResponse response = client.send(requestBuilder.build(), HttpResponse.BodyHandlers.ofString()); + System.out.println("Response body: " + response.body()); + System.out.println("Response code: " + response.statusCode()); + } catch (IOException | InterruptedException e) { + System.out.println("An error occurred: " + e.getMessage()); + } + } + +}'''; + expect( + codeGen.getCode( + CodegenLanguage.javaHttpClient, requestModelPost1, "https"), + expectedCode); + }); + test('POST2', () { + const expectedCode = r''' +import java.net.URI; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.io.IOException; + +import com.google.gson.Gson; +import java.nio.charset.StandardCharsets; + +public class Main { + public static void main(String[] args) { + try { + HttpClient client = HttpClient.newHttpClient(); + URI uri = URI.create("https://api.apidash.dev/case/lower"); + HttpRequest.BodyPublisher bodyPublisher = HttpRequest.BodyPublishers.ofString(new Gson().toJson(""" +{ +"text": "I LOVE Flutter", +"flag": null, +"male": true, +"female": false, +"no": 1.2, +"arr": ["null", "true", "false", null] +}"""), StandardCharsets.UTF_8); + HttpRequest.Builder requestBuilder = HttpRequest.newBuilder(uri).POST(bodyPublisher); + requestBuilder = requestBuilder.headers( + "Content-Type", "application/json" + ); + HttpResponse response = client.send(requestBuilder.build(), HttpResponse.BodyHandlers.ofString()); + System.out.println("Response body: " + response.body()); + System.out.println("Response code: " + response.statusCode()); + } catch (IOException | InterruptedException e) { + System.out.println("An error occurred: " + e.getMessage()); + } + } + +}'''; + expect( + codeGen.getCode( + CodegenLanguage.javaHttpClient, requestModelPost2, "https"), + expectedCode); + }); + test('POST3', () { + const expectedCode = r''' +import java.net.URI; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.io.IOException; + +import com.google.gson.Gson; +import java.nio.charset.StandardCharsets; + +public class Main { + public static void main(String[] args) { + try { + HttpClient client = HttpClient.newHttpClient(); + URI uri = URI.create("https://api.apidash.dev/case/lower"); + HttpRequest.BodyPublisher bodyPublisher = HttpRequest.BodyPublishers.ofString(new Gson().toJson(""" +{ +"text": "I LOVE Flutter" +}"""), StandardCharsets.UTF_8); + HttpRequest.Builder requestBuilder = HttpRequest.newBuilder(uri).POST(bodyPublisher); + requestBuilder = requestBuilder.headers( + "User-Agent", "Test Agent", + "Content-Type", "application/json" + ); + HttpResponse response = client.send(requestBuilder.build(), HttpResponse.BodyHandlers.ofString()); + System.out.println("Response body: " + response.body()); + System.out.println("Response code: " + response.statusCode()); + } catch (IOException | InterruptedException e) { + System.out.println("An error occurred: " + e.getMessage()); + } + } + +}'''; + expect( + codeGen.getCode( + CodegenLanguage.javaHttpClient, requestModelPost3, "https"), + expectedCode); + }); + test('POST4', () { + const expectedCode = r''' +import java.net.URI; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; + +public class Main { + public static void main(String[] args) { + try { + HttpClient client = HttpClient.newHttpClient(); + URI uri = URI.create("https://api.apidash.dev/io/form"); + String boundary = "b9826c20-773c-1f0c-814d-a1b3d90cd6b3"; + Map data = new HashMap<>(); + + data.put("text", "API"); + data.put("sep", "|"); + data.put("times", "3"); + HttpRequest.BodyPublisher bodyPublisher = buildMultipartFormData(data, boundary); + HttpRequest.Builder requestBuilder = HttpRequest.newBuilder(uri).POST(bodyPublisher); + requestBuilder = requestBuilder.headers( + "Content-Type", "multipart/form-data; boundary=b9826c20-773c-1f0c-814d-a1b3d90cd6b3" + ); + HttpResponse response = client.send(requestBuilder.build(), HttpResponse.BodyHandlers.ofString()); + System.out.println("Response body: " + response.body()); + System.out.println("Response code: " + response.statusCode()); + } catch (IOException | InterruptedException e) { + System.out.println("An error occurred: " + e.getMessage()); + } + } + + private static HttpRequest.BodyPublisher buildMultipartFormData(Map data, String boundary) throws IOException { + var byteArrays = new ArrayList(); + var CRLF = "\r\n".getBytes(StandardCharsets.UTF_8); + + for (Map.Entry entry : data.entrySet()) { + byteArrays.add(("--" + boundary + "\r\n").getBytes(StandardCharsets.UTF_8)); + if (entry.getValue() instanceof Path) { + var file = (Path) entry.getValue(); + var fileName = file.getFileName().toString(); + byteArrays.add(("Content-Disposition: form-data; name=\"" + entry.getKey() + "\"; filename=\"" + fileName + "\"\r\n").getBytes(StandardCharsets.UTF_8)); + byteArrays.add(("Content-Type: " + Files.probeContentType(file) + "\r\n\r\n").getBytes(StandardCharsets.UTF_8)); + byteArrays.add(Files.readAllBytes(file)); + byteArrays.add(CRLF); + } else { + byteArrays.add(("Content-Disposition: form-data; name=\"" + entry.getKey() + "\"\r\n\r\n").getBytes(StandardCharsets.UTF_8)); + byteArrays.add(entry.getValue().toString().getBytes(StandardCharsets.UTF_8)); + byteArrays.add(CRLF); + } + } + byteArrays.add(("--" + boundary + "--\r\n").getBytes(StandardCharsets.UTF_8)); + + return HttpRequest.BodyPublishers.ofByteArrays(byteArrays); + } +}'''; + expect( + codeGen.getCode( + CodegenLanguage.javaHttpClient, requestModelPost4, "https", boundary: "b9826c20-773c-1f0c-814d-a1b3d90cd6b3"), + expectedCode); + }); + test('POST5', () { + const expectedCode = r''' +import java.net.URI; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; + +public class Main { + public static void main(String[] args) { + try { + HttpClient client = HttpClient.newHttpClient(); + URI uri = URI.create("https://api.apidash.dev/io/form"); + String boundary = "b9826c20-773c-1f0c-814d-a1b3d90cd6b3"; + Map data = new HashMap<>(); + + data.put("text", "API"); + data.put("sep", "|"); + data.put("times", "3"); + HttpRequest.BodyPublisher bodyPublisher = buildMultipartFormData(data, boundary); + HttpRequest.Builder requestBuilder = HttpRequest.newBuilder(uri).POST(bodyPublisher); + requestBuilder = requestBuilder.headers( + "User-Agent", "Test Agent", + "Content-Type", "multipart/form-data; boundary=b9826c20-773c-1f0c-814d-a1b3d90cd6b3" + ); + HttpResponse response = client.send(requestBuilder.build(), HttpResponse.BodyHandlers.ofString()); + System.out.println("Response body: " + response.body()); + System.out.println("Response code: " + response.statusCode()); + } catch (IOException | InterruptedException e) { + System.out.println("An error occurred: " + e.getMessage()); + } + } + + private static HttpRequest.BodyPublisher buildMultipartFormData(Map data, String boundary) throws IOException { + var byteArrays = new ArrayList(); + var CRLF = "\r\n".getBytes(StandardCharsets.UTF_8); + + for (Map.Entry entry : data.entrySet()) { + byteArrays.add(("--" + boundary + "\r\n").getBytes(StandardCharsets.UTF_8)); + if (entry.getValue() instanceof Path) { + var file = (Path) entry.getValue(); + var fileName = file.getFileName().toString(); + byteArrays.add(("Content-Disposition: form-data; name=\"" + entry.getKey() + "\"; filename=\"" + fileName + "\"\r\n").getBytes(StandardCharsets.UTF_8)); + byteArrays.add(("Content-Type: " + Files.probeContentType(file) + "\r\n\r\n").getBytes(StandardCharsets.UTF_8)); + byteArrays.add(Files.readAllBytes(file)); + byteArrays.add(CRLF); + } else { + byteArrays.add(("Content-Disposition: form-data; name=\"" + entry.getKey() + "\"\r\n\r\n").getBytes(StandardCharsets.UTF_8)); + byteArrays.add(entry.getValue().toString().getBytes(StandardCharsets.UTF_8)); + byteArrays.add(CRLF); + } + } + byteArrays.add(("--" + boundary + "--\r\n").getBytes(StandardCharsets.UTF_8)); + + return HttpRequest.BodyPublishers.ofByteArrays(byteArrays); + } +}'''; + expect( + codeGen.getCode( + CodegenLanguage.javaHttpClient, requestModelPost5, "https", boundary: "b9826c20-773c-1f0c-814d-a1b3d90cd6b3"), + expectedCode); + }); + test('POST6', () { + const expectedCode = r''' +import java.net.URI; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; + +public class Main { + public static void main(String[] args) { + try { + HttpClient client = HttpClient.newHttpClient(); + URI uri = URI.create("https://api.apidash.dev/io/img"); + String boundary = "b9826c20-773c-1f0c-814d-a1b3d90cd6b3"; + Map data = new HashMap<>(); + + data.put("token", "xyz"); + data.put("imfile", Paths.get("/Documents/up/1.png")); + HttpRequest.BodyPublisher bodyPublisher = buildMultipartFormData(data, boundary); + HttpRequest.Builder requestBuilder = HttpRequest.newBuilder(uri).POST(bodyPublisher); + requestBuilder = requestBuilder.headers( + "Content-Type", "multipart/form-data; boundary=b9826c20-773c-1f0c-814d-a1b3d90cd6b3" + ); + HttpResponse response = client.send(requestBuilder.build(), HttpResponse.BodyHandlers.ofString()); + System.out.println("Response body: " + response.body()); + System.out.println("Response code: " + response.statusCode()); + } catch (IOException | InterruptedException e) { + System.out.println("An error occurred: " + e.getMessage()); + } + } + + private static HttpRequest.BodyPublisher buildMultipartFormData(Map data, String boundary) throws IOException { + var byteArrays = new ArrayList(); + var CRLF = "\r\n".getBytes(StandardCharsets.UTF_8); + + for (Map.Entry entry : data.entrySet()) { + byteArrays.add(("--" + boundary + "\r\n").getBytes(StandardCharsets.UTF_8)); + if (entry.getValue() instanceof Path) { + var file = (Path) entry.getValue(); + var fileName = file.getFileName().toString(); + byteArrays.add(("Content-Disposition: form-data; name=\"" + entry.getKey() + "\"; filename=\"" + fileName + "\"\r\n").getBytes(StandardCharsets.UTF_8)); + byteArrays.add(("Content-Type: " + Files.probeContentType(file) + "\r\n\r\n").getBytes(StandardCharsets.UTF_8)); + byteArrays.add(Files.readAllBytes(file)); + byteArrays.add(CRLF); + } else { + byteArrays.add(("Content-Disposition: form-data; name=\"" + entry.getKey() + "\"\r\n\r\n").getBytes(StandardCharsets.UTF_8)); + byteArrays.add(entry.getValue().toString().getBytes(StandardCharsets.UTF_8)); + byteArrays.add(CRLF); + } + } + byteArrays.add(("--" + boundary + "--\r\n").getBytes(StandardCharsets.UTF_8)); + + return HttpRequest.BodyPublishers.ofByteArrays(byteArrays); + } +}'''; + expect( + codeGen.getCode( + CodegenLanguage.javaHttpClient, requestModelPost6, "https", boundary: "b9826c20-773c-1f0c-814d-a1b3d90cd6b3"), + expectedCode); + }); + test('POST7', () { + const expectedCode = r''' +import java.net.URI; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; + +public class Main { + public static void main(String[] args) { + try { + HttpClient client = HttpClient.newHttpClient(); + URI uri = URI.create("https://api.apidash.dev/io/img"); + String boundary = "b9826c20-773c-1f0c-814d-a1b3d90cd6b3"; + Map data = new HashMap<>(); + + data.put("token", "xyz"); + data.put("imfile", Paths.get("/Documents/up/1.png")); + HttpRequest.BodyPublisher bodyPublisher = buildMultipartFormData(data, boundary); + HttpRequest.Builder requestBuilder = HttpRequest.newBuilder(uri).POST(bodyPublisher); + requestBuilder = requestBuilder.headers( + "Content-Type", "multipart/form-data; boundary=b9826c20-773c-1f0c-814d-a1b3d90cd6b3" + ); + HttpResponse response = client.send(requestBuilder.build(), HttpResponse.BodyHandlers.ofString()); + System.out.println("Response body: " + response.body()); + System.out.println("Response code: " + response.statusCode()); + } catch (IOException | InterruptedException e) { + System.out.println("An error occurred: " + e.getMessage()); + } + } + + private static HttpRequest.BodyPublisher buildMultipartFormData(Map data, String boundary) throws IOException { + var byteArrays = new ArrayList(); + var CRLF = "\r\n".getBytes(StandardCharsets.UTF_8); + + for (Map.Entry entry : data.entrySet()) { + byteArrays.add(("--" + boundary + "\r\n").getBytes(StandardCharsets.UTF_8)); + if (entry.getValue() instanceof Path) { + var file = (Path) entry.getValue(); + var fileName = file.getFileName().toString(); + byteArrays.add(("Content-Disposition: form-data; name=\"" + entry.getKey() + "\"; filename=\"" + fileName + "\"\r\n").getBytes(StandardCharsets.UTF_8)); + byteArrays.add(("Content-Type: " + Files.probeContentType(file) + "\r\n\r\n").getBytes(StandardCharsets.UTF_8)); + byteArrays.add(Files.readAllBytes(file)); + byteArrays.add(CRLF); + } else { + byteArrays.add(("Content-Disposition: form-data; name=\"" + entry.getKey() + "\"\r\n\r\n").getBytes(StandardCharsets.UTF_8)); + byteArrays.add(entry.getValue().toString().getBytes(StandardCharsets.UTF_8)); + byteArrays.add(CRLF); + } + } + byteArrays.add(("--" + boundary + "--\r\n").getBytes(StandardCharsets.UTF_8)); + + return HttpRequest.BodyPublishers.ofByteArrays(byteArrays); + } +}'''; + expect( + codeGen.getCode( + CodegenLanguage.javaHttpClient, requestModelPost7, "https", boundary: "b9826c20-773c-1f0c-814d-a1b3d90cd6b3"), + expectedCode); + }); + test('POST8', () { + const expectedCode = r''' +import java.net.URI; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; + +public class Main { + public static void main(String[] args) { + try { + HttpClient client = HttpClient.newHttpClient(); + URI uri = URI.create("https://api.apidash.dev/io/form?size=2&len=3"); + String boundary = "b9826c20-773c-1f0c-814d-a1b3d90cd6b3"; + Map data = new HashMap<>(); + + data.put("text", "API"); + data.put("sep", "|"); + data.put("times", "3"); + HttpRequest.BodyPublisher bodyPublisher = buildMultipartFormData(data, boundary); + HttpRequest.Builder requestBuilder = HttpRequest.newBuilder(uri).POST(bodyPublisher); + requestBuilder = requestBuilder.headers( + "Content-Type", "multipart/form-data; boundary=b9826c20-773c-1f0c-814d-a1b3d90cd6b3" + ); + HttpResponse response = client.send(requestBuilder.build(), HttpResponse.BodyHandlers.ofString()); + System.out.println("Response body: " + response.body()); + System.out.println("Response code: " + response.statusCode()); + } catch (IOException | InterruptedException e) { + System.out.println("An error occurred: " + e.getMessage()); + } + } + + private static HttpRequest.BodyPublisher buildMultipartFormData(Map data, String boundary) throws IOException { + var byteArrays = new ArrayList(); + var CRLF = "\r\n".getBytes(StandardCharsets.UTF_8); + + for (Map.Entry entry : data.entrySet()) { + byteArrays.add(("--" + boundary + "\r\n").getBytes(StandardCharsets.UTF_8)); + if (entry.getValue() instanceof Path) { + var file = (Path) entry.getValue(); + var fileName = file.getFileName().toString(); + byteArrays.add(("Content-Disposition: form-data; name=\"" + entry.getKey() + "\"; filename=\"" + fileName + "\"\r\n").getBytes(StandardCharsets.UTF_8)); + byteArrays.add(("Content-Type: " + Files.probeContentType(file) + "\r\n\r\n").getBytes(StandardCharsets.UTF_8)); + byteArrays.add(Files.readAllBytes(file)); + byteArrays.add(CRLF); + } else { + byteArrays.add(("Content-Disposition: form-data; name=\"" + entry.getKey() + "\"\r\n\r\n").getBytes(StandardCharsets.UTF_8)); + byteArrays.add(entry.getValue().toString().getBytes(StandardCharsets.UTF_8)); + byteArrays.add(CRLF); + } + } + byteArrays.add(("--" + boundary + "--\r\n").getBytes(StandardCharsets.UTF_8)); + + return HttpRequest.BodyPublishers.ofByteArrays(byteArrays); + } +}'''; + expect( + codeGen.getCode( + CodegenLanguage.javaHttpClient, requestModelPost8, "https", boundary: "b9826c20-773c-1f0c-814d-a1b3d90cd6b3"), + expectedCode); + }); + test('POST9', () { + const expectedCode = r''' +import java.net.URI; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; + +public class Main { + public static void main(String[] args) { + try { + HttpClient client = HttpClient.newHttpClient(); + URI uri = URI.create("https://api.apidash.dev/io/img?size=2&len=3"); + String boundary = "b9826c20-773c-1f0c-814d-a1b3d90cd6b3"; + Map data = new HashMap<>(); + + data.put("token", "xyz"); + data.put("imfile", Paths.get("/Documents/up/1.png")); + HttpRequest.BodyPublisher bodyPublisher = buildMultipartFormData(data, boundary); + HttpRequest.Builder requestBuilder = HttpRequest.newBuilder(uri).POST(bodyPublisher); + requestBuilder = requestBuilder.headers( + "User-Agent", "Test Agent", + "Keep-Alive", "true", + "Content-Type", "multipart/form-data; boundary=b9826c20-773c-1f0c-814d-a1b3d90cd6b3" + ); + HttpResponse response = client.send(requestBuilder.build(), HttpResponse.BodyHandlers.ofString()); + System.out.println("Response body: " + response.body()); + System.out.println("Response code: " + response.statusCode()); + } catch (IOException | InterruptedException e) { + System.out.println("An error occurred: " + e.getMessage()); + } + } + + private static HttpRequest.BodyPublisher buildMultipartFormData(Map data, String boundary) throws IOException { + var byteArrays = new ArrayList(); + var CRLF = "\r\n".getBytes(StandardCharsets.UTF_8); + + for (Map.Entry entry : data.entrySet()) { + byteArrays.add(("--" + boundary + "\r\n").getBytes(StandardCharsets.UTF_8)); + if (entry.getValue() instanceof Path) { + var file = (Path) entry.getValue(); + var fileName = file.getFileName().toString(); + byteArrays.add(("Content-Disposition: form-data; name=\"" + entry.getKey() + "\"; filename=\"" + fileName + "\"\r\n").getBytes(StandardCharsets.UTF_8)); + byteArrays.add(("Content-Type: " + Files.probeContentType(file) + "\r\n\r\n").getBytes(StandardCharsets.UTF_8)); + byteArrays.add(Files.readAllBytes(file)); + byteArrays.add(CRLF); + } else { + byteArrays.add(("Content-Disposition: form-data; name=\"" + entry.getKey() + "\"\r\n\r\n").getBytes(StandardCharsets.UTF_8)); + byteArrays.add(entry.getValue().toString().getBytes(StandardCharsets.UTF_8)); + byteArrays.add(CRLF); + } + } + byteArrays.add(("--" + boundary + "--\r\n").getBytes(StandardCharsets.UTF_8)); + + return HttpRequest.BodyPublishers.ofByteArrays(byteArrays); + } +}'''; + expect( + codeGen.getCode( + CodegenLanguage.javaHttpClient, requestModelPost9, "https", boundary: "b9826c20-773c-1f0c-814d-a1b3d90cd6b3"), + expectedCode); + }); + }); + + group('PUT Request', () { + test('PUT1', () { + const expectedCode = r''' +import java.net.URI; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.io.IOException; + +import com.google.gson.Gson; +import java.nio.charset.StandardCharsets; + +public class Main { + public static void main(String[] args) { + try { + HttpClient client = HttpClient.newHttpClient(); + URI uri = URI.create("https://reqres.in/api/users/2"); + HttpRequest.BodyPublisher bodyPublisher = HttpRequest.BodyPublishers.ofString(new Gson().toJson(""" +{ +"name": "morpheus", +"job": "zion resident" +}"""), StandardCharsets.UTF_8); + HttpRequest.Builder requestBuilder = HttpRequest.newBuilder(uri).PUT(bodyPublisher); + requestBuilder = requestBuilder.headers( + "Content-Type", "application/json" + ); + HttpResponse response = client.send(requestBuilder.build(), HttpResponse.BodyHandlers.ofString()); + System.out.println("Response body: " + response.body()); + System.out.println("Response code: " + response.statusCode()); + } catch (IOException | InterruptedException e) { + System.out.println("An error occurred: " + e.getMessage()); + } + } + +}'''; + expect( + codeGen.getCode( + CodegenLanguage.javaHttpClient, requestModelPut1, "https"), + expectedCode); + }); + }); + + group('PATCH Request', () { + test('PATCH1', () { + const expectedCode = r''' +import java.net.URI; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.io.IOException; + +import com.google.gson.Gson; +import java.nio.charset.StandardCharsets; + +public class Main { + public static void main(String[] args) { + try { + HttpClient client = HttpClient.newHttpClient(); + URI uri = URI.create("https://reqres.in/api/users/2"); + HttpRequest.BodyPublisher bodyPublisher = HttpRequest.BodyPublishers.ofString(new Gson().toJson(""" +{ +"name": "marfeus", +"job": "accountant" +}"""), StandardCharsets.UTF_8); + HttpRequest.Builder requestBuilder = HttpRequest.newBuilder(uri).method("PATCH", bodyPublisher); + requestBuilder = requestBuilder.headers( + "Content-Type", "application/json" + ); + HttpResponse response = client.send(requestBuilder.build(), HttpResponse.BodyHandlers.ofString()); + System.out.println("Response body: " + response.body()); + System.out.println("Response code: " + response.statusCode()); + } catch (IOException | InterruptedException e) { + System.out.println("An error occurred: " + e.getMessage()); + } + } + +}'''; + expect( + codeGen.getCode( + CodegenLanguage.javaHttpClient, requestModelPatch1, "https"), + expectedCode); + }); + }); + + group('DELETE Request', () { + test('DELETE1', () { + const expectedCode = r''' +import java.net.URI; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.io.IOException; + +public class Main { + public static void main(String[] args) { + try { + HttpClient client = HttpClient.newHttpClient(); + URI uri = URI.create("https://reqres.in/api/users/2"); + + HttpRequest.Builder requestBuilder = HttpRequest.newBuilder(uri).method("DELETE", HttpRequest.BodyPublishers.noBody()); + HttpResponse response = client.send(requestBuilder.build(), HttpResponse.BodyHandlers.ofString()); + System.out.println("Response body: " + response.body()); + System.out.println("Response code: " + response.statusCode()); + } catch (IOException | InterruptedException e) { + System.out.println("An error occurred: " + e.getMessage()); + } + } + +}'''; + expect( + codeGen.getCode( + CodegenLanguage.javaHttpClient, requestModelDelete1, "https"), + expectedCode); + }); + test('DELETE2', () { + const expectedCode = r''' +import java.net.URI; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.io.IOException; + +import com.google.gson.Gson; +import java.nio.charset.StandardCharsets; + +public class Main { + public static void main(String[] args) { + try { + HttpClient client = HttpClient.newHttpClient(); + URI uri = URI.create("https://reqres.in/api/users/2"); + HttpRequest.BodyPublisher bodyPublisher = HttpRequest.BodyPublishers.ofString(new Gson().toJson(""" +{ +"name": "marfeus", +"job": "accountant" +}"""), StandardCharsets.UTF_8); + HttpRequest.Builder requestBuilder = HttpRequest.newBuilder(uri).method("DELETE", bodyPublisher); + requestBuilder = requestBuilder.headers( + "Content-Type", "application/json" + ); + HttpResponse response = client.send(requestBuilder.build(), HttpResponse.BodyHandlers.ofString()); + System.out.println("Response body: " + response.body()); + System.out.println("Response code: " + response.statusCode()); + } catch (IOException | InterruptedException e) { + System.out.println("An error occurred: " + e.getMessage()); + } + } + +}'''; + expect( + codeGen.getCode( + CodegenLanguage.javaHttpClient, requestModelDelete2, "https"), + expectedCode); + }); + }); + +}