passerelle/tests/test_tcl.py

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

163 lines
4.6 KiB
Python
Raw Normal View History

import copy
from unittest import mock
from urllib import parse as urlparse
2020-01-06 15:52:40 +01:00
import pytest
2021-05-07 11:53:34 +02:00
import tests.utils
from passerelle.contrib.tcl.models import Line, Stop, Tcl
LIGNE_BUS = {
"values": [
{
"last_update_fme": "2017-06-27 06:01:10",
"nom_trace": "Croix Rousse - Plateaux de St Rambert",
"last_update": "None",
"code_trace": "2Aa1",
"gid": "1003",
"ligne": "2",
"sens": "Aller",
},
]
}
LIGNE_TRAM = {
"values": [
{
"ligne": "T2",
"sens": "Retour",
"libelle": "St Priest Bel Air - Perrache",
"indice": "",
"ut": "UTT",
"couleur": "54 0 160",
"infos": "",
"gid": "4",
"last_update_fme": "2017-06-27 06:01:10",
"code_titan": "T2r2",
"last_update": "None",
},
]
}
LIGNE_MF = {
"values": [
{
"last_update_fme": "2017-06-27 06:01:10",
"ligne": "B",
"ut": "UTMA",
"indice": "",
"couleur": "0 170 227",
"libelle": "Charpennes - Oullins Gare",
"last_update": "None",
"gid": "17",
"code_titan": "302Aa1",
"infos": "",
"sens": "Aller",
},
]
}
ARRETS = {
"type": "FeatureCollection",
"features": [
{
"geometry": {"coordinates": [4.84756760746877, 45.7594333137236], "type": "Point"},
"type": "Feature",
"properties": {
"pmr": "t",
"id": "46026",
"nom": "Place Guichard",
"last_update_fme": "2017-07-10 06:00:28",
"last_update": "",
"gid": "92",
"desserte": "302A:R",
"ascenseur": "f",
"escalator": "f",
},
},
],
}
PASSAGES = {
"values": [
{
"last_update_fme": "2017-06-27 07:32:27",
"coursetheorique": "302A-019AT:53:1:14",
"ligne": "302A",
"direction": "Gare d'Oullins",
"gid": "12429",
"idtarretdestination": "46035",
"heurepassage": "2017-06-27 07:33:50",
"delaipassage": "1 min",
"id": "46026",
"type": "E",
},
{
"gid": "12430",
"direction": "Gare d'Oullins",
"idtarretdestination": "46035",
"ligne": "302A",
"last_update_fme": "2017-06-27 07:32:27",
"coursetheorique": "302A-019AT:61:1:3",
"id": "46026",
"delaipassage": "4 min",
"type": "E",
"heurepassage": "2017-06-27 07:36:55",
},
]
}
@pytest.fixture
def connector(db):
return tests.utils.setup_access_rights(Tcl.objects.create(slug='test'))
2021-02-20 16:26:01 +01:00
def tcl_responses(url, **kwargs):
content = {
'/tcllignebus': LIGNE_BUS,
'/tcllignemf': LIGNE_MF,
'/tcllignetram': LIGNE_TRAM,
'/geojson/tclarret': ARRETS,
'/tclpassagearret': PASSAGES,
}.get(urlparse.urlparse(url).path)
return tests.utils.FakedResponse(json=lambda: copy.deepcopy(content), status_code=200)
2021-02-20 16:26:01 +01:00
@mock.patch('passerelle.utils.Request.get')
def test_cron(mocked_get, app, connector):
mocked_get.side_effect = tcl_responses
connector.daily()
assert Line.objects.count() == 3
assert Stop.objects.count() == 1
metro = Line.objects.get(transport_key='tcllignemf')
assert metro.ligne == 'B'
assert metro.html_bg_color == '00aae3'
assert metro.html_fg_color == '000000'
assert metro.code_titan_short == '302A'
assert Stop.objects.get(id_data='46026').pmr is True
assert Stop.objects.get(id_data='46026').escalator is False
assert Stop.objects.get(id_data='46026').ascenseur is False
@mock.patch('passerelle.utils.Request.get')
def test_stop_info(mocked_get, app, connector):
mocked_get.side_effect = tcl_responses
connector.daily()
endpoint = tests.utils.generic_endpoint_url('tcl', 'stop', slug=connector.slug)
assert endpoint == '/tcl/test/stop'
resp = app.get(endpoint + '/46026')
assert resp.json['data']['nom'] == 'Place Guichard'
assert len(resp.json['data']['passings']) == 2
assert resp.json['data']['passings'][0]['line_info']['ligne'] == 'B'
2017-07-02 11:53:21 +02:00
assert resp.json['data']['passings_by_line'][0]['ligne'] == 'B'
assert len(resp.json['data']['passings_by_line'][0]['passings']) == 2
2019-09-07 17:05:26 +02:00
2021-02-20 16:26:01 +01:00
2019-09-07 17:05:26 +02:00
@mock.patch('passerelle.utils.Request.get')
def test_availability(mocked_get, app, connector):
mocked_get.side_effect = tcl_responses
connector.check_status()