You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

86 lines
2.4 KiB

  1. package de.fd.fh.server;
  2. import com.fasterxml.jackson.databind.ObjectMapper;
  3. import lombok.Getter;
  4. import lombok.Setter;
  5. import spark.utils.IOUtils;
  6. import java.io.IOException;
  7. import java.io.OutputStream;
  8. import java.io.OutputStreamWriter;
  9. import java.net.HttpURLConnection;
  10. import java.net.URL;
  11. import java.nio.charset.StandardCharsets;
  12. import java.util.Map;
  13. import static org.junit.jupiter.api.Assertions.fail;
  14. public class ApiTestUtils<T>
  15. {
  16. public TestResponse<T> request(
  17. final String method,
  18. final String path,
  19. final String requestBody,
  20. final Map<String, String> header,
  21. final Class<T> responseBodyType)
  22. {
  23. try
  24. {
  25. URL url = new URL("http://localhost:4567" + path);
  26. final HttpURLConnection connection = (HttpURLConnection) url.openConnection();
  27. connection.setRequestMethod(method);
  28. connection.setDoOutput(true);
  29. if (requestBody != null)
  30. {
  31. final OutputStream outputStream = connection.getOutputStream();
  32. final OutputStreamWriter outputStreamWriter =
  33. new OutputStreamWriter(outputStream, StandardCharsets.UTF_8);
  34. outputStreamWriter.write(requestBody);
  35. outputStreamWriter.flush();
  36. outputStreamWriter.close();
  37. }
  38. if (header != null)
  39. {
  40. header.forEach(connection::addRequestProperty);
  41. }
  42. connection.connect();
  43. final String body = IOUtils.toString(connection.getInputStream());
  44. return new TestResponse<T>(connection.getResponseCode(), body, responseBodyType);
  45. }
  46. catch (final IOException e)
  47. {
  48. e.printStackTrace();
  49. fail("Sending request failed: " + e.getMessage());
  50. return null;
  51. }
  52. }
  53. @Getter
  54. @Setter
  55. public static class TestResponse<T>
  56. {
  57. private final String body;
  58. private final int status;
  59. private final Class<T> type;
  60. public TestResponse(
  61. final int status,
  62. final String body,
  63. final Class<T> type)
  64. {
  65. this.status = status;
  66. this.body = body;
  67. this.type = type;
  68. }
  69. public T json() throws IOException
  70. {
  71. return new ObjectMapper().readValue(body, type);
  72. }
  73. }
  74. }