コード例 #1
0
ファイル: test_web.py プロジェクト: antoniogamiz/TDD-Project
def test_get_route_by_id(client):

    #Create a route
    coordinates1 = [{
        "longitude": 2.2,
        "latitude": 3.5,
        "datetime": 34676
    }, {
        "longitude": 6.8,
        "latitude": 7.4,
        "datetime": 47580
    }]
    time1 = datetime.now()

    Ruta.create(user=USER_ID1,
                message=MESSAGE_ID1,
                date=time1,
                trajectory=coordinates1)

    ruta = {
        "distance_total": 46,
        "time": 6,
        "date": time1,
        "speed_km": 47,
        "speed_average": 44
    }

    rv = client.get(f'/api/v1/{USER_ID1}/route/{MESSAGE_ID1}')
    assert sorted(ruta.items()) == sorted(rv.data.items())

    #TO-DO: checkout that the values are correct

    #Undo changes in the database
    Ruta.delete().where(Ruta.message == MESSAGE_ID1).execute()
コード例 #2
0
ファイル: test_web.py プロジェクト: TDD-AY/TDD-Project
def test_get_route_by_id(client):
        
    #Create a route
    coordinates1=[{"longitude":2.2,"latitude":3.5,"datetime": 34676},{"longitude":6.8,"latitude":7.4,"datetime": 47580}]
    time1 = datetime.now().strftime("%a, %d %b %Y %H:%M:%S GMT")
    distance, time = 46, 6

    Ruta.create(
        user= USER_ID1, 
        message = MESSAGE_ID1, 
        date = time1, 
        trajectory = coordinates1,
        distance = distance,
        time = time
    )


    ruta={"distance_total":distance,"time":time,"date": time1}

    rv = json.loads(client.get(f'/api/v1/{USER_ID1}/route/{MESSAGE_ID1}').data)

    assert sorted(ruta.items()) == sorted(rv.items())

    #TO-DO: checkout that the values are correct                       


    #Undo changes in the database
    Ruta.delete().where(Ruta.message == MESSAGE_ID1).execute()
コード例 #3
0
def test_add_entry_when_already_exists():

    # add route to the database
    store_location(USER_ID, MESSAGE_ID, {"longitude": 1.0, "latitude": 2.0, "datetime": 0})
    store_location(USER_ID, MESSAGE_ID, {"longitude": 3.0, "latitude": 4.0, "datetime": 5})

    route = Ruta.select().order_by(Ruta.id.desc()).get()

    assert len(route.trajectory) == 2

    # undo changes
    Ruta.delete().where(Ruta.message == MESSAGE_ID).execute()
コード例 #4
0
ファイル: test_web.py プロジェクト: TDD-AY/TDD-Project
def test_delete_route_by_id(client):
    
    #Create a route
    coordinates1=[{"longitude":2.2,"latitude":3.5,"datetime": 34676},{"longitude":6.8,"latitude":7.4,"datetime": 47580}]
    
    Ruta.create(
        user= USER_ID1, 
        message = MESSAGE_ID1, 
        date = datetime.now(), 
        trajectory = coordinates1
    )

    client.post(f'/api/v1/{USER_ID1}/route/{MESSAGE_ID1}')
    assert Ruta.get_or_none(message = MESSAGE_ID1 )==None 
コード例 #5
0
def test_add_entry_correct():

    # add route to the database
    store_location(USER_ID, MESSAGE_ID, {"longitude": 1.0, "latitude": 2.0,"datetime": 0})

    route = Ruta.select().order_by(Ruta.id.desc()).get()

    assert route.trajectory[0].get("longitude") == 1.0
    assert route.trajectory[0].get("latitude") == 2.0
    assert route.trajectory[0].get("datetime") == 0
    assert route.user == USER_ID

    # undo changes

    Ruta.delete().where(Ruta.message == MESSAGE_ID).execute()
コード例 #6
0
def store_location(user_id: int, m_id: int,
                   position_data: Dict[str, Union[float, int]]):
    """
    Store the trayectory point and time (position_data) produced by an user (user_id) in a message (m_id)
    """

    if ("longitude" in position_data.keys()) and (
            "latitude" in position_data.keys()) and ("datetime"
                                                     in position_data.keys()):
        correct_types = type(position_data.get("longitude")) == float
        correct_types = correct_types and type(
            position_data.get("latitude")) == float
        correct_types = correct_types and type(
            position_data.get("datetime")) == int
        if correct_types:
            ruta = Ruta.get_or_none(message=m_id)

            if ruta:
                ruta.trajectory.append(position_data)

                if len(ruta.trajectory) >= 2:
                    current_position = tuple([
                        position_data.get("longitude"),
                        position_data.get("latitude")
                    ])
                    previous_position = tuple([
                        ruta.trajectory[-2].get("longitude"),
                        ruta.trajectory[-2].get("latitude")
                    ])
                    ruta.distance += haversine(previous_position,
                                               current_position)
                    ruta.time += position_data.get(
                        "datetime") - ruta.trajectory[-2].get("datetime")

                ruta.save()
            else:
                Ruta.create(
                    user=user_id,
                    message=m_id,
                    date=datetime.now(),
                    trajectory=[position_data],
                    time=0,
                    distance=0.0,
                )
        else:
            raise InvalidEntry("Invalid type for position_data")
    else:
        raise InvalidEntry("latitude or longitude not in the keys")
コード例 #7
0
def test_add_distance_and_time_when_adding_entry():

    store_location(USER_ID, MESSAGE_ID, {"longitude": 1.0, "latitude": 2.0, "datetime": 0})
    store_location(USER_ID, MESSAGE_ID, {"longitude": 3.0, "latitude": 4.0, "datetime": 5})
    store_location(USER_ID, MESSAGE_ID, {"longitude": 7.0, "latitude": 9.0, "datetime": 10})

    route = Ruta.select().order_by(Ruta.id.desc()).get()

    pos1 = (1.0, 2.0)
    pos2 = (3.0, 4.0)
    pos3 = (7.0, 9.0)

    assert isclose(route.distance, haversine(pos1,pos2)+haversine(pos2,pos3), abs_tol=0.1)
    assert route.time == 10

    # undo changes
    Ruta.delete().where(Ruta.message == MESSAGE_ID).execute()
コード例 #8
0
ファイル: test_web.py プロジェクト: antoniogamiz/TDD-Project
def test_get_routes(client):

    #Create some routes

    coordinates1 = [{
        "longitude": 2.2,
        "latitude": 3.5,
        "datetime": 34676
    }, {
        "longitude": 6.8,
        "latitude": 7.4,
        "datetime": 47580
    }]
    coordinates2 = [{"longitude": 4.7, "latitude": 1.9, "datetime": 30000}]

    time1 = datetime.now()

    Ruta.create(user=USER_ID1,
                message=MESSAGE_ID1,
                date=time1,
                trajectory=coordinates1)

    time2 = datetime.now()

    Ruta.create(user=USER_ID1,
                message=MESSAGE_ID2,
                date=time2,
                trajectory=coordinates2)

    rutas = [{
        "user": USER_ID1,
        "message": MESSAGE_ID1,
        "date": time1,
        "trajectory": coordinates1
    }, {
        "user": USER_ID1,
        "message": MESSAGE_ID2,
        "date": time2,
        "trajectory": coordinates2
    }]

    rv = client.get(f'/api/v1/{USER_ID1}/my-routes')
    assert sorted(rutas.items()) == sorted(rv.data.items())

    #Undo changes in the database
    Ruta.delete().where(Ruta.message == MESSAGE_ID1).execute()
    Ruta.delete().where(Ruta.message == MESSAGE_ID2).execute()
コード例 #9
0
def get_route_by_id(user_id, route_id):
    """
    Retrieve a route by it's id. Here we take user_id to ensure that 
    not anyone can access the route_id. At least you need to know the
    user_id
    """

    if request.method == 'GET':
        r = Ruta.get_or_none(message=route_id)
        if r != None:
            return jsonify({
                "distance_total": r.distance,
                "time": r.time,
                "date": r.date,
            })
        else:
            return jsonify({})
    elif request.method == 'POST':
        ruta = Ruta.get_or_none(message=route_id)
        if (ruta != None) and (ruta.user == user_id):
            Ruta.delete().where(Ruta.message == route_id).execute()
            return "Deleted"

        return "Doesn't exist"
コード例 #10
0
def get_routes(user_id):
    """
    list all the routes available for an user_id.
    The result should be a json with basic information
    """

    user_routes = Ruta.select().where(Ruta.user == user_id)

    routes = []

    for route in user_routes:
        routes.append({
            "user": user_id,
            "message": route.message,
            "date": route.date,
            "trajectory": route.trajectory
        })

    return jsonify(routes)