@Before
  public void setup() {
    MockitoAnnotations.initMocks(this);
    initMocks(MOCK_USER_INFO_URI, MOCK_USER_INFO_RESPONSE);

    defaultOAuth2UserInfoProvider.setClient(client);
    given(oAuth2ServiceProperties.getUserInfoUri()).willReturn(MOCK_USER_INFO_URI);
    given(oAuth2ServiceProperties.getAccessTokenName()).willReturn("access_token");
  }
  @Test
  public void shouldIncludeOptionalInfoParams() {
    Map<String, String> additionalInfoParams =
        Collections.singletonMap("extra_param", "param_value");
    given(oAuth2ServiceProperties.getAdditionalInfoParams()).willReturn(additionalInfoParams);

    Map<String, Object> userInfo = defaultOAuth2UserInfoProvider.getUserInfoFromProvider(token);
    assertThat(userInfo, notNullValue());
    verify(webTarget).queryParam("extra_param", "param_value");
  }
  @Test
  public void shouldReturnNullWhenJerseyThrowsARuntimeError() {
    // given
    given(builder.get(ClientResponse.class)).willThrow(RuntimeException.class);

    // when
    Map<String, Object> userInfo = defaultOAuth2UserInfoProvider.getUserInfoFromProvider(token);

    // then
    assertThat(userInfo, nullValue());
  }
  @Test
  public void shouldReturnNullWhenJacksonMappingFails() {
    // given
    given(clientResponse.readEntity(String.class)).willReturn(MOCK_BAD_USER_INFO_RESPONSE);

    // when
    Map<String, Object> userInfo = defaultOAuth2UserInfoProvider.getUserInfoFromProvider(token);

    // then
    assertThat(userInfo, nullValue());
  }
  @Test
  public void shouldGetUserInfoFromProvider() {
    // given

    // when
    Map<String, Object> userInfo = defaultOAuth2UserInfoProvider.getUserInfoFromProvider(token);

    // then
    assertThat(userInfo, notNullValue());
    assertThat((String) userInfo.get("display"), is("*****@*****.**"));
  }
  @Test
  public void shouldReturnNullWhenProviderReturnsAnError() {
    // given
    given(clientResponse.readEntity(String.class)).willReturn(MOCK_USER_INFO_ERROR_RESPONSE);
    given(clientResponse.getStatus()).willReturn(400);

    // when
    Map<String, Object> userInfo = defaultOAuth2UserInfoProvider.getUserInfoFromProvider(token);

    // then
    assertThat(userInfo, nullValue());
  }