From b62ee8380c81a37d5cc6fa0234140cbaf0ce00d3 Mon Sep 17 00:00:00 2001 From: Rebecca Law Date: Tue, 25 Jul 2017 17:38:53 +0100 Subject: [PATCH] Use BST to calculate monthly billing --- app/dao/date_util.py | 4 +++- tests/app/dao/test_date_utils.py | 19 ++++++++++--------- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/app/dao/date_util.py b/app/dao/date_util.py index 41ad9dc72..8019fdecc 100644 --- a/app/dao/date_util.py +++ b/app/dao/date_util.py @@ -2,6 +2,8 @@ from datetime import datetime, timedelta import pytz +from app.utils import convert_bst_to_utc + def get_financial_year(year): return get_april_fools(year), get_april_fools(year + 1) - timedelta(microseconds=1) @@ -28,4 +30,4 @@ def get_month_start_end_date(month_year): _, num_days = calendar.monthrange(month_year.year, month_year.month) first_day = datetime(month_year.year, month_year.month, 1, 0, 0, 0) last_day = datetime(month_year.year, month_year.month, num_days, 23, 59, 59, 99999) - return first_day, last_day + return convert_bst_to_utc(first_day), convert_bst_to_utc(last_day) diff --git a/tests/app/dao/test_date_utils.py b/tests/app/dao/test_date_utils.py index 4ede18853..5267f4a06 100644 --- a/tests/app/dao/test_date_utils.py +++ b/tests/app/dao/test_date_utils.py @@ -17,14 +17,15 @@ def test_get_april_fools(): assert april_fools.tzinfo is None -@pytest.mark.parametrize("month, year, expected_end", - [(7, 2017, 31), - (2, 2016, 29), - (2, 2017, 28), - (9, 2018, 30), - (12, 2019, 31)]) -def test_get_month_start_end_date(month, year, expected_end): +@pytest.mark.parametrize("month, year, expected_start, expected_end", + [ + (7, 2017, datetime(2017, 6, 30, 23, 00, 00), datetime(2017, 7, 31, 22, 59, 59, 99999)), + (2, 2016, datetime(2016, 2, 1, 00, 00, 00), datetime(2016, 2, 29, 23, 59, 59, 99999)), + (2, 2017, datetime(2017, 2, 1, 00, 00, 00), datetime(2017, 2, 28, 23, 59, 59, 99999)), + (9, 2018, datetime(2018, 8, 31, 23, 00, 00), datetime(2018, 9, 30, 22, 59, 59, 99999)), + (12, 2019, datetime(2019, 12, 1, 00, 00, 00), datetime(2019, 12, 31, 23, 59, 59, 99999))]) +def test_get_month_start_end_date(month, year, expected_start, expected_end): month_year = datetime(year, month, 10, 13, 30, 00) result = get_month_start_end_date(month_year) - assert result[0] == datetime(year, month, 1, 0, 0, 0, 0) - assert result[1] == datetime(year, month, expected_end, 23, 59, 59, 99999) + assert result[0] == expected_start + assert result[1] == expected_end