email-notifications: Add helper function to TestFollowupEmailDelay.

Adds a helper function to main test in TestFollowupEmailDelay so
that adding additional onboarding emails to the schedule is clearer.
This commit is contained in:
Lauryn Menard 2023-04-24 17:43:29 +02:00 committed by Tim Abbott
parent dec49883d4
commit 84f1ee84ff
1 changed files with 54 additions and 131 deletions

View File

@ -555,10 +555,15 @@ class TestFollowupEmails(ZulipTestCase):
) )
class TestFollowupEmailDelay(ZulipTestCase): class TestOnboardingEmailDelay(ZulipTestCase):
def test_get_onboarding_email_schedule(self) -> None: def verify_onboarding_email_schedule(
user_profile = self.example_user("hamlet") self,
dates_joined = { user: UserProfile,
date_joined: str,
onboarding_zulip_topics: int,
onboarding_zulip_guide: int,
) -> None:
DAY_OF_WEEK = {
"Monday": datetime(2018, 1, 1, 1, 0, 0, 0, tzinfo=timezone.utc), "Monday": datetime(2018, 1, 1, 1, 0, 0, 0, tzinfo=timezone.utc),
"Tuesday": datetime(2018, 1, 2, 1, 0, 0, 0, tzinfo=timezone.utc), "Tuesday": datetime(2018, 1, 2, 1, 0, 0, 0, tzinfo=timezone.utc),
"Wednesday": datetime(2018, 1, 3, 1, 0, 0, 0, tzinfo=timezone.utc), "Wednesday": datetime(2018, 1, 3, 1, 0, 0, 0, tzinfo=timezone.utc),
@ -567,138 +572,56 @@ class TestFollowupEmailDelay(ZulipTestCase):
"Saturday": datetime(2018, 1, 6, 1, 0, 0, 0, tzinfo=timezone.utc), "Saturday": datetime(2018, 1, 6, 1, 0, 0, 0, tzinfo=timezone.utc),
"Sunday": datetime(2018, 1, 7, 1, 0, 0, 0, tzinfo=timezone.utc), "Sunday": datetime(2018, 1, 7, 1, 0, 0, 0, tzinfo=timezone.utc),
} }
WEEKEND = [6, 7]
user.date_joined = DAY_OF_WEEK[date_joined]
onboarding_email_schedule = get_onboarding_email_schedule(user)
# onboarding_zulip_topics
day_sent = (
DAY_OF_WEEK[date_joined] + onboarding_email_schedule["onboarding_zulip_topics"]
).isoweekday()
self.assertEqual(day_sent, onboarding_zulip_topics)
self.assertNotIn(day_sent, WEEKEND)
# onboarding_zulip_guide
day_sent = (
DAY_OF_WEEK[date_joined] + onboarding_email_schedule["onboarding_zulip_guide"]
).isoweekday()
self.assertEqual(day_sent, onboarding_zulip_guide)
self.assertNotIn(day_sent, WEEKEND)
def test_get_onboarding_email_schedule(self) -> None:
user_profile = self.example_user("hamlet")
# joined Monday: schedule = Wednesday:3, Friday:5,
self.verify_onboarding_email_schedule(user_profile, "Monday", 3, 5)
# joined Tuesday: schedule = Thursday:4, Monday:1
self.verify_onboarding_email_schedule(user_profile, "Tuesday", 4, 1)
# joined Wednesday: schedule = Friday:5, Tuesday:2
self.verify_onboarding_email_schedule(user_profile, "Wednesday", 5, 2)
# joined Thursday: schedule = Monday:1, Wednesday:3
self.verify_onboarding_email_schedule(user_profile, "Thursday", 1, 3)
# joined Friday: schedule = Tuesday:2, Thursday:4
self.verify_onboarding_email_schedule(user_profile, "Friday", 2, 4)
# joined Saturday: schedule = Monday:1, Wednesday:3
self.verify_onboarding_email_schedule(user_profile, "Saturday", 1, 3)
# joined Sunday: schedule = Tuesday:2, Thursday:4
self.verify_onboarding_email_schedule(user_profile, "Sunday", 2, 4)
def test_time_offset_for_onboarding_email_schedule(self) -> None:
user_profile = self.example_user("hamlet")
days_delayed = { days_delayed = {
"2": timedelta(days=2, hours=-1),
"4": timedelta(days=4, hours=-1), "4": timedelta(days=4, hours=-1),
"6": timedelta(days=6, hours=-1), "6": timedelta(days=6, hours=-1),
} }
# joined Monday
user_profile.date_joined = dates_joined["Monday"]
onboarding_email_schedule = get_onboarding_email_schedule(user_profile)
# onboarding_zulip_topics email sent on Wednesday
self.assertEqual(
onboarding_email_schedule["onboarding_zulip_topics"],
days_delayed["2"],
)
self.assertEqual((dates_joined["Monday"] + days_delayed["2"]).isoweekday(), 3)
# onboarding_zulip_guide sent on Friday
self.assertEqual(
onboarding_email_schedule["onboarding_zulip_guide"],
days_delayed["4"],
)
self.assertEqual((dates_joined["Monday"] + days_delayed["4"]).isoweekday(), 5)
# joined Tuesday
user_profile.date_joined = dates_joined["Tuesday"]
onboarding_email_schedule = get_onboarding_email_schedule(user_profile)
# onboarding_zulip_topics email sent on Thursday
self.assertEqual(
onboarding_email_schedule["onboarding_zulip_topics"],
days_delayed["2"],
)
self.assertEqual((dates_joined["Tuesday"] + days_delayed["2"]).isoweekday(), 4)
# onboarding_zulip_guide sent on Monday
self.assertEqual(
onboarding_email_schedule["onboarding_zulip_guide"],
days_delayed["6"],
)
self.assertEqual((dates_joined["Tuesday"] + days_delayed["6"]).isoweekday(), 1)
# joined Wednesday
user_profile.date_joined = dates_joined["Wednesday"]
onboarding_email_schedule = get_onboarding_email_schedule(user_profile)
# onboarding_zulip_topics email sent on Friday
self.assertEqual(
onboarding_email_schedule["onboarding_zulip_topics"],
days_delayed["2"],
)
self.assertEqual((dates_joined["Wednesday"] + days_delayed["2"]).isoweekday(), 5)
# onboarding_zulip_guide sent on Tuesday
self.assertEqual(
onboarding_email_schedule["onboarding_zulip_guide"],
days_delayed["6"],
)
self.assertEqual((dates_joined["Wednesday"] + days_delayed["6"]).isoweekday(), 2)
# joined Thursday
user_profile.date_joined = dates_joined["Thursday"]
onboarding_email_schedule = get_onboarding_email_schedule(user_profile)
# onboarding_zulip_topics email sent on Monday
self.assertEqual(
onboarding_email_schedule["onboarding_zulip_topics"],
days_delayed["4"],
)
self.assertEqual((dates_joined["Thursday"] + days_delayed["4"]).isoweekday(), 1)
# onboarding_zulip_guide sent on Wednesday
self.assertEqual(
onboarding_email_schedule["onboarding_zulip_guide"],
days_delayed["6"],
)
self.assertEqual((dates_joined["Thursday"] + days_delayed["6"]).isoweekday(), 3)
# joined Friday
user_profile.date_joined = dates_joined["Friday"]
onboarding_email_schedule = get_onboarding_email_schedule(user_profile)
# onboarding_zulip_topics email sent on Tuesday
self.assertEqual(
onboarding_email_schedule["onboarding_zulip_topics"],
days_delayed["4"],
)
self.assertEqual((dates_joined["Friday"] + days_delayed["4"]).isoweekday(), 2)
# onboarding_zulip_guide sent on Thursday
self.assertEqual(
onboarding_email_schedule["onboarding_zulip_guide"],
days_delayed["6"],
)
self.assertEqual((dates_joined["Friday"] + days_delayed["6"]).isoweekday(), 4)
# joined Saturday
user_profile.date_joined = dates_joined["Saturday"]
onboarding_email_schedule = get_onboarding_email_schedule(user_profile)
# onboarding_zulip_topics email sent on Monday
self.assertEqual(
onboarding_email_schedule["onboarding_zulip_topics"],
days_delayed["2"],
)
self.assertEqual((dates_joined["Saturday"] + days_delayed["2"]).isoweekday(), 1)
# onboarding_zulip_guide sent on Wednesday
self.assertEqual(
onboarding_email_schedule["onboarding_zulip_guide"],
days_delayed["4"],
)
self.assertEqual((dates_joined["Saturday"] + days_delayed["4"]).isoweekday(), 3)
# joined Sunday
user_profile.date_joined = dates_joined["Sunday"]
onboarding_email_schedule = get_onboarding_email_schedule(user_profile)
# onboarding_zulip_topics email sent on Tuesday
self.assertEqual(
onboarding_email_schedule["onboarding_zulip_topics"],
days_delayed["2"],
)
self.assertEqual((dates_joined["Sunday"] + days_delayed["2"]).isoweekday(), 2)
# onboarding_zulip_guide sent on Thursday
self.assertEqual(
onboarding_email_schedule["onboarding_zulip_guide"],
days_delayed["4"],
)
self.assertEqual((dates_joined["Sunday"] + days_delayed["4"]).isoweekday(), 4)
# Time offset of America/Phoenix is -07:00 # Time offset of America/Phoenix is -07:00
user_profile.timezone = "America/Phoenix" user_profile.timezone = "America/Phoenix"