package eu.europeana.cloud.service.mcs.inmemory;
import static junitparams.JUnitParamsRunner.$;
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import junitparams.JUnitParamsRunner;
import junitparams.Parameters;
import org.junit.Test;
import org.junit.runner.RunWith;
import eu.europeana.cloud.common.model.File;
import eu.europeana.cloud.common.model.Representation;
import eu.europeana.cloud.common.response.ResultSlice;
import eu.europeana.cloud.service.mcs.RepresentationSearchParams;
@RunWith(JUnitParamsRunner.class)
public class InMemoryRecordServiceTest {
private static final String SCHEMA = "PDF";
private static final String PROVIDER_ID = "FBC";
InMemoryRecordDAO recordDAO = mock(InMemoryRecordDAO.class);
@Test
@Parameters(method = "searchRepresentatonsParams")
public void shouldSearchRepresentations(String threshold, int limit, int fromIndex, int toIndex, String nextSlice) {
List<Representation> representations = createRepresentations(5, PROVIDER_ID, SCHEMA);
when(recordDAO.findRepresentations(PROVIDER_ID, SCHEMA)).thenReturn(representations);
InMemoryRecordService recordService = new InMemoryRecordService(recordDAO, null, null, null);
RepresentationSearchParams searchParams = RepresentationSearchParams.builder().setDataProvider(PROVIDER_ID)
.setSchema(SCHEMA).build();
ResultSlice<Representation> actual = recordService.search(searchParams, threshold, limit);
assertEquals("List of representations are not equal. ", representations.subList(fromIndex, toIndex),
actual.getResults());
assertEquals("Next slice ", actual.getNextSlice(), nextSlice);
}
private Object searchRepresentatonsParams() {
return $($(null, -1, 0, 5, null), $(null, 0, 0, 5, null), $(null, -2, 0, 5, null), $(null, 1, 0, 1, "1"),
$(null, 4, 0, 4, "4"), $(null, 5, 0, 5, null), $("0", 5, 0, 5, null), $("1", 5, 1, 5, null),
$("1", 2, 1, 3, "3"));
}
private List<Representation> createRepresentations(int items, String dataProviderId, String schema) {
List<Representation> representations = new ArrayList<>();
for (int i = 0; i < items; i++) {
representations.add(createRepresentation(i, dataProviderId, schema));
}
return representations;
}
private Representation createRepresentation(int index, String dataProviderId, String schema) {
return new Representation(Integer.toString(index), schema, "1.0", null, null, dataProviderId,
new ArrayList<File>(), false, new Date());
}
}