def test_fetch_notification_status_for_service_for_day(notify_db_session): service_1 = create_service(service_name='service_1') service_2 = create_service(service_name='service_2') create_template(service=service_1) create_template(service=service_2) # too early create_notification(service_1.templates[0], created_at=datetime(2018, 5, 31, 22, 59, 0)) # included create_notification(service_1.templates[0], created_at=datetime(2018, 5, 31, 23, 0, 0)) create_notification(service_1.templates[0], created_at=datetime(2018, 6, 1, 22, 59, 0)) create_notification(service_1.templates[0], created_at=datetime(2018, 6, 1, 12, 0, 0), key_type=KEY_TYPE_TEAM) create_notification(service_1.templates[0], created_at=datetime(2018, 6, 1, 12, 0, 0), status='delivered') # test key create_notification(service_1.templates[0], created_at=datetime(2018, 6, 1, 12, 0, 0), key_type=KEY_TYPE_TEST) # wrong service create_notification(service_2.templates[0], created_at=datetime(2018, 6, 1, 12, 0, 0)) # tomorrow (somehow) create_notification(service_1.templates[0], created_at=datetime(2018, 6, 1, 23, 0, 0)) results = sorted(fetch_notification_status_for_service_for_day( datetime(2018, 6, 1), service_1.id), key=lambda x: x.notification_status) assert len(results) == 2 assert results[0].month == datetime(2018, 6, 1, 0, 0) assert results[0].notification_type == 'sms' assert results[0].notification_status == 'created' assert results[0].count == 3 assert results[1].month == datetime(2018, 6, 1, 0, 0) assert results[1].notification_type == 'sms' assert results[1].notification_status == 'delivered' assert results[1].count == 1
def get_monthly_notification_stats(service_id): # check service_id validity dao_fetch_service_by_id(service_id) try: year = int(request.args.get('year', 'NaN')) except ValueError: raise InvalidRequest('Year must be a number', status_code=400) start_date, end_date = get_financial_year(year) data = statistics.create_empty_monthly_notification_status_stats_dict(year) stats = fetch_notification_status_for_service_by_month(start_date, end_date, service_id) statistics.add_monthly_notification_status_stats(data, stats) now = datetime.utcnow() if end_date > now: todays_deltas = fetch_notification_status_for_service_for_day(convert_utc_to_bst(now), service_id=service_id) statistics.add_monthly_notification_status_stats(data, todays_deltas) return jsonify(data=data)