Exemplo n.º 1
0
def test_store_steps_twice_fails(conn: connection):
    journey_id = insert_journey_data(conn)
    date = pendulum.Date(2013, 3, 31)
    steps_data, _ = example_activity_data()
    journey.store_steps(conn, steps_data, journey_id, date)
    with pytest.raises(psycopg2.errors.UniqueViolation):
        journey.store_steps(conn, steps_data, journey_id, date)
Exemplo n.º 2
0
def test_factoid_weekly_summary(conn: connection):
    journey_id = insert_journey_data(conn)
    steps_data, body_reports = example_activity_data()
    g_info = example_gargling_info()
    date = pendulum.date(2013, 4, 6)
    assert date.day_of_week == pendulum.SATURDAY
    journey.queries.start_journey(conn,
                                  journey_id=journey_id,
                                  date=date.subtract(days=1))
    journey.store_steps(conn, steps_data, journey_id, date.subtract(days=1))
    journey.store_steps(conn, steps_data, journey_id, date)
    with api_mocker():
        data = journey.perform_daily_update(conn, journey_id, date, steps_data,
                                            g_info)
    assert data is not None
    (
        location,
        distance_today,
        journey_data,
        photo_url,
        map_url,
        map_img_url,
        new_country,
        finished,
    ) = data
    factoid = journey.daily_factoid(
        date,
        conn,
        journey_data,
        distance_today,
        location["distance"],
    )
    exp = "Vi gikk *26.8 km*! Denne uken har vi gått 53.7 km til sammen. Garglingen som gikk lengst var name6, med 26.7 km!"
    assert factoid == exp
Exemplo n.º 3
0
def test_most_steps_one_day_individual_some_data(conn: connection):
    date = pendulum.Date(2000, 1, 1)
    journey_id = test_journey.insert_journey_data(conn)
    steps_data = [
        {
            "gargling_id": 6,
            "amount": 1778
        },
        {
            "gargling_id": 2,
            "amount": 1152
        },
        {
            "gargling_id": 3,
            "amount": 638
        },
        {
            "gargling_id": 5,
            "amount": 11
        },
    ]
    journey.store_steps(conn, steps_data, journey_id, date)
    achv = achievements.extract(
        query=queries.most_steps_one_day_individual,
        conn=conn,
        journey_id=journey_id,
        date=date,
        less_than=None,
    )
    assert achv is None
Exemplo n.º 4
0
def test_all_at_date(conn: connection):
    date = pendulum.Date(2000, 1, 1)
    journey_id = test_journey.insert_journey_data(conn)
    journey.queries.start_journey(conn, journey_id=journey_id, date=date)
    steps_data = [
        {
            "gargling_id": 6,
            "amount": 1778
        },
        {
            "gargling_id": 2,
            "amount": 1152
        },
        {
            "gargling_id": 3,
            "amount": 638
        },
        {
            "gargling_id": 5,
            "amount": 11
        },
    ]
    journey.store_steps(conn, steps_data, journey_id, date)
    achv = achievements.all_at_date(conn=conn, date=date)
    assert achv == (
        "Flest skritt gått av en gargling på én dag: 1778 skritt - name6 :first_place_medal: (1.1.2000)\n"
        "Nest flest skritt gått av en gargling på én dag: 1152 skritt - name2 :second_place_medal: (1.1.2000)\n"
        "Tredje flest skritt gått av en gargling på én dag: 638 skritt - name3 :third_place_medal: (1.1.2000)\n"
        "Flest skritt gått av hele gargen på én dag: 3579 skritt :trophy: - 1.1.2000\n"
        "Størst andel av dagens skritt: 50 % - name6 :sports_medal: (1.1.2000)\n"
        "Lengste streak med førsteplasser: 1 dager - name6 :sports_medal: (1.1.2000)"
    )
Exemplo n.º 5
0
def test_most_steps_one_day_individual_tangering(conn: connection):
    date = pendulum.Date(2000, 1, 1)
    journey_id = test_journey.insert_journey_data(conn)
    steps_data = [
        {
            "gargling_id": 6,
            "amount": 17782
        },
        {
            "gargling_id": 2,
            "amount": 1152
        },
        {
            "gargling_id": 3,
            "amount": 17782
        },
        {
            "gargling_id": 5,
            "amount": 11
        },
    ]
    journey.store_steps(conn, steps_data, journey_id, date)

    date = date.add(days=1)
    steps_data = [
        {
            "gargling_id": 6,
            "amount": 17782
        },
        {
            "gargling_id": 2,
            "amount": 11521
        },
        {
            "gargling_id": 3,
            "amount": 6380
        },
        {
            "gargling_id": 5,
            "amount": 111
        },
    ]
    journey.store_steps(conn, steps_data, journey_id, date)

    achv = achievements.extract(
        query=queries.most_steps_one_day_individual,
        conn=conn,
        journey_id=journey_id,
        date=date,
        less_than=None,
    )
    assert achv is not None
    holders, value, prev_holders, prev_value = achv
    assert holders == [6]
    assert value == 17782
    assert prev_holders == {3, 6}
    assert prev_value is None
Exemplo n.º 6
0
def test_most_steps_one_day_collective_new_record(conn: connection):
    date = pendulum.Date(2000, 1, 1)
    journey_id = test_journey.insert_journey_data(conn)
    steps_data = [
        {
            "gargling_id": 6,
            "amount": 1778
        },
        {
            "gargling_id": 2,
            "amount": 1152
        },
        {
            "gargling_id": 3,
            "amount": 638
        },
        {
            "gargling_id": 5,
            "amount": 11
        },
    ]
    journey.store_steps(conn, steps_data, journey_id, date)

    date = date.add(days=1)
    steps_data = [
        {
            "gargling_id": 6,
            "amount": 17782
        },
        {
            "gargling_id": 2,
            "amount": 11521
        },
        {
            "gargling_id": 3,
            "amount": 6380
        },
        {
            "gargling_id": 5,
            "amount": 111
        },
    ]
    journey.store_steps(conn, steps_data, journey_id, date)

    achv = achievements.extract(
        query=queries.most_steps_one_day_collective,
        conn=conn,
        journey_id=journey_id,
        date=date,
    )
    assert achv is not None
    holders, value, prev_holders, prev_value = achv
    assert holders is None
    assert value == 35794
    assert prev_holders is None
    assert prev_value == 3579
Exemplo n.º 7
0
def test_highest_share_new_record(conn: connection):
    date = pendulum.Date(2000, 1, 1)
    journey_id = test_journey.insert_journey_data(conn)
    steps_data = [
        {
            "gargling_id": 6,
            "amount": 25
        },
        {
            "gargling_id": 2,
            "amount": 25
        },
        {
            "gargling_id": 3,
            "amount": 30
        },
        {
            "gargling_id": 5,
            "amount": 20
        },
    ]
    journey.store_steps(conn, steps_data, journey_id, date)

    date = date.add(days=1)
    steps_data = [
        {
            "gargling_id": 6,
            "amount": 5
        },
        {
            "gargling_id": 2,
            "amount": 5
        },
        {
            "gargling_id": 3,
            "amount": 5
        },
        {
            "gargling_id": 5,
            "amount": 85
        },
    ]
    journey.store_steps(conn, steps_data, journey_id, date)

    achv = achievements.extract(query=queries.highest_share,
                                conn=conn,
                                journey_id=journey_id,
                                date=date)
    assert achv is not None
    holders, value, prev_holders, prev_value = achv
    assert holders == [5]
    assert value == 85
    assert prev_holders == {3}
    assert prev_value == 30
Exemplo n.º 8
0
def test_store_steps(conn: connection):
    journey_id = insert_journey_data(conn)
    date = pendulum.Date(2013, 3, 31)
    data_in, _ = example_activity_data()
    journey.store_steps(conn, data_in, journey_id, date)
    data_out = journey.queries.get_steps(conn, journey_id=journey_id)
    data_out = [dict(d) for d in data_out]
    data_in.sort(key=itemgetter("gargling_id"))
    data_out.sort(key=itemgetter("gargling_id"))
    assert len(data_in) == len(data_out)
    for d_in, d_out in zip(data_in, data_out):
        d_out.pop("first_name")
        d_out.pop("color_hex")
        assert d_in == d_out
Exemplo n.º 9
0
def test_generate_all_maps(mock_activity, conn):
    steps_data, body_reports = example_activity_data()
    mock_activity.return_value = (steps_data, body_reports)
    journey_id = insert_journey_data(conn)
    start_date = pendulum.Date(2013, 3, 31)
    journey.queries.start_journey(conn, journey_id=journey_id, date=start_date)
    g_info = example_gargling_info()
    with api_mocker():
        journey.perform_daily_update(conn, journey_id, start_date, steps_data,
                                     g_info)
        cur_date = start_date.add(days=4)
        for date in journey.days_to_update(conn, journey_id, cur_date):
            steps_data, body_reports = example_activity_data()
            datum = journey.perform_daily_update(conn, journey_id, date,
                                                 steps_data, g_info)
            if datum is None:
                continue
            location, *_, finished = datum
            journey.store_update_data(conn, location, finished)
            journey.store_steps(conn, steps_data, journey_id, date)
    with patch("gargbot_3000.journey.mapping.render_map") as maps:
        maps.return_value = Image.new("RGB", (1000, 600), (255, 255, 255))
        mapping.generate_all_maps(conn, journey_id, write=False)
Exemplo n.º 10
0
def test_all(conn: connection):
    date = pendulum.Date(2000, 1, 1)
    journey_id = test_journey.insert_journey_data(conn)
    steps_data = [
        {
            "gargling_id": 6,
            "amount": 1778
        },
        {
            "gargling_id": 2,
            "amount": 1152
        },
        {
            "gargling_id": 3,
            "amount": 638
        },
        {
            "gargling_id": 5,
            "amount": 11
        },
    ]
    journey.store_steps(conn, steps_data, journey_id, date)

    date = date.add(days=1)
    steps_data = [
        {
            "gargling_id": 6,
            "amount": 17782
        },
        {
            "gargling_id": 2,
            "amount": 11521
        },
        {
            "gargling_id": 3,
            "amount": 6380
        },
        {
            "gargling_id": 5,
            "amount": 111
        },
    ]
    journey.store_steps(conn, steps_data, journey_id, date)

    date = date.add(days=1)
    steps_data = [
        {
            "gargling_id": 6,
            "amount": 7782
        },
        {
            "gargling_id": 2,
            "amount": 1521
        },
        {
            "gargling_id": 3,
            "amount": 380
        },
        {
            "gargling_id": 5,
            "amount": 20111
        },
    ]
    journey.store_steps(conn, steps_data, journey_id, date)

    achv = achievements.get_all_at_date(conn, journey_id=journey_id)

    assert achv is not None
    (
        most_d,
        second_most_d,
        third_most_d,
        most_collective_d,
        highest_share_d,
        improvement_d,
        improvement_collective_d,
        streak_d,
    ) = achv
    most_l = most_d["records"]
    assert len(most_l) == 1
    most = most_l[0]
    assert dict(most) == {
        "amount": 20111,
        "gargling_id": 5,
        "taken_at": pendulum.Date(2000, 1, 3),
    }
    second_most_l = second_most_d["records"]
    assert len(second_most_l) == 1
    second_most = second_most_l[0]
    assert dict(second_most) == {
        "amount": 17782,
        "gargling_id": 6,
        "taken_at": pendulum.Date(2000, 1, 2),
    }
    third_most_l = third_most_d["records"]
    assert len(third_most_l) == 1
    third_most = third_most_l[0]
    assert dict(third_most) == {
        "amount": 11521,
        "gargling_id": 2,
        "taken_at": pendulum.Date(2000, 1, 2),
    }
    most_collective_l = most_collective_d["records"]
    assert len(most_collective_l) == 1
    most_collective = most_collective_l[0]
    assert dict(most_collective) == {
        "amount": 35794,
        "taken_at": pendulum.Date(2000, 1, 2),
    }
    highest_share_l = highest_share_d["records"]
    assert len(highest_share_l) == 1
    highest_share = highest_share_l[0]
    assert dict(highest_share) == {
        "amount": 68,
        "gargling_id": 5,
        "taken_at": pendulum.Date(2000, 1, 3),
    }
    improvement_l = improvement_d["records"]
    assert len(improvement_l) == 1
    improvement = improvement_l[0]
    assert dict(improvement) == {
        "amount": 20000,
        "gargling_id": 5,
        "taken_at": pendulum.Date(2000, 1, 3),
    }
    improvement_collective_l = improvement_collective_d["records"]
    assert len(improvement_collective_l) == 1
    improvement_collective = improvement_collective_l[0]
    assert dict(improvement_collective) == {
        "amount": 32215,
        "taken_at": pendulum.Date(2000, 1, 2),
    }
    streak_l = streak_d["records"]
    assert len(streak_l) == 1
    streak = streak_l[0]
    assert dict(streak) == {
        "amount": 2,
        "gargling_id": 6,
        "taken_at": pendulum.Date(2000, 1, 2),
    }
Exemplo n.º 11
0
def test_longest_streak_new_record(conn: connection):
    date = pendulum.Date(2000, 1, 1)
    journey_id = test_journey.insert_journey_data(conn)
    journey.queries.start_journey(conn, journey_id=journey_id, date=date)
    steps_data = [
        {
            "gargling_id": 6,
            "amount": 1
        },
        {
            "gargling_id": 2,
            "amount": 2000
        },
        {
            "gargling_id": 3,
            "amount": 2000
        },
        {
            "gargling_id": 5,
            "amount": 1
        },
    ]
    journey.store_steps(conn, steps_data, journey_id, date)

    date = date.add(days=1)
    steps_data = [
        {
            "gargling_id": 6,
            "amount": 2000
        },
        {
            "gargling_id": 2,
            "amount": 2000
        },
        {
            "gargling_id": 3,
            "amount": 1
        },
        {
            "gargling_id": 5,
            "amount": 1
        },
    ]
    journey.store_steps(conn, steps_data, journey_id, date)

    date = date.add(days=1)
    steps_data = [
        {
            "gargling_id": 6,
            "amount": 2000
        },
        {
            "gargling_id": 2,
            "amount": 1
        },
        {
            "gargling_id": 3,
            "amount": 1
        },
        {
            "gargling_id": 5,
            "amount": 2000
        },
    ]
    journey.store_steps(conn, steps_data, journey_id, date)

    date = date.add(days=1)
    steps_data = [
        {
            "gargling_id": 6,
            "amount": 1
        },
        {
            "gargling_id": 2,
            "amount": 1
        },
        {
            "gargling_id": 3,
            "amount": 1
        },
        {
            "gargling_id": 5,
            "amount": 2000
        },
    ]
    journey.store_steps(conn, steps_data, journey_id, date)
    date = date.add(days=1)
    steps_data = [
        {
            "gargling_id": 6,
            "amount": 1
        },
        {
            "gargling_id": 2,
            "amount": 1
        },
        {
            "gargling_id": 3,
            "amount": 1
        },
        {
            "gargling_id": 5,
            "amount": 2000
        },
    ]
    journey.store_steps(conn, steps_data, journey_id, date)

    achv = achievements.extract(query=queries.longest_streak,
                                conn=conn,
                                journey_id=journey_id,
                                date=date)
    assert achv is not None
    holders, value, prev_holders, prev_value = achv
    assert holders == [5]
    assert value == 3
    assert prev_holders == {2, 5, 6}
    assert prev_value == 2
Exemplo n.º 12
0
def test_biggest_improvement_individual_new_record(conn: connection):
    date = pendulum.Date(2000, 1, 1)
    journey_id = test_journey.insert_journey_data(conn)
    steps_data = [
        {
            "gargling_id": 6,
            "amount": 1778
        },
        {
            "gargling_id": 2,
            "amount": 1152
        },
        {
            "gargling_id": 3,
            "amount": 638
        },
        {
            "gargling_id": 5,
            "amount": 11
        },
    ]
    journey.store_steps(conn, steps_data, journey_id, date)

    date = date.add(days=1)
    steps_data = [
        {
            "gargling_id": 6,
            "amount": 17782
        },
        {
            "gargling_id": 2,
            "amount": 11521
        },
        {
            "gargling_id": 3,
            "amount": 6380
        },
        {
            "gargling_id": 5,
            "amount": 111
        },
    ]
    journey.store_steps(conn, steps_data, journey_id, date)

    date = date.add(days=1)
    steps_data = [
        {
            "gargling_id": 6,
            "amount": 7782
        },
        {
            "gargling_id": 2,
            "amount": 1521
        },
        {
            "gargling_id": 3,
            "amount": 380
        },
        {
            "gargling_id": 5,
            "amount": 20111
        },
    ]
    journey.store_steps(conn, steps_data, journey_id, date)

    achv = achievements.extract(
        query=queries.biggest_improvement_individual,
        conn=conn,
        journey_id=journey_id,
        date=date,
    )
    assert achv is not None
    holders, value, prev_holders, prev_value = achv
    assert holders == [5]
    assert value == 20000
    assert prev_holders == {6}
    assert prev_value == 16004