package de.westnordost.streetcomplete.data.osm.persist; import java.util.ArrayList; import java.util.Date; import java.util.List; import de.westnordost.streetcomplete.data.ApplicationDbTestCase; import de.westnordost.streetcomplete.data.QuestStatus; import de.westnordost.streetcomplete.data.QuestType; import de.westnordost.streetcomplete.data.osm.ElementGeometry; import de.westnordost.streetcomplete.data.osm.OsmQuest; import de.westnordost.streetcomplete.data.osm.changes.StringMapChanges; import de.westnordost.streetcomplete.data.osm.changes.StringMapEntryAdd; import de.westnordost.streetcomplete.data.osm.changes.StringMapEntryChange; import de.westnordost.streetcomplete.data.osm.changes.StringMapEntryDelete; import de.westnordost.streetcomplete.data.osm.changes.StringMapEntryModify; import de.westnordost.streetcomplete.data.QuestTypes; import de.westnordost.streetcomplete.data.osm.persist.test.TestQuestType; import de.westnordost.streetcomplete.data.osm.persist.test.TestQuestType2; import de.westnordost.osmapi.map.data.Element; import de.westnordost.osmapi.map.data.OsmLatLon; public class OsmQuestDaoTest extends ApplicationDbTestCase { private ElementGeometryDao geometryDao; private OsmQuestDao dao; @Override public void setUp() { super.setUp(); geometryDao = new ElementGeometryDao(dbHelper, serializer); List<QuestType> list = new ArrayList<>(); list.add(new TestQuestType()); list.add(new TestQuestType2()); dao = new OsmQuestDao(dbHelper, serializer, new QuestTypes(list)); } public void testAddGetNoChanges() { ElementGeometry geometry = new ElementGeometry(new OsmLatLon(5,5)); OsmQuest quest = new OsmQuest(null, new TestQuestType(), Element.Type.NODE, 11, QuestStatus.ANSWERED, null, new Date(1000), geometry); geometryDao.put(quest.getElementType(), quest.getElementId(), geometry); dao.add(quest); assertEquals(1, (long) quest.getId()); OsmQuest dbQuest = dao.get(1); checkEqual(quest, dbQuest); } public void testAddGetWithChanges() { ElementGeometry geometry = new ElementGeometry(new OsmLatLon(5,5)); List<StringMapEntryChange> changes = new ArrayList<>(); changes.add(new StringMapEntryAdd("a key", "a value")); changes.add(new StringMapEntryDelete("delete this","key")); changes.add(new StringMapEntryModify("modify","this","to that")); OsmQuest quest = new OsmQuest( null, new TestQuestType(), Element.Type.NODE, 11, QuestStatus.ANSWERED, new StringMapChanges(changes), new Date(1000), geometry); geometryDao.put(quest.getElementType(), quest.getElementId(), geometry); dao.add(quest); assertEquals(1, (long) quest.getId()); OsmQuest dbQuest = dao.get(1); checkEqual(quest, dbQuest); } public void testGetAllByBBoxAndType() { ElementGeometry geometry = new ElementGeometry(new OsmLatLon(5,5)); OsmQuest quest1 = new OsmQuest(null, new TestQuestType(), Element.Type.NODE, 11, QuestStatus.ANSWERED, null, new Date(1000), geometry); OsmQuest quest2 = new OsmQuest(null, new TestQuestType2(), Element.Type.NODE, 11, QuestStatus.ANSWERED, null, new Date(1000), geometry); geometryDao.put(quest1.getElementType(), quest1.getElementId(), geometry); dao.add(quest1); dao.add(quest2); assertEquals(1,dao.getAll(null, null, "TestQuestType", null, null).size()); assertEquals(2,dao.getAll(null, null, null, null, null).size()); } public void testGetAllByElementTypeAndId() { ElementGeometry geometry = new ElementGeometry(new OsmLatLon(5,5)); OsmQuest quest1 = new OsmQuest(null, new TestQuestType(), Element.Type.NODE, 11, QuestStatus.ANSWERED, null, new Date(1000), geometry); OsmQuest quest2 = new OsmQuest(null, new TestQuestType(), Element.Type.WAY, 12, QuestStatus.ANSWERED, null, new Date(1000), geometry); geometryDao.put(quest1.getElementType(), quest1.getElementId(), geometry); geometryDao.put(quest2.getElementType(), quest2.getElementId(), geometry); dao.add(quest1); dao.add(quest2); assertEquals(1,dao.getAll(null, null, null, Element.Type.NODE, null).size()); assertEquals(1,dao.getAll(null, null, null, Element.Type.WAY, 12L).size()); } private void checkEqual(OsmQuest quest, OsmQuest dbQuest) { assertEquals(quest.getId(), dbQuest.getId()); assertEquals(quest.getType().getClass(), dbQuest.getType().getClass()); assertEquals(quest.getElementId(), dbQuest.getElementId()); assertEquals(quest.getElementType(), dbQuest.getElementType()); assertEquals(quest.getStatus(), dbQuest.getStatus()); assertEquals(quest.getChanges(), dbQuest.getChanges()); assertEquals(quest.getGeometry(), dbQuest.getGeometry()); assertEquals(quest.getMarkerLocation(), dbQuest.getMarkerLocation()); assertEquals(quest.getLastUpdate(), dbQuest.getLastUpdate()); } }