1111from apps .nest .models .reminder import Reminder
1212from apps .nest .models .reminder_schedule import ReminderSchedule
1313from apps .owasp .models .event import Event
14- from apps .slack .common .handlers .calendar_events import get_blocks , get_reminder_blocks
14+ from apps .slack .common .handlers .calendar_events import (
15+ get_events_blocks ,
16+ get_reminders_blocks ,
17+ get_setting_reminder_blocks ,
18+ )
1519from apps .slack .common .presentation import EntityPresentation
1620from apps .slack .models .member import Member
1721
@@ -23,8 +27,10 @@ class TestCalendarEvents:
2327 @patch ("apps.nest.clients.google_calendar.GoogleCalendarClient" )
2428 @patch ("apps.nest.models.google_account_authorization.GoogleAccountAuthorization.authorize" )
2529 @patch ("apps.owasp.models.event.Event.parse_google_calendar_events" )
26- def test_get_blocks (self , mock_parse_events , mock_authorize , mock_google_calendar_client ):
27- """Test get_blocks function."""
30+ def test_get_events_blocks (
31+ self , mock_parse_events , mock_authorize , mock_google_calendar_client
32+ ):
33+ """Test get_events_blocks function."""
2834 auth = GoogleAccountAuthorization (
2935 access_token = "test_access_token" , # noqa: S106
3036 refresh_token = "test_refresh_token" , # noqa: S106
@@ -63,7 +69,7 @@ def test_get_blocks(self, mock_parse_events, mock_authorize, mock_google_calenda
6369 key = "event2" ,
6470 ),
6571 ]
66- blocks = get_blocks (
72+ blocks = get_events_blocks (
6773 "test_slack_user_id" , presentation = EntityPresentation (include_pagination = True ), page = 1
6874 )
6975 assert len (blocks ) == 4 # 1 header + 2 events + 1 pagination
@@ -76,10 +82,10 @@ def test_get_blocks(self, mock_parse_events, mock_authorize, mock_google_calenda
7682
7783 @override_settings (IS_GOOGLE_AUTH_ENABLED = True , IS_AWS_KMS_ENABLED = True )
7884 @patch ("apps.nest.models.google_account_authorization.GoogleAccountAuthorization.authorize" )
79- def test_get_blocks_no_auth (self , mock_authorize ):
80- """Test get_blocks function when no authorization."""
85+ def test_get_events_blocks_no_auth (self , mock_authorize ):
86+ """Test get_events_blocks function when no authorization."""
8187 mock_authorize .return_value = ("http://auth.url" , "state123" ) # NOSONAR
82- blocks = get_blocks (
88+ blocks = get_events_blocks (
8389 "test_slack_user_id" , presentation = EntityPresentation (include_pagination = True ), page = 1
8490 )
8591 assert len (blocks ) == 1
@@ -91,15 +97,15 @@ def test_get_blocks_no_auth(self, mock_authorize):
9197 @override_settings (IS_GOOGLE_AUTH_ENABLED = True , IS_AWS_KMS_ENABLED = True )
9298 @patch ("apps.nest.clients.google_calendar.GoogleCalendarClient" )
9399 @patch ("apps.nest.models.google_account_authorization.GoogleAccountAuthorization.authorize" )
94- def test_get_blocks_service_error (self , mock_authorize , mock_google_calendar_client ):
95- """Test get_blocks function when Google Calendar service error."""
100+ def test_get_events_blocks_service_error (self , mock_authorize , mock_google_calendar_client ):
101+ """Test get_events_blocks function when Google Calendar service error."""
96102 mock_authorize .return_value = GoogleAccountAuthorization (
97103 access_token = "test_access_token" , # noqa: S106
98104 refresh_token = "test_refresh_token" , # noqa: S106
99105 expires_at = timezone .now () + timezone .timedelta (hours = 1 ),
100106 )
101107 mock_google_calendar_client .side_effect = ServerNotFoundError ()
102- blocks = get_blocks (
108+ blocks = get_events_blocks (
103109 "test_slack_user_id" , presentation = EntityPresentation (include_pagination = True ), page = 1
104110 )
105111 assert len (blocks ) == 1
@@ -108,24 +114,72 @@ def test_get_blocks_service_error(self, mock_authorize, mock_google_calendar_cli
108114 @override_settings (IS_GOOGLE_AUTH_ENABLED = True , IS_AWS_KMS_ENABLED = True )
109115 @patch ("apps.nest.clients.google_calendar.GoogleCalendarClient" )
110116 @patch ("apps.nest.models.google_account_authorization.GoogleAccountAuthorization.authorize" )
111- def test_get_blocks_no_events (self , mock_authorize , mock_google_calendar_client ):
112- """Test get_blocks function when no events."""
117+ def test_get_events_blocks_no_events (self , mock_authorize , mock_google_calendar_client ):
118+ """Test get_events_blocks function when no events."""
113119 mock_authorize .return_value = GoogleAccountAuthorization (
114120 access_token = "test_access_token" , # noqa: S106
115121 refresh_token = "test_refresh_token" , # noqa: S106
116122 expires_at = timezone .now () + timezone .timedelta (hours = 1 ),
117123 )
118124 mock_google_calendar_client .return_value .get_events .return_value = []
119- blocks = get_blocks (
125+ blocks = get_events_blocks (
120126 "test_slack_user_id" , presentation = EntityPresentation (include_pagination = True ), page = 1
121127 )
122128 assert len (blocks ) == 1
123129 assert "*No upcoming calendar events found.*" in blocks [0 ]["text" ]["text" ]
124130
131+ @patch ("apps.nest.models.reminder_schedule.ReminderSchedule.objects.filter" )
132+ def test_get_reminders_blocks_success (self , mock_filter ):
133+ """Test get_reminders_blocks function."""
134+ mock_filter .return_value .order_by .return_value = [
135+ MagicMock (
136+ spec = ReminderSchedule ,
137+ pk = 1 ,
138+ reminder = MagicMock (
139+ spec = Reminder ,
140+ channel_id = "C123456" ,
141+ message = "Test reminder message" ,
142+ ),
143+ scheduled_time = timezone .now () + timezone .timedelta (minutes = 10 ),
144+ recurrence = "once" ,
145+ ),
146+ MagicMock (
147+ spec = ReminderSchedule ,
148+ pk = 2 ,
149+ reminder = MagicMock (
150+ spec = Reminder ,
151+ channel_id = "C654321" ,
152+ message = "Another reminder message" ,
153+ ),
154+ scheduled_time = timezone .now () + timezone .timedelta (minutes = 20 ),
155+ recurrence = "daily" ,
156+ ),
157+ ]
158+ blocks = get_reminders_blocks ("test_slack_user_id" )
159+ assert len (blocks ) == 3 # 1 header + 2 reminders
160+ assert "*Your upcoming reminders:*" in blocks [0 ]["text" ]["text" ]
161+ assert "Test reminder message" in blocks [1 ]["text" ]["text" ]
162+ assert "Another reminder message" in blocks [2 ]["text" ]["text" ]
163+ mock_filter .assert_called_once_with (reminder__member__slack_user_id = "test_slack_user_id" )
164+ mock_filter .return_value .order_by .assert_called_once_with ("scheduled_time" )
165+
166+ @patch ("apps.nest.models.reminder_schedule.ReminderSchedule.objects.filter" )
167+ def test_get_reminders_blocks_no_reminders (self , mock_filter ):
168+ """Test get_reminders_blocks function when no reminders."""
169+ mock_filter .return_value .order_by .return_value = []
170+ blocks = get_reminders_blocks ("test_slack_user_id" )
171+ assert len (blocks ) == 1
172+ assert (
173+ "*No reminders found. You can set one with `/set-reminder`*"
174+ in blocks [0 ]["text" ]["text" ]
175+ )
176+ mock_filter .assert_called_once_with (reminder__member__slack_user_id = "test_slack_user_id" )
177+ mock_filter .return_value .order_by .assert_called_once_with ("scheduled_time" )
178+
125179 @patch ("apps.nest.controllers.calendar_events.set_reminder" )
126180 @patch ("apps.nest.schedulers.calendar_events.slack.SlackScheduler" )
127- def test_get_reminder_blocks_success (self , mock_slack_scheduler , mock_set_reminder ):
128- """Test get_reminder_blocks function for successful reminder setting."""
181+ def test_get_setting_reminder_blocks_success (self , mock_slack_scheduler , mock_set_reminder ):
182+ """Test get_setting_reminder_blocks function for successful reminder setting."""
129183 mock_set_reminder .return_value = MagicMock (
130184 spec = ReminderSchedule ,
131185 reminder = MagicMock (
@@ -145,7 +199,7 @@ def test_get_reminder_blocks_success(self, mock_slack_scheduler, mock_set_remind
145199 message = ["Test" , "reminder" , "message" ],
146200 recurrence = "daily" ,
147201 )
148- blocks = get_reminder_blocks (args , "test_slack_user_id" )
202+ blocks = get_setting_reminder_blocks (args , "test_slack_user_id" )
149203 assert len (blocks ) == 1
150204 assert "*10-minute reminder set for event " in blocks [0 ]["text" ]["text" ]
151205 mock_set_reminder .assert_called_once_with (
@@ -161,8 +215,8 @@ def test_get_reminder_blocks_success(self, mock_slack_scheduler, mock_set_remind
161215 mock_slack_scheduler .send_message .assert_called_once ()
162216
163217 @patch ("apps.nest.controllers.calendar_events.set_reminder" )
164- def test_get_reminder_blocks_validation_error (self , mock_set_reminder ):
165- """Test get_reminder_blocks function when ValidationError is raised."""
218+ def test_get_setting_reminder_blocks_validation_error (self , mock_set_reminder ):
219+ """Test get_setting_reminder_blocks function when ValidationError is raised."""
166220 mock_set_reminder .side_effect = ValidationError ("Invalid event number." )
167221 args = MagicMock (
168222 channel = "C123456" ,
@@ -171,13 +225,13 @@ def test_get_reminder_blocks_validation_error(self, mock_set_reminder):
171225 message = ["Test" , "reminder" , "message" ],
172226 recurrence = "daily" ,
173227 )
174- blocks = get_reminder_blocks (args , "test_slack_user_id" )
228+ blocks = get_setting_reminder_blocks (args , "test_slack_user_id" )
175229 assert len (blocks ) == 1
176230 assert "*Invalid event number.*" in blocks [0 ]["text" ]["text" ]
177231
178232 @patch ("apps.nest.controllers.calendar_events.set_reminder" )
179- def test_get_reminder_blocks_service_error (self , mock_set_reminder ):
180- """Test get_reminder_blocks function when service error occurs."""
233+ def test_get_setting_reminder_blocks_service_error (self , mock_set_reminder ):
234+ """Test get_setting_reminder_blocks function when service error occurs."""
181235 mock_set_reminder .side_effect = ServerNotFoundError ()
182236 args = MagicMock (
183237 channel = "C123456" ,
@@ -186,6 +240,6 @@ def test_get_reminder_blocks_service_error(self, mock_set_reminder):
186240 message = ["Test" , "reminder" , "message" ],
187241 recurrence = "daily" ,
188242 )
189- blocks = get_reminder_blocks (args , "test_slack_user_id" )
243+ blocks = get_setting_reminder_blocks (args , "test_slack_user_id" )
190244 assert len (blocks ) == 1
191245 assert "*Please check your internet connection.*" in blocks [0 ]["text" ]["text" ]
0 commit comments