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_delete_source(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') merge(mun1.insee, sources=[mun2.insee], name='Toto', label='TOTO') mun = models.Municipality.select().where( models.Municipality.insee == '33002').first() assert mun is None
def test_redirect(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') merge(mun1.insee, sources=[mun2.insee], name='Toto', label='TOTO') assert versioning.Redirect.select().count() == 2 assert versioning.Redirect.follow('Municipality', 'insee', '33002') == [mun1.id]
def test_no_label_is_aborted(): factories.MunicipalityFactory(insee='33001', name='Mun1') factories.MunicipalityFactory(insee='33002', name='Mun2') with pytest.raises(SystemExit): merge('33001', sources=['33002'], name='Toto') mun = models.Municipality.get(models.Municipality.insee == '33001') assert mun.version == 1 mun = models.Municipality.get(models.Municipality.insee == '33002') assert mun.version == 1
def test_create_group_area(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') merge(mun1.insee, sources=[mun2.insee], name='Toto', label='TOTO') gr = models.Group.select().where(models.Group.name == mun2.name).first() assert gr.municipality == mun1 assert gr.version == 1 assert gr.attributes == {'insee': mun2.insee}
def test_double_source_process_once(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') merge(mun1.insee, sources=[mun2.insee, mun2.insee], name='Toto', label='TOTO') gr = models.Group.select().where(models.Group.name == mun1.name) assert len(gr) == 1 assert gr[0].version == 1
def test_modify_postcode_without_complement(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') pc = factories.PostCodeFactory(municipality=mun2, name='PC2', code='33002') merge(mun1.insee, sources=[mun2.insee], name='Toto', label='TOTO') pc = models.PostCode.select().where( models.PostCode.code == '33002').first() assert pc.municipality == mun1 assert pc.complement == 'PC2' assert pc.name == 'TOTO'
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_process_can_import_two_postcode_with_same_code(session): factories.MunicipalityFactory(insee="90049") factories.MunicipalityFactory(insee="90050") first = {"type": "postcode", "source": "La Poste (2015)", "postcode": "90150", "name": "FOUSSEMAGNE", "municipality:insee": "90049"} second = {"type": "postcode", "source": "La Poste (2015)", "postcode": "90150", "name": "FRAIS", "municipality:insee": "90050"} process_row(first) process_row(second) assert models.PostCode.select().count() == 2
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_can_import_group_with_laposte_but_no_fantoir(session): data = {'laposte': '02500934', 'municipality:insee': '06004', 'type': 'group', 'name': 'VOIE DU TANIT', 'group': 'way', 'source': 'Poste/RAN (2016-06)'} municipality = factories.MunicipalityFactory(insee="06004") process_row(data) group = models.Group.first() assert group.laposte == '02500934' assert group.municipality == municipality
def test_export_municipality(): mun = factories.MunicipalityFactory() path = Path(__file__).parent / 'data' resources('Municipality', path) filepath = path.joinpath('municipality.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(mun.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_process_postcode(session): municipality = factories.MunicipalityFactory(insee="01030") data = {"type": "postcode", "source": "La Poste (2015)", "postcode": "01480", "name": "BEAUREGARD", "municipality:insee": "01030"} process_row(data) assert models.PostCode.select().count() == 1 postcode = models.PostCode.first() assert postcode.code == "01480" assert postcode.name == "BEAUREGARD" assert postcode.municipality == municipality assert postcode.attributes['source'] == "La Poste (2015)"
def test_bal_should_create_groups(staff): municipality = factories.MunicipalityFactory(name="Acigné", insee="35001") 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" assert group.fantoir == "350010005" assert group.municipality == municipality # No lat/long, so not housenumber should have been created. assert models.HouseNumber.select().count() == 0
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_bal_import_from_data_file(staff, client): factories.MunicipalityFactory(name="Acigné", insee="35001") 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 """ resp = client.post('/import/bal', data={'data': (BytesIO(content.encode()), 'test.csv')}, content_type='multipart/form-data') assert resp.status_code == 200 assert models.Group.select().count() == 1 group = models.Group.select().first() assert group.name == "Mail Anita Conti" assert group.fantoir == "350010005"
def test_process_group(session): municipality = factories.MunicipalityFactory(insee="90008") data = {"type": "group", "source": "DGFIP/FANTOIR (2015-07)", "group": "way", "municipality:insee": "90008", "fantoir": "900080203", "name": "GRANDE RUE F. MITTERRAND", "attributes": {"somekey": "somevalue"}} process_row(data) assert models.Group.select().count() == 1 group = models.Group.first() assert group.attributes['source'] == 'DGFIP/FANTOIR (2015-07)' assert group.attributes['somekey'] == 'somevalue' assert group.kind == models.Group.WAY assert group.municipality == municipality assert group.fantoir == "900080203" assert group.name == "GRANDE RUE F. MITTERRAND"
def test_bal_should_create_group_housenumber_and_position_if_latlong(staff): factories.MunicipalityFactory(name="Grenoble", insee="38185") 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 group = models.Group.first() 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_bal_should_accept_BOM(staff): path = Path(__file__).parent / 'data/balwithbom.csv' municipality = factories.MunicipalityFactory(name="Acigné", insee="35001") with path.open(mode='wb') as f: f.write(codecs.BOM_UTF8) f.write( """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""" .encode('utf-8')) bal(path) assert models.Group.select().count() == 1 group = models.Group.select().first() assert group.name == "Mail Anita Conti" assert group.fantoir == "350010005" assert group.municipality == municipality # No lat/long, so not housenumber should have been created. assert models.HouseNumber.select().count() == 0
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_cannot_use_bal_import_without_auth(staff, client): factories.MunicipalityFactory(name="Acigné", insee="35001") resp = client.post('/import/bal', data={'data': (b'xxxx', 'test.csv')}, content_type='multipart/form-data') assert resp.status_code == 401
def test_truncate_should_not_ask_for_confirm_in_force_mode(monkeypatch): factories.MunicipalityFactory() truncate(force=True) assert not models.Municipality.select().count()
def test_no_sources_is_aborted(): factories.MunicipalityFactory(insee='33001', name='Mun') with pytest.raises(SystemExit): merge('33001')
def test_unknown_destination_is_aborted(): factories.MunicipalityFactory(insee='33001', name='Mun') with pytest.raises(SystemExit): merge('12345', sources=['33001'], name='Toto', label='TOTO') mun = models.Municipality.get(models.Municipality.insee == '33001') assert mun.version == 1