mirror of
https://github.com/yagop/node-telegram-bot-api
synced 2025-08-23 10:27:49 +00:00
385 lines
11 KiB
JavaScript
385 lines
11 KiB
JavaScript
var TelegramPolling = require('../src/telegramPolling');
|
|
var Telegram = require('../index');
|
|
var request = require('request');
|
|
var should = require('should');
|
|
var fs = require('fs');
|
|
|
|
process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
|
|
var TOKEN = process.env.TEST_TELEGRAM_TOKEN;
|
|
if (!TOKEN) {
|
|
throw new Error('Bot token not provided');
|
|
}
|
|
// Telegram service if not User Id
|
|
var USERID = process.env.TEST_USER_ID || 777000;
|
|
|
|
describe('Telegram', function () {
|
|
|
|
describe('#setWebHook', function () {
|
|
it('should set a webHook', function (done) {
|
|
var bot = new Telegram(TOKEN);
|
|
bot.setWebHook('216.58.210.174').then(function (resp) {
|
|
resp.should.be.exactly(true);
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('should delete the webHook', function (done) {
|
|
var bot = new Telegram(TOKEN);
|
|
bot.setWebHook('').then(function (resp) {
|
|
resp.should.be.exactly(true);
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('#WebHook', function () {
|
|
it('should reject request if same token not provided', function (done) {
|
|
var bot = new Telegram(TOKEN, {webHook: true});
|
|
request({
|
|
url: 'http://localhost:8443/NOT_REAL_TOKEN',
|
|
method: 'POST'
|
|
}, function (error, response, body) {
|
|
response.statusCode.should.not.be.equal(200);
|
|
bot._WebHook._webServer.close();
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('should reject request if authorized but not a POST', function (done) {
|
|
var bot = new Telegram(TOKEN, {webHook: true});
|
|
request({
|
|
url: 'http://localhost:8443/bot'+TOKEN,
|
|
method: 'GET'
|
|
}, function (error, response, body) {
|
|
response.statusCode.should.not.be.equal(200);
|
|
bot._WebHook._webServer.close();
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('should emit a `message` on HTTP WebHook', function (done) {
|
|
var bot = new Telegram(TOKEN, {webHook: true});
|
|
bot.on('message', function (msg) {
|
|
bot._WebHook._webServer.close();
|
|
done();
|
|
});
|
|
var url = 'http://localhost:8443/bot'+TOKEN;
|
|
request({
|
|
url: url,
|
|
method: 'POST',
|
|
json: true,
|
|
headers: {
|
|
"content-type": "application/json",
|
|
},
|
|
body: {update_id: 0, message: {text: 'test'}}
|
|
});
|
|
});
|
|
|
|
it('should emit a `message` on HTTPS WebHook', function (done) {
|
|
var opts = {
|
|
webHook: {
|
|
port: 8443,
|
|
key: __dirname+'/../examples/key.pem',
|
|
cert: __dirname+'/../examples/crt.pem'
|
|
}
|
|
};
|
|
var bot = new Telegram(TOKEN, opts);
|
|
bot.on('message', function (msg) {
|
|
bot._WebHook._webServer.close();
|
|
done();
|
|
});
|
|
var url = 'https://localhost:8443/bot'+TOKEN;
|
|
request({
|
|
url: url,
|
|
method: 'POST',
|
|
json: true,
|
|
headers: {
|
|
"content-type": "application/json",
|
|
},
|
|
rejectUnhauthorized: false,
|
|
body: {update_id: 0, message: {text: 'test'}}
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('#getMe', function () {
|
|
it('should return an User object', function (done) {
|
|
var bot = new Telegram(TOKEN);
|
|
bot.getMe().then(function (resp) {
|
|
resp.should.be.an.instanceOf(Object);
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('#getUpdates', function () {
|
|
it('should return an Array', function (done) {
|
|
var bot = new Telegram(TOKEN);
|
|
bot.getUpdates().then(function (resp) {
|
|
resp.should.be.an.instanceOf(Array);
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('#sendMessage', function () {
|
|
it('should send a message', function (done) {
|
|
var bot = new Telegram(TOKEN);
|
|
bot.sendMessage(USERID, 'test').then(function (resp) {
|
|
resp.should.be.an.instanceOf(Object);
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('#forwardMessage', function () {
|
|
it('should forward a message', function (done) {
|
|
var bot = new Telegram(TOKEN);
|
|
bot.sendMessage(USERID, 'test').then(function (resp) {
|
|
var messageId = resp.message_id;
|
|
bot.forwardMessage(USERID, USERID, messageId)
|
|
.then(function (resp) {
|
|
resp.should.be.an.instanceOf(Object);
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('#sendPhoto', function () {
|
|
var photoId;
|
|
it('should send a photo from file', function (done) {
|
|
var bot = new Telegram(TOKEN);
|
|
var photo = __dirname+'/bot.gif';
|
|
bot.sendPhoto(USERID, photo).then(function (resp) {
|
|
resp.should.be.an.instanceOf(Object);
|
|
photoId = resp.photo[0].file_id;
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('should send a photo from id', function (done) {
|
|
var bot = new Telegram(TOKEN);
|
|
// Send the same photo as before
|
|
var photo = photoId;
|
|
bot.sendPhoto(USERID, photo).then(function (resp) {
|
|
resp.should.be.an.instanceOf(Object);
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('should send a photo from fs.readStream', function (done) {
|
|
var bot = new Telegram(TOKEN);
|
|
var photo = fs.createReadStream(__dirname+'/bot.gif');
|
|
bot.sendPhoto(USERID, photo).then(function (resp) {
|
|
resp.should.be.an.instanceOf(Object);
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('should send a photo from request Stream', function (done) {
|
|
var bot = new Telegram(TOKEN);
|
|
var photo = request('https://telegram.org/img/t_logo.png');
|
|
bot.sendPhoto(USERID, photo).then(function (resp) {
|
|
resp.should.be.an.instanceOf(Object);
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('#sendChatAction', function () {
|
|
it('should send a chat action', function (done) {
|
|
var bot = new Telegram(TOKEN);
|
|
var action = "typing";
|
|
bot.sendChatAction(USERID, action).then(function (resp) {
|
|
resp.should.be.exactly(true);
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('#sendAudio', function () {
|
|
it('should send an OGG audio', function (done) {
|
|
var bot = new Telegram(TOKEN);
|
|
var audio = request('https://upload.wikimedia.org/wikipedia/commons/c/c8/Example.ogg');
|
|
bot.sendAudio(USERID, audio).then(function (resp) {
|
|
resp.should.be.an.instanceOf(Object);
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('#sendDocument', function () {
|
|
var documentId;
|
|
it('should send a document from file', function (done) {
|
|
var bot = new Telegram(TOKEN);
|
|
var document = __dirname+'/bot.gif';
|
|
bot.sendDocument(USERID, document).then(function (resp) {
|
|
resp.should.be.an.instanceOf(Object);
|
|
documentId = resp.document.file_id;
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('should send a document from id', function (done) {
|
|
var bot = new Telegram(TOKEN);
|
|
// Send the same photo as before
|
|
var document = documentId;
|
|
bot.sendDocument(USERID, document).then(function (resp) {
|
|
resp.should.be.an.instanceOf(Object);
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('should send a document from fs.readStream', function (done) {
|
|
var bot = new Telegram(TOKEN);
|
|
var document = fs.createReadStream(__dirname+'/bot.gif');
|
|
bot.sendDocument(USERID, document).then(function (resp) {
|
|
resp.should.be.an.instanceOf(Object);
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('should send a document from request Stream', function (done) {
|
|
var bot = new Telegram(TOKEN);
|
|
var document = request('https://telegram.org/img/t_logo.png');
|
|
bot.sendDocument(USERID, document).then(function (resp) {
|
|
resp.should.be.an.instanceOf(Object);
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('#sendSticker', function () {
|
|
var stickerId;
|
|
it('should send a sticker from file', function (done) {
|
|
var bot = new Telegram(TOKEN);
|
|
var sticker = __dirname+'/sticker.webp';
|
|
bot.sendSticker(USERID, sticker).then(function (resp) {
|
|
resp.should.be.an.instanceOf(Object);
|
|
stickerId = resp.sticker.file_id;
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('should send a sticker from id', function (done) {
|
|
var bot = new Telegram(TOKEN);
|
|
// Send the same photo as before
|
|
bot.sendSticker(USERID, stickerId).then(function (resp) {
|
|
resp.should.be.an.instanceOf(Object);
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('should send a sticker from fs.readStream', function (done) {
|
|
var bot = new Telegram(TOKEN);
|
|
var sticker = fs.createReadStream(__dirname+'/sticker.webp');
|
|
bot.sendSticker(USERID, sticker).then(function (resp) {
|
|
resp.should.be.an.instanceOf(Object);
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('should send a sticker from request Stream', function (done) {
|
|
var bot = new Telegram(TOKEN);
|
|
var sticker = request('https://www.gstatic.com/webp/gallery3/1_webp_ll.webp');
|
|
bot.sendSticker(USERID, sticker).then(function (resp) {
|
|
resp.should.be.an.instanceOf(Object);
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('#sendVideo', function () {
|
|
var videoId;
|
|
it('should send a video from file', function (done) {
|
|
var bot = new Telegram(TOKEN);
|
|
var video = __dirname+'/video.mp4';
|
|
bot.sendVideo(USERID, video).then(function (resp) {
|
|
resp.should.be.an.instanceOf(Object);
|
|
videoId = resp.video.file_id;
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('should send a video from id', function (done) {
|
|
var bot = new Telegram(TOKEN);
|
|
// Send the same photo as before
|
|
bot.sendVideo(USERID, videoId).then(function (resp) {
|
|
resp.should.be.an.instanceOf(Object);
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('should send a video from fs.readStream', function (done) {
|
|
var bot = new Telegram(TOKEN);
|
|
var video = fs.createReadStream(__dirname+'/video.mp4');
|
|
bot.sendVideo(USERID, video).then(function (resp) {
|
|
resp.should.be.an.instanceOf(Object);
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('should send a video from request Stream', function (done) {
|
|
var bot = new Telegram(TOKEN);
|
|
var sticker = request('http://techslides.com/demos/sample-videos/small.mp4');
|
|
bot.sendVideo(USERID, sticker).then(function (resp) {
|
|
resp.should.be.an.instanceOf(Object);
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('#getUserProfilePhotos', function () {
|
|
it('should get user profile photos', function (done) {
|
|
var bot = new Telegram(TOKEN);
|
|
bot.getUserProfilePhotos(USERID).then(function (resp) {
|
|
resp.should.be.an.instanceOf(Object);
|
|
resp.total_count.should.be.an.instanceOf(Number);
|
|
resp.photos.should.be.an.instanceOf(Array);
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('#sendLocation', function () {
|
|
it('should send a location', function (done) {
|
|
var bot = new Telegram(TOKEN);
|
|
var lat = 47.5351072;
|
|
var long = -52.7508537;
|
|
bot.sendLocation(USERID, lat, long).then(function (resp) {
|
|
resp.should.be.an.instanceOf(Object);
|
|
resp.location.should.be.an.instanceOf(Object);
|
|
resp.location.latitude.should.be.an.instanceOf(Number);
|
|
resp.location.longitude.should.be.an.instanceOf(Number);
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
|
|
}); // End Telegram
|
|
|
|
|
|
describe('#TelegramBotPolling', function () {
|
|
it('should call the callback on polling', function (done) {
|
|
function onUpdate (update) {
|
|
update.should.be.an.instanceOf(Object);
|
|
done();
|
|
}
|
|
var polling = new TelegramPolling(null, {interval: 500}, onUpdate);
|
|
// Not the best way to mock, but it works
|
|
polling._getUpdates = function() {
|
|
return {
|
|
then: function (cb) {
|
|
cb([{update_id: 10, message: {}}]);
|
|
return this;
|
|
},
|
|
catch: function () {
|
|
return this;
|
|
},
|
|
finally: function () {}
|
|
};
|
|
};
|
|
});
|
|
});
|