def test_truncate_should_only_truncate_given_names(monkeypatch): factories.MunicipalityFactory() factories.GroupFactory() monkeypatch.setattr('ban.commands.helpers.confirm', lambda *x, **wk: True) truncate('group') assert models.Municipality.select().count() assert not models.Group.select().count()
def test_truncate_should_truncate_all_tables_by_default(monkeypatch): factories.MunicipalityFactory() factories.GroupFactory() monkeypatch.setattr('ban.commands.helpers.confirm', lambda *x, **wk: True) truncate() assert not models.Municipality.select().count() assert not models.Group.select().count()
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_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_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_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_group_without_fantoir_does_not_delete_it(session): data = {'ign': '06004#357', 'source': 'IGN/Poste (2016-06)', 'laposte': '02500921', 'type': 'group'} group = factories.GroupFactory(ign="06004#357", fantoir="060042357") process_row(data) group = models.Group.first() assert group.fantoir == '060042357' assert group.ign == '06004#357'
def test_modify_group_municipality(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') merge(mun1.insee, sources=[mun2.insee], name='Toto', label='TOTO') gr = models.Group.select().where(models.Group.name == 'GrToto').first() assert gr.municipality == mun1
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_import_poste_group_matricule(session): data = {'type': 'group', 'source': 'IGN (2016-04)', 'fantoir': '330010005', 'laposte': '00580321'} factories.GroupFactory(name='RUE DES ARNAUDS', municipality__insee='33001', fantoir='330010005', kind=models.Group.WAY) process_row(data) assert models.Group.select().count() == 1 group = models.Group.first() assert group.name == 'RUE DES ARNAUDS' assert group.laposte == '00580321' assert group.attributes['source'] == 'IGN (2016-04)'
def test_can_match_housenumber_parent_from_laposte_id(session): data = {"type": "housenumber", "source": "Poste/RAN (2016-06)", "numero": None, "group:laposte": "02855657", "laposte": "0600222227"} group = factories.GroupFactory(municipality__insee='06002', fantoir='', laposte='02855657') process_row(data) assert models.HouseNumber.select().count() == 1 housenumber = models.HouseNumber.first() assert housenumber.parent == group assert housenumber.laposte == '0600222227'
def test_can_match_housenumber_parent_from_ign_id(session): data = {"type": "housenumber", "source": "IGN (2016-06)", "ign": "ADRNIVX_0000000261474435", "group:ign": "06002#003", "numero": "70", "ordinal": ""} group = factories.GroupFactory(municipality__insee='06002', fantoir='', ign='06002#003') process_row(data) assert models.HouseNumber.select().count() == 1 housenumber = models.HouseNumber.first() assert housenumber.parent == group assert housenumber.ign == 'ADRNIVX_0000000261474435'
def test_process_housenumber_skip_duplicate_cia_on_same_source(session): factories.GroupFactory(municipality__insee="78297", fantoir="782970102") data1 = {"type": "housenumber", "source": "DGFiP/BANO (2016-04)", "group:fantoir": "782970102", "numero": "6", "ordinal": "B"} data2 = {"type": "housenumber", "source": "DGFiP/BANO (2016-04)", "group:fantoir": "782970102", "numero": "6", "ordinal": "b"} process_row(data1) process_row(data2) assert models.HouseNumber.select().count() == 1 housenumber = models.HouseNumber.first() assert housenumber.ordinal == "B"
def test_process_housenumber_from_dgfip(session): group = factories.GroupFactory(fantoir="900010016") data = {"type": "housenumber", "source": "DGFiP/BANO (2016-04)", "group:fantoir": "900010016", "numero": "15", "ordinal": "bis"} process_row(data) assert models.HouseNumber.select().count() == 1 housenumber = models.HouseNumber.first() assert housenumber.attributes['source'] == "DGFiP/BANO (2016-04)" assert housenumber.parent == group assert housenumber.number == "15" assert housenumber.ordinal == "bis"
def test_import_housenumbers_group_cea_poste(session): data = {'type': 'housenumber', 'source': 'IGN/Poste (2016-04)', 'group:fantoir': '330010005', 'laposte': '330012223B', 'numero': None} factories.GroupFactory(name='RUE DES ARNAUDS', municipality__insee='33001', fantoir='330010005', kind=models.Group.WAY) process_row(data) assert models.HouseNumber.select().count() == 1 housenumber = models.HouseNumber.first() assert housenumber.number is None assert housenumber.ordinal is None assert housenumber.laposte == '330012223B'
def test_import_group_from_bano_dgfip(session): data = {'type': 'group', 'source': 'DGFiP/BANO (2016-05)', 'addressing': 'classical', 'fantoir': '01001A008', 'name': 'Lotissement Bellevue'} factories.GroupFactory(municipality__insee='01001', fantoir='01001A008', kind=models.Group.AREA, name='LOTISSEMENT BELLEVUE') process_row(data) assert models.Group.select().count() == 1 group = models.Group.first() assert group.name == 'Lotissement Bellevue' assert group.addressing == 'classical' assert group.version == 2
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_group(): street = factories.GroupFactory() path = Path(__file__).parent / 'data' resources('Group', path) filepath = path.joinpath('group.ndjson') with filepath.open() as f: lines = f.readlines() assert len(lines) == 1 # loads/dumps to compare string dates to string dates. assert json.loads(lines[0]) == json.loads(dumps(street.as_export)) filepath.unlink()
def test_bal_should_update_group_by_fantoir(staff): municipality = factories.MunicipalityFactory(name="Acigné", insee="35001") group = factories.GroupFactory(municipality=municipality, name="Mail Anti Conto", fantoir="350010005") content = """cle_interop,uid_adresse,voie_nom,numero,suffixe,commune_nom,position,x,y,long,lat,source,date_der_maj\n 35001_0005_99999,,Mail Anita Conti,99999,,Acigné,,,,,,Rennes Métropole,2016-02-22 """ bal(StringIO(content)) assert models.Group.select().count() == 1 group = models.Group.select().first() assert group.name == "Mail Anita Conti"
def test_bal_should_create_position_if_xy_are_set(staff): municipality = factories.MunicipalityFactory(name="Acigné", insee="35001") factories.GroupFactory(municipality=municipality, name="Square Ella Maillart", fantoir="350010010") 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)
def test_bal_should_create_housenumber(staff): municipality = factories.MunicipalityFactory(name="Acigné", insee="35001") group = factories.GroupFactory(municipality=municipality, name="Square Ella Maillart", fantoir="350010010") 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.parent == group
def test_process_group_do_not_drop_attributes(session): group = factories.GroupFactory(fantoir='900080203', municipality__insee="90008", attributes={'iwashere': 'before', 'me': 'too'}) data = {"type": "group", "source": "DGFIP/FANTOIR (2015-07)", "group": "way", "municipality:insee": "90008", "fantoir": "900080203", "name": "GRANDE RUE F. MITTERRAND", "attributes": {"me": "no"}} process_row(data) assert models.Group.select().count() == 1 group = models.Group.first() assert group.attributes['iwashere'] == 'before' assert group.attributes['me'] == 'no'
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_bal_should_create_housenumber_and_position_when_updating_group(staff): group = factories.GroupFactory(municipality__insee="38185", name="Esplanade Alain Le Ray", fantoir="381850172") 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)
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()