Skip to content

Commit dcf344b

Browse files
committed
fix and test most recent week
1 parent 88ee905 commit dcf344b

2 files changed

Lines changed: 40 additions & 6 deletions

File tree

subscribe_util.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
from itsdangerous import URLSafeTimedSerializer
77
from itsdangerous.exc import BadSignature
88

9+
from typing import Dict
10+
911
from util import get_period_stats
1012
from config import SECRET_KEY, FROM_ADDRESS
1113

@@ -75,18 +77,17 @@ def save_confirmed_subscription(username, email):
7577
print('Added subscription', subscription_details)
7678

7779

78-
def get_most_recent_period(period_name):
80+
def get_most_recent_period(period_name: str) -> Dict[str, int]:
7981
today = datetime.date.today()
8082
if period_name == 'year':
8183
return dict(year=today.year - 1)
8284
if period_name == 'month':
8385
d = today - relativedelta(months=1)
8486
return dict(year=d.year, month=d.month)
8587
if period_name == 'week':
86-
# Get date of monday of the requested weeknumber. (ISO 8601)
87-
monday_this_week = datetime.datetime.strptime(f"{today.year} {today.strftime('%W')} 1", "%G %V %w")
88-
monday_last_week = monday_this_week - relativedelta(weeks=1)
89-
return dict(year=monday_last_week.year, week=monday_last_week.strftime("%W"))
88+
today_last_week = today - relativedelta(weeks=1)
89+
return dict(year=int(today_last_week.strftime("%G")), week=int(today_last_week.strftime("%V")))
90+
raise NotImplementedError(f'Unknown {period_name=}')
9091

9192

9293
def get_period_str(period_dict):

tests.py

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
import unittest
22
import re
33

4+
from freezegun import freeze_time
5+
46
from scrape import username_regex
7+
from subscribe_util import get_most_recent_period
58

69

710
class TestUserName(unittest.TestCase):
@@ -22,5 +25,35 @@ def test_username_regex(self):
2225
self.assertEqual(re.match(username_regex, username) is not None, valid)
2326

2427

25-
if __name__ == '__main__':
28+
class TestMostRecentWeeknumber(unittest.TestCase):
29+
@freeze_time('2024-12-24')
30+
def test_weeknumber_51(self):
31+
period = get_most_recent_period("week")
32+
year, week = period['year'], period['week']
33+
assert year == 2024, year
34+
assert week == 51, week
35+
36+
@freeze_time('2024-12-31')
37+
def test_weeknumber_52(self):
38+
period = get_most_recent_period("week")
39+
year, week = period['year'], period['week']
40+
assert year == 2024, year
41+
assert week == 52, week
42+
43+
@freeze_time('2025-01-07')
44+
def test_weeknumber_1(self):
45+
period = get_most_recent_period("week")
46+
year, week = period['year'], period['week']
47+
assert year == 2025, year
48+
assert week == 1, week
49+
50+
@freeze_time('2025-01-14')
51+
def test_weeknumber_2(self):
52+
period = get_most_recent_period("week")
53+
year, week = period['year'], period['week']
54+
assert year == 2025, year
55+
assert week == 2, week
56+
57+
58+
if __name__ == "__main__":
2659
unittest.main()

0 commit comments

Comments
 (0)