Exemplo n.º 1
0
def test_create_station_from_child_stops_substring_case():
    child_1 = parse.Stop(id="A",
                         name="Name 1",
                         latitude=3,
                         longitude=1,
                         type=parse.Stop.Type.STATION)
    child_2 = parse.Stop(
        id="B",
        name="Name 1 (and more)",
        latitude=1,
        longitude=1,
        type=parse.Stop.Type.STATION,
    )

    expected_station = parse.Stop(
        id="A-B",
        name="Name 1 (and more)",
        latitude=2,
        longitude=1,
        type=parse.Stop.Type.GROUPED_STATION,
    )

    actual_station = gtfsstaticparser._create_station_from_child_stops(
        [child_1, child_2])

    assert expected_station == actual_station
Exemplo n.º 2
0
def test_create_station_from_child_stops():
    child_1 = parse.Stop(id="A",
                         name="Name 1",
                         latitude=4,
                         longitude=1,
                         type=parse.Stop.Type.STATION)
    child_2 = parse.Stop(id="B",
                         name="Name 1",
                         latitude=1,
                         longitude=1,
                         type=parse.Stop.Type.STATION)
    child_3 = parse.Stop(id="C",
                         name="Name 2",
                         latitude=1,
                         longitude=1,
                         type=parse.Stop.Type.STATION)

    expected_station = parse.Stop(
        id="A-B-C",
        name="Name 1",
        latitude=2,
        longitude=1,
        type=parse.Stop.Type.GROUPED_STATION,
    )

    actual_station = gtfsstaticparser._create_station_from_child_stops(
        [child_1, child_2, child_3])

    assert expected_station == actual_station
Exemplo n.º 3
0
def test_parse_stops__parent_and_child_stop(mock_create_station):
    gtfs_static_file = mock.Mock()
    gtfs_static_file.stops.return_value = [
        {
            "stop_id": STOP_ID,
            "stop_name": STOP_NAME,
            "stop_lon": STOP_LON,
            "stop_lat": STOP_LAT,
            "location_type": "0",
            "parent_station": STOP_ID_2,
        },
        {
            "stop_id": STOP_ID_2,
            "stop_name": STOP_NAME_2,
            "stop_lon": STOP_LON,
            "stop_lat": STOP_LAT,
            "location_type": "1",
            "parent_station": "",
        },
    ]
    gtfs_static_file.transfers.return_value = []

    expected_stop_2 = parse.Stop(
        id=STOP_ID_2,
        name=STOP_NAME_2,
        longitude=float(STOP_LON),
        latitude=float(STOP_LAT),
        type=parse.Stop.Type.STATION,
    )
    expected_stop_1 = parse.Stop(
        id=STOP_ID,
        name=STOP_NAME,
        longitude=float(STOP_LON),
        latitude=float(STOP_LAT),
        type=parse.Stop.Type.PLATFORM,
        parent_stop=expected_stop_2,
    )

    actual_stops = list(
        gtfsstaticparser._parse_stops(gtfs_static_file,
                                      gtfsstaticparser._TransfersConfig()))

    assert [expected_stop_1, expected_stop_2] == actual_stops
Exemplo n.º 4
0
def test_stop__tree_linking(
    db_session,
    system_1,
    add_model,
    previous_update,
    current_update,
    old_id_to_parent_id,
    expected_id_to_parent_id,
):
    stop_id_to_stop = {
        id_: add_model(
            models.Stop(
                id=id_,
                name=id_,
                system=system_1,
                source=previous_update,
                longitude=0,
                latitude=0,
                type=parse.Stop.Type.STATION,
            ))
        for id_ in old_id_to_parent_id.keys()
    }
    for id_, parent_id in old_id_to_parent_id.items():
        if parent_id is None:
            continue
        stop_id_to_stop[id_].parent_stop = stop_id_to_stop[parent_id]
    db_session.flush()

    stop_id_to_stop = {
        id_: parse.Stop(id=id_,
                        name=id_,
                        longitude=0,
                        latitude=0,
                        type=parse.Stop.Type.STATION)
        for id_ in expected_id_to_parent_id.keys()
    }
    for id_, parent_id in expected_id_to_parent_id.items():
        if parent_id is None:
            continue
        stop_id_to_stop[id_].parent_stop = stop_id_to_stop[parent_id]

    importdriver.run_import(current_update.pk,
                            ParserForTesting(list(stop_id_to_stop.values())))

    actual_stop_id_parent_id = {}
    for stop in db_session.query(models.Stop).all():
        if stop.parent_stop is not None:
            actual_stop_id_parent_id[stop.id] = stop.parent_stop.id
        else:
            actual_stop_id_parent_id[stop.id] = None

    assert expected_id_to_parent_id == actual_stop_id_parent_id
Exemplo n.º 5
0
def test_parse_stops__single_stop(mock_create_station):
    gtfs_static_file = mock.Mock()
    gtfs_static_file.stops.return_value = [{
        "stop_id": STOP_ID,
        "stop_name": STOP_NAME,
        "stop_lon": STOP_LON,
        "stop_lat": STOP_LAT,
        "location_type": "0",
    }]
    gtfs_static_file.transfers.return_value = []

    expected_stop = parse.Stop(
        id=STOP_ID,
        name=STOP_NAME,
        longitude=float(STOP_LON),
        latitude=float(STOP_LAT),
        type=parse.Stop.Type.PLATFORM,
    )

    assert [expected_stop] == list(
        gtfsstaticparser._parse_stops(gtfs_static_file,
                                      gtfsstaticparser._TransfersConfig()))
Exemplo n.º 6
0
@pytest.fixture
def other_feed_update(add_model, feed_2):
    return add_model(models.FeedUpdate(feed=feed_2))


new_agency = parse.Agency(id="agency", name="New Agency", timezone="", url="")
new_alert = parse.Alert(id="alert",
                        cause=parse.Alert.Cause.DEMONSTRATION,
                        effect=parse.Alert.Effect.DETOUR)
new_route = parse.Route(id="route",
                        type=parse.Route.Type.RAIL,
                        description="new_route")
new_stop = parse.Stop(id="route",
                      name="new stop",
                      latitude=0,
                      longitude=0,
                      type=parse.Stop.Type.STATION)
new_vehicle = parse.Vehicle(id="vehicle",
                            label="new vehicle",
                            current_status=parse.Vehicle.Status.STOPPED_AT)


@pytest.mark.parametrize(
    "entity_type,previous,current,expected_counts",
    [
        [models.Alert, [], [new_alert], (1, 0, 0)],
        [
            models.Alert,
            [
                models.Alert(
Exemplo n.º 7
0
def test_parse_stops__group_stations(mock_create_station, transfers_strategy,
                                     expect_station):
    gtfs_static_file = mock.Mock()
    gtfs_static_file.stops.return_value = [
        {
            "stop_id": STOP_ID,
            "stop_name": STOP_NAME,
            "stop_lon": STOP_LON,
            "stop_lat": STOP_LAT,
            "location_type": "1",
        },
        {
            "stop_id": STOP_ID_2,
            "stop_name": STOP_NAME_2,
            "stop_lon": STOP_LON,
            "stop_lat": STOP_LAT,
            "location_type": "1",
        },
    ]
    gtfs_static_file.transfers.return_value = [
        {
            "from_stop_id": STOP_ID,
            "to_stop_id": STOP_ID_2
        },
        {
            "from_stop_id": STOP_ID,
            "to_stop_id": STOP_ID
        },
    ]

    expected_station = parse.Stop(
        id="FakeID",
        name="",
        longitude=0,
        latitude=0,
        type=parse.Stop.Type.GROUPED_STATION,
    )
    mock_create_station.return_value = expected_station
    expected_stop_1 = parse.Stop(
        id=STOP_ID,
        name=STOP_NAME,
        longitude=float(STOP_LON),
        latitude=float(STOP_LAT),
        type=parse.Stop.Type.STATION,
    )
    expected_stop_2 = parse.Stop(
        id=STOP_ID_2,
        name=STOP_NAME_2,
        longitude=float(STOP_LON),
        latitude=float(STOP_LAT),
        type=parse.Stop.Type.STATION,
    )
    if expect_station:
        expected_stop_1.parent_stop = expected_station
        expected_stop_2.parent_stop = expected_station

    actual_stops = list(
        gtfsstaticparser._parse_stops(
            gtfs_static_file,
            gtfsstaticparser._TransfersConfig(
                default_strategy=transfers_strategy),
        ))

    expected = [expected_stop_1, expected_stop_2]
    if expect_station:
        expected.append(expected_station)

    assert expected == actual_stops