def test_passage_taxi_export(self, payload_version: PayloadVersion): baker.make( 'passage.PassageHourAggregation', count=2, taxi_indicator=True, _quantity=500, ) # first post a record api_version = to_api_version(payload_version) url = reverse(f'{api_version}:passage-export-taxi') response = self.client.get(url) assert response.status_code == 200 date = datetime.now().strftime("%Y-%m-%d") lines = [line for line in response.streaming_content] assert lines == [ b'datum,aantal_taxi_passages\r\n', f'{date},1000\r\n'.encode() ]
def test_passage_export_filters(self, payload_version: PayloadVersion): date = datetime.fromisocalendar(2019, 11, 1) # create data for 3 cameras baker.make( 'passage.PassageHourAggregation', camera_id=cycle(range(1, 4)), camera_naam=cycle(f'Camera: {i}' for i in range(1, 4)), date=date, year=date.year, week=date.isocalendar()[1], hour=1, _quantity=100, ) api_version = to_api_version(payload_version) url = reverse(f'{api_version}:passage-export') response = self.client.get(url, dict(year=2019, week=12), HTTP_AUTHORIZATION='Token foo') assert response.status_code == 200 lines = [x for x in response.streaming_content] assert len(lines) == 0 response = self.client.get(url, dict(year=2019, week=11), HTTP_AUTHORIZATION='Token foo') assert response.status_code == 200 lines = [x for x in response.streaming_content] # Expect the header and 3 lines assert len(lines) == 4 response = self.client.get(url, dict(year=2019), HTTP_AUTHORIZATION='Token foo') assert response.status_code == 200 lines = [x for x in response.streaming_content] # Expect the header and 3 lines assert len(lines) == 4
def test_passage_export_no_filters(self, payload_version: PayloadVersion): reading_count = 4 camera_count = 3 readings_per_camera = 2 now = datetime.now() today = datetime(now.year, now.month, now.day) # Get the first day of the week; 2 weeks ago start_date = today - timedelta(days=now.weekday(), weeks=2) # Fill 3 weeks of data to ensure our export will only get the # previous week for day in range(7 * 3): # Generate 24 hours of data for hour in range(24): date = start_date + timedelta(days=day, hours=hour) # Generate multiple records per camera for i in range(camera_count): num = i % camera_count + 1 baker.make( 'passage.PassageHourAggregation', camera_id=num, camera_naam=f'Camera: {num}', count=reading_count, date=date, year=date.year, week=date.isocalendar()[1], hour=date.hour, taxi_indicator=True, _quantity=readings_per_camera, ) # first post a record api_version = to_api_version(payload_version) url = reverse(f'{api_version}:passage-export') response = self.client.get(url, HTTP_AUTHORIZATION='Token foo') assert response.status_code == 200 lines = [line.decode() for line in response.streaming_content] content = list(csv.reader(lines)) header = content.pop(0) assert header == ['camera_id', 'camera_naam', 'bucket', 'sum'] assert len(content) == 7 * 24 * camera_count expected_content = [] previous_week = today - timedelta(days=now.weekday(), weeks=1) for day in range(7): for hour in range(24): expected_datetime = previous_week + timedelta(days=day, hours=hour) for camera in range(camera_count): camera += 1 expected_row = [ str(camera), f'Camera: {camera}', expected_datetime.strftime('%Y-%m-%d %H:%M:%S'), str(reading_count * readings_per_camera), ] expected_content.append(tuple(expected_row)) content = set(map(tuple, content)) expected_content = set(map(tuple, expected_content)) assert set(expected_content) == set(content)
def test_passage_export_wrong_auth(self, payload_version: PayloadVersion): api_version = to_api_version(payload_version) url = reverse(f'{api_version}:passage-export') response = self.client.get(url, HTTP_AUTHORIZATION='Token bar') assert response.status_code == status.HTTP_401_UNAUTHORIZED