@@ -5,7 +5,7 @@ const slack = require('./slack')
55const { Instance } = require ( './instance' )
66
77const { DateTime } = require ( 'luxon' )
8- const { WebClient, mockOpen, mockPostMessage, mockScheduleMessage } = require ( '@slack/web-api' )
8+ const { WebClient, mockJoin , mockOpen, mockPostMessage, mockScheduleMessage } = require ( '@slack/web-api' )
99const { IncomingWebhook, mockSend } = require ( '@slack/webhook' )
1010
1111jest . mock ( './instance' )
@@ -17,18 +17,20 @@ beforeEach(() => {
1717 // Clear all instances and calls to constructor and all methods
1818 IncomingWebhook . mockClear ( )
1919 WebClient . mockClear ( )
20+ mockJoin . mockClear ( )
2021 mockOpen . mockClear ( )
2122 mockPostMessage . mockClear ( )
2223 mockScheduleMessage . mockClear ( )
2324} )
2425
2526describe ( 'slack api' , ( ) => {
26- test ( 'schedules a message' , async ( ) => {
27+ test ( 'schedules a message and returns scheduled message id ' , async ( ) => {
2728 const t = DateTime . local ( )
2829 const data = { }
29- await slack . scheduleMessage ( testInstance , t , data )
30+ const result = await slack . scheduleMessage ( testInstance , t , data )
3031 expect ( WebClient ) . toHaveBeenCalledTimes ( 1 )
3132 expect ( mockScheduleMessage . mock . calls . length ) . toBe ( 1 )
33+ expect ( result ) . toHaveProperty ( 'scheduled_message_id' )
3234 } )
3335
3436 test ( 'schedules a message with a channel parameter' , async ( ) => {
@@ -49,6 +51,25 @@ describe('slack api', () => {
4951 expect ( mockScheduleMessage . mock . calls [ 0 ] [ 0 ] ) . toHaveProperty ( 'post_at' , Math . floor ( t . toSeconds ( ) ) )
5052 } )
5153
54+ test ( 'schedules a message to a channel bot is not in' , async ( ) => {
55+ mockScheduleMessage . mockRejectedValueOnce ( { data : { ok : false , error : 'not_in_channel' } } )
56+
57+ const t = DateTime . local ( )
58+ const data = { }
59+ try {
60+ await slack . scheduleMessage ( testInstance , t , data )
61+ } catch ( err ) {
62+ console . log ( `should not throw ${ err } JSON: ${ JSON . stringify ( err ) } ` )
63+ expect ( err ) . toBe ( undefined )
64+ }
65+ expect ( WebClient ) . toHaveBeenCalledTimes ( 1 )
66+ expect ( mockJoin ) . toHaveBeenCalledTimes ( 1 )
67+ expect ( mockJoin . mock . calls [ 0 ] [ 0 ] ) . toHaveProperty ( 'channel' , testInstance . channel )
68+ expect ( mockScheduleMessage ) . toHaveBeenCalledTimes ( 2 )
69+ expect ( mockScheduleMessage . mock . calls [ 0 ] [ 0 ] ) . toHaveProperty ( 'post_at' , Math . floor ( t . toSeconds ( ) ) )
70+ expect ( mockScheduleMessage . mock . calls [ 1 ] [ 0 ] ) . toHaveProperty ( 'post_at' , Math . floor ( t . toSeconds ( ) ) )
71+ } )
72+
5273 test ( 'replacing response has replace_original set' , async ( ) => {
5374 const url = 'https://test.example.com/hook'
5475 const data = { }
0 commit comments