def test_with_factory(self): serializer = DateRangeSerializer() data = DateRangeFactory.create() date_range, errors = serializer.load(data) assert date_range[0].utcoffset() == tz_now().utcoffset() assert date_range[1].utcoffset() == tz_now().utcoffset() delta = date_range[1] - date_range[0] assert delta.total_seconds() == 3600 * 24 * 7 - 0.000001
def test_get(self): week_beg = week_beginning(tz_now()) date_range = DateRangeFactory(beg=week_beg.isoformat()) client = ClientFactory.create() time_entries = [] for day in range(7): time_entries.append( TimeEntryFactory.create(task__project__client=client, added_at=week_beg + datetime.timedelta(days=day))) task = TaskFactory.create(project__client=client) for day in range(7): time_entries.append( TimeEntryFactory.create( task=task, duration=datetime.timedelta(minutes=30), added_at=week_beg + datetime.timedelta(days=day))) self.db.session.commit() timesheet = TimeSheet(client.id, date_range) result = timesheet.get() assert result['client']['name'] == client.name assert result['date_range']['beg'] == week_beg.isoformat() assert len(result['projects']) == 8 total_1 = sum((item.duration for item in time_entries), datetime.timedelta()).total_seconds() total_2 = sum(project['total'] for project in result['projects']) total_3 = sum(result['totals']['time']) total_4 = result['totals']['total'] assert total_1 == total_2 == total_3 == total_4
def test_localize(self): dt = datetime.datetime(2016, 4, 11, 12, 12, 0, tzinfo=datetime.timezone.utc) dt_loc = date.localize(dt) assert dt_loc.utcoffset() == date.tz_now().utcoffset()
def test_serialization(self): week_beg = week_beginning(tz_now()) week_end = arrow.get(week_beg).ceil('week').datetime date_range = { 'beg': week_beg, 'end': week_end, } serializer = DateRangeSerializer(strict=True) data = serializer.dump(date_range).data date_range = serializer.load(data).data assert date_range == (week_beg, week_end)
def test_serialization(self): user = User() week_beg = week_beginning(tz_now()) client = ClientFactory.create() time_entries = [] for day in range(7): time_entries.append(TimeEntryFactory.create( task__project__client=client, added_at=week_beg + datetime.timedelta(days=day))) self.db.session.commit() result = user.serialize() assert result['name'] == settings.USER_NAME assert result['open_tasks'] == 7 total_week = sum((item.duration for item in time_entries), datetime.timedelta()).total_seconds() assert result['total_week'] == total_week assert any(item.duration.total_seconds() == result['total_today'] for item in time_entries)
def test_get_report(self): week_beg = week_beginning(tz_now()) date_range = DateRangeFactory.create(beg=week_beg.isoformat()) client = ClientFactory.create() time_entry = TimeEntryFactory.create(task__project__client=client, added_at=week_beg) self.db.session.commit() url = url_for('client_api.report', client_id=client.id) response = self.client.get(url, query_string=date_range) assert response.status_code == 200 assert 'report' in response.json report = response.json['report'] assert report['client']['id'] == client.id assert len(report['projects']) == 1 assert report['total'] == time_entry.duration.total_seconds() url = url_for('client_api.report', client_id=0) response = self.client.get(url) assert response.status_code == 404
def beg(self): return week_beginning(tz_now()).isoformat()
def test_localize(self): dt = datetime.datetime(2016, 4, 11, 12, 12, 0, tzinfo=datetime.timezone.utc) dt_loc = date.localize(dt) assert dt_loc.utcoffset() == date.tz_now().utcoffset()
def test_tz_now(self): now = date.tz_now() assert now.tzinfo is not None
def make_time_entry(self, data): if 'id' not in data: data['added_at'] = tz_now() return TimeEntry(**data)
def total_week(self): week_beg = arrow.get(tz_now()).floor('week').datetime week_end = arrow.get(week_beg).ceil('week').datetime query = db.session.query(func.sum(TimeEntry.duration)).\ filter(between(TimeEntry.added_at, week_beg, week_end)) return query.scalar()
def total_week(self): week_beg = arrow.get(tz_now()).floor('week').datetime week_end = arrow.get(week_beg).ceil('week').datetime query = db.session.query(func.sum(TimeEntry.duration)).\ filter(between(TimeEntry.added_at, week_beg, week_end)) return query.scalar()
def make_task(self, data): if 'id' not in data: data['created_at'] = tz_now() data['updated_at'] = tz_now() return Task(**data)
def total_today(self): day_beg = arrow.get(tz_now()).floor('day').datetime day_end = arrow.get(day_beg).ceil('day').datetime query = db.session.query(func.sum(TimeEntry.duration)).\ filter(between(TimeEntry.added_at, day_beg, day_end)) return query.scalar()
def total_today(self): day_beg = arrow.get(tz_now()).floor('day').datetime day_end = arrow.get(day_beg).ceil('day').datetime query = db.session.query(func.sum(TimeEntry.duration)).\ filter(between(TimeEntry.added_at, day_beg, day_end)) return query.scalar()
def make_time_entry(self, data): if 'id' not in data: data['added_at'] = tz_now() return TimeEntry(**data)
def make_task(self, data): if 'id' not in data: data['created_at'] = tz_now() data['updated_at'] = tz_now() return Task(**data)
def test_tz_now(self): now = date.tz_now() assert now.tzinfo is not None