2
0
mirror of https://github.com/yagop/node-telegram-bot-api synced 2025-10-17 14:36:28 +00:00

src: Minor reorganisation, fixes

This commit is contained in:
GochoMugo
2017-12-11 18:24:22 +03:00
parent 8edb687283
commit 4051117ed0
3 changed files with 44 additions and 35 deletions

View File

@@ -117,16 +117,16 @@ bot.sendPhoto(chatId, url);
If you wish to explicitly specify the filename or If you wish to explicitly specify the filename or
[MIME type](http://en.wikipedia.org/wiki/Internet_media_type), [MIME type](http://en.wikipedia.org/wiki/Internet_media_type),
you may pass the an additional argument as file options, like so: you may pass an additional argument as file options, like so:
```js ```js
const fileOpts = { const fileOptions = {
// Explicitly specify the file name. // Explicitly specify the file name.
filename: 'customfilename', filename: 'customfilename',
// Explicitly specify the MIME type. // Explicitly specify the MIME type.
contentType: 'audio/mpeg' contentType: 'audio/mpeg',
}; };
bot.sendAudio(chatId, data, {}, fileOpts); bot.sendAudio(chatId, data, {}, fileOptions);
``` ```
<a name="sending-files-options"></a> <a name="sending-files-options"></a>
@@ -140,6 +140,10 @@ variable `NTBA_FIX_350`.**
In order of highest-to-lowest precedence in searching for In order of highest-to-lowest precedence in searching for
a value, when resolving the `filename`: a value, when resolving the `filename`:
*(`fileOptions` is the Object argument passed to the method.
The "file" argument passed to the method can be a `Stream`,
`Buffer` or `filepath`.)*
1. Is `fileOptions.filename` explictly defined? 1. Is `fileOptions.filename` explictly defined?
1. Does `Stream#path` exist? 1. Does `Stream#path` exist?
1. Is `filepath` provided? 1. Is `filepath` provided?
@@ -152,7 +156,7 @@ And the `contentType`:
1. Try detecting file-type from the `Buffer` 1. Try detecting file-type from the `Buffer`
1. Is `filepath` provided? 1. Is `filepath` provided?
1. Is `fileOptions.filename` explicitly defined? 1. Is `fileOptions.filename` explicitly defined?
1. Default to `"application/octet-stream` 1. Default to `"application/octet-stream"`
<a name="sending-files-performance"></a> <a name="sending-files-performance"></a>
### Performance Issue ### Performance Issue

View File

@@ -1332,33 +1332,7 @@ describe('TelegramBot', function telegramSuite() {
}); });
describe('#_formatSendData', function _formatSendDataSuite() { describe('#_formatSendData', function _formatSendDataSuite() {
it('should handle buffer path from fs.readStream', function test() {
let photo;
try {
photo = fs.createReadStream(Buffer.from(`${__dirname}/data/photo.gif`));
} catch (ex) {
// Older Node.js versions do not support passing a Buffer
// representation of the path to fs.createReadStream()
if (ex instanceof TypeError) return Promise.resolve();
}
return bot.sendPhoto(USERID, photo).then(resp => {
assert.ok(is.object(resp));
assert.ok(is.array(resp.photo));
});
});
it('should not accept file-paths if disallowed with constructor option', function test() {
const tgbot = new TelegramBot(TOKEN, { filepath: false });
const photo = `${__dirname}/data/photo.gif`;
return tgbot.sendPhoto(USERID, photo).catch(err => {
// TODO: check for error in a better way
assert.ok(err.response.body.description.indexOf('Bad Request') !== -1);
});
});
it('should allow stream.path that can not be parsed', function test() {
const stream = fs.createReadStream(`${__dirname}/data/photo.gif`);
stream.path = '/?id=123'; // for example, 'http://example.com/?id=666'
return bot.sendPhoto(USERID, stream);
});
}); });
describe('#sendInvoice', function sendInvoiceSuite() { describe('#sendInvoice', function sendInvoiceSuite() {

View File

@@ -8,8 +8,9 @@ const paths = {
}; };
describe('sending files', function sendfileSuite() { describe('#_formatSendData', function sendfileSuite() {
const bot = new TelegramBot('token '); const bot = new TelegramBot('token');
const type = 'file';
before(function beforeSuite() { before(function beforeSuite() {
process.env.NTBA_FIX_350 = 1; process.env.NTBA_FIX_350 = 1;
@@ -19,7 +20,6 @@ describe('sending files', function sendfileSuite() {
}); });
describe('using fileOptions', function sendfileOptionsSuite() { describe('using fileOptions', function sendfileOptionsSuite() {
const type = 'file';
const stream = fs.createReadStream(paths.audio); const stream = fs.createReadStream(paths.audio);
const nonPathStream = fs.createReadStream(paths.audio); const nonPathStream = fs.createReadStream(paths.audio);
const buffer = fs.readFileSync(paths.audio); const buffer = fs.readFileSync(paths.audio);
@@ -105,4 +105,35 @@ describe('sending files', function sendfileSuite() {
}); });
}); });
}); });
it('should handle buffer path from fs.readStream', function test() {
let file;
try {
file = fs.createReadStream(Buffer.from(paths.audio));
} catch (ex) {
// Older Node.js versions do not support passing a Buffer
// representation of the path to fs.createReadStream()
if (ex instanceof TypeError) {
Promise.resolve();
return;
}
}
const [{ [type]: data }] = bot._formatSendData('file', file);
assert.equal(data.options.filename, path.basename(paths.audio));
});
it('should not accept file-paths if disallowed with constructor option', function test() {
const tgbot = new TelegramBot('token', { filepath: false });
const [formData, fileId] = tgbot._formatSendData('file', paths.audio);
assert.ok(fileId);
assert.ok(!formData);
});
it('should allow stream.path that can not be parsed', function test() {
const stream = fs.createReadStream(paths.audio);
stream.path = '/?id=123'; // for example, 'http://example.com/?id=666'
assert.doesNotThrow(function assertDoesNotThrow() {
bot._formatSendData('file', stream);
});
});
}); });