コード例 #1
0
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
コード例 #2
0
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
コード例 #3
0
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]
コード例 #4
0
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
コード例 #5
0
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}
コード例 #6
0
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
コード例 #7
0
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'
コード例 #8
0
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
コード例 #9
0
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
コード例 #10
0
ファイル: test_commands.py プロジェクト: pjegouic/ban
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()
コード例 #11
0
ファイル: test_commands.py プロジェクト: pjegouic/ban
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()
コード例 #12
0
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
コード例 #13
0
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()
コード例 #14
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"
コード例 #15
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)
コード例 #16
0
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)"
コード例 #17
0
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
コード例 #18
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
コード例 #19
0
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"
コード例 #20
0
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"
コード例 #21
0
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)
コード例 #22
0
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
コード例 #23
0
ファイル: test_commands.py プロジェクト: pjegouic/ban
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()
コード例 #24
0
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
コード例 #25
0
ファイル: test_commands.py プロジェクト: pjegouic/ban
def test_truncate_should_not_ask_for_confirm_in_force_mode(monkeypatch):
    factories.MunicipalityFactory()
    truncate(force=True)
    assert not models.Municipality.select().count()
コード例 #26
0
def test_no_sources_is_aborted():
    factories.MunicipalityFactory(insee='33001', name='Mun')
    with pytest.raises(SystemExit):
        merge('33001')
コード例 #27
0
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