all repos — telegram-bot-api @ 696aebd64c3d29da9d41a6a0ee24c1f32e278041

Golang bindings for the Telegram Bot API

bot_test.go (view raw)

  1package tgbotapi
  2
  3import (
  4	"io/ioutil"
  5	"net/http"
  6	"os"
  7	"testing"
  8	"time"
  9)
 10
 11const (
 12	TestToken               = "153667468:AAHlSHlMqSt1f_uFmVRJbm5gntu2HI4WW8I"
 13	ChatID                  = 76918703
 14	Channel                 = "@nightghost_test"
 15	SupergroupChatID        = -1001120141283
 16	ReplyToMessageID        = 35
 17	ExistingPhotoFileID     = "AgADAgADw6cxG4zHKAkr42N7RwEN3IFShCoABHQwXEtVks4EH2wBAAEC"
 18	ExistingDocumentFileID  = "BQADAgADOQADjMcoCcioX1GrDvp3Ag"
 19	ExistingAudioFileID     = "BQADAgADRgADjMcoCdXg3lSIN49lAg"
 20	ExistingVoiceFileID     = "AwADAgADWQADjMcoCeul6r_q52IyAg"
 21	ExistingVideoFileID     = "BAADAgADZgADjMcoCav432kYe0FRAg"
 22	ExistingVideoNoteFileID = "DQADAgADdQAD70cQSUK41dLsRMqfAg"
 23	ExistingStickerFileID   = "BQADAgADcwADjMcoCbdl-6eB--YPAg"
 24)
 25
 26func getBot(t *testing.T) (*BotAPI, error) {
 27	bot, err := NewBotAPI(TestToken)
 28	bot.Debug = true
 29
 30	if err != nil {
 31		t.Error(err)
 32		t.Fail()
 33	}
 34
 35	return bot, err
 36}
 37
 38func TestNewBotAPI_notoken(t *testing.T) {
 39	_, err := NewBotAPI("")
 40
 41	if err == nil {
 42		t.Error(err)
 43		t.Fail()
 44	}
 45}
 46
 47func TestGetUpdates(t *testing.T) {
 48	bot, _ := getBot(t)
 49
 50	u := NewUpdate(0)
 51
 52	_, err := bot.GetUpdates(u)
 53
 54	if err != nil {
 55		t.Error(err)
 56		t.Fail()
 57	}
 58}
 59
 60func TestSendWithMessage(t *testing.T) {
 61	bot, _ := getBot(t)
 62
 63	msg := NewMessage(ChatID, "A test message from the test library in telegram-bot-api")
 64	msg.ParseMode = "markdown"
 65	_, err := bot.Send(msg)
 66
 67	if err != nil {
 68		t.Error(err)
 69		t.Fail()
 70	}
 71}
 72
 73func TestSendWithMessageReply(t *testing.T) {
 74	bot, _ := getBot(t)
 75
 76	msg := NewMessage(ChatID, "A test message from the test library in telegram-bot-api")
 77	msg.ReplyToMessageID = ReplyToMessageID
 78	_, err := bot.Send(msg)
 79
 80	if err != nil {
 81		t.Error(err)
 82		t.Fail()
 83	}
 84}
 85
 86func TestSendWithMessageForward(t *testing.T) {
 87	bot, _ := getBot(t)
 88
 89	msg := NewForward(ChatID, ChatID, ReplyToMessageID)
 90	_, err := bot.Send(msg)
 91
 92	if err != nil {
 93		t.Error(err)
 94		t.Fail()
 95	}
 96}
 97
 98func TestSendWithNewPhoto(t *testing.T) {
 99	bot, _ := getBot(t)
100
101	msg := NewPhotoUpload(ChatID, "tests/image.jpg")
102	msg.Caption = "Test"
103	_, err := bot.Send(msg)
104
105	if err != nil {
106		t.Error(err)
107		t.Fail()
108	}
109}
110
111func TestSendWithNewPhotoWithFileBytes(t *testing.T) {
112	bot, _ := getBot(t)
113
114	data, _ := ioutil.ReadFile("tests/image.jpg")
115	b := FileBytes{Name: "image.jpg", Bytes: data}
116
117	msg := NewPhotoUpload(ChatID, b)
118	msg.Caption = "Test"
119	_, err := bot.Send(msg)
120
121	if err != nil {
122		t.Error(err)
123		t.Fail()
124	}
125}
126
127func TestSendWithNewPhotoWithFileReader(t *testing.T) {
128	bot, _ := getBot(t)
129
130	f, _ := os.Open("tests/image.jpg")
131	reader := FileReader{Name: "image.jpg", Reader: f, Size: -1}
132
133	msg := NewPhotoUpload(ChatID, reader)
134	msg.Caption = "Test"
135	_, err := bot.Send(msg)
136
137	if err != nil {
138		t.Error(err)
139		t.Fail()
140	}
141}
142
143func TestSendWithNewPhotoReply(t *testing.T) {
144	bot, _ := getBot(t)
145
146	msg := NewPhotoUpload(ChatID, "tests/image.jpg")
147	msg.ReplyToMessageID = ReplyToMessageID
148
149	_, err := bot.Send(msg)
150
151	if err != nil {
152		t.Error(err)
153		t.Fail()
154	}
155}
156
157func TestSendNewPhotoToChannel(t *testing.T) {
158	bot, _ := getBot(t)
159
160	msg := NewPhotoUploadToChannel(Channel, "tests/image.jpg")
161	msg.Caption = "Test"
162	_, err := bot.Send(msg)
163
164	if err != nil {
165		t.Error(err)
166		t.Fail()
167	}
168}
169
170func TestSendNewPhotoToChannelFileBytes(t *testing.T) {
171	bot, _ := getBot(t)
172
173	data, _ := ioutil.ReadFile("tests/image.jpg")
174	b := FileBytes{Name: "image.jpg", Bytes: data}
175
176	msg := NewPhotoUploadToChannel(Channel, b)
177	msg.Caption = "Test"
178	_, err := bot.Send(msg)
179
180	if err != nil {
181		t.Error(err)
182		t.Fail()
183	}
184}
185
186func TestSendNewPhotoToChannelFileReader(t *testing.T) {
187	bot, _ := getBot(t)
188
189	f, _ := os.Open("tests/image.jpg")
190	reader := FileReader{Name: "image.jpg", Reader: f, Size: -1}
191
192	msg := NewPhotoUploadToChannel(Channel, reader)
193	msg.Caption = "Test"
194	_, err := bot.Send(msg)
195
196	if err != nil {
197		t.Error(err)
198		t.Fail()
199	}
200}
201
202func TestSendWithExistingPhoto(t *testing.T) {
203	bot, _ := getBot(t)
204
205	msg := NewPhotoShare(ChatID, ExistingPhotoFileID)
206	msg.Caption = "Test"
207	_, err := bot.Send(msg)
208
209	if err != nil {
210		t.Error(err)
211		t.Fail()
212	}
213}
214
215func TestSendWithNewDocument(t *testing.T) {
216	bot, _ := getBot(t)
217
218	msg := NewDocumentUpload(ChatID, "tests/image.jpg")
219	_, err := bot.Send(msg)
220
221	if err != nil {
222		t.Error(err)
223		t.Fail()
224	}
225}
226
227func TestSendWithExistingDocument(t *testing.T) {
228	bot, _ := getBot(t)
229
230	msg := NewDocumentShare(ChatID, ExistingDocumentFileID)
231	_, err := bot.Send(msg)
232
233	if err != nil {
234		t.Error(err)
235		t.Fail()
236	}
237}
238
239func TestSendWithNewAudio(t *testing.T) {
240	bot, _ := getBot(t)
241
242	msg := NewAudioUpload(ChatID, "tests/audio.mp3")
243	msg.Title = "TEST"
244	msg.Duration = 10
245	msg.Performer = "TEST"
246	msg.MimeType = "audio/mpeg"
247	msg.FileSize = 688
248	_, err := bot.Send(msg)
249
250	if err != nil {
251		t.Error(err)
252		t.Fail()
253	}
254}
255
256func TestSendWithExistingAudio(t *testing.T) {
257	bot, _ := getBot(t)
258
259	msg := NewAudioShare(ChatID, ExistingAudioFileID)
260	msg.Title = "TEST"
261	msg.Duration = 10
262	msg.Performer = "TEST"
263
264	_, err := bot.Send(msg)
265
266	if err != nil {
267		t.Error(err)
268		t.Fail()
269	}
270}
271
272func TestSendWithNewVoice(t *testing.T) {
273	bot, _ := getBot(t)
274
275	msg := NewVoiceUpload(ChatID, "tests/voice.ogg")
276	msg.Duration = 10
277	_, err := bot.Send(msg)
278
279	if err != nil {
280		t.Error(err)
281		t.Fail()
282	}
283}
284
285func TestSendWithExistingVoice(t *testing.T) {
286	bot, _ := getBot(t)
287
288	msg := NewVoiceShare(ChatID, ExistingVoiceFileID)
289	msg.Duration = 10
290	_, err := bot.Send(msg)
291
292	if err != nil {
293		t.Error(err)
294		t.Fail()
295	}
296}
297
298func TestSendWithContact(t *testing.T) {
299	bot, _ := getBot(t)
300
301	contact := NewContact(ChatID, "5551234567", "Test")
302
303	if _, err := bot.Send(contact); err != nil {
304		t.Error(err)
305		t.Fail()
306	}
307}
308
309func TestSendWithLocation(t *testing.T) {
310	bot, _ := getBot(t)
311
312	_, err := bot.Send(NewLocation(ChatID, 40, 40))
313
314	if err != nil {
315		t.Error(err)
316		t.Fail()
317	}
318}
319
320func TestSendWithVenue(t *testing.T) {
321	bot, _ := getBot(t)
322
323	venue := NewVenue(ChatID, "A Test Location", "123 Test Street", 40, 40)
324
325	if _, err := bot.Send(venue); err != nil {
326		t.Error(err)
327		t.Fail()
328	}
329}
330
331func TestSendWithNewVideo(t *testing.T) {
332	bot, _ := getBot(t)
333
334	msg := NewVideoUpload(ChatID, "tests/video.mp4")
335	msg.Duration = 10
336	msg.Caption = "TEST"
337
338	_, err := bot.Send(msg)
339
340	if err != nil {
341		t.Error(err)
342		t.Fail()
343	}
344}
345
346func TestSendWithExistingVideo(t *testing.T) {
347	bot, _ := getBot(t)
348
349	msg := NewVideoShare(ChatID, ExistingVideoFileID)
350	msg.Duration = 10
351	msg.Caption = "TEST"
352
353	_, err := bot.Send(msg)
354
355	if err != nil {
356		t.Error(err)
357		t.Fail()
358	}
359}
360
361func TestSendWithNewVideoNote(t *testing.T) {
362	bot, _ := getBot(t)
363
364	msg := NewVideoNoteUpload(ChatID, 240, "tests/videonote.mp4")
365	msg.Duration = 10
366
367	_, err := bot.Send(msg)
368
369	if err != nil {
370		t.Error(err)
371		t.Fail()
372	}
373}
374
375func TestSendWithExistingVideoNote(t *testing.T) {
376	bot, _ := getBot(t)
377
378	msg := NewVideoNoteShare(ChatID, 240, ExistingVideoNoteFileID)
379	msg.Duration = 10
380
381	_, err := bot.Send(msg)
382
383	if err != nil {
384		t.Error(err)
385		t.Fail()
386	}
387}
388
389func TestSendWithNewSticker(t *testing.T) {
390	bot, _ := getBot(t)
391
392	msg := NewStickerUpload(ChatID, "tests/image.jpg")
393
394	_, err := bot.Send(msg)
395
396	if err != nil {
397		t.Error(err)
398		t.Fail()
399	}
400}
401
402func TestSendWithExistingSticker(t *testing.T) {
403	bot, _ := getBot(t)
404
405	msg := NewStickerShare(ChatID, ExistingStickerFileID)
406
407	_, err := bot.Send(msg)
408
409	if err != nil {
410		t.Error(err)
411		t.Fail()
412	}
413}
414
415func TestSendWithNewStickerAndKeyboardHide(t *testing.T) {
416	bot, _ := getBot(t)
417
418	msg := NewStickerUpload(ChatID, "tests/image.jpg")
419	msg.ReplyMarkup = ReplyKeyboardRemove{
420		RemoveKeyboard: true,
421		Selective:      false,
422	}
423	_, err := bot.Send(msg)
424
425	if err != nil {
426		t.Error(err)
427		t.Fail()
428	}
429}
430
431func TestSendWithExistingStickerAndKeyboardHide(t *testing.T) {
432	bot, _ := getBot(t)
433
434	msg := NewStickerShare(ChatID, ExistingStickerFileID)
435	msg.ReplyMarkup = ReplyKeyboardRemove{
436		RemoveKeyboard: true,
437		Selective:      false,
438	}
439
440	_, err := bot.Send(msg)
441
442	if err != nil {
443		t.Error(err)
444		t.Fail()
445	}
446}
447
448func TestGetFile(t *testing.T) {
449	bot, _ := getBot(t)
450
451	file := FileConfig{
452		FileID: ExistingPhotoFileID,
453	}
454
455	_, err := bot.GetFile(file)
456
457	if err != nil {
458		t.Error(err)
459		t.Fail()
460	}
461}
462
463func TestSendChatConfig(t *testing.T) {
464	bot, _ := getBot(t)
465
466	_, err := bot.Request(NewChatAction(ChatID, ChatTyping))
467
468	if err != nil {
469		t.Error(err)
470		t.Fail()
471	}
472}
473
474func TestSendEditMessage(t *testing.T) {
475	bot, _ := getBot(t)
476
477	msg, err := bot.Send(NewMessage(ChatID, "Testing editing."))
478	if err != nil {
479		t.Error(err)
480		t.Fail()
481	}
482
483	edit := EditMessageTextConfig{
484		BaseEdit: BaseEdit{
485			ChatID:    ChatID,
486			MessageID: msg.MessageID,
487		},
488		Text: "Updated text.",
489	}
490
491	_, err = bot.Send(edit)
492	if err != nil {
493		t.Error(err)
494		t.Fail()
495	}
496}
497
498func TestGetUserProfilePhotos(t *testing.T) {
499	bot, _ := getBot(t)
500
501	_, err := bot.GetUserProfilePhotos(NewUserProfilePhotos(ChatID))
502	if err != nil {
503		t.Error(err)
504		t.Fail()
505	}
506}
507
508func TestSetWebhookWithCert(t *testing.T) {
509	bot, _ := getBot(t)
510
511	time.Sleep(time.Second * 2)
512
513	bot.Request(RemoveWebhookConfig{})
514
515	wh := NewWebhookWithCert("https://example.com/tgbotapi-test/"+bot.Token, "tests/cert.pem")
516	_, err := bot.Request(wh)
517	if err != nil {
518		t.Error(err)
519		t.Fail()
520	}
521
522	_, err = bot.GetWebhookInfo()
523
524	if err != nil {
525		t.Error(err)
526	}
527
528	bot.Request(RemoveWebhookConfig{})
529}
530
531func TestSetWebhookWithoutCert(t *testing.T) {
532	bot, _ := getBot(t)
533
534	time.Sleep(time.Second * 2)
535
536	bot.Request(RemoveWebhookConfig{})
537
538	wh := NewWebhook("https://example.com/tgbotapi-test/" + bot.Token)
539	_, err := bot.Request(wh)
540	if err != nil {
541		t.Error(err)
542		t.Fail()
543	}
544
545	info, err := bot.GetWebhookInfo()
546
547	if err != nil {
548		t.Error(err)
549	}
550
551	if info.LastErrorDate != 0 {
552		t.Errorf("failed to set webhook: %s", info.LastErrorMessage)
553	}
554
555	bot.Request(RemoveWebhookConfig{})
556}
557
558func TestSendWithMediaGroup(t *testing.T) {
559	bot, _ := getBot(t)
560
561	cfg := NewMediaGroup(ChatID, []interface{}{
562		NewInputMediaPhoto("https://i.imgur.com/unQLJIb.jpg"),
563		NewInputMediaPhoto("https://i.imgur.com/J5qweNZ.jpg"),
564		NewInputMediaVideo("https://i.imgur.com/F6RmI24.mp4"),
565	})
566
567	messages, err := bot.SendMediaGroup(cfg)
568	if err != nil {
569		t.Error(err)
570	}
571
572	if messages == nil {
573		t.Error()
574	}
575
576	if len(messages) != 3 {
577		t.Error()
578	}
579}
580
581func ExampleNewBotAPI() {
582	bot, err := NewBotAPI("MyAwesomeBotToken")
583	if err != nil {
584		panic(err)
585	}
586
587	bot.Debug = true
588
589	log.Printf("Authorized on account %s", bot.Self.UserName)
590
591	u := NewUpdate(0)
592	u.Timeout = 60
593
594	updates := bot.GetUpdatesChan(u)
595
596	// Optional: wait for updates and clear them if you don't want to handle
597	// a large backlog of old messages
598	time.Sleep(time.Millisecond * 500)
599	updates.Clear()
600
601	for update := range updates {
602		if update.Message == nil {
603			continue
604		}
605
606		log.Printf("[%s] %s", update.Message.From.UserName, update.Message.Text)
607
608		msg := NewMessage(update.Message.Chat.ID, update.Message.Text)
609		msg.ReplyToMessageID = update.Message.MessageID
610
611		bot.Send(msg)
612	}
613}
614
615func ExampleNewWebhook() {
616	bot, err := NewBotAPI("MyAwesomeBotToken")
617	if err != nil {
618		panic(err)
619	}
620
621	bot.Debug = true
622
623	log.Printf("Authorized on account %s", bot.Self.UserName)
624
625	_, err = bot.Request(NewWebhookWithCert("https://www.google.com:8443/"+bot.Token, "cert.pem"))
626	if err != nil {
627		panic(err)
628	}
629
630	info, err := bot.GetWebhookInfo()
631
632	if err != nil {
633		panic(err)
634	}
635
636	if info.LastErrorDate != 0 {
637		log.Printf("failed to set webhook: %s", info.LastErrorMessage)
638	}
639
640	updates := bot.ListenForWebhook("/" + bot.Token)
641	go http.ListenAndServeTLS("0.0.0.0:8443", "cert.pem", "key.pem", nil)
642
643	for update := range updates {
644		log.Printf("%+v\n", update)
645	}
646}
647
648func ExampleInlineConfig() {
649	bot, err := NewBotAPI("MyAwesomeBotToken") // create new bot
650	if err != nil {
651		panic(err)
652	}
653
654	log.Printf("Authorized on account %s", bot.Self.UserName)
655
656	u := NewUpdate(0)
657	u.Timeout = 60
658
659	updates := bot.GetUpdatesChan(u)
660
661	for update := range updates {
662		if update.InlineQuery == nil { // if no inline query, ignore it
663			continue
664		}
665
666		article := NewInlineQueryResultArticle(update.InlineQuery.ID, "Echo", update.InlineQuery.Query)
667		article.Description = update.InlineQuery.Query
668
669		inlineConf := InlineConfig{
670			InlineQueryID: update.InlineQuery.ID,
671			IsPersonal:    true,
672			CacheTime:     0,
673			Results:       []interface{}{article},
674		}
675
676		if _, err := bot.Request(inlineConf); err != nil {
677			log.Println(err)
678		}
679	}
680}
681
682func TestDeleteMessage(t *testing.T) {
683	bot, _ := getBot(t)
684
685	msg := NewMessage(ChatID, "A test message from the test library in telegram-bot-api")
686	msg.ParseMode = "markdown"
687	message, _ := bot.Send(msg)
688
689	deleteMessageConfig := DeleteMessageConfig{
690		ChatID:    message.Chat.ID,
691		MessageID: message.MessageID,
692	}
693	_, err := bot.Request(deleteMessageConfig)
694
695	if err != nil {
696		t.Error(err)
697		t.Fail()
698	}
699}
700
701func TestPinChatMessage(t *testing.T) {
702	bot, _ := getBot(t)
703
704	msg := NewMessage(SupergroupChatID, "A test message from the test library in telegram-bot-api")
705	msg.ParseMode = "markdown"
706	message, _ := bot.Send(msg)
707
708	pinChatMessageConfig := PinChatMessageConfig{
709		ChatID:              message.Chat.ID,
710		MessageID:           message.MessageID,
711		DisableNotification: false,
712	}
713	_, err := bot.Request(pinChatMessageConfig)
714
715	if err != nil {
716		t.Error(err)
717		t.Fail()
718	}
719}
720
721func TestUnpinChatMessage(t *testing.T) {
722	bot, _ := getBot(t)
723
724	msg := NewMessage(SupergroupChatID, "A test message from the test library in telegram-bot-api")
725	msg.ParseMode = "markdown"
726	message, _ := bot.Send(msg)
727
728	// We need pin message to unpin something
729	pinChatMessageConfig := PinChatMessageConfig{
730		ChatID:              message.Chat.ID,
731		MessageID:           message.MessageID,
732		DisableNotification: false,
733	}
734
735	if _, err := bot.Request(pinChatMessageConfig); err != nil {
736		t.Error(err)
737		t.Fail()
738	}
739
740	unpinChatMessageConfig := UnpinChatMessageConfig{
741		ChatID: message.Chat.ID,
742	}
743
744	if _, err := bot.Request(unpinChatMessageConfig); err != nil {
745		t.Error(err)
746		t.Fail()
747	}
748}
749
750func TestPolls(t *testing.T) {
751	bot, _ := getBot(t)
752
753	poll := NewPoll(SupergroupChatID, "Are polls working?", "Yes", "No")
754
755	msg, err := bot.Send(poll)
756	if err != nil {
757		t.Error(err)
758		t.Fail()
759	}
760
761	result, err := bot.StopPoll(NewStopPoll(SupergroupChatID, msg.MessageID))
762	if err != nil {
763		t.Error(err)
764		t.Fail()
765	}
766
767	if result.Question != "Are polls working?" {
768		t.Error("Poll question did not match")
769		t.Fail()
770	}
771
772	if !result.IsClosed {
773		t.Error("Poll did not end")
774		t.Fail()
775	}
776
777	if result.Options[0].Text != "Yes" || result.Options[0].VoterCount != 0 || result.Options[1].Text != "No" || result.Options[1].VoterCount != 0 {
778		t.Error("Poll options were incorrect")
779		t.Fail()
780	}
781}