@SuppressWarnings({"resource", "unchecked", "rawtypes"})
  @Test
  public void updateStreamWithListeners() {
    Repository decoratedRepository = mock(Repository.class);
    EntityListenerRepositoryDecorator entityListenerRepositoryDecorator =
        new EntityListenerRepositoryDecorator(decoratedRepository);
    EntityListener entityListener0 =
        when(mock(EntityListener.class).getEntityId()).thenReturn(Integer.valueOf(1)).getMock();
    EntityListener entityListener1 =
        when(mock(EntityListener.class).getEntityId()).thenReturn(Integer.valueOf(2)).getMock();
    entityListenerRepositoryDecorator.addEntityListener(entityListener0);
    entityListenerRepositoryDecorator.addEntityListener(entityListener1);

    Entity entity0 = when(mock(Entity.class).getIdValue()).thenReturn(Integer.valueOf(1)).getMock();
    Entity entity1 = when(mock(Entity.class).getIdValue()).thenReturn(Integer.valueOf(2)).getMock();
    Stream<Entity> entities = Stream.of(entity0, entity1);
    entityListenerRepositoryDecorator.update(entities);

    ArgumentCaptor<Stream<Entity>> captor = ArgumentCaptor.forClass((Class) Stream.class);
    verify(decoratedRepository).update(captor.capture());
    assertEquals(captor.getValue().collect(Collectors.toList()), Arrays.asList(entity0, entity1));

    verify(entityListener0, times(1)).postUpdate(entity0);
    verify(entityListener1, times(1)).postUpdate(entity1);
  }
  @SuppressWarnings("resource")
  @Test
  public void updateEntityWithListeners() {
    @SuppressWarnings("unchecked")
    Repository<Entity> decoratedRepository = Mockito.mock(Repository.class);
    Mockito.when(decoratedRepository.getName()).thenReturn("entityFullName");
    EntityListenerRepositoryDecorator entityListenerRepositoryDecorator =
        new EntityListenerRepositoryDecorator(decoratedRepository, entityListenersService);
    EntityListener entityListener0 =
        Mockito.when(Mockito.mock(EntityListener.class).getEntityId())
            .thenReturn(Integer.valueOf(1))
            .getMock();
    EntityListener entityListener1 =
        Mockito.when(Mockito.mock(EntityListener.class).getEntityId())
            .thenReturn(Integer.valueOf(1))
            .getMock();
    entityListenersService.addEntityListener("entityFullName", entityListener0);
    entityListenersService.addEntityListener("entityFullName", entityListener1);

    Entity entity =
        Mockito.when(Mockito.mock(Entity.class).getIdValue())
            .thenReturn(Integer.valueOf(1))
            .getMock();
    entityListenerRepositoryDecorator.update(entity);

    Mockito.verify(decoratedRepository).update(entity);
    Mockito.verify(entityListener0, Mockito.times(1)).postUpdate(entity);
    Mockito.verify(entityListener1, Mockito.times(1)).postUpdate(entity);
  }
  @SuppressWarnings({"resource", "unchecked", "rawtypes"})
  @Test
  public void updateStreamWithSomeListeners() {
    Repository<Entity> decoratedRepository = Mockito.mock(Repository.class);
    Mockito.when(decoratedRepository.getName()).thenReturn("entityFullName");
    EntityListenerRepositoryDecorator entityListenerRepositoryDecorator =
        new EntityListenerRepositoryDecorator(decoratedRepository, entityListenersService);
    EntityListener entityListener1 =
        Mockito.when(Mockito.mock(EntityListener.class).getEntityId())
            .thenReturn(Integer.valueOf(2))
            .getMock();
    entityListenersService.addEntityListener("entityFullName", entityListener1);

    Entity entity0 =
        Mockito.when(Mockito.mock(Entity.class).getIdValue())
            .thenReturn(Integer.valueOf(1))
            .getMock();
    Entity entity1 =
        Mockito.when(Mockito.mock(Entity.class).getIdValue())
            .thenReturn(Integer.valueOf(2))
            .getMock();
    Stream<Entity> entities = Stream.of(entity0, entity1);
    entityListenerRepositoryDecorator.update(entities);

    ArgumentCaptor<Stream<Entity>> captor = ArgumentCaptor.forClass((Class) Stream.class);
    Mockito.verify(decoratedRepository).update(captor.capture());
    Assert.assertEquals(
        captor.getValue().collect(Collectors.toList()), Arrays.asList(entity0, entity1));
    Mockito.verify(entityListener1, Mockito.times(1)).postUpdate(entity1);
  }
  @SuppressWarnings("resource")
  @Test
  public void updateEntityNoListeners() {
    Repository decoratedRepository = mock(Repository.class);
    EntityListenerRepositoryDecorator entityListenerRepositoryDecorator =
        new EntityListenerRepositoryDecorator(decoratedRepository);

    Entity entity = when(mock(Entity.class).getIdValue()).thenReturn(Integer.valueOf(1)).getMock();
    entityListenerRepositoryDecorator.update(entity);

    verify(decoratedRepository).update(entity);
  }
  @SuppressWarnings("resource")
  @Test
  public void updateEntityWithoutListener() {
    Repository decoratedRepository = mock(Repository.class);
    EntityListenerRepositoryDecorator entityListenerRepositoryDecorator =
        new EntityListenerRepositoryDecorator(decoratedRepository);
    EntityListener entityListener0 =
        when(mock(EntityListener.class).getEntityId()).thenReturn(Integer.valueOf(-1)).getMock();
    entityListenerRepositoryDecorator.addEntityListener(entityListener0);

    Entity entity = when(mock(Entity.class).getIdValue()).thenReturn(Integer.valueOf(1)).getMock();
    entityListenerRepositoryDecorator.update(entity);

    verify(decoratedRepository).update(entity);
    verify(entityListener0, times(0)).postUpdate(entity);
  }
 @Test
 public void findAllAsStream() {
   Entity entity0 = mock(Entity.class);
   Query query = mock(Query.class);
   when(decoratedRepository.findAll(query)).thenReturn(Stream.of(entity0));
   Stream<Entity> entities = entityListenerRepositoryDecorator.findAll(query);
   assertEquals(entities.collect(Collectors.toList()), Arrays.asList(entity0));
 }
 @Test
 public void streamFetch() {
   Fetch fetch = new Fetch();
   @SuppressWarnings("unchecked")
   Consumer<List<Entity>> consumer = Mockito.mock(Consumer.class);
   entityListenerRepositoryDecorator.forEachBatched(fetch, consumer, 543);
   Mockito.verify(decoratedRepository, Mockito.times(1)).forEachBatched(fetch, consumer, 543);
 }
 @Test
 public void findAllAsStream() {
   Entity entity0 = Mockito.mock(Entity.class);
   @SuppressWarnings("unchecked")
   Query<Entity> query = Mockito.mock(Query.class);
   Mockito.when(decoratedRepository.findAll(query)).thenReturn(Stream.of(entity0));
   Stream<Entity> entities = entityListenerRepositoryDecorator.findAll(query);
   Assert.assertEquals(entities.collect(Collectors.toList()), Arrays.asList(entity0));
 }
 @SuppressWarnings("unchecked")
 @BeforeMethod
 public void setUpBeforeMethod() {
   decoratedRepository = Mockito.mock(Repository.class);
   Mockito.when(decoratedRepository.getName()).thenReturn("entityFullName");
   entityListenerRepositoryDecorator =
       new EntityListenerRepositoryDecorator(decoratedRepository, entityListenersService);
   Mockito.when(entityListenerRepositoryDecorator.getName()).thenReturn("entityFullName");
 }
 @Test
 public void findAllStream() {
   Object id0 = "id0";
   Object id1 = "id1";
   Entity entity0 = mock(Entity.class);
   Entity entity1 = mock(Entity.class);
   Stream<Object> entityIds = Stream.of(id0, id1);
   when(decoratedRepository.findAll(entityIds)).thenReturn(Stream.of(entity0, entity1));
   Stream<Entity> expectedEntities = entityListenerRepositoryDecorator.findAll(entityIds);
   assertEquals(expectedEntities.collect(Collectors.toList()), Arrays.asList(entity0, entity1));
 }
 @Test
 public void findAllStreamFetch() {
   Fetch fetch = new Fetch();
   Object id0 = "id0";
   Object id1 = "id1";
   Entity entity0 = Mockito.mock(Entity.class);
   Entity entity1 = Mockito.mock(Entity.class);
   Stream<Object> entityIds = Stream.of(id0, id1);
   Mockito.when(decoratedRepository.findAll(entityIds, fetch))
       .thenReturn(Stream.of(entity0, entity1));
   Stream<Entity> expectedEntities = entityListenerRepositoryDecorator.findAll(entityIds, fetch);
   Assert.assertEquals(
       expectedEntities.collect(Collectors.toList()), Arrays.asList(entity0, entity1));
 }
 @Test
 public void deleteStream() {
   Stream<Entity> entities = Stream.empty();
   entityListenerRepositoryDecorator.delete(entities);
   verify(decoratedRepository, times(1)).delete(entities);
 }
 @Test
 public void addStream() {
   Stream<Entity> entities = Stream.empty();
   when(decoratedRepository.add(entities)).thenReturn(Integer.valueOf(123));
   assertEquals(entityListenerRepositoryDecorator.add(entities), Integer.valueOf(123));
 }
 @Test
 public void streamFetch() {
   Fetch fetch = new Fetch();
   entityListenerRepositoryDecorator.stream(fetch);
   verify(decoratedRepository, times(1)).stream(fetch);
 }
 @Test
 public void testQuery() throws Exception {
   assertEquals(
       entityListenerRepositoryDecorator.query().getRepository(),
       entityListenerRepositoryDecorator);
 }
 @Test
 public void delegate() throws Exception {
   assertEquals(entityListenerRepositoryDecorator.delegate(), decoratedRepository);
 }