コード例 #1
0
ファイル: rest.py プロジェクト: Djuka/notifications-api-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)
コード例 #2
0
def test_add_monthly_notification_status_stats():
    row_data = [
        {
            'month': datetime(2018, 4, 1),
            'notification_type': 'sms',
            'notification_status': 'sending',
            'count': 1
        },
        {
            'month': datetime(2018, 4, 1),
            'notification_type': 'sms',
            'notification_status': 'delivered',
            'count': 2
        },
        {
            'month': datetime(2018, 4, 1),
            'notification_type': 'email',
            'notification_status': 'sending',
            'count': 4
        },
        {
            'month': datetime(2018, 5, 1),
            'notification_type': 'sms',
            'notification_status': 'sending',
            'count': 8
        },
    ]
    rows = []
    for r in row_data:
        m = Mock(spec=[])
        for k, v in r.items():
            setattr(m, k, v)
        rows.append(m)

    data = create_empty_monthly_notification_status_stats_dict(2018)
    # this data won't be affected
    data['2018-05']['email']['sending'] = 32

    # this data will get combined with the 8 from row_data
    data['2018-05']['sms']['sending'] = 16

    add_monthly_notification_status_stats(data, rows)

    assert data == {
        '2018-04': {
            'sms': {
                'sending': 1,
                'delivered': 2
            },
            'email': {
                'sending': 4
            },
            'letter': {}
        },
        '2018-05': {
            'sms': {
                'sending': 24
            },
            'email': {
                'sending': 32
            },
            'letter': {}
        },
        '2018-06': {
            'sms': {},
            'email': {},
            'letter': {}
        },
    }
コード例 #3
0
def test_create_empty_monthly_notification_status_stats_dict(
        year, expected_years):
    output = create_empty_monthly_notification_status_stats_dict(year)
    assert sorted(output.keys()) == expected_years
    for v in output.values():
        assert v == {'sms': {}, 'email': {}, 'letter': {}}