package net.ttddyy.evernote.rest; import com.evernote.auth.EvernoteAuth; import com.evernote.auth.EvernoteService; import com.evernote.clients.ClientFactory; import org.junit.Test; import org.springframework.social.evernote.api.Evernote; import org.springframework.test.util.ReflectionTestUtils; import org.springframework.web.context.request.WebRequest; import java.util.HashMap; import java.util.Map; import static org.hamcrest.Matchers.*; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import static org.springframework.test.util.MatcherAssertionErrors.assertThat; /** * @author Tadaya Tsuyukubo */ public class ApplicationConfigEvernoteBeanTest { @Test public void testWithAccessTokenOnly() { Application application = new Application(); application.evernotePropertiesConfiguration = new Application.EvernotePropertiesConfiguration(); WebRequest request = mock(WebRequest.class); when(request.getHeader("evernote-rest-accesstoken")).thenReturn("ACCESS_TOKEN"); Evernote evernote = application.evernote(request); assertThat(evernote, is(notNullValue())); ClientFactory clientFactory = evernote.clientFactory(); assertThat(clientFactory, is(notNullValue())); EvernoteAuth evernoteAuth = retrieveEvernoteAuth(clientFactory); assertThat(evernoteAuth, is(notNullValue())); assertThat(evernoteAuth.getToken(), is("ACCESS_TOKEN")); assertThat(evernoteAuth.getNoteStoreUrl(), is(nullValue())); assertThat(evernoteAuth.getUserId(), is(0)); // default assertThat(evernoteAuth.getWebApiUrlPrefix(), is(nullValue())); } @Test public void testWithFullAccessTokenAttributes() { Application application = new Application(); application.evernotePropertiesConfiguration = new Application.EvernotePropertiesConfiguration(); WebRequest request = mock(WebRequest.class); when(request.getHeader("evernote-rest-accesstoken")).thenReturn("ACCESS_TOKEN"); when(request.getHeader("evernote-rest-notestoreurl")).thenReturn("NOTE_STORE_URL"); when(request.getHeader("evernote-rest-webapiurlprefix")).thenReturn("WEB_API_URL_PREFIX"); when(request.getHeader("evernote-rest-userid")).thenReturn("100"); Evernote evernote = application.evernote(request); assertThat(evernote, is(notNullValue())); ClientFactory clientFactory = evernote.clientFactory(); assertThat(clientFactory, is(notNullValue())); EvernoteAuth evernoteAuth = retrieveEvernoteAuth(clientFactory); assertThat(evernoteAuth, is(notNullValue())); assertThat(evernoteAuth.getToken(), is("ACCESS_TOKEN")); assertThat(evernoteAuth.getNoteStoreUrl(), is("NOTE_STORE_URL")); assertThat(evernoteAuth.getUserId(), is(100)); assertThat(evernoteAuth.getWebApiUrlPrefix(), is("WEB_API_URL_PREFIX")); } @Test public void testAlwaysUseTokenFromConfig() { Application.EvernotePropertiesConfiguration config = new Application.EvernotePropertiesConfiguration(); config.setAlwaysUseTokenFromConfig(true); config.setAccessToken("ACCESS_TOKEN"); Application application = new Application(); application.evernotePropertiesConfiguration = config; WebRequest request = mock(WebRequest.class); Evernote evernote = application.evernote(request); assertThat(evernote, is(notNullValue())); ClientFactory clientFactory = evernote.clientFactory(); assertThat(clientFactory, is(notNullValue())); EvernoteAuth evernoteAuth = retrieveEvernoteAuth(clientFactory); assertThat(evernoteAuth, is(notNullValue())); assertThat(evernoteAuth.getToken(), is("ACCESS_TOKEN")); EvernoteService evernoteService = retrieveEvernoteService(evernoteAuth); assertThat(evernoteService, is(notNullValue())); assertThat(evernoteService, is(EvernoteService.SANDBOX)); } @Test public void testFallbackToTokenFromConfig() { Application.EvernotePropertiesConfiguration config = new Application.EvernotePropertiesConfiguration(); config.setFallbackToTokenFromConfig(true); config.setAccessToken("ACCESS_TOKEN_FROM_CONFIG"); Application application = new Application(); application.evernotePropertiesConfiguration = config; WebRequest request = mock(WebRequest.class); Evernote evernote = application.evernote(request); assertThat(evernote, is(notNullValue())); ClientFactory clientFactory = evernote.clientFactory(); assertThat(clientFactory, is(notNullValue())); EvernoteAuth evernoteAuth = retrieveEvernoteAuth(clientFactory); assertThat(evernoteAuth, is(notNullValue())); assertThat(evernoteAuth.getToken(), is("ACCESS_TOKEN_FROM_CONFIG")); } @Test public void testUserAgent() { Application.EvernotePropertiesConfiguration config = new Application.EvernotePropertiesConfiguration(); config.setUserAgent("USER_AGENT"); Application application = new Application(); application.evernotePropertiesConfiguration = config; WebRequest request = mock(WebRequest.class); when(request.getHeader("evernote-rest-accesstoken")).thenReturn("ACCESS_TOKEN"); Evernote evernote = application.evernote(request); assertThat(evernote, is(notNullValue())); ClientFactory clientFactory = evernote.clientFactory(); assertThat(clientFactory, is(notNullValue())); String userAgent = (String) ReflectionTestUtils.getField(clientFactory, "userAgent"); assertThat(userAgent, is("USER_AGENT")); } @Test public void testCustomHeaders() { Map<String, String> headers = new HashMap<String, String>(); headers.put("foo", "FOO"); headers.put("bar", "BAR"); Application.EvernotePropertiesConfiguration config = new Application.EvernotePropertiesConfiguration(); config.setCustomHeaders(headers); Application application = new Application(); application.evernotePropertiesConfiguration = config; WebRequest request = mock(WebRequest.class); when(request.getHeader("evernote-rest-accesstoken")).thenReturn("ACCESS_TOKEN"); Evernote evernote = application.evernote(request); assertThat(evernote, is(notNullValue())); ClientFactory clientFactory = evernote.clientFactory(); assertThat(clientFactory, is(notNullValue())); Map<String, String> customHeaders = (Map<String, String>) ReflectionTestUtils.getField(clientFactory, "customHeaders"); assertThat(customHeaders, is(notNullValue())); assertThat(customHeaders.size(), is(2)); assertThat(customHeaders, hasEntry("bar", "BAR")); assertThat(customHeaders, hasEntry("bar", "BAR")); } private EvernoteAuth retrieveEvernoteAuth(ClientFactory clientFactory) { return (EvernoteAuth) ReflectionTestUtils.getField(clientFactory, "evernoteAuth"); } private EvernoteService retrieveEvernoteService(EvernoteAuth evernoteAuth) { return (EvernoteService) ReflectionTestUtils.getField(evernoteAuth, "service"); } }