fix api statistics to account for letters

This commit is contained in:
Leo Hemsted
2017-01-31 11:32:53 +00:00
parent 1650fb0807
commit 3cd8605e11
2 changed files with 37 additions and 19 deletions

View File

@@ -1,7 +1,7 @@
import itertools import itertools
from datetime import datetime, timedelta from datetime import datetime, timedelta
from app.models import EMAIL_TYPE, SMS_TYPE from app.models import TEMPLATE_TYPES
def format_statistics(statistics): def format_statistics(statistics):
@@ -33,7 +33,7 @@ def create_zeroed_stats_dicts():
return { return {
template_type: { template_type: {
status: 0 for status in ('requested', 'delivered', 'failed') status: 0 for status in ('requested', 'delivered', 'failed')
} for template_type in (EMAIL_TYPE, SMS_TYPE) } for template_type in TEMPLATE_TYPES
} }

View File

@@ -16,24 +16,25 @@ WeeklyStatsRow = collections.namedtuple('row', ('notification_type', 'status', '
# email_counts and sms_counts are 3-tuple of requested, delivered, failed # email_counts and sms_counts are 3-tuple of requested, delivered, failed
@pytest.mark.idparametrize('stats, email_counts, sms_counts', { @pytest.mark.idparametrize('stats, email_counts, sms_counts, letter_counts', {
'empty': ([], [0, 0, 0], [0, 0, 0]), 'empty': ([], [0, 0, 0], [0, 0, 0], [0, 0, 0]),
'always_increment_requested': ([ 'always_increment_requested': ([
StatsRow('email', 'delivered', 1), StatsRow('email', 'delivered', 1),
StatsRow('email', 'failed', 1) StatsRow('email', 'failed', 1)
], [2, 1, 1], [0, 0, 0]), ], [2, 1, 1], [0, 0, 0], [0, 0, 0]),
'dont_mix_email_and_sms': ([ 'dont_mix_template_types': ([
StatsRow('email', 'delivered', 1), StatsRow('email', 'delivered', 1),
StatsRow('sms', 'delivered', 1) StatsRow('sms', 'delivered', 1),
], [1, 1, 0], [1, 1, 0]), StatsRow('letter', 'delivered', 1)
], [1, 1, 0], [1, 1, 0], [1, 1, 0]),
'convert_fail_statuses_to_failed': ([ 'convert_fail_statuses_to_failed': ([
StatsRow('email', 'failed', 1), StatsRow('email', 'failed', 1),
StatsRow('email', 'technical-failure', 1), StatsRow('email', 'technical-failure', 1),
StatsRow('email', 'temporary-failure', 1), StatsRow('email', 'temporary-failure', 1),
StatsRow('email', 'permanent-failure', 1), StatsRow('email', 'permanent-failure', 1),
], [4, 0, 4], [0, 0, 0]), ], [4, 0, 4], [0, 0, 0], [0, 0, 0]),
}) })
def test_format_statistics(stats, email_counts, sms_counts): def test_format_statistics(stats, email_counts, sms_counts, letter_counts):
ret = format_statistics(stats) ret = format_statistics(stats)
@@ -49,6 +50,12 @@ def test_format_statistics(stats, email_counts, sms_counts):
in zip(['requested', 'delivered', 'failed'], sms_counts) in zip(['requested', 'delivered', 'failed'], sms_counts)
} }
assert ret['letter'] == {
status: count
for status, count
in zip(['requested', 'delivered', 'failed'], letter_counts)
}
@pytest.mark.parametrize('start,end,dates', [ @pytest.mark.parametrize('start,end,dates', [
(datetime(2016, 7, 25), datetime(2016, 7, 25), [datetime(2016, 7, 25)]), (datetime(2016, 7, 25), datetime(2016, 7, 25), [datetime(2016, 7, 25)]),
@@ -66,6 +73,7 @@ def test_create_zeroed_stats_dicts():
assert create_zeroed_stats_dicts() == { assert create_zeroed_stats_dicts() == {
'sms': {'requested': 0, 'delivered': 0, 'failed': 0}, 'sms': {'requested': 0, 'delivered': 0, 'failed': 0},
'email': {'requested': 0, 'delivered': 0, 'failed': 0}, 'email': {'requested': 0, 'delivered': 0, 'failed': 0},
'letter': {'requested': 0, 'delivered': 0, 'failed': 0},
} }
@@ -79,43 +87,51 @@ def _stats(requested, delivered, failed):
(datetime(2016, 7, 28), [], { (datetime(2016, 7, 28), [], {
datetime(2016, 7, 25): { datetime(2016, 7, 25): {
'sms': _stats(0, 0, 0), 'sms': _stats(0, 0, 0),
'email': _stats(0, 0, 0) 'email': _stats(0, 0, 0),
'letter': _stats(0, 0, 0)
} }
}), }),
# with a random created time, still create the dict for midnight # with a random created time, still create the dict for midnight
(datetime(2016, 7, 28, 12, 13, 14), [], { (datetime(2016, 7, 28, 12, 13, 14), [], {
datetime(2016, 7, 25, 0, 0, 0): { datetime(2016, 7, 25, 0, 0, 0): {
'sms': _stats(0, 0, 0), 'sms': _stats(0, 0, 0),
'email': _stats(0, 0, 0) 'email': _stats(0, 0, 0),
'letter': _stats(0, 0, 0)
} }
}), }),
# with no stats but a service # with no stats but a service
(datetime(2016, 7, 14), [], { (datetime(2016, 7, 14), [], {
datetime(2016, 7, 11): { datetime(2016, 7, 11): {
'sms': _stats(0, 0, 0), 'sms': _stats(0, 0, 0),
'email': _stats(0, 0, 0) 'email': _stats(0, 0, 0),
'letter': _stats(0, 0, 0)
}, },
datetime(2016, 7, 18): { datetime(2016, 7, 18): {
'sms': _stats(0, 0, 0), 'sms': _stats(0, 0, 0),
'email': _stats(0, 0, 0) 'email': _stats(0, 0, 0),
'letter': _stats(0, 0, 0)
}, },
datetime(2016, 7, 25): { datetime(2016, 7, 25): {
'sms': _stats(0, 0, 0), 'sms': _stats(0, 0, 0),
'email': _stats(0, 0, 0) 'email': _stats(0, 0, 0),
'letter': _stats(0, 0, 0)
} }
}), }),
# two stats for same week dont re-zero each other # two stats for same week dont re-zero each other
(datetime(2016, 7, 21), [ (datetime(2016, 7, 21), [
WeeklyStatsRow('email', 'created', datetime(2016, 7, 18), 1), WeeklyStatsRow('email', 'created', datetime(2016, 7, 18), 1),
WeeklyStatsRow('sms', 'created', datetime(2016, 7, 18), 1), WeeklyStatsRow('sms', 'created', datetime(2016, 7, 18), 1),
WeeklyStatsRow('letter', 'created', datetime(2016, 7, 18), 1),
], { ], {
datetime(2016, 7, 18): { datetime(2016, 7, 18): {
'sms': _stats(1, 0, 0), 'sms': _stats(1, 0, 0),
'email': _stats(1, 0, 0) 'email': _stats(1, 0, 0),
'letter': _stats(1, 0, 0)
}, },
datetime(2016, 7, 25): { datetime(2016, 7, 25): {
'sms': _stats(0, 0, 0), 'sms': _stats(0, 0, 0),
'email': _stats(0, 0, 0) 'email': _stats(0, 0, 0),
'letter': _stats(0, 0, 0)
} }
}), }),
# two stats for same type are added together # two stats for same type are added together
@@ -126,11 +142,13 @@ def _stats(requested, delivered, failed):
], { ], {
datetime(2016, 7, 18): { datetime(2016, 7, 18): {
'sms': _stats(2, 1, 0), 'sms': _stats(2, 1, 0),
'email': _stats(0, 0, 0) 'email': _stats(0, 0, 0),
'letter': _stats(0, 0, 0)
}, },
datetime(2016, 7, 25): { datetime(2016, 7, 25): {
'sms': _stats(1, 0, 0), 'sms': _stats(1, 0, 0),
'email': _stats(0, 0, 0) 'email': _stats(0, 0, 0),
'letter': _stats(0, 0, 0)
} }
}) })
]) ])