def test_tags_modified(self, key="contact:phone", value="42"): """ NBR modifies a value which is in osm, the outdated value matches the osm value Should indicate that an auto-update is ok. """ self.osm_updated.tags[key] = value ret = update_osm.resolve_conflict(self.osm_element, self.osm_outdated, self.osm_updated) self.assertEqual(self.osm_element.tags[key], value) self.assertEqual(ret, "update")
def test_tags_deleted_ignored(self, del_key="contact:phone"): """ NBR removes a value which is not in osm. This can be ignored, no action needed. """ del self.osm_updated.tags[del_key] del self.osm_element.tags[del_key] ret = update_osm.resolve_conflict(self.osm_element, self.osm_outdated, self.osm_updated) self.assertEqual(ret, True)
def test_tags_modified_removed(self, key="contact:phone", value="42"): """ NBR modifies a value which is not in osm, Should indicate that a manual intervention is needed """ self.osm_updated.tags[key] = value del self.osm_element.tags[key] ret = update_osm.resolve_conflict(self.osm_element, self.osm_outdated, self.osm_updated) self.assertFalse(key in self.osm_element.tags) self.assertEqual(ret, False)
def test_tags_modified_tampered(self, key="contact:phone", value="42"): """ NBR modifies a value which is in osm, the outdated value does not match the osm value. Should indicate that a manual intervention is needed """ self.osm_updated.tags[key] = value value_tampered = self.osm_element.tags[key] + "tampered" self.osm_element.tags[key] = value_tampered ret = update_osm.resolve_conflict(self.osm_element, self.osm_outdated, self.osm_updated) self.assertEqual(self.osm_element.tags[key], value_tampered) self.assertEqual(ret, False)
def test_tags_deleted_tampered(self, del_key="contact:phone"): """ NBR removes a value which is in osm, the outdated value does not match the osm value. Should indicate that a manual intervention is needed """ del self.osm_updated.tags[del_key] self.assertTrue(del_key in self.osm_element.tags) self.osm_element.tags[del_key] += "tampered" self.assertNotEqual(self.osm_element.tags[del_key], self.osm_outdated.tags[del_key]) ret = update_osm.resolve_conflict(self.osm_element, self.osm_outdated, self.osm_updated) self.assertEqual(ret, False)
def test_tags_deleted(self, del_key="contact:phone"): """ NBR removes a value which is in osm, the outdated value matches the osm value. Should indicate that an auto-update is ok. """ del self.osm_updated.tags[del_key] self.assertTrue(del_key in self.osm_element.tags) self.assertEqual(self.osm_element.tags[del_key], self.osm_outdated.tags[del_key]) ret = update_osm.resolve_conflict(self.osm_element, self.osm_outdated, self.osm_updated) self.assertFalse(del_key in self.osm_element.tags) self.assertEqual(ret, "update")
def test_tags_added_building_equal(self): """ NBR adds a value which is in osm, and the value is the same. This can be ignored, no action needed. """ self.assertFalse("new_tag" in self.osm_updated.tags) self.osm_updated.tags["building"] = self.osm_element.tags["building"] self.assertTrue(self.osm_element.tags["building"], "kindergarten") ret = update_osm.resolve_conflict(self.osm_element, self.osm_outdated, self.osm_updated) self.assertTrue(ret) self.assertEqual(self.osm_element.tags["building"], "kindergarten")
def test_tags_added_building(self, value="new_value"): """ NBR adds a value which is in osm, and the value is missmatched. Should indicate that a manual intervention is needed """ self.assertFalse("new_tag" in self.osm_updated.tags) self.osm_updated.tags["building"] = value self.assertTrue(self.osm_element.tags["building"], "kindergarten") ret = update_osm.resolve_conflict(self.osm_element, self.osm_outdated, self.osm_updated) self.assertFalse(ret) self.assertEqual(self.osm_element.tags["building"], "kindergarten")
def test_tags_added_new_tag(self, value="new_value"): """ NBR adds a value which is not in osm. Should indicate that an auto-update is ok. """ self.assertFalse("new_tag" in self.osm_updated.tags) self.osm_updated.tags["new_tag"] = value self.assertTrue("new_tag" not in self.osm_element.tags) action = update_osm.resolve_conflict(self.osm_element, self.osm_outdated, self.osm_updated) self.assertEqual(action, "update") self.assertTrue("new_tag" in self.osm_element.tags)
def test_all(self): def new(d_old, d_new, k): self.assertNotIn(k, d_old) self.assertNotIn(k, d_new) d_new[k] = "new" def modified(d_old, d_new, k): self.assertIn(k, d_old) self.assertIn(k, d_new) self.assertEqual(d_new[k], d_old[k]) d_new[k] += "modified" def deleted(d_old, d_new, k): self.assertIn(k, d_old) self.assertIn(k, d_new) del d_new[k] tag_from_barnehagefakta_is = {"new": new, "modified": modified, "deleted": deleted} def set_new(d, k, new_v, old_v): if new_v is not None: d[k] = new_v def set_old(d, k, new_v, old_v): if old_v is not None: d[k] = old_v def set_new_conflict(d, k, new_v, old_v): if new_v is not None: d[k] = new_v + "conflicting" def set_old_conflict(d, k, new_v, old_v): if old_v is not None: d[k] = old_v + "conflicting" def delete_key(d, k, new_v, old_v): if k in d: del d[k] value_in_OSM = { "matches new value": set_new, "matches old value": set_old, "conflicts new value": set_new_conflict, "conflicts old value": set_old_conflict, "is unset": delete_key, } action = dict() def tokey(key1, key2): return "{0}, {1}".format(key1, key2) with open("update_osm_test.csv", "r") as f: f.readline() # skip first line for line in f: ls = line.split(",") k = tokey(ls[0], ls[1]) a = ls[2] # action if "ignore" in a or "N/A" in a: action[k] = ("ignore", True) elif "conflict" in a: action[k] = ("conflict", False) elif "auto update" in a: action[k] = ("auto_update", "update") else: raise ValueError(line) logger.debug("%s", action) for NBR in tag_from_barnehagefakta_is: for OSM in value_in_OSM: info = 'nbr="%s", osm="%s", action="%s"' % (NBR, OSM, action[tokey(NBR, OSM)]) logger.info(info) # shorthand d_old, d_new = self.osm_outdated.tags, self.osm_updated.tags d_osm = self.osm_element.tags if NBR is "new": k = "newKey" else: k = self.osm_updated.tags.keys()[0] # pick a key # updates the correct dictionaries: tag_from_barnehagefakta_is[NBR](d_old, d_new, k) new_v, old_v = d_new.get(k, None), d_old.get(k, None) logger.debug("new_v = %s, old_v = %s", new_v, old_v) value_in_OSM[OSM](d=d_osm, k=k, new_v=new_v, old_v=old_v) # Call: ret = update_osm.resolve_conflict(self.osm_element, self.osm_outdated, self.osm_updated) # Check: expected_ret = action[tokey(NBR, OSM)][1] self.assertEqual(ret, expected_ret, "For the test: %s, got %s, expected %s" % (info, ret, expected_ret)) self.setUp() # cleanup
def test_tags_equal(self): action = update_osm.resolve_conflict(self.osm_element, self.osm_outdated, self.osm_updated) self.assertEqual(action, True)