def test_process_housenumber_skip_duplicate_cia_on_different_source(session): group = factories.GroupFactory(municipality__insee="90001", fantoir="900010016") factories.HouseNumberFactory(parent=group, number="2", ordinal="B", attributes={"source": "DGFiP"}) factories.HouseNumberFactory(parent=group, number="2", ordinal="", attributes={"source": "DGFiP"}) # There is no ordinal, but the CIA refers to an ordinal, like if the # ordinal has been removed. But the housenumber without ordinal already # exists in the DB. data = { "type": "housenumber", "source": "BAN", "cia": "90001_0016_2_B", "group:fantoir": "900010016", "numero": "2", "ordinal": "" } process_row(data) assert models.HouseNumber.select().count() == 2 housenumber = models.HouseNumber.first( models.HouseNumber.cia == "90001_0016_2_B") assert housenumber.ordinal == "B"
def test_process_housenumber_from_oldban(session): data = { "type": "housenumber", "source": "BAN (2016-06-05)", "cia": "90001_0005_2_BIS", "group:fantoir": "900010005", "numero": "2", "ordinal": "BIS", "ign": "ADRNIVX_0000000259416737", "postcode:code": "90400", "postcode:complement": "90002", "municipality:insee": "90001" } group = factories.GroupFactory(municipality__insee="90001", fantoir="900010005") factories.HouseNumberFactory(parent=group, number="2", ordinal="bis") factories.PostCodeFactory(municipality=group.municipality, code="90400", complement="90002") process_row(data) assert models.HouseNumber.select().count() == 1 housenumber = models.HouseNumber.first() assert housenumber.attributes['source'] == "BAN (2016-06-05)" assert housenumber.parent == group assert housenumber.number == "2" assert housenumber.ordinal == "BIS" assert housenumber.postcode.code == "90400" assert housenumber.postcode.complement == "90002" assert housenumber.postcode.municipality.insee == "90001" assert housenumber.ign == "ADRNIVX_0000000259416737" assert len(housenumber.versions) == 2
def test_process_positions_from_sga_ign(session): data = { 'type': 'position', 'kind': 'segment', 'positioning': 'interpolation', 'source': 'IGN (2016-04)', 'housenumber:cia': '90004_0022_1_', 'ign': 'ADRNIVX_0000000354868426', 'geometry': { 'type': 'Point', 'coordinates': [6.82920162869564, 47.6098351749073] } } group = factories.GroupFactory(municipality__insee='90004', fantoir='900040022') housenumber = factories.HouseNumberFactory(parent=group, number='1', ordinal='') process_row(data) assert models.Position.select().count() == 1 position = models.Position.first() assert position.kind == models.Position.SEGMENT assert position.positioning == models.Position.INTERPOLATION assert position.source == 'IGN (2016-04)' assert position.ign == 'ADRNIVX_0000000354868426' assert position.housenumber == housenumber assert position.center.coords == (6.82920162869564, 47.6098351749073)
def test_can_update_position_from_ign_identifier(session): data = { 'type': 'position', 'kind': 'segment', 'positioning': 'interpolation', 'source': 'IGN (2016-04)', 'housenumber:cia': '90004_0022_1_', 'ign': 'ADRNIVX_0000000354868426', 'geometry': { 'type': 'Point', 'coordinates': [6.82920162869564, 47.6098351749073] } } housenumber = factories.HouseNumberFactory( parent__fantoir='900040022', parent__municipality__insee='90004', number='1', ordinal='') position = factories.PositionFactory(ign='ADRNIVX_0000000354868426', housenumber=housenumber) process_row(data) assert models.Position.select().count() == 1 position = models.Position.first() assert position.source == 'IGN (2016-04)' assert position.housenumber == housenumber
def test_process_positions_from_oldban(session): data = { "type": "position", "kind": "unknown", "name": "Bâtiment A", "source": "BAN (2016-06-05)", "housenumber:cia": "90001_0005_5_", "ign": "ADRNIVX_0000000259416584", "geometry": { "type": "Point", "coordinates": [6.871125, 47.602046] } } group = factories.GroupFactory(municipality__insee="90001", fantoir="900010005") housenumber = factories.HouseNumberFactory(parent=group, number="5", ordinal="") process_row(data) assert models.Position.select().count() == 1 position = models.Position.first() assert position.kind == models.Position.UNKNOWN assert position.source == "BAN (2016-06-05)" assert position.housenumber == housenumber assert position.center.coords == (6.871125, 47.602046) assert position.name == "Bâtiment A"
def test_can_update_housenumber_laposte_with_ign_id(session): data = {"type": "housenumber", "source": "IGN/Poste (2016-06)", "ign": "ADRNIVX_0000000261488312", "laposte": "060012222M"} housenumber = factories.HouseNumberFactory(ign='ADRNIVX_0000000261488312') process_row(data) assert models.HouseNumber.select().count() == 1 housenumber = models.HouseNumber.first() assert housenumber.laposte == '060012222M'
def test_import_housenumber_cea(session): data = {'type': 'housenumber', 'cia': '33001_B072_2_', 'laposte': '33001223T2', 'numero': '2', 'ordinal': '', 'source': 'IGN/Poste (2016-04)', 'group:fantoir': '33001B072'} group = factories.GroupFactory(municipality__insee='33001', fantoir='33001B072', kind=models.Group.AREA) factories.HouseNumberFactory(parent=group, number='2', ordinal='') process_row(data) assert models.HouseNumber.select().count() == 1 housenumber = models.HouseNumber.first() assert housenumber.laposte == '33001223T2'
def test_can_update_housenumber_postcode_with_laposte_id(session): data = {"type": "housenumber", "source": "Poste (2016-06)", "laposte": "060012223P", "postcode:code": "06910", "municipality:insee": "06900"} postcode = factories.PostCodeFactory(code='06910', municipality__insee='06900') housenumber = factories.HouseNumberFactory(laposte='060012223P') process_row(data) assert models.HouseNumber.select().count() == 1 housenumber = models.HouseNumber.first() assert housenumber.postcode == postcode
def test_bal_should_update_housenumber_by_id(staff): housenumber = factories.HouseNumberFactory(number="1") content = """cle_interop,uid_adresse,voie_nom,numero,suffixe,commune_nom,position,x,y,long,lat,source,date_der_maj\n 35001_0010_00001,{id},Square Ella Maillart,1,,Acigné,bâtiment,,,,,Rennes Métropole,2013-10-23 """ content = content.format(id=housenumber.id) bal(StringIO(content)) assert models.HouseNumber.select().count() == 1 housenumber = models.HouseNumber.select().first() assert housenumber.number == "1" assert housenumber.version == 2
def test_can_match_position_parent_from_ign_id(session): data = {"type": "position", "source": "IGN (2016-06)", "ign": "XXX", "geometry": {"type": "Point", "coordinates": [6.82920162869564, 47.6098351749073]}, "housenumber:ign": "ADRNIVX_0000000261474435"} housenumber = factories.HouseNumberFactory(ign='ADRNIVX_0000000261474435') process_row(data) assert models.Position.select().count() == 1 position = models.Position.first() assert position.housenumber == housenumber assert position.ign == 'XXX'
def test_modify_housenumber_ancestors(session, monkeypatch): monkeypatch.setattr('ban.commands.helpers.confirm', lambda *x, **wk: True) mun1 = factories.MunicipalityFactory(insee='33001', name='Mun1') mun2 = factories.MunicipalityFactory(insee='33002', name='Mun2') gr = factories.GroupFactory(municipality=mun2, name='GrToto') hn = factories.HouseNumberFactory(parent=gr, number='1') merge(mun1.insee, sources=[mun2.insee], name='Toto', label='TOTO') hn = models.HouseNumber.select().where( models.HouseNumber.number == '1').first() gr_area = models.Group.select().where( models.Group.name == mun2.name).first() assert hn.ancestors == gr_area
def test_export_housenumber(): hn = factories.HouseNumberFactory(number='1') path = Path(__file__).parent / 'data' resources('HouseNumber', path) filepath = path.joinpath('housenumber.ndjson') with filepath.open() as f: lines = f.readlines() assert len(lines) == 1 # Plus, JSON transform internals tuples to lists. assert json.loads(lines[0]) == json.loads(dumps(hn.as_export)) filepath.unlink()
def test_can_update_housenumber_with_parent_number_and_ordinal(session): data = {"type": "housenumber", "source": "Poste (2016-06)", "group:laposte": "00067358", "laposte": "060012223P", "numero": "5", "ordinal": "", "postcode:code": "06910", "municipality:insee": "06900"} postcode = factories.PostCodeFactory(code='06910', municipality__insee='06900') housenumber = factories.HouseNumberFactory(parent__laposte='00067358', number='5', ordinal='') process_row(data) assert models.HouseNumber.select().count() == 1 housenumber = models.HouseNumber.first() assert housenumber.laposte == '060012223P' assert housenumber.postcode == postcode
def test_bal_should_add_position_to_existing_housenumber(staff): group = factories.GroupFactory(municipality__insee="35001", name="Square Ella Maillart", fantoir="350010010") housenumber = factories.HouseNumberFactory(number="1", parent=group, ordinal=None) content = """cle_interop,uid_adresse,voie_nom,numero,suffixe,commune_nom,position,x,y,long,lat,source,date_der_maj\n 35001_0010_00001,,Square Ella Maillart,1,,Acigné,bâtiment,363371.73430419,6791798.91601974,-1.52808691540987,48.1396656060165,Rennes Métropole,2013-10-23 """ bal(StringIO(content)) assert models.Position.select().count() == 1 position = models.Position.select().first() assert position.center == (-1.52808691540987, 48.1396656060165) position.housenumber == housenumber
def test_bal_should_update_housenumber_by_cia(staff): group = factories.GroupFactory(name="Square Ella Maillart", municipality__insee="35001", fantoir="350010010") housenumber = factories.HouseNumberFactory(number="1", parent=group, ordinal=None) content = """cle_interop,uid_adresse,voie_nom,numero,suffixe,commune_nom,position,x,y,long,lat,source,date_der_maj\n 35001_0010_00001,,Square Ella Maillart,1,,Acigné,bâtiment,,,,,Rennes Métropole,2013-10-23 """ bal(StringIO(content)) assert models.HouseNumber.select().count() == 1 housenumber = models.HouseNumber.select().first() assert housenumber.number == "1" assert housenumber.version == 2
def test_process_position_from_dgfip(session): data = {"type": "position", "kind": "entrance", "source": "DGFiP/BANO (2016-04)", "housenumber:cia": "90001_0016_15_bis", "geometry": {"type": "Point", "coordinates": [6.87116577514, 47.6029533961]}} group = factories.GroupFactory(municipality__insee="90001", fantoir="900010016") housenumber = factories.HouseNumberFactory(parent=group, number="15", ordinal="bis") process_row(data) assert models.Position.select().count() == 1 position = models.Position.first() assert position.kind == models.Position.ENTRANCE assert position.source == "DGFiP/BANO (2016-04)" assert position.housenumber == housenumber assert position.center.coords == (6.87116577514, 47.6029533961)
def test_export_resources(): mun = factories.MunicipalityFactory() street = factories.GroupFactory(municipality=mun) hn = factories.HouseNumberFactory(parent=street) factories.PositionFactory(housenumber=hn) deleted = factories.PositionFactory(housenumber=hn) deleted.mark_deleted() path = Path(__file__).parent / 'data/export.sjson' resources(path) with path.open() as f: lines = f.readlines() assert len(lines) == 3 # loads/dumps to compare string dates to string dates. assert json.loads(lines[0]) == json.loads(dumps(mun.as_resource)) assert json.loads(lines[1]) == json.loads(dumps(street.as_resource)) # Plus, JSON transform internals tuples to lists. assert json.loads(lines[2]) == json.loads(dumps(hn.as_resource)) path.unlink()
def test_bal_should_update_housenumber_when_updating_group(staff): group = factories.GroupFactory(municipality__insee="38185", name="Esplanade Alain Le Ray", fantoir="381850172") housenumber = factories.HouseNumberFactory(number=None, parent=group, ordinal=None) content = """cle_interop;uid_adresse;voie_nom;numero;suffixe;commune_nom;position;x;y;long;lat;source;date_der_maj\n 38185_0172_99999;;Esplanade Alain Le Ray;99999;;Grenoble;délivrance postale;914027.84;6457539.01;5.72559773087959;45.1839130425293;Ville de Grenoble;2010-12-21 """ bal(StringIO(content)) assert models.Group.select().count() == 1 assert models.HouseNumber.select().count() == 1 housenumber = models.HouseNumber.first() assert housenumber.parent == group assert housenumber.number is None assert models.Position.select().count() == 1 position = models.Position.first() assert position.housenumber == housenumber assert position.center == (5.72559773087959, 45.1839130425293)