Beispiel #1
0
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()
Beispiel #2
0
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()
Beispiel #3
0
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)
Beispiel #4
0
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
Beispiel #5
0
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"
Beispiel #6
0
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"
Beispiel #7
0
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
Beispiel #9
0
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'
Beispiel #10
0
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)'
Beispiel #11
0
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'
Beispiel #12
0
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'
Beispiel #13
0
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"
Beispiel #14
0
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"
Beispiel #15
0
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'
Beispiel #16
0
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
Beispiel #18
0
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()
Beispiel #19
0
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"
Beispiel #20
0
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)
Beispiel #21
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
Beispiel #22
0
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'
Beispiel #23
0
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
Beispiel #24
0
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
Beispiel #25
0
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)
Beispiel #26
0
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)
Beispiel #27
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()