@Test
  public void testGroups() throws Exception {
    String groupsJson =
        IOUtils.toString(
            new ClassPathResource("mocks/oauth-client-credentials.json").getInputStream());
    String oauthJson =
        IOUtils.toString(new ClassPathResource("mocks/voot-groups.json").getInputStream());

    stubFor(
        post(urlEqualTo("/oauth/token"))
            .willReturn(
                aResponse()
                    .withStatus(200)
                    .withHeader("Content-Type", "application/json")
                    .withBody(groupsJson)));
    stubFor(
        get(urlEqualTo("/internal/external-groups/" + personId))
            .willReturn(
                aResponse()
                    .withStatus(200)
                    .withHeader("Content-Type", "application/json")
                    .withBody(oauthJson)));

    List<ExternalGroup> groups = client.groups(personId);
    assertEquals(2, groups.size());

    ExternalGroup group = groups.get(0);
    assertEquals("urn:collab:group:foo:go", group.getIdentifier());
    assertEquals("go", group.getName());
    assertEquals("Go description", group.getDescription());
    assertEquals("foo", group.getGroupProvider().getIdentifier());
  }
 @Test
 public void testHasAccess() throws Exception {
   String response =
       StreamUtils.copyToString(
           new ClassPathResource("voot/groups.json").getInputStream(), Charset.forName("UTF-8"));
   stubFor(
       get(urlEqualTo("/internal/groups/id1"))
           .willReturn(
               aResponse()
                   .withStatus(200)
                   .withHeader("Content-Type", "application/json")
                   .withBody(response)));
   List<String> groups = subject.groups("id1");
   assertEquals(14, groups.size());
   assertTrue(groups.stream().allMatch(group -> StringUtils.hasText(group)));
 }