| 52 | import static org.nanonative.nano.services.http.model.HttpHeaders.VARY; |
| 53 | |
| 54 | class HttpObjectTest { |
| 55 | |
| 56 | @Test |
| 57 | void browserRequestTest() { |
| 58 | final HttpObject httpObject = new HttpObject() |
| 59 | .methodType(HttpMethod.GET) |
| 60 | .path("/notifications/indicator") |
| 61 | .header("Accept", "application/json") |
| 62 | .header("Accept-Encoding", "gzip, deflate") |
| 63 | .header("Accept-Language", "en-GB,en;q=0.9") |
| 64 | .header("Connection", "keep-alive") |
| 65 | .header("Host", "example.com") |
| 66 | .header("Referer", "https://example.com/test") |
| 67 | .header("Sec-Fetch-Dest", "empty") |
| 68 | .header("Sec-Fetch-Mode", "cors") |
| 69 | .header("Sec-Fetch-Site", "same-origin") |
| 70 | .header("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.4.1 Safari/605.1.15") |
| 71 | .header("X-Requested-With", "XMLHttpRequest"); |
| 72 | assertThat(httpObject.methodType()).isEqualTo(HttpMethod.GET); |
| 73 | assertThat(httpObject.path()).isEqualTo("/notifications/indicator"); |
| 74 | assertThat(httpObject.accepts()).containsExactly(APPLICATION_JSON); |
| 75 | assertThat(httpObject.acceptEncodings()).containsExactly("gzip", "deflate"); |
| 76 | assertThat(httpObject.acceptLanguages()).containsExactly(Locale.UK, ENGLISH); |
| 77 | assertThat(httpObject.header(HOST)).isEqualTo("example.com"); |
| 78 | assertThat(httpObject.header(REFERER)).isEqualTo("https://example.com/test"); |
| 79 | assertThat(httpObject.userAgent()).isEqualTo("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.4.1 Safari/605.1.15"); |
| 80 | assertThat(httpObject.header("X-Requested-With")).isEqualTo("XMLHttpRequest"); |
| 81 | } |
| 82 | |
| 83 | @Test |
| 84 | void testRespondCreateCreateResponse() { |
| 85 | final Event<HttpObject, HttpObject> event = Context.createRootContext(HttpObjectTest.class).newEvent(EVENT_HTTP_REQUEST).payload(() -> new HttpObject().methodType(HttpMethod.GET).path("/create")); |
| 86 | |
| 87 | event.payloadOpt() |
| 88 | .filter(HttpObject::isMethodGet) |
| 89 | .filter(request -> request.pathMatch("/create")) |
| 90 | .ifPresent(request -> request.createResponse().statusCode(201).body("success").respond(event)); |
| 91 | |
| 92 | assertThat(event.responseOpt()).isPresent(); |
| 93 | assertThat(event.response().statusCode()).isEqualTo(201); |
| 94 | assertThat(event.response().bodyAsString()).isEqualTo("success"); |
| 95 | } |
| 96 | |
| 97 | @Test |
| 98 | void testCorsCreateCreateResponse() { |
| 99 | final HttpObject request = new HttpObject().header("origin", "aa.bb.cc"); |
| 100 | |
| 101 | // DEFAULT |
| 102 | assertThat(new HttpObject().createResponse(true).headerMap()).containsAllEntriesOf(Map.of( |
| 103 | ACCESS_CONTROL_ALLOW_CREDENTIALS, "false", |
| 104 | ACCESS_CONTROL_ALLOW_HEADERS, "Content-Type, Accept, Authorization, X-Requested-With", |
| 105 | ACCESS_CONTROL_ALLOW_METHODS, "GET", |
| 106 | ACCESS_CONTROL_ALLOW_ORIGIN, "*", |
| 107 | ACCESS_CONTROL_MAX_AGE, "86400", |
| 108 | VARY, "Origin" |
| 109 | )); |
| 110 | |
| 111 | assertThat(new HttpObject().createCorsResponse().headerMap()).containsAllEntriesOf(Map.of( |
nothing calls this directly
no outgoing calls
no test coverage detected