package org.molgenis.data.validation.meta;
import org.mockito.ArgumentCaptor;
import org.molgenis.data.Repository;
import org.molgenis.data.meta.model.Package;
import org.molgenis.data.validation.MolgenisValidationException;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import java.util.stream.Stream;
import static java.util.Collections.singletonList;
import static java.util.stream.Collectors.toList;
import static org.mockito.Mockito.*;
import static org.testng.Assert.assertEquals;
public class PackageRepositoryValidationDecoratorTest
{
private PackageRepositoryValidationDecorator packageRepositoryValidationDecorator;
private Repository<Package> decoratedRepo;
private PackageValidator packageValidator;
@SuppressWarnings("unchecked")
@BeforeMethod
public void setUpBeforeMethod() throws Exception
{
decoratedRepo = mock(Repository.class);
packageValidator = mock(PackageValidator.class);
packageRepositoryValidationDecorator = new PackageRepositoryValidationDecorator(decoratedRepo,
packageValidator);
}
@Test
public void testDelegate() throws Exception
{
assertEquals(packageRepositoryValidationDecorator.delegate(), decoratedRepo);
}
@Test
public void testAddValid() throws Exception
{
Package package_ = mock(Package.class);
packageRepositoryValidationDecorator.add(package_);
verify(decoratedRepo).add(package_);
}
@Test(expectedExceptions = MolgenisValidationException.class)
public void testAddInvalid() throws Exception
{
Package package_ = mock(Package.class);
doThrow(mock(MolgenisValidationException.class)).when(packageValidator).validate(package_);
packageRepositoryValidationDecorator.add(package_);
}
@Test
public void testAddStreamValid() throws Exception
{
Package package_ = mock(Package.class);
packageRepositoryValidationDecorator.add(Stream.of(package_));
@SuppressWarnings("unchecked")
ArgumentCaptor<Stream<Package>> packageCaptor = ArgumentCaptor.forClass((Class) Stream.class);
verify(decoratedRepo).add(packageCaptor.capture());
assertEquals(packageCaptor.getValue().collect(toList()), singletonList(package_));
verify(packageValidator).validate(package_);
}
@SuppressWarnings("ResultOfMethodCallIgnored")
@Test(expectedExceptions = MolgenisValidationException.class)
public void testAddStreamInvalid() throws Exception
{
Package package_ = mock(Package.class);
doThrow(mock(MolgenisValidationException.class)).when(packageValidator).validate(package_);
packageRepositoryValidationDecorator.add(Stream.of(package_));
@SuppressWarnings("unchecked")
ArgumentCaptor<Stream<Package>> packageCaptor = ArgumentCaptor.forClass((Class) Stream.class);
verify(decoratedRepo).add(packageCaptor.capture());
packageCaptor.getValue().count();
}
@Test
public void testUpdateValid() throws Exception
{
Package package_ = mock(Package.class);
packageRepositoryValidationDecorator.update(package_);
verify(packageValidator).validate(package_);
verify(decoratedRepo).update(package_);
}
@Test(expectedExceptions = MolgenisValidationException.class)
public void testUpdateInvalid() throws Exception
{
Package package_ = mock(Package.class);
doThrow(mock(MolgenisValidationException.class)).when(packageValidator).validate(package_);
packageRepositoryValidationDecorator.update(package_);
}
@Test
public void testUpdateStreamValid() throws Exception
{
Package package_ = mock(Package.class);
packageRepositoryValidationDecorator.update(Stream.of(package_));
@SuppressWarnings("unchecked")
ArgumentCaptor<Stream<Package>> packageCaptor = ArgumentCaptor.forClass((Class) Stream.class);
verify(decoratedRepo).update(packageCaptor.capture());
assertEquals(packageCaptor.getValue().collect(toList()), singletonList(package_));
verify(packageValidator).validate(package_);
}
@SuppressWarnings("ResultOfMethodCallIgnored")
@Test(expectedExceptions = MolgenisValidationException.class)
public void testUpdateStreamInvalid() throws Exception
{
Package package_ = mock(Package.class);
doThrow(mock(MolgenisValidationException.class)).when(packageValidator).validate(package_);
packageRepositoryValidationDecorator.update(Stream.of(package_));
@SuppressWarnings("unchecked")
ArgumentCaptor<Stream<Package>> packageCaptor = ArgumentCaptor.forClass((Class) Stream.class);
verify(decoratedRepo).update(packageCaptor.capture());
packageCaptor.getValue().count();
}
@Test
public void testDeleteValid() throws Exception
{
Package package_ = mock(Package.class);
packageRepositoryValidationDecorator.delete(package_);
verify(packageValidator).validate(package_);
verify(decoratedRepo).delete(package_);
}
@Test(expectedExceptions = MolgenisValidationException.class)
public void testDeleteInvalid() throws Exception
{
Package package_ = mock(Package.class);
doThrow(mock(MolgenisValidationException.class)).when(packageValidator).validate(package_);
packageRepositoryValidationDecorator.delete(package_);
}
@Test
public void testDeleteStreamValid() throws Exception
{
Package package_ = mock(Package.class);
packageRepositoryValidationDecorator.delete(Stream.of(package_));
@SuppressWarnings("unchecked")
ArgumentCaptor<Stream<Package>> packageCaptor = ArgumentCaptor.forClass((Class) Stream.class);
verify(decoratedRepo).delete(packageCaptor.capture());
assertEquals(packageCaptor.getValue().collect(toList()), singletonList(package_));
verify(packageValidator).validate(package_);
}
@SuppressWarnings("ResultOfMethodCallIgnored")
@Test(expectedExceptions = MolgenisValidationException.class)
public void testDeleteStreamInvalid() throws Exception
{
Package package_ = mock(Package.class);
doThrow(mock(MolgenisValidationException.class)).when(packageValidator).validate(package_);
packageRepositoryValidationDecorator.delete(Stream.of(package_));
@SuppressWarnings("unchecked")
ArgumentCaptor<Stream<Package>> packageCaptor = ArgumentCaptor.forClass((Class) Stream.class);
verify(decoratedRepo).delete(packageCaptor.capture());
packageCaptor.getValue().count();
}
@Test
public void testDeleteByIdValid() throws Exception
{
Package package_ = mock(Package.class);
Object id = mock(Object.class);
when(decoratedRepo.findOneById(id)).thenReturn(package_);
packageRepositoryValidationDecorator.deleteById(id);
verify(packageValidator).validate(package_);
verify(decoratedRepo).deleteById(id);
}
@Test(expectedExceptions = MolgenisValidationException.class)
public void testDeleteByIdInvalid() throws Exception
{
Package package_ = mock(Package.class);
Object id = mock(Object.class);
when(decoratedRepo.findOneById(id)).thenReturn(package_);
doThrow(mock(MolgenisValidationException.class)).when(packageValidator).validate(package_);
packageRepositoryValidationDecorator.deleteById(id);
}
@Test
public void testDeleteAllValid() throws Exception
{
Package package_ = mock(Package.class);
when(decoratedRepo.iterator()).thenReturn(singletonList(package_).iterator());
packageRepositoryValidationDecorator.deleteAll();
verify(packageValidator).validate(package_);
verify(decoratedRepo).deleteAll();
}
@Test(expectedExceptions = MolgenisValidationException.class)
public void testDeleteAllInvalid() throws Exception
{
Package package_ = mock(Package.class);
when(decoratedRepo.iterator()).thenReturn(singletonList(package_).iterator());
doThrow(mock(MolgenisValidationException.class)).when(packageValidator).validate(package_);
packageRepositoryValidationDecorator.deleteAll();
}
@SuppressWarnings("ResultOfMethodCallIgnored")
@Test
public void testDeleteAllStreamValid() throws Exception
{
Package package_ = mock(Package.class);
Object id = mock(Object.class);
when(decoratedRepo.findOneById(id)).thenReturn(package_);
packageRepositoryValidationDecorator.deleteAll(Stream.of(id));
@SuppressWarnings("unchecked")
ArgumentCaptor<Stream<Object>> packageIdCaptor = ArgumentCaptor.forClass((Class) Stream.class);
verify(decoratedRepo).deleteAll(packageIdCaptor.capture());
packageIdCaptor.getValue().count();
verify(packageValidator).validate(package_);
}
@SuppressWarnings("ResultOfMethodCallIgnored")
@Test(expectedExceptions = MolgenisValidationException.class)
public void testDeleteAllStreamInvalid() throws Exception
{
Package package_ = mock(Package.class);
Object id = mock(Object.class);
when(decoratedRepo.findOneById(id)).thenReturn(package_);
doThrow(mock(MolgenisValidationException.class)).when(packageValidator).validate(package_);
packageRepositoryValidationDecorator.deleteAll(Stream.of(id));
@SuppressWarnings("unchecked")
ArgumentCaptor<Stream<Object>> packageIdCaptor = ArgumentCaptor.forClass((Class) Stream.class);
verify(decoratedRepo).deleteAll(packageIdCaptor.capture());
packageIdCaptor.getValue().count();
}
}