package de.westnordost.streetcomplete.data.osm.persist;
import junit.framework.TestCase;
import java.util.ArrayList;
import java.util.Collections;
import de.westnordost.osmapi.map.data.Element;
import de.westnordost.osmapi.map.data.Node;
import de.westnordost.osmapi.map.data.OsmNode;
import de.westnordost.osmapi.map.data.OsmRelation;
import de.westnordost.osmapi.map.data.OsmRelationMember;
import de.westnordost.osmapi.map.data.OsmWay;
import de.westnordost.osmapi.map.data.Relation;
import de.westnordost.osmapi.map.data.RelationMember;
import de.westnordost.osmapi.map.data.Way;
import static org.mockito.Matchers.anyCollectionOf;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
public class MergedElementDaoTest extends TestCase
{
private NodeDao nodeDao;
private WayDao wayDao;
private RelationDao relationDao;
private MergedElementDao dao;
@Override public void setUp()
{
nodeDao = mock(NodeDao.class);
wayDao = mock(WayDao.class);
relationDao = mock(RelationDao.class);
dao = new MergedElementDao(nodeDao, wayDao, relationDao);
}
public void testPutNode()
{
Node node = mock(Node.class);
when(node.getType()).thenReturn(Element.Type.NODE);
dao.put(node);
verify(nodeDao).put(node);
}
public void testGetNode()
{
Node node = mock(Node.class);
when(node.getId()).thenReturn(1L);
dao.get(Element.Type.NODE, 1L);
verify(nodeDao).get(1L);
}
public void testDeleteNode()
{
dao.delete(Element.Type.NODE, 1L);
verify(nodeDao).delete(1L);
}
public void testPutWay()
{
Way way = mock(Way.class);
when(way.getType()).thenReturn(Element.Type.WAY);
dao.put(way);
verify(wayDao).put(way);
}
public void testGetWay()
{
Way way = mock(Way.class);
when(way.getId()).thenReturn(1L);
dao.get(Element.Type.WAY, 1L);
verify(wayDao).get(1L);
}
public void testDeleteWay()
{
dao.delete(Element.Type.WAY, 1L);
verify(wayDao).delete(1L);
}
public void testPutRelation()
{
Relation relation = mock(Relation.class);
when(relation.getType()).thenReturn(Element.Type.RELATION);
dao.put(relation);
verify(relationDao).put(relation);
}
public void testGetRelation()
{
Relation relation = mock(Relation.class);
when(relation.getId()).thenReturn(1L);
dao.get(Element.Type.RELATION, 1L);
verify(relationDao).get(1L);
}
public void testDeleteRelation()
{
dao.delete(Element.Type.RELATION, 1L);
verify(relationDao).delete(1L);
}
public void testPutAllRelations()
{
ArrayList<Element> elements = new ArrayList<>();
elements.add(createARelation());
dao.putAll(elements);
verify(relationDao).putAll(anyCollectionOf(Relation.class));
}
public void testPutAllWays()
{
ArrayList<Element> elements = new ArrayList<>();
elements.add(createAWay());
dao.putAll(elements);
verify(wayDao).putAll(anyCollectionOf(Way.class));
}
public void testPutAllNodes()
{
ArrayList<Element> elements = new ArrayList<>();
elements.add(createANode());
dao.putAll(elements);
verify(nodeDao).putAll(anyCollectionOf(Node.class));
}
public void testPutAllElements()
{
ArrayList<Element> elements = new ArrayList<>();
elements.add(createANode());
elements.add(createAWay());
elements.add(createARelation());
dao.putAll(elements);
verify(nodeDao).putAll(anyCollectionOf(Node.class));
verify(wayDao).putAll(anyCollectionOf(Way.class));
verify(relationDao).putAll(anyCollectionOf(Relation.class));
}
private Node createANode()
{
return new OsmNode(0,0, 0.0, 0.0, null);
}
private Way createAWay()
{
return new OsmWay(0,0, Collections.singletonList(0L), null);
}
private Relation createARelation()
{
RelationMember m = new OsmRelationMember(0, "", Element.Type.NODE);
return new OsmRelation(0,0, Collections.singletonList(m), null);
}
public void testDeleteUnreferenced()
{
dao.deleteUnreferenced();
verify(nodeDao).deleteUnreferenced();
verify(wayDao).deleteUnreferenced();
verify(relationDao).deleteUnreferenced();
}
}