package org.cad.interruptus.repository.zookeeper;
import com.google.common.collect.Lists;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.cad.interruptus.core.EntityNotFoundException;
import org.cad.interruptus.entity.Entity;
import static org.junit.Assert.*;
import org.junit.Before;
import org.junit.Test;
import static org.mockito.Mockito.*;
public class AbstractConfigurationRepositoryTest
{
ConfigurationManager manager;
@Before
public void setUp()
{
manager = mock(ConfigurationManager.class);
}
@Test
public void testFindAll() throws Exception
{
final AbstractConfigurationRepository instance = new AbstractConfigurationRepository<Entity>(manager){};
final Entity entity1 = mock(Entity.class);
final Entity entity2 = mock(Entity.class);
when(manager.list(Entity.class)).thenReturn(Lists.newArrayList(
entity1, entity2
));
final List result = instance.findAll();
assertEquals(2, result.size());
assertEquals(entity1, result.get(0));
assertEquals(entity2, result.get(1));
verify(manager).list(Entity.class);
}
@Test
public void testFindById() throws Exception
{
final AbstractConfigurationRepository instance = new AbstractConfigurationRepository<Entity>(manager){};
final Entity entity1 = mock(Entity.class);
final Entity entity2 = mock(Entity.class);
final Map<String, Entity> map = new HashMap<>();
map.put("e1", entity1);
map.put("e2", entity2);
when(manager.map(Entity.class)).thenReturn(map);
final Entity result1 = instance.findById("e1");
final Entity result2 = instance.findById("e2");
verify(manager, times(2)).map(Entity.class);
assertSame(result1, entity1);
assertSame(result2, entity2);
}
@Test(expected = EntityNotFoundException.class)
public void testFindByIdEntityNotFoundException() throws Exception
{
final AbstractConfigurationRepository instance = new AbstractConfigurationRepository<Entity>(manager){};
final Entity entity1 = mock(Entity.class);
final Entity entity2 = mock(Entity.class);
final Map<String, Entity> map = new HashMap<>();
map.put("e1", entity1);
map.put("e2", entity2);
when(manager.map(Entity.class)).thenReturn(map);
final Entity result1 = instance.findById("e1");
final Entity result2 = instance.findById("e2");
assertSame(result1, entity1);
assertSame(result2, entity2);
instance.findById("unknown");
}
@Test
public void testSave() throws Exception
{
final AbstractConfigurationRepository instance = new AbstractConfigurationRepository<Entity>(manager){};
final Entity entity = mock(Entity.class);
instance.save(entity);
verify(manager).save(eq(entity));
verify(manager).flush();
}
@Test
public void testRemove() throws Exception
{
final AbstractConfigurationRepository instance = new AbstractConfigurationRepository<Entity>(manager){};
final String identifier = "eid";
instance.remove(identifier);
verify(manager).remove(eq(Entity.class), eq(identifier));
verify(manager).flush();
}
}