/** @see DATAREST-609 */
  @Test
  public void addsSelfAndSingleResourceLinkToResourceByDefault() throws Exception {

    Projector projector = mock(Projector.class);

    when(projector.projectExcerpt(anyObject())).thenAnswer(new ReturnsArgumentAt(0));

    PersistentEntityResourceAssembler assembler =
        new PersistentEntityResourceAssembler(
            entities,
            projector,
            associations,
            new DefaultSelfLinkProvider(
                entities, entityLinks, Collections.<EntityLookup<?>>emptyList()));

    User user = new User();
    user.id = BigInteger.valueOf(4711);

    PersistentEntityResource resource = assembler.toResource(user);

    Links links = new Links(resource.getLinks());

    assertThat(links, is(Matchers.<Link>iterableWithSize(2)));
    assertThat(links.getLink("self").getVariables(), is(Matchers.empty()));
    assertThat(links.getLink("user").getVariableNames(), is(hasItem("projection")));
  }
  @Test
  public void requestsSingularBuildChangesForTeamCitySevenApi() {
    final BuildDetail buildDetail = buildDetail(1);
    channel.respondingWith(
        "http://foo" + buildDetail.changes.href, contentFrom("tc_7.0.0_changes_1.json"));

    final List<Change> changes = communicator.changesOf(buildDetail);
    assertThat(changes, is(Matchers.<Change>iterableWithSize(1)));
    assertThat(changes.get(0).id, is("62889"));
  }
  @Test
  public void appliesGivenRegularExpressionToFilterOutClassNames() throws Exception {
    String[] resources = {"com/some/classfile/FindMe.class", "com/some/classfile/IgnoreThis.class"};
    NamesFromClassResources toAnalyse = new NamesFromClassResources(".*FindMe.*");

    assertThat(
        toAnalyse.asDotted(resources),
        allOf(
            contains(aDottedClassNameOf("com.some.classfile.FindMe")),
            Matchers.<Dotted>iterableWithSize(1)));
  }
  @Test
  public void requestsMultipleBuildChangesForTeamCitySixApi() {
    final BuildDetail buildDetail = buildDetail(2);
    channel.respondingWith(
        "http://foo" + buildDetail.changes.href,
        contentFrom("tc_6.5.5_changes_2.json").replace("@", ""));

    final List<Change> changes = communicator.changesOf(buildDetail);
    assertThat(changes, is(Matchers.<Change>iterableWithSize(2)));
    assertThat(changes.get(0).id, is("47951"));
    assertThat(changes.get(1).id, is("47949"));
  }
 /**
  * AwsUser can work with real data.
  *
  * @throws Exception If some problem inside
  */
 @Test
 public void worksWithRealDynamoDb() throws Exception {
   final URN urn = new URN("urn:github:66");
   final User user = new AwsUser(this.region, Mockito.mock(SQSClient.class), urn);
   MatcherAssert.assertThat(user.urn(), Matchers.equalTo(urn));
   for (Rule rule : user.rules()) {
     user.rules().remove(rule.name());
   }
   final String name = "simple-rule";
   user.rules().create(name);
   MatcherAssert.assertThat(user.rules(), Matchers.<Rule>iterableWithSize(1));
   MatcherAssert.assertThat(user.rules().contains(name), Matchers.is(true));
 }
  /** @see DATAREST-394, DATAREST-408 */
  @Test
  @SuppressWarnings("unchecked")
  public void appliesProjectionToNonEmptyMap() throws Throwable {

    MethodInterceptor methodInterceptor =
        new ProjectingMethodInterceptor(new ProxyProjectionFactory(), interceptor);

    Object result =
        methodInterceptor.invoke(
            mockInvocationOf("getHelperMap", Collections.singletonMap("foo", mock(Helper.class))));

    assertThat(result, is(instanceOf(Map.class)));

    Map<String, Object> projections = (Map<String, Object>) result;
    assertThat(projections.entrySet(), is(Matchers.<Entry<String, Object>>iterableWithSize(1)));
    assertThat(projections, hasEntry(is("foo"), instanceOf(HelperProjection.class)));
  }