package ch.alv.components.data.repository;
import ch.alv.components.core.search.MapBasedValuesProvider;
import ch.alv.components.data.DataLayerException;
import ch.alv.components.data.mock.MockDataStoreAdapter;
import ch.alv.components.data.mock.MockExceptionThrowingDataStoreAdapter;
import ch.alv.components.data.mock.MockModelItem;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import java.util.ArrayList;
import java.util.List;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
/**
* Unit tests for the {@link DefaultPagingRepository} class. Tests implicitly the {@link DefaultRepository}.
*
* @since 1.0.0
*/
public class DefaultPagingRepositoryTest {
@Rule
public ExpectedException expectedException = ExpectedException.none();
private final DefaultPagingRepository<MockModelItem,String> repository = new DefaultPagingRepository<>(new MockDataStoreAdapter());
private final DefaultPagingRepository<MockModelItem,String> exceptionRepository = new DefaultPagingRepository<>(new MockExceptionThrowingDataStoreAdapter());
private final Pageable pageable = new PageRequest(0, 5);
@Test
public void testFindAll() throws DataLayerException {
Page result = repository.find(pageable, MockModelItem.class);
assertEquals(5, result.getContent().size());
expectedException.expect(DataLayerException.class);
expectedException.expectMessage(MockExceptionThrowingDataStoreAdapter.MSG);
exceptionRepository.find(pageable, MockModelItem.class);
}
@Test
public void testFindById() throws DataLayerException {
MockModelItem result = repository.find("a", MockModelItem.class);
assertEquals("a", result.getId());
expectedException.expect(DataLayerException.class);
expectedException.expectMessage(MockExceptionThrowingDataStoreAdapter.MSG);
exceptionRepository.find("a", MockModelItem.class);
}
@Test
public void testFindByIds() throws DataLayerException {
List<String> ids = new ArrayList<>();
ids.add("a");
ids.add("b");
Page<MockModelItem> result = repository.find(pageable, ids, MockModelItem.class);
assertEquals(2, result.getNumberOfElements());
expectedException.expect(DataLayerException.class);
expectedException.expectMessage(MockExceptionThrowingDataStoreAdapter.MSG);
exceptionRepository.find(pageable, ids, MockModelItem.class);
}
@Test
public void testFindWithQuery() throws DataLayerException {
Page<MockModelItem> result = repository.find(pageable, "testQuery", new MapBasedValuesProvider(), MockModelItem.class);
assertEquals(5, result.getNumberOfElements());
expectedException.expect(DataLayerException.class);
expectedException.expectMessage(MockExceptionThrowingDataStoreAdapter.MSG);
exceptionRepository.find(pageable, "testQuery", new MapBasedValuesProvider(), MockModelItem.class);
}
@Test
public void testSave() throws DataLayerException {
MockModelItem item = new MockModelItem("testName");
MockModelItem persistedItem = repository.save(item, MockModelItem.class);
assertEquals("testName", persistedItem.getName());
expectedException.expect(DataLayerException.class);
expectedException.expectMessage(MockExceptionThrowingDataStoreAdapter.MSG);
exceptionRepository.save(item, MockModelItem.class);
}
@Test
public void testMultipleSave() throws DataLayerException {
List<MockModelItem> items = new ArrayList<>();
items.add(new MockModelItem("testName"));
items.add(new MockModelItem("testName 2"));
List<MockModelItem> persistedItems = repository.save(items, MockModelItem.class);
assertEquals(2, persistedItems.size());
assertEquals("testName", persistedItems.get(0).getName());
assertEquals("testName 2", persistedItems.get(1).getName());
expectedException.expect(DataLayerException.class);
expectedException.expectMessage(MockExceptionThrowingDataStoreAdapter.MSG);
exceptionRepository.save(items, MockModelItem.class);
}
@Test
public void testDelete() throws DataLayerException {
repository.delete("c", MockModelItem.class);
assertNull(repository.find("c", MockModelItem.class));
expectedException.expect(DataLayerException.class);
expectedException.expectMessage(MockExceptionThrowingDataStoreAdapter.MSG);
exceptionRepository.delete("c", MockModelItem.class);
}
@Test
public void testMultipleDelete() throws DataLayerException {
List<String> ids = new ArrayList<>();
ids.add("d");
ids.add("e");
repository.delete(ids, MockModelItem.class);
assertNull(repository.find("d", MockModelItem.class));
assertNull(repository.find("e", MockModelItem.class));
expectedException.expect(DataLayerException.class);
expectedException.expectMessage(MockExceptionThrowingDataStoreAdapter.MSG);
exceptionRepository.delete(ids, MockModelItem.class);
}
}