diff --git a/src/intTest/java/com/box/sdk/BoxAPIConnectionIT.java b/src/intTest/java/com/box/sdk/BoxAPIConnectionIT.java index 1603c0f63..f52631887 100644 --- a/src/intTest/java/com/box/sdk/BoxAPIConnectionIT.java +++ b/src/intTest/java/com/box/sdk/BoxAPIConnectionIT.java @@ -33,78 +33,49 @@ public void requestIsSentNormallyWhenInterceptorReturnsNullResponse() throws Mal } @Test - @Ignore("Need to configure access and refresh token") public void refreshSucceeds() { - final String originalAccessToken = TestConfig.getAccessToken(); - final String originalRefreshToken = TestConfig.getRefreshToken(); - BoxAPIConnection api = new BoxAPIConnection(TestConfig.getClientID(), TestConfig.getClientSecret(), - originalAccessToken, originalRefreshToken); + BoxAPIConnection api = jwtApiForServiceAccount(); + String originalAccessToken = api.getAccessToken(); api.refresh(); String actualAccessToken = api.getAccessToken(); - String actualRefreshToken = api.getRefreshToken(); - assertThat(originalRefreshToken, not(equalTo(actualRefreshToken))); assertThat(originalAccessToken, not(equalTo(actualAccessToken))); - - TestConfig.setAccessToken(actualAccessToken); - TestConfig.setRefreshToken(actualRefreshToken); } @Test - @Ignore("Need to configure access and refresh token") public void refreshesWhenGetAccessTokenIsCalledAndTokenHasExpired() { - final String originalAccessToken = TestConfig.getAccessToken(); - final String originalRefreshToken = TestConfig.getRefreshToken(); - BoxAPIConnection api = new BoxAPIConnection(TestConfig.getClientID(), TestConfig.getClientSecret(), - originalAccessToken, originalRefreshToken); + BoxAPIConnection api = jwtApiForServiceAccount(); + String originalAccessToken = api.getAccessToken(); api.setExpires(-1); String actualAccessToken = api.getAccessToken(); - String actualRefreshToken = api.getRefreshToken(); - assertThat(originalRefreshToken, not(equalTo(actualRefreshToken))); assertThat(originalAccessToken, not(equalTo(actualAccessToken))); - - TestConfig.setAccessToken(actualAccessToken); - TestConfig.setRefreshToken(actualRefreshToken); } @Test - @Ignore("Need to configure access and refresh token") public void doesNotRefreshWhenGetAccessTokenIsCalledAndTokenHasNotExpired() { - final String originalAccessToken = TestConfig.getAccessToken(); - final String originalRefreshToken = TestConfig.getRefreshToken(); - BoxAPIConnection api = new BoxAPIConnection(TestConfig.getClientID(), TestConfig.getClientSecret(), - originalAccessToken, originalRefreshToken); + BoxAPIConnection api = jwtApiForServiceAccount(); + String originalAccessToken = api.getAccessToken(); api.setExpires(Long.MAX_VALUE); String actualAccessToken = api.getAccessToken(); - String actualRefreshToken = api.getRefreshToken(); - assertThat(originalRefreshToken, equalTo(actualRefreshToken)); assertThat(originalAccessToken, equalTo(actualAccessToken)); - - TestConfig.setAccessToken(actualAccessToken); - TestConfig.setRefreshToken(actualRefreshToken); } @Test - @Ignore("Need to configure access and refresh token") public void successfullySavesAndRestoresConnection() { - final String originalAccessToken = TestConfig.getAccessToken(); - final String originalRefreshToken = TestConfig.getRefreshToken(); - BoxAPIConnection api = new BoxAPIConnection(TestConfig.getClientID(), TestConfig.getClientSecret(), - originalAccessToken, originalRefreshToken); + BoxAPIConnection api = jwtApiForServiceAccount(); String state = api.save(); + BoxConfig boxConfig = jwtBoxConfig(); - BoxAPIConnection restoredAPI = BoxAPIConnection.restore(TestConfig.getClientID(), TestConfig.getClientSecret(), - state); - BoxFolder.getRootFolder(restoredAPI).getInfo(); - - TestConfig.setAccessToken(restoredAPI.getAccessToken()); - TestConfig.setRefreshToken(restoredAPI.getRefreshToken()); + BoxAPIConnection restoredAPI = BoxAPIConnection.restore( + boxConfig.getClientId(), boxConfig.getClientSecret(), state + ); + assertThat(BoxFolder.getRootFolder(restoredAPI).getInfo().getID(), is("0")); } @Test diff --git a/src/main/java/com/box/sdk/BoxAPIConnection.java b/src/main/java/com/box/sdk/BoxAPIConnection.java index 6e7e86573..0c42b1d41 100644 --- a/src/main/java/com/box/sdk/BoxAPIConnection.java +++ b/src/main/java/com/box/sdk/BoxAPIConnection.java @@ -830,7 +830,9 @@ public void refresh() { public void restore(String state) { JsonObject json = Json.parse(state).asObject(); String accessToken = json.get("accessToken").asString(); - String refreshToken = json.get("refreshToken").asString(); + String refreshToken = Optional.ofNullable(json.get("refreshToken")) + .map(v -> v.isNull() ? null : v.asString()) + .orElse(null); long lastRefresh = json.get("lastRefresh").asLong(); long expires = json.get("expires").asLong(); String userAgent = json.get("userAgent").asString(); diff --git a/src/test/java/com/box/sdk/BoxAPIRequestTest.java b/src/test/java/com/box/sdk/BoxAPIRequestTest.java index 9e47f6b15..ba41a4858 100644 --- a/src/test/java/com/box/sdk/BoxAPIRequestTest.java +++ b/src/test/java/com/box/sdk/BoxAPIRequestTest.java @@ -2,6 +2,7 @@ import static com.box.sdk.http.ContentType.APPLICATION_JSON; import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; +import static com.github.tomakehurst.wiremock.client.WireMock.equalTo; import static com.github.tomakehurst.wiremock.client.WireMock.get; import static com.github.tomakehurst.wiremock.client.WireMock.getRequestedFor; import static com.github.tomakehurst.wiremock.client.WireMock.matching; @@ -234,6 +235,23 @@ public void willNotRetry400ErrorWithJsonResponse() { } } + @Test + public void interceptorCanModifyRequest() { + String headerName = "XX-My-Custom-Header"; + String headerValue = "some value"; + stubFor(get(urlEqualTo("/")).withHeader(headerName, equalTo(headerValue)) + .willReturn(aResponse().withStatus(200).withBody("{\"foo\":\"bar\"}"))); + + BoxAPIConnection api = new BoxAPIConnection(""); + api.setRequestInterceptor(request -> { + request.addHeader(headerName, headerValue); + return null; + }); + + new BoxAPIRequest(api, boxMockUrl(), "GET").send(); + verify(1, getRequestedFor(urlEqualTo("/"))); + } + private byte[] gzipped(String str) { try { ByteArrayOutputStream obj = new ByteArrayOutputStream();