77from solapi .model .kakao .kakao_option import KakaoOption
88from solapi .model .request .storage import FileTypeEnum
99from solapi .model .response .send_message_response import SendMessageResponse
10+ from solapi .services .message_service import SolapiMessageService
1011
1112
1213class TestSimpleSend :
@@ -51,7 +52,7 @@ def test_send_sms(self, message_service, test_phone_numbers):
5152 print (f"Successful messages: { response .group_info .count .registered_success } " )
5253 print (f"Failed messages: { response .group_info .count .registered_failed } " )
5354
54- return response .group_info .group_id
55+ assert response .group_info .group_id is not None
5556
5657 def test_send_mms (self , message_service , test_phone_numbers ):
5758 """
@@ -113,7 +114,7 @@ def test_send_mms(self, message_service, test_phone_numbers):
113114 print (f"Successful messages: { response .group_info .count .registered_success } " )
114115 print (f"Failed messages: { response .group_info .count .registered_failed } " )
115116
116- return response .group_info .group_id
117+ assert response .group_info .group_id is not None
117118
118119 def test_send_kakao_alimtalk (
119120 self , message_service , test_phone_numbers , test_kakao_options
@@ -166,7 +167,7 @@ def test_send_kakao_alimtalk(
166167 )
167168 print (f"Failed messages: { response .group_info .count .registered_failed } " )
168169
169- return response .group_info .group_id
170+ assert response .group_info .group_id is not None
170171 except Exception as e :
171172 # This test may fail if Kakao template is not properly set up
172173 pytest .skip (f"Kakao Alimtalk test skipped: { str (e )} " )
@@ -232,7 +233,7 @@ def test_send_many(self, message_service, test_phone_numbers):
232233 print (f"To: { failed .message .to } " )
233234 print (f"Error: { failed .error .message } " )
234235
235- return response .group_info .group_id
236+ assert response .group_info .group_id is not None
236237
237238 def test_send_with_reservation (self , message_service , test_phone_numbers ):
238239 """
@@ -250,14 +251,11 @@ def test_send_with_reservation(self, message_service, test_phone_numbers):
250251 from_ = test_phone_numbers ["sender" ],
251252 to = test_phone_numbers ["recipient" ],
252253 text = "[테스트] SOLAPI Python SDK를 사용한 예약 발송 테스트입니다." ,
254+ scheduled_date = datetime .now () + timedelta (minutes = 10 ),
253255 )
254256
255- # Create config with scheduled date (10 minutes in the future)
256- scheduled_date = datetime .now () + timedelta (minutes = 10 )
257- config = SendRequestConfig (scheduled_date = scheduled_date )
258-
259- # Send message with reservation
260- response = message_service .send (message , config )
257+ # Send message
258+ response = message_service .send (message )
261259
262260 # Verify response type
263261 assert isinstance (response , SendMessageResponse )
@@ -267,15 +265,50 @@ def test_send_with_reservation(self, message_service, test_phone_numbers):
267265 assert hasattr (response .group_info , "group_id" )
268266 assert hasattr (response .group_info , "count" )
269267
270- # Verify message was scheduled successfully
268+ # Verify message was sent successfully
271269 assert response .group_info .count .total > 0
272270 assert response .group_info .count .registered_success > 0
273271
274272 # Print response information for verification
275273 print (f"Group ID: { response .group_info .group_id } " )
276- print (f"Scheduled date: { scheduled_date } " )
277274 print (f"Total messages: { response .group_info .count .total } " )
278275 print (f"Successful messages: { response .group_info .count .registered_success } " )
279276 print (f"Failed messages: { response .group_info .count .registered_failed } " )
280277
281- return response .group_info .group_id
278+ assert response .group_info .group_id is not None
279+
280+ def test_cancel_reservation (
281+ self , message_service : SolapiMessageService , test_phone_numbers
282+ ):
283+ """
284+ Test cancelling a reserved message.
285+
286+ This test verifies that the cancel_scheduled_message method works correctly.
287+
288+ Args:
289+ message_service: The SolapiMessageService fixture
290+ test_phone_numbers: Dictionary with sender and recipient phone numbers
291+ """
292+ # Create message with reservation
293+ message = RequestMessage (
294+ from_ = test_phone_numbers ["sender" ],
295+ to = test_phone_numbers ["recipient" ],
296+ text = "[테스트] SOLAPI Python SDK 예약 취소 테스트입니다." ,
297+ )
298+ request_config = SendRequestConfig (
299+ scheduled_date = datetime .now () + timedelta (minutes = 10 )
300+ )
301+
302+ # Send message and get group_id
303+ send_response = message_service .send (message , request_config )
304+ group_id = send_response .group_info .group_id
305+
306+ # Cancel reservation
307+ cancel_response = message_service .cancel_scheduled_message (group_id )
308+
309+ # Verify cancellation response
310+ assert cancel_response .group_id is not None
311+
312+ # Print cancellation information for verification
313+ # print(f"Cancellation status: {cancel_response.status}")
314+ print (f"Cancelled message ID: { cancel_response .group_id } " )
0 commit comments