passerelle/tests/test_grandlyon_streetsectio...

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

280 lines
8.7 KiB
Python
Raw Permalink Normal View History

import pytest
from django.contrib.contenttypes.models import ContentType
from httmock import HTTMock
from passerelle.base.models import AccessRight, ApiUser
from passerelle.contrib.grandlyon_streetsections.models import (
GrandLyonStreetSections,
StreetSection,
normalize_street,
)
@pytest.fixture()
def connector(db):
api = ApiUser.objects.create(username='all', keytype='', key='')
connector = GrandLyonStreetSections.objects.create(slug='gl-streetsections')
obj_type = ContentType.objects.get_for_model(connector)
AccessRight.objects.create(
codename='can_access', apiuser=api, resource_type=obj_type, resource_pk=connector.pk
)
return connector
def test_partial_bornes(app, connector):
name = "Rue d'Essling"
normalized_name = normalize_street(name)
codefuv = '27862'
codeinsee = '69383'
nomcommune = 'LYON 3'
StreetSection.objects.create(
nom=normalized_name,
nomcommune=nomcommune,
codefuv=codefuv,
codeinsee=codeinsee,
codetroncon='T3162',
bornemingauche=0,
bornemaxgauche=99999,
bornemindroite=14,
bornemaxdroite=14,
)
StreetSection.objects.create(
nom=normalized_name,
nomcommune=nomcommune,
codefuv=codefuv,
codeinsee=codeinsee,
codetroncon='T27587',
bornemingauche=0,
bornemaxgauche=99999,
bornemindroite=0,
bornemaxdroite=99999,
)
StreetSection.objects.create(
nom=normalized_name,
nomcommune=nomcommune,
codefuv=codefuv,
codeinsee=codeinsee,
codetroncon='T3165',
bornemingauche=19,
bornemaxgauche=21,
bornemindroite=16,
bornemaxdroite=26,
)
response = app.get(
'/grandlyon-streetsections/gl-streetsections/section_info'
"?streetname=Rue d'Essling&commune=Lyon&streetnumber=20"
)
assert response.json['err'] == 0
assert response.json['data']['codetroncon'] == 'T3165'
DATA_EXAMPLE = """{
"fields" : [
"nom",
"nomcommune",
"codeinsee",
"codefuv",
"codetroncon",
"importance",
"domanialite",
"typecirculation",
"senscirculation",
"senscircspecialise",
"bornemingauche",
"bornemaxgauche",
"bornemindroite",
"bornemaxdroite",
"datecreation",
"datemajalpha",
"datemajgraph",
"datemajborne",
"observation",
"datedomanialite",
"referencedomanialite",
"particularite",
"gestionnaire",
"denomroutiere",
"gid"
],
"layer_name" : "adr_voie_lieu.adraxevoie",
"nb_results" : 4,
"next" : "https://download.recette.data.grandlyon.com/ws/grandlyon/adr_voie_lieu.adraxevoie/all.json?compact=false&start=5&maxfeatures=4",
"table_href" : "https://download.recette.data.grandlyon.com/ws/grandlyon/adr_voie_lieu.adraxevoie.json",
"values" : [
{
"bornemaxdroite" : null,
"bornemaxgauche" : null,
"bornemindroite" : null,
"bornemingauche" : null,
"codefuv" : "30906",
"codeinsee" : "69233",
"codetroncon" : "T5869",
"datecreation" : "1996-01-01",
"datedomanialite" : null,
"datemajalpha" : "1996-01-01",
"datemajborne" : "1996-01-01",
"datemajgraph" : "2015-06-16",
"denomroutiere" : null,
"domanialite" : "Commune",
"gestionnaire" : "",
"gid" : 1,
"importance" : "petite rue",
"nom" : "Chemin Rural 10",
"nomcommune" : "ST-ROMAIN",
"observation" : null,
"particularite" : null,
"referencedomanialite" : null,
"senscircspecialise" : null,
"senscirculation" : "Double",
"typecirculation" : "autres"
},
{
"bornemaxdroite" : null,
"bornemaxgauche" : null,
"bornemindroite" : null,
"bornemingauche" : null,
"codefuv" : "31631",
"codeinsee" : "69276",
"codetroncon" : "T15908",
"datecreation" : "1996-01-01",
"datedomanialite" : null,
"datemajalpha" : "1996-01-01",
"datemajborne" : "2002-09-27",
"datemajgraph" : "2014-12-11",
"denomroutiere" : null,
"domanialite" : "Métropole",
"gestionnaire" : "",
"gid" : 2,
"importance" : "petite rue",
"nom" : "Rue des Charrières",
"nomcommune" : "FEYZIN",
"observation" : null,
"particularite" : null,
"referencedomanialite" : null,
"senscircspecialise" : null,
"senscirculation" : "Double",
"typecirculation" : "générale"
},
{
"bornemaxdroite" : 6,
"bornemaxgauche" : 15,
"bornemindroite" : 2,
"bornemingauche" : 1,
"codefuv" : "24089",
"codeinsee" : "69282",
"codetroncon" : "T13986",
"datecreation" : "1996-01-01",
"datedomanialite" : null,
"datemajalpha" : "1996-01-01",
"datemajborne" : "2013-08-01",
"datemajgraph" : "2015-10-01",
"denomroutiere" : null,
"domanialite" : "Privé",
"gestionnaire" : "",
"gid" : 3,
"importance" : "moyenne rue",
"nom" : "Rue Alfred de Vigny",
"nomcommune" : "MEYZIEU",
"observation" : null,
"particularite" : null,
"referencedomanialite" : null,
"senscircspecialise" : null,
"senscirculation" : "Double",
"typecirculation" : "générale"
},
{
"bornemaxdroite" : 10,
"bornemaxgauche" : null,
"bornemindroite" : 2,
"bornemingauche" : null,
"codefuv" : "22503",
"codeinsee" : "69273",
"codetroncon" : "T9865",
"datecreation" : "1996-01-01",
"datedomanialite" : "2015-11-24",
"datemajalpha" : "2015-11-24",
"datemajborne" : "2005-12-09",
"datemajgraph" : "2019-12-20",
"denomroutiere" : null,
"domanialite" : "Privé",
"gestionnaire" : "",
"gid" : 4,
"importance" : "moyenne place",
"nom" : "Place Jules Ferry",
"nomcommune" : "CORBAS",
"observation" : null,
"particularite" : null,
"referencedomanialite" : null,
"senscircspecialise" : null,
"senscirculation" : "Double",
"typecirculation" : "générale"
},
{
"bornemaxdroite" : 10,
"bornemaxgauche" : 11,
"bornemindroite" : 2,
"bornemingauche" : 1,
"codefuv" : "21424",
"codeinsee" : "69266",
"codetroncon" : "T54753",
"datecreation" : "1995-07-17 18:43:00+02:00",
"datedomanialite" : null,
"datemajalpha" : "2022-11-14",
"datemajborne" : "2022-07-26",
"datemajgraph" : "2022-07-26",
"denomroutiere" : null,
"domanialite" : "Métropole",
"gestionnaire" : null,
"gid" : 30067,
"importance" : "Petite rue",
"nom" : "Rue de l'Avenir",
"nomcommune" : "Villeurbanne",
"observation" : null,
"particularite" : null,
"referencedomanialite" : null,
"senscircspecialise" : null,
"senscirculation" : "Inverse",
"typecirculation" : "Générale"
}
]
}
"""
def data_mock(url, request):
return {'content': DATA_EXAMPLE, 'request': request, 'status_code': 200}
def old_data_mock(url, request):
# old data.grandlyon used string "None" for null values
return {'content': DATA_EXAMPLE.replace(': null', ': "None"'), 'request': request, 'status_code': 200}
def test_daily_none_bornes(app, connector):
StreetSection.objects.all().delete()
with HTTMock(data_mock):
connector.daily()
assert StreetSection.objects.get(codetroncon='T5869').bornemindroite == 0
assert StreetSection.objects.get(codetroncon='T5869').bornemaxdroite == 99999
assert StreetSection.objects.get(codetroncon='T9865').bornemindroite == 2
assert StreetSection.objects.get(codetroncon='T9865').bornemaxdroite == 10
StreetSection.objects.all().delete()
with HTTMock(old_data_mock):
connector.daily()
assert StreetSection.objects.get(codetroncon='T5869').bornemindroite == 0
assert StreetSection.objects.get(codetroncon='T5869').bornemaxdroite == 99999
def test_non_uppercase_communes(app, connector):
StreetSection.objects.all().delete()
with HTTMock(data_mock):
connector.daily()
response = app.get(
'/grandlyon-streetsections/gl-streetsections/section_info'
"?streetname=Rue de l'Avenir&commune=Villeurbanne&streetnumber=8"
)
assert response.json['err'] == 0
assert response.json['data']['codetroncon'] == 'T54753'