Ejemplo n.º 1
0
async def test_new_visits(user):
    now = datetime(2018, 2, 23)
    yesterday = datetime(2018, 2, 22)
    last_month = datetime(2018, 1, 14)
    await Visit.create(
        account_id=user.id,
        path='/one',
        date=yesterday,
        cookie=uuid4(),
    )
    await Visit.create(
        account_id=user.id,
        path='/one',
        date=now,
        cookie=uuid4(),
    )
    await Visit.create(
        account_id=user.id,
        path='/two',
        date=last_month,
        cookie=uuid4(),
    )
    _, new_visits_count = await new_visits(
        user.id, *get_start_end_dates(now.date(), 'day'))
    assert new_visits_count == 1
    _, new_visits_count = await new_visits(
        user.id, *get_start_end_dates(now.date(), 'month'))
    assert new_visits_count == 2
Ejemplo n.º 2
0
async def test_hits(user, admin):
    now = datetime(2018, 2, 23)
    yesterday = datetime(2018, 2, 22)
    await Visit.create(account_id=user.id,
                       path='/one',
                       date=yesterday,
                       cookie=uuid4())
    await Visit.create(account_id=user.id,
                       path='/one',
                       date=now,
                       cookie=uuid4())
    await Visit.create(account_id=user.id,
                       path='/two',
                       date=now,
                       cookie=uuid4())
    await Visit.create(account_id=admin.id,
                       path='/three',
                       date=now,
                       cookie=uuid4())
    # user
    _, hits_count = await hits(user.id,
                               *get_start_end_dates(now.date(), 'day'))
    assert hits_count == 2
    _, hits_count = await hits(user.id,
                               *get_start_end_dates(now.date(), 'month'))
    assert hits_count == 3
    # admin
    _, hits_count = await hits(admin.id,
                               *get_start_end_dates(now.date(), 'day'))
    assert hits_count == 1
    _, hits_count = await hits(admin.id,
                               *get_start_end_dates(now.date(), 'month'))
    assert hits_count == 1
Ejemplo n.º 3
0
async def test_paths(user, admin):
    now = datetime(2018, 2, 23)
    yesterday = datetime(2018, 2, 22)
    cookie1 = uuid4()
    cookie2 = uuid4()
    await Visit.create(
        account_id=user.id,
        path='/one',
        date=yesterday,
        cookie=cookie2,
    )
    await Visit.create(
        account_id=user.id,
        path='/one',
        date=now,
        cookie=cookie1,
    )
    await Visit.create(
        account_id=user.id,
        path='/one',
        date=now,
        cookie=cookie2,
    )
    await Visit.create(
        account_id=user.id,
        path='/two',
        date=now,
        cookie=cookie1,
    )
    await Visit.create(
        account_id=user.id,
        path='/two',
        date=now,
        cookie=cookie2,
    )
    await Visit.create(
        account_id=user.id,
        path='/three',
        date=yesterday,
        cookie=cookie1,
    )
    _, paths_stat = await paths(user.id,
                                *get_start_end_dates(now.date(), 'day'))
    for stat in paths_stat:
        assert stat['path'] in ['/one', '/two']
        assert stat['_sum'] == 2
    _, paths_stat = await paths(user.id,
                                *get_start_end_dates(now.date(), 'month'))
    assert paths_stat == [
        dict(path='/one', _sum=3),
        dict(path='/two', _sum=2),
        dict(path='/three', _sum=1),
    ]
Ejemplo n.º 4
0
    async def get(self, request):
        form = VisitFilterForm(request.args)
        if not form.validate():
            return json(form.errors, 400)

        user = request['user']
        start_date, end_date = get_start_end_dates(
            form.date.data,
            form.filter_by.data
        )
        query = (
            Visit.query
            .where(Visit.date >= start_date)
            .where(Visit.date <= end_date)
            .where(Visit.account_id == user.id)
        )
        visits = await (
            query
            .offset(form.offset.data * form.limit.data)
            .limit(form.limit.data)
            .order_by(form.order_by.data)
            .gino.all()
        )
        total = await db.alias(query, 'cnt').count().gino.scalar()
        return json(
            {
                'data': (v.to_dict() for v in visits),
                'total': total,
            },
            status=200,
        )
Ejemplo n.º 5
0
async def test_last_day_of_year(user):
    now = datetime(2018, 12, 31, 12, 30)
    cookie = uuid4()
    await Visit.create(
        account_id=user.id,
        path='/one',
        date=now,
        cookie=cookie,
    )
    _, paths_stat = await paths(user.id,
                                *get_start_end_dates(now.date(), 'year'))
    assert paths_stat == [
        dict(path='/one', _sum=1),
    ]
Ejemplo n.º 6
0
async def statistic(request):
    form = StatisticFilterForm(request.args)
    if not form.validate():
        return json(form.errors, 400)

    user = request['user']
    start_date, end_date = get_start_end_dates(form.date.data,
                                               form.filter_by.data)
    tasks = [
        hits(user.id, start_date, end_date),
        visits(user.id, start_date, end_date),
        new_visits(user.id, start_date, end_date),
        paths(user.id, start_date, end_date),
    ]
    results = await asyncio.gather(*tasks)
    data = dict(results)
    return json(data)