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
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
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), ]
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, )
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), ]
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)