var nock = require('nock'); var chai = require('chai'); var RetailcrmBotApiClient = require('./index'); describe('#Constructor', function () { it('Empty url', function () { chai.expect(function() { new RetailcrmBotApiClient({token: 'test_token'}); }).to.throw('Url is required'); }); it('Incorrect url', function () { chai.expect(function() { new RetailcrmBotApiClient({ host: 'http://test.retailcrm.ru', token: 'test_token' }); }).to.throw('HTTPS required'); }); it('Empty token', function () { chai.expect(function() { new RetailcrmBotApiClient({host: 'https://test.retailcrm.ru',}); }).to.throw('Token is required'); }); it('Set the default options', function () { var api = new RetailcrmBotApiClient({ host: 'https://test.retailcrm.ru', token: 'xxxxxxxxxxxxxxxxxxxxxxxx' }); chai.expect(api.apiVersion).to.equal('v1'); chai.expect(api.token).to.equal('xxxxxxxxxxxxxxxxxxxxxxxx'); chai.expect(api.getToken()).to.equal('xxxxxxxxxxxxxxxxxxxxxxxx'); chai.expect(api.host).to.equal('test.retailcrm.ru'); }); }); describe('#Requests', function() { beforeEach(function() { nock.cleanAll(); }); var retailcrm = new RetailcrmBotApiClient({ host: 'https://test.retailcrm.ru', token: 'test_token' }); it('Get bots list', function() { nock('https://test.retailcrm.ru/api/bot/v1').get('/bots').reply(200, [{ id: 1, isActive: true }]); retailcrm.getBots().then(function (value) { chai.expect(value).to.be.an('array'); chai.expect(value).to.be.not.empty; }); }); it('Get empty bots list', function () { nock('https://test.retailcrm.ru/api/bot/v1').get('/bots').reply(200, []); retailcrm.getBots().then(function (value) { chai.expect(value).to.be.an('array'); chai.expect(value).to.be.empty; }); }); it('Get channels list', function () { nock('https://test.retailcrm.ru/api/bot/v1').get('/channels').reply(200, [{ id: 1 }]); retailcrm.getChannels().then(function (value) { chai.expect(value).to.be.an('array'); chai.expect(value).to.be.not.empty; }); }); it('Get empty channels list', function () { nock('https://test.retailcrm.ru/api/bot/v1').get('/channels').reply(200, []); retailcrm.getChannels().then(function (value) { chai.expect(value).to.be.an('array'); chai.expect(value).to.be.empty; }); }); it('Get chats list', function () { nock('https://test.retailcrm.ru/api/bot/v1').get('/chats').reply(200, [{ author_id: 1, id: 1 }]); retailcrm.getChats().then(function (value) { chai.expect(value).to.be.an('array'); chai.expect(value).to.be.not.empty; }); }); it('Get empty chats list', function () { nock('https://test.retailcrm.ru/api/bot/v1').get('/chats').reply(200, []); retailcrm.getChats().then(function (value) { chai.expect(value).to.be.an('array'); chai.expect(value).to.be.empty; }); }); it('Get customers list', function () { nock('https://test.retailcrm.ru/api/bot/v1').get('/customers').reply(200, [{ external_id: 1, channel_id: 1, id: 1 }]); retailcrm.getCustomers().then(function (value) { chai.expect(value).to.be.an('array'); chai.expect(value).to.be.not.empty; }); }); it('Get empty customers list', function () { nock('https://test.retailcrm.ru/api/bot/v1').get('/customers').reply(200, []); retailcrm.getCustomers().then(function (value) { chai.expect(value).to.be.an('array'); chai.expect(value).to.be.empty; }); }); it('Get dialogs list', function () { nock('https://test.retailcrm.ru/api/bot/v1').get('/dialogs').reply(200, [{ begin_message_id: 1, id: 1 }]); retailcrm.getDialogs().then(function (value) { chai.expect(value).to.be.an('array'); chai.expect(value).to.be.not.empty; }); }); it('Get empty dialogs list', function () { nock('https://test.retailcrm.ru/api/bot/v1').get('/dialogs').reply(200, []); retailcrm.getDialogs().then(function (value) { chai.expect(value).to.be.an('array'); chai.expect(value).to.be.empty; }); }); it('Get members list', function () { nock('https://test.retailcrm.ru/api/bot/v1').get('/members').reply(200, [{ id: 1 }]); retailcrm.getMembers().then(function (value) { chai.expect(value).to.be.an('array'); chai.expect(value).to.be.not.empty; }); }); it('Get empty members list', function () { nock('https://test.retailcrm.ru/api/bot/v1').get('/members').reply(200, []); retailcrm.getMembers().then(function (value) { chai.expect(value).to.be.an('array'); chai.expect(value).to.be.empty; }); }); it('Assign dialog', function () { nock('https://test.retailcrm.ru/api/bot/v1').patch('/dialogs/1/assign').reply(200, { is_reassign: true, responsible: { id: 1 } }); retailcrm.assignDialog(1, { manager_id: 1 }).then(function (value) { chai.expect(value).to.be.an('object'); }); }); it('Assign dialog incorrect', function () { chai.expect(retailcrm.assignDialog.bind(retailcrm)).to.throw('Body is not be empty'); }); it('Close dialog', function () { nock('https://test.retailcrm.ru/api/bot/v1').delete('/dialogs/1/close').reply(200, {}); retailcrm.closeDialog(1).then(function (value) { chai.expect(value).to.be.empty; }); }); it('Close dialog incorrect', function () { chai.expect(retailcrm.closeDialog.bind(retailcrm)).to.throw('dialog_id is required'); }); it('Send message', function () { nock('https://test.retailcrm.ru/api/bot/v1').post('/messages', { chat_id: 1, scope: 'public', type: 'text', content: 'test message' }).reply(200, { message_id: 1 }); retailcrm.sendMessage({ chat_id: 1, scope: 'public', type: 'text', content: 'test message' }).then(function (value) { chai.expect(value).to.be.an('object'); chai.expect(value).to.be.not.empty; }); }); it('Send message incorrect', function () { chai.expect(retailcrm.sendMessage.bind(retailcrm)).to.throw('Body is not be empty'); }); it('Get messages', function() { nock('https://test.retailcrm.ru/api/bot/v1').get('/messages').reply(200, [{ id: 1, chat_id: 1, from: { id: 1 } }]); retailcrm.getMessages().then(function (value) { chai.expect(value).to.be.an('array'); chai.expect(value).to.be.not.empty; }); }); it('Get empty messages', function () { nock('https://test.retailcrm.ru/api/bot/v1').get('/messages').reply(200, []); retailcrm.getMessages().then(function (value) { chai.expect(value).to.be.an('array'); chai.expect(value).to.be.empty; }); }); it('Delete message', function () { nock('https://test.retailcrm.ru/api/bot/v1').delete('/messages/1').reply(200, {}); retailcrm.deleteMessage(1).then(function (value) { chai.expect(value).to.be.empty; }); }); it('Delete message incorrect', function () { chai.expect(retailcrm.deleteMessage.bind(retailcrm)).to.throw('message_id is required'); }); it('Edit message', function () { nock('https://test.retailcrm.ru/api/bot/v1').patch('/messages/1', { content: 'test message' }).reply(200, {}); retailcrm.editMessage(1, { content: 'test message' }).then(function (value) { chai.expect(value).to.be.empty; }); }); it('Edit message incorrect', function () { chai.expect(retailcrm.editMessage.bind(retailcrm)).to.throw('Body is not be empty'); }); it('Get commands', function () { nock('https://test.retailcrm.ru/api/bot/v1').get('/my/commands').reply(200, [{ id: 1, name: 'Command name' }]); retailcrm.getCommands().then(function (value) { chai.expect(value).to.be.an('array'); chai.expect(value).to.be.not.empty; }); }); it('Get empty commands', function () { nock('https://test.retailcrm.ru/api/bot/v1').get('/my/commands').reply(200, []); retailcrm.getCommands().then(function (value) { chai.expect(value).to.be.an('array'); chai.expect(value).to.be.empty; }); }); it('Edit command', function () { nock('https://test.retailcrm.ru/api/bot/v1').put('/my/commands/command', { description: 'Desc', name: 'name' }).reply(200, {}); retailcrm.editCommand('command', { description: 'Desc', name: 'name' }).then(function (value) { chai.expect(value).to.be.empty; }); }); it('Edit command incorrect', function () { chai.expect(retailcrm.editCommand.bind(retailcrm, 'command')).to.throw('Body is not be empty'); chai.expect(retailcrm.editCommand.bind(retailcrm)).to.throw('Parameter command name is required'); }); it('Delete command', function () { nock('https://test.retailcrm.ru/api/bot/v1').delete('/my/commands/command').reply(200, {}); retailcrm.deleteCommand('command').then(function (value) { chai.expect(value).to.be.empty; }); }); it('Delete command incorrect', function () { chai.expect(retailcrm.deleteCommand.bind(retailcrm)).to.throw('command_name is required'); }); it('Update bot info', function () { nock('https://test.retailcrm.ru/api/bot/v1').patch('/my/info', { avatar_url: 'http://test.ru/avatar.png', name: 'Bot' }).reply(200, {}); retailcrm.info({ avatar_url: 'http://test.ru/avatar.png', name: 'Bot' }).then(function (value) { chai.expect(value).to.be.empty; }); }); it('Update bot info incorrect', function () { chai.expect(retailcrm.info.bind(retailcrm)).to.throw('Body is not be empty'); }); it('Get users', function () { nock('https://test.retailcrm.ru/api/bot/v1').get('/users').reply(200, [{ id: 1, name: 'Username' }]); retailcrm.getUsers().then(function (value) { chai.expect(value).to.be.an('array'); chai.expect(value).to.be.not.empty; }); }); it('Get empty users', function () { nock('https://test.retailcrm.ru/api/bot/v1').get('/users').reply(200, []); retailcrm.getUsers().then(function (value) { chai.expect(value).to.be.an('array'); chai.expect(value).to.be.empty; }); }); it('Get websocket url', function () { var url = retailcrm.getWebsocketUrl(['message_new', 'message_updated']); var expected = 'wss://test.retailcrm.ru/api/bot/v1/ws?events=message_new,message_updated'; chai.assert.equal(url, expected); }); it('Get websocket url incorrect', function () { chai.expect(retailcrm.getWebsocketUrl.bind(retailcrm)).to.throw('Events is required'); }); });