Skip to content

Commit 240f79c

Browse files
committed
fixed tests
1 parent 97d740d commit 240f79c

File tree

6 files changed

+71
-13
lines changed

6 files changed

+71
-13
lines changed

db/sqlite.py

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,16 @@ def add_subscription(self, conn, email, topic, publisher_id, joined_time=None, o
201201
logger.info(f"Subscription for {email} already exists")
202202
return sub['id']
203203

204-
204+
def update_subscription_last_notified(self, conn, email):
205+
logger.info(f"Updating subscription: {email}")
206+
c = conn.cursor()
207+
c.execute("""
208+
UPDATE subscriptions
209+
SET last_notified_at = CURRENT_TIMESTAMP
210+
WHERE email = ?
211+
""", (email, ))
212+
213+
logger.info(f"Subscription's {email} last notified updated to current time")
205214

206215
def remove_subscription(self, conn, id):
207216
c = conn.cursor()
@@ -233,10 +242,11 @@ def get_notifications_by_email(self, conn, email):
233242

234243
def get_notifications_by_email_and_url(self, conn, email, url):
235244
c = conn.cursor()
245+
236246
c.execute("""
237247
SELECT *
238248
FROM notifications
239-
WHERE email = ? and post_url = ? and deleted=0
249+
WHERE email = ? and post_url = ?
240250
""", (email,url))
241251
row = c.fetchone()
242252
return dict(row) if row else None

scrape_pubs.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from datetime import datetime, timedelta
1+
from datetime import datetime, timezone
22
from db import enums
33
from handlers import ScraperFactory # maps company -> handler class
44
from db import get_database
@@ -68,7 +68,7 @@ def scrape_pubs(db, conn):
6868

6969
db.add_post(conn, post['url'], post['title'], publisher['id'], tags, post['published'], category)
7070

71-
publisher["last_scraped_at"] = datetime.now().isoformat()
71+
publisher["last_scraped_at"] = datetime.now(timezone.utc).isoformat()
7272
db.update_publisher(conn, publisher["id"], publisher["last_scraped_at"])
7373
conn.commit()
7474
except Exception as e:

send_notifications.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,8 +92,14 @@ def leave_unmature_notifications(notifications):
9292
"""Remove duplicates based on (email, heading, post_url)."""
9393
matured = []
9494
for row in notifications:
95-
if datetime.fromisoformat(row['maturity_date']) <= datetime.now():
95+
maturity_dt = datetime.fromisoformat(row['maturity_date'])
96+
97+
if maturity_dt.tzinfo is None:
98+
maturity_dt = maturity_dt.replace(tzinfo=timezone.utc)
99+
100+
if maturity_dt <= datetime.now(timezone.utc):
96101
matured.append(row)
102+
97103
return matured
98104

99105
def process_notifications(db, conn):
@@ -175,10 +181,12 @@ def process_notifications(db, conn):
175181

176182
for notification in notifications_for_email:
177183
logger.info(f"Deleting notification for email: {email} and post url: {notification['post_url']}")
178-
184+
179185
for notification in notifications_for_email:
180186
db.delete_notification(conn, email, notification['post_url'])
181187
conn.commit()
188+
189+
db.update_subscription_last_notified(conn, email)
182190

183191
if __name__ == "__main__":
184192
db = get_database()

tests/e2e/test_e2e.py

Lines changed: 42 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import pytest
22
from db import enums
3-
import os
4-
from datetime import datetime
3+
import time
4+
from datetime import datetime, timezone
55
from scrape_pubs import scrape_pubs
66
from notify import notify
77
from send_notifications import process_notifications
@@ -59,7 +59,47 @@ def test_scrape_pubs_techteams(db, dummy_smtp):
5959
assert notification['post_title'] == post['title']
6060
assert notification['deleted'] == 0
6161

62+
beforeprocesstime = datetime.now(timezone.utc)
63+
64+
time.sleep(1)
65+
6266
process_notifications(db, conn)
67+
68+
notifications = db.get_notifications_by_email(conn, "newemail2@gmail.com")
69+
70+
assert len(notifications) == 1
71+
notification = notifications[0]
72+
assert notification['email'] == "newemail2@gmail.com"
73+
assert notification['post_url'] == post['url']
74+
assert notification['post_title'] == post['title']
75+
assert notification['deleted'] == 1
76+
77+
assert len(dummy_smtp.sent) == 1
78+
79+
subcriptions = db.get_subscriptions_by_email(conn, "newemail2@gmail.com")
80+
subs = subcriptions[0] # in this case only one sub is expected
81+
last_notify = subs['last_notified_at']
82+
83+
assert last_notify
84+
85+
last_notify_at = datetime.fromisoformat(last_notify)
86+
87+
if last_notify_at.tzinfo is None:
88+
last_notify_at = last_notify_at.replace(tzinfo=timezone.utc)
89+
90+
assert last_notify_at and last_notify_at > beforeprocesstime
91+
92+
notify(db, conn)
93+
94+
notifications = db.get_notifications_by_email(conn, "newemail2@gmail.com")
95+
96+
assert len(notifications) == 1
97+
notification = notifications[0]
98+
assert notification['email'] == "newemail2@gmail.com"
99+
assert notification['post_url'] == post['url']
100+
assert notification['post_title'] == post['title']
101+
assert notification['deleted'] == 1
102+
63103
assert len(dummy_smtp.sent) == 1
64104

65105
conn.close()

tests/e2e/test_notify.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import pytest
22
from db import enums
33
import os
4-
from datetime import datetime
4+
from datetime import datetime, timezone
55
from notify import notify
66

77
@pytest.mark.notifications
@@ -10,7 +10,7 @@ def test_notify(db):
1010

1111
db.add_publisher(conn, "google", "techteam")
1212
db.add_subscription(conn, "xyz2@gmail.com", enums.PublisherCategory.SOFTWARE_ENGINEERING.value, 1)
13-
postid = db.add_post(conn, "url1", "How to scale your database", 1, "infrastructure", datetime.now().isoformat(), enums.PublisherCategory.SOFTWARE_ENGINEERING.value)
13+
postid = db.add_post(conn, "url1", "How to scale your database", 1, "infrastructure", datetime.now(timezone.utc).isoformat(), enums.PublisherCategory.SOFTWARE_ENGINEERING.value)
1414

1515
conn.commit()
1616

tests/e2e/test_send_email_e2e.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from email import message_from_string
22
import pytest
33
from send_notifications import process_notifications
4-
from datetime import datetime, timedelta
4+
from datetime import datetime, timedelta, timezone
55

66

77
@pytest.mark.notifications
@@ -27,8 +27,8 @@ def test_send_email_e2e(db, dummy_smtp):
2727
email2 = "manavoriginal@gmail.com"
2828
email3 = "xyz@gmail.com"
2929

30-
maturity_date = datetime.now().isoformat()
31-
maturity_date2 = datetime.now() + timedelta(days=1)
30+
maturity_date = datetime.now(timezone.utc).isoformat()
31+
maturity_date2 = datetime.now(timezone.utc) + timedelta(days=1)
3232
maturity_date2 = maturity_date2.isoformat()
3333

3434
# Insert a notification into DB

0 commit comments

Comments
 (0)