11// eslint-disable-next-line import/no-extraneous-dependencies
22import { jest } from '@jest/globals' ;
33
4- await jest . unstable_mockModule ( 'node-telegram-bot-api' , ( ) => ( {
5- default : jest . fn ( ) . mockImplementation ( ( ) => ( {
6- sendMessage : jest . fn ( ) . mockResolvedValue ( { } ) ,
7- } ) ) ,
8- } ) ) ;
9-
10- const TelegramBot = ( await import ( 'node-telegram-bot-api' ) ) . default ;
4+ // Mock fetch globally
5+ global . fetch = jest . fn ( ) ;
116
127const sendTelegram = ( await import ( '../../src/telegramService' ) ) . default ;
138
@@ -22,10 +17,11 @@ describe('sendTelegram', () => {
2217 } ) ;
2318
2419 it ( 'sends a Telegram message successfully' , async ( ) => {
25- const mockSendMessage = jest . fn ( ) . mockResolvedValue ( { } ) ;
26- TelegramBot . mockImplementation ( ( ) => ( {
27- sendMessage : mockSendMessage ,
28- } ) ) ;
20+ const mockResponse = {
21+ ok : true ,
22+ json : jest . fn ( ) . mockResolvedValue ( { ok : true , result : { } } ) ,
23+ } ;
24+ global . fetch . mockResolvedValue ( mockResponse ) ;
2925
3026 const response = await sendTelegram ( {
3127 chatId,
@@ -34,11 +30,19 @@ describe('sendTelegram', () => {
3430 senderName,
3531 } ) ;
3632
37- expect ( TelegramBot ) . toHaveBeenCalledWith ( botToken ) ;
38-
39- expect ( mockSendMessage ) . toHaveBeenCalledWith (
40- chatId ,
41- `Message from: ${ senderName } \n${ message } `
33+ expect ( global . fetch ) . toHaveBeenCalledWith (
34+ `https://api.telegram.org/bot${ botToken } /sendMessage` ,
35+ {
36+ method : 'POST' ,
37+ headers : {
38+ 'Content-Type' : 'application/json' ,
39+ } ,
40+ body : JSON . stringify ( {
41+ chat_id : chatId ,
42+ text : `Message from: ${ senderName } \n${ message } ` ,
43+ parse_mode : 'HTML' ,
44+ } ) ,
45+ }
4246 ) ;
4347
4448 expect ( response ) . toEqual ( {
@@ -48,15 +52,15 @@ describe('sendTelegram', () => {
4852 } ) ;
4953
5054 it ( 'handles errors when sending a Telegram message' , async ( ) => {
51- const mockSendMessage = jest
52- . fn ( )
53- . mockRejectedValue ( new Error ( 'Network error' ) ) ;
54-
55- TelegramBot . mockImplementation ( ( ) => ( {
56- sendMessage : mockSendMessage ,
57- } ) ) ;
58-
59- console . error = jest . fn ( ) ;
55+ const mockResponse = {
56+ ok : false ,
57+ status : 400 ,
58+ json : jest . fn ( ) . mockResolvedValue ( {
59+ ok : false ,
60+ description : 'Bad Request' ,
61+ } ) ,
62+ } ;
63+ global . fetch . mockResolvedValue ( mockResponse ) ;
6064
6165 const response = await sendTelegram ( {
6266 chatId,
@@ -65,17 +69,21 @@ describe('sendTelegram', () => {
6569 senderName,
6670 } ) ;
6771
68- // ✅ Fix: Only check `botToken` in the expectation
69- expect ( TelegramBot ) . toHaveBeenCalledWith ( botToken ) ;
72+ expect ( response ) . toEqual ( {
73+ message : 'Failed to send Telegram message.' ,
74+ status : 400 ,
75+ } ) ;
76+ } ) ;
7077
71- expect ( mockSendMessage ) . toHaveBeenCalledWith (
72- chatId ,
73- `Message from: ${ senderName } \n${ message } `
74- ) ;
78+ it ( 'handles network errors' , async ( ) => {
79+ global . fetch . mockRejectedValue ( new Error ( 'Network error' ) ) ;
7580
76- expect ( console . error ) . toHaveBeenCalledWith (
77- 'Failed to send Telegram message.'
78- ) ;
81+ const response = await sendTelegram ( {
82+ chatId,
83+ message,
84+ botToken,
85+ senderName,
86+ } ) ;
7987
8088 expect ( response ) . toEqual ( {
8189 message : 'Failed to send Telegram message.' ,
@@ -102,24 +110,14 @@ describe('sendTelegram', () => {
102110 } ) ;
103111
104112 it ( 'should not throw an error when sender name is undefined' , async ( ) => {
105- const mockSendMessage = jest . fn ( ) . mockResolvedValue ( { } ) ;
106- TelegramBot . mockImplementation ( ( ) => ( {
107- sendMessage : mockSendMessage ,
108- } ) ) ;
113+ const mockResponse = {
114+ ok : true ,
115+ json : jest . fn ( ) . mockResolvedValue ( { ok : true , result : { } } ) ,
116+ } ;
117+ global . fetch . mockResolvedValue ( mockResponse ) ;
109118
110119 await expect (
111120 sendTelegram ( { chatId, message, botToken } )
112121 ) . resolves . not . toThrow ( ) ;
113122 } ) ;
114-
115- it ( 'should not throw an error when sender name is undefined' , async ( ) => {
116- const mockSendMessage = jest . fn ( ) . mockResolvedValue ( { } ) ;
117- TelegramBot . mockImplementation ( ( ) => ( {
118- sendMessage : mockSendMessage ,
119- } ) ) ;
120-
121- await expect (
122- sendTelegram ( { chatId, message, botToken, senderName : undefined } )
123- ) . resolves . not . toThrow ( ) ;
124- } ) ;
125123} ) ;
0 commit comments