package org.molgenis.data.aggregation;
import org.molgenis.data.Entity;
import org.molgenis.data.Repository;
import org.molgenis.data.settings.AppSettings;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import static org.mockito.Mockito.*;
import static org.testng.Assert.assertEquals;
public class AggregateAnonymizerRepositoryDecoratorTest
{
private AggregateAnonymizerRepositoryDecorator aggregateAnonymizerRepoDecorator;
private Repository<Entity> decoratedRepo;
private AggregateAnonymizer aggregateAnonymizer;
private AppSettings appSettings;
@SuppressWarnings("unchecked")
@BeforeMethod
public void setUpBeforeMethod()
{
decoratedRepo = mock(Repository.class);
aggregateAnonymizer = mock(AggregateAnonymizer.class);
appSettings = mock(AppSettings.class);
aggregateAnonymizerRepoDecorator = new AggregateAnonymizerRepositoryDecorator<>(decoratedRepo,
aggregateAnonymizer, appSettings);
}
@Test
public void delegate() throws Exception
{
assertEquals(aggregateAnonymizerRepoDecorator.delegate(), decoratedRepo);
}
@Test
public void aggregateNoThreshold() throws Exception
{
when(appSettings.getAggregateThreshold()).thenReturn(null);
AggregateQuery aggregateQuery = mock(AggregateQuery.class);
AggregateResult aggregateResult = mock(AggregateResult.class);
when(decoratedRepo.aggregate(aggregateQuery)).thenReturn(aggregateResult);
assertEquals(aggregateResult, aggregateAnonymizerRepoDecorator.aggregate(aggregateQuery));
verifyZeroInteractions(aggregateAnonymizer);
verifyZeroInteractions(aggregateResult);
}
@Test
public void aggregateThreshold() throws Exception
{
int threshold = 10;
when(appSettings.getAggregateThreshold()).thenReturn(threshold);
AggregateQuery aggregateQuery = mock(AggregateQuery.class);
AggregateResult aggregateResult = mock(AggregateResult.class);
when(decoratedRepo.aggregate(aggregateQuery)).thenReturn(aggregateResult);
AnonymizedAggregateResult anonymizedAggregateResult = mock(AnonymizedAggregateResult.class);
when(aggregateAnonymizer.anonymize(aggregateResult, threshold)).thenReturn(anonymizedAggregateResult);
assertEquals(anonymizedAggregateResult, aggregateAnonymizerRepoDecorator.aggregate(aggregateQuery));
}
}