public void testAddSubject() throws Exception {
    final FundsMutationSubjectRepository subjectRepository = bundle.fundsMutationSubjects();

    FundsMutationSubject cars =
        FundsMutationSubject.builder(subjectRepository)
            .setName("Cars")
            .setType(FundsMutationSubject.Type.PRODUCT)
            .build();
    subjectRepository.addSubject(cars);
    final Optional<FundsMutationSubject> cars1 = subjectRepository.findByName("Cars");
    final int carsId = (int) cars1.get().id.getAsLong();
    assertTrue(
        "Parent and root did not initialize", cars1.get().parentId == 0 && cars1.get().rootId == 0);
    FundsMutationSubject mitsubishi =
        FundsMutationSubject.builder(subjectRepository)
            .setName("Mitsubishi")
            .setType(FundsMutationSubject.Type.PRODUCT)
            .setParentId(carsId)
            .build();
    subjectRepository.addSubject(mitsubishi);
    final Optional<FundsMutationSubject> mitsubishi1 = subjectRepository.findByName("Mitsubishi");
    assertTrue("Root id of child did not initialize", mitsubishi1.get().rootId == carsId);
    final Optional<FundsMutationSubject> cars2 = subjectRepository.findByName("Cars");
    assertTrue("Child flag did not update", cars2.get().childFlag);
  }
  public void testFindByName() throws Exception {
    final FundsMutationSubjectRepository subjectRepository = bundle.fundsMutationSubjects();

    FundsMutationSubject med =
        FundsMutationSubject.builder(subjectRepository)
            .setName("Medical")
            .setType(FundsMutationSubject.Type.SERVICE)
            .build();
    subjectRepository.addSubject(med);
    assertEquals("Grooming not found", med, subjectRepository.findByName("Medical").get());
    assertFalse("Non existent found", subjectRepository.findByName("TEstDTdgS").isPresent());
  }
 public void testDescription() throws Exception {
   final FundsMutationSubjectRepository subjectRepository = bundle.fundsMutationSubjects();
   final String descCheck = "Don't you dare!";
   FundsMutationSubject withDesc =
       FundsMutationSubject.builder(subjectRepository)
           .setType(FundsMutationSubject.Type.PRODUCT)
           .setName("Cucumber")
           .setDescription(descCheck)
           .build();
   subjectRepository.rawAddition(withDesc);
   assertEquals(
       "Description don't match",
       descCheck,
       subjectRepository.findByName("Cucumber").get().description);
 }
  public void testFindByParent() throws Exception {
    final FundsMutationSubjectRepository subjectRepository = bundle.fundsMutationSubjects();

    try {
      FundsMutationSubject food =
          FundsMutationSubject.builder(subjectRepository)
              .setName("Food")
              .setType(FundsMutationSubject.Type.PRODUCT)
              .build();
      subjectRepository.addSubject(food);
    } catch (Exception ignore) {
    }
    final FundsMutationSubject food1 = subjectRepository.findByName("Food").get();
    final FundsMutationSubject meat =
        FundsMutationSubject.builder(subjectRepository)
            .setName("Meat")
            .setType(FundsMutationSubject.Type.PRODUCT)
            .setParentId(food1.id.getAsLong())
            .build();
    final FundsMutationSubject vegs =
        FundsMutationSubject.builder(subjectRepository)
            .setName("Vegs")
            .setType(FundsMutationSubject.Type.PRODUCT)
            .setParentId(food1.id.getAsLong())
            .build();
    subjectRepository.addSubject(meat);
    subjectRepository.addSubject(vegs);
    subjectRepository
        .findByParent(food1.id.getAsLong())
        .forEach(
            new Consumer<FundsMutationSubject>() {
              @Override
              public void accept(FundsMutationSubject subject) {
                assertTrue(
                    "Wrong byParent stream: " + subject.name,
                    subject.equals(meat) || subject.equals(vegs));
              }
            });
  }