diff --git a/.travis.yml b/.travis.yml index f495e00..a9f2514 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,4 +3,4 @@ node_js: - "11" - "10" - "8" -script: npm test \ No newline at end of file +script: npm tests \ No newline at end of file diff --git a/README.md b/README.md index 1ea6c6e..1cfbac5 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ var api = new RetailcrmBotApiClient({ host: 'https://api.example.com', token: 'your bot token', apiVersion: 'v1' // optional -}); +}).getClient(); api.getUsers() .then(function (users) { @@ -34,14 +34,14 @@ var api = new RetailcrmBotApiClient({ host: 'https://api.example.com', token: 'your bot token', apiVersion: 'v1' // optional -}); +}).getClient(); var message = { chat_id: 1, content: 'Text message', scope: 'public', type: 'text' -} +}; api.sendMessage(message) .then(function (result) { diff --git a/index.js b/index.js index fa7d4c0..a80ccf2 100644 --- a/index.js +++ b/index.js @@ -1,9 +1,7 @@ 'use strict'; -var https = require('https'); -var querystring = require('querystring'); -var url = require('url'); -var lastApiVersion = 'v1'; +var v1 = require('./lib/v1/client'); +var request = require('./lib/request'); module.exports = RetailcrmBotApiClient; @@ -25,380 +23,26 @@ function RetailcrmBotApiClient(options) { throw new Error('Token is required'); } - this._setDefaultOptions(options) + var currentVersion; + var lastApiVersion = 'v1'; + + var clients = { + 'v1': v1.Client + }; + + if (options.apiVersion) { + currentVersion = options.apiVersion; + } else { + currentVersion = lastApiVersion; + } + + this._client = new clients[currentVersion](new request.Request(options)); } /** - * @param {Object} options - * @private + * Get API client + * @returns {Client} */ -RetailcrmBotApiClient.prototype._setDefaultOptions = function (options) { - if (!options.apiVersion) { - this.apiVersion = lastApiVersion; - } else { - this.apiVersion = options.apiVersion; - } - - this.host = url.parse(options.host).host; - this.token = options.token; -}; - -/** - * Get request path - * @param {string} endpoint - * @returns {string} - * @private - */ -RetailcrmBotApiClient.prototype._getPath = function (endpoint) { - return '/api/bot/' + this.apiVersion + endpoint; -}; - -/** - * Make request - * @param {string} endpoint - * @param {string} method - * @param {Object} data - * @returns {Promise} - * @throws {Error} - * @private - */ -RetailcrmBotApiClient.prototype._request = function (endpoint, method, data) { - var path= this._getPath(endpoint); - var response = ''; - - if (method === 'GET' && data.length > 0) { - path += '?' + querystring.stringify(data); - } - - var options = { - host: this.host, - method: method, - path: path, - headers: { - 'x-bot-token': this.token - } - }; - - return new Promise(function(resolve, reject) { - var request = https.request(options, function (res) { - res.on('data', function (chunk) { - response += chunk; - }); - - res.on('end', function () { - try { - var result = JSON.parse(response); - - if (res.statusCode < 400) { - resolve(result); - } else { - reject(new Error(result.errors.join(','))); - } - } catch (e) { - reject(e); - } - }); - - res.on('error', function (e) { - reject(e); - }) - }); - - if (['POST', 'PUT', 'PATCH'].includes(method)) { - request.write(JSON.stringify(data)); - } - - request.end(); - - request.on('error', function(e) { - reject(e); - }); - }); -}; - -/** - * Method GET - * @param {string} endpoint - * @param {Object} params - * @returns {Promise} - * @private - */ -RetailcrmBotApiClient.prototype._get = function (endpoint, params) { - if (params === undefined) { - params = {}; - } - - return this._request(endpoint, 'GET', params); -}; - -/** - * Method POST - * @param {string} endpoint - * @param {Object} data - * @returns {Promise} - * @throws {Error} - * @private - */ -RetailcrmBotApiClient.prototype._post = function (endpoint, data) { - if (!data) { - throw new Error('Body is not be empty'); - } - - return this._request(endpoint, 'POST', data); -}; - -/** - * Method PATCH - * @param {string} endpoint - * @param {Object} data - * @returns {Promise} - * @throws {Error} - * @private - */ -RetailcrmBotApiClient.prototype._patch = function (endpoint, data) { - if (!data) { - throw new Error('Body is not be empty'); - } - - return this._request(endpoint, 'PATCH', data); -}; - -/** - * Method PUT - * @param {string} endpoint - * @param {Object} data - * @returns {Promise} - * @throws {Error} - * @private - */ -RetailcrmBotApiClient.prototype._put = function (endpoint, data) { - if (!data) { - throw new Error('Body is not be empty'); - } - - return this._request(endpoint, 'PUT', data); -}; - -/** - * Method DELETE - * @param {string} endpoint - * @returns {Promise} - * @private - */ -RetailcrmBotApiClient.prototype._delete = function (endpoint) { - return this._request(endpoint, 'DELETE', {}); -}; - -/** - * Set API version - * @param {string} api_version - */ -RetailcrmBotApiClient.prototype.setApiVersion = function (api_version) { - this.apiVersion = api_version; -}; - -/** - * Get bot token - * @returns {*|string} - */ -RetailcrmBotApiClient.prototype.getToken = function () { - return this.token; -}; - -/** - * Get bots - * @param {string} params - * @returns {Promise} - */ -RetailcrmBotApiClient.prototype.getBots = function (params) { - return this._get('/bots', params); -}; - -/** - * Get channels - * @param {string} params - * @returns {Promise} - */ -RetailcrmBotApiClient.prototype.getChannels = function (params) { - return this._get('/channels', params); -}; - -/** - * Get chats - * @param {string} params - * @returns {Promise} - */ -RetailcrmBotApiClient.prototype.getChats = function (params) { - return this._get('/chats', params); -}; - -/** - * Get customers - * @param {string} params - * @returns {Promise} - */ -RetailcrmBotApiClient.prototype.getCustomers = function (params) { - return this._get('/customers', params); -}; - -/** - * Get dialogs - * @param {string} params - * @returns {Promise} - */ -RetailcrmBotApiClient.prototype.getDialogs = function (params) { - return this._get('/dialogs', params); -}; - -/** - * Get members - * @param {string} params - * @returns {Promise} - */ -RetailcrmBotApiClient.prototype.getMembers = function (params) { - return this._get('/members', params); -}; - -/** - * Assign dialog - * @param {Number} dialog_id - * @param {Object} dialog - * @returns {Promise} - */ -RetailcrmBotApiClient.prototype.assignDialog = function (dialog_id, dialog) { - return this._patch('/dialogs/'+ dialog_id + '/assign', dialog); -}; - -/** - * Close dialog - * @param {Number} dialog_id - * @returns {Promise} - * @throws {Error} - */ -RetailcrmBotApiClient.prototype.closeDialog = function (dialog_id) { - if (!dialog_id) { - throw new Error('dialog_id is required'); - } - - return this._delete('/dialogs/'+ dialog_id + '/close'); -}; - -/** - * Send message - * @param {Object} data - * @returns {Promise} - */ -RetailcrmBotApiClient.prototype.sendMessage = function (data) { - return this._post('/messages', data); -}; - -/** - * Get messages - * @param {Object} params - * @returns {Promise} - */ -RetailcrmBotApiClient.prototype.getMessages = function (params) { - return this._get('/messages', params); -}; - -/** - * Delete message - * @param {Number} message_id - * @returns {Promise} - * @throws {Error} - */ -RetailcrmBotApiClient.prototype.deleteMessage = function (message_id) { - if (!message_id) { - throw new Error('message_id is required'); - } - - return this._delete('/messages/' + message_id); -}; - -/** - * Edit message - * @param {Number} message_id - * @param {Object} message - * @returns {Promise} - */ -RetailcrmBotApiClient.prototype.editMessage = function (message_id, message) { - return this._patch('/messages/' + message_id, message); -}; - -/** - * Get bot commands - * @param {Object} params - * @returns {Promise} - */ -RetailcrmBotApiClient.prototype.getCommands = function (params) { - return this._get('/my/commands', params); -}; - -/** - * Edit bot command - * @param {string} command_name - * @param {Object} data - * @returns {Promise} - * @throws {Error} - */ -RetailcrmBotApiClient.prototype.editCommand = function (command_name, data) { - if (!command_name) { - throw new Error('Parameter command name is required'); - } - - return this._put('/my/commands/' + command_name, data); -}; - -/** - * Delete bot command - * @param {string} command_name - * @returns {Promise} - * @throws {Error} - */ -RetailcrmBotApiClient.prototype.deleteCommand = function (command_name) { - if (!command_name) { - throw new Error('command_name is required'); - } - - return this._delete('/my/commands/' + command_name); -}; - -/** - * Bot information update - * @param {Object} data - * @returns {Promise} - */ -RetailcrmBotApiClient.prototype.info = function (data) { - return this._patch('/my/info', data); -}; - -/** - * Get users - * @param {Object} params - * @returns {Promise} - */ -RetailcrmBotApiClient.prototype.getUsers = function (params) { - return this._get('/users', params); -}; - -/** - * Get websocket url - * @param {array} events - * @returns {string} - * @throws {Error} - */ -RetailcrmBotApiClient.prototype.getWebsocketUrl = function (events) { - if (!events) { - throw new Error('Events is required'); - } - - var url = 'wss://' + this.host + '/api/bot/' + this.apiVersion + '/ws?events='; - - events.forEach(function (event) { - url += event + ','; - }); - - url = url.slice(0, -1); - - return url; +RetailcrmBotApiClient.prototype.getClient = function () { + return this._client; }; diff --git a/lib/request.js b/lib/request.js new file mode 100644 index 0000000..7266179 --- /dev/null +++ b/lib/request.js @@ -0,0 +1,161 @@ +'use strict'; + +var url = require('url'); +var https = require('https'); +var querystring = require('querystring'); + +exports.Request = Request; + +/** + * @param {Object} options + * @constructor + */ +function Request(options) { + this._host = url.parse(options.host).host; + this._token = options.token; +} + +/** + * Get request path + * @param {string} endpoint + * @returns {string} + * @private + */ +Request.prototype._getPath = function (endpoint) { + return '/api/bot/' + endpoint; +}; + +/** + * Make request + * @param {string} endpoint + * @param {string} method + * @param {Object} data + * @returns {Promise} + * @throws {Error} + * @private + */ +Request.prototype._request = function (endpoint, method, data) { + var path = this._getPath(endpoint); + var response = ''; + + if (method === 'GET' && data.length > 0) { + path += '?' + querystring.stringify(data); + } + + var options = { + host: this._host, + method: method, + path: path, + headers: { + 'x-bot-token': this._token + } + }; + + return new Promise(function(resolve, reject) { + var request = https.request(options, function (res) { + res.on('data', function (chunk) { + response += chunk; + }); + + res.on('end', function () { + try { + var result = JSON.parse(response); + + if (res.statusCode < 400) { + resolve(result); + } else { + reject(new Error(result.errors.join(','))); + } + } catch (e) { + reject(e); + } + }); + + res.on('error', function (e) { + reject(e); + }) + }); + + if (['POST', 'PUT', 'PATCH'].includes(method)) { + request.write(JSON.stringify(data)); + } + + request.end(); + + request.on('error', function(e) { + reject(e); + }); + }); +}; + +/** + * Method GET + * @param {string} endpoint + * @param {Object} params + * @returns {Promise} + */ +Request.prototype.get = function (endpoint, params) { + if (params === undefined) { + params = {}; + } + + return this._request(endpoint, 'GET', params); +}; + +/** + * Method POST + * @param {string} endpoint + * @param {Object} data + * @returns {Promise} + * @throws {Error} + */ +Request.prototype.post = function (endpoint, data) { + if (!data) { + throw new Error('Body is not be empty'); + } + + return this._request(endpoint, 'POST', data); +}; + +/** + * Method PATCH + * @param {string} endpoint + * @param {Object} data + * @returns {Promise} + * @throws {Error} + */ +Request.prototype.patch = function (endpoint, data) { + if (!data) { + throw new Error('Body is not be empty'); + } + + return this._request(endpoint, 'PATCH', data); +}; + +/** + * Method PUT + * @param {string} endpoint + * @param {Object} data + * @returns {Promise} + * @throws {Error} + */ +Request.prototype.put = function (endpoint, data) { + if (!data) { + throw new Error('Body is not be empty'); + } + + return this._request(endpoint, 'PUT', data); +}; + +/** + * Method DELETE + * @param {string} endpoint + * @returns {Promise} + */ +Request.prototype.delete = function (endpoint) { + return this._request(endpoint, 'DELETE', {}); +}; + +Request.prototype.getHost = function () { + return this._host; +}; diff --git a/lib/v1/client.js b/lib/v1/client.js new file mode 100644 index 0000000..c7dadbb --- /dev/null +++ b/lib/v1/client.js @@ -0,0 +1,210 @@ +'use strict'; + +exports.Client = Client; + +/** + * @param {Request} request + * @constructor + */ +function Client(request) { + this._version = 'v1'; + this._request = request; +} + +/** + * Get bots + * @param {string} params + * @returns {Promise} + */ +Client.prototype.getBots = function (params) { + return this._request.get(this._version + '/bots', params); +}; + +/** + * Get channels + * @param {string} params + * @returns {Promise} + */ +Client.prototype.getChannels = function (params) { + return this._request.get(this._version + '/channels', params); +}; + +/** + * Get chats + * @param {string} params + * @returns {Promise} + */ +Client.prototype.getChats = function (params) { + return this._request.get(this._version + '/chats', params); +}; + +/** + * Get customers + * @param {string} params + * @returns {Promise} + */ +Client.prototype.getCustomers = function (params) { + return this._request.get(this._version + '/customers', params); +}; + +/** + * Get dialogs + * @param {string} params + * @returns {Promise} + */ +Client.prototype.getDialogs = function (params) { + return this._request.get(this._version + '/dialogs', params); +}; + +/** + * Get members + * @param {string} params + * @returns {Promise} + */ +Client.prototype.getMembers = function (params) { + return this._request.get(this._version + '/members', params); +}; + +/** + * Assign dialog + * @param {Number} dialog_id + * @param {Object} dialog + * @returns {Promise} + */ +Client.prototype.assignDialog = function (dialog_id, dialog) { + return this._request.patch(this._version + '/dialogs/'+ dialog_id + '/assign', dialog); +}; + +/** + * Close dialog + * @param {Number} dialog_id + * @returns {Promise} + * @throws {Error} + */ +Client.prototype.closeDialog = function (dialog_id) { + if (!dialog_id) { + throw new Error('dialog_id is required'); + } + + return this._request.delete(this._version + '/dialogs/'+ dialog_id + '/close'); +}; + +/** + * Send message + * @param {Object} data + * @returns {Promise} + */ +Client.prototype.sendMessage = function (data) { + return this._request.post(this._version + '/messages', data); +}; + +/** + * Get messages + * @param {Object} params + * @returns {Promise} + */ +Client.prototype.getMessages = function (params) { + return this._request.get(this._version + '/messages', params); +}; + +/** + * Delete message + * @param {Number} message_id + * @returns {Promise} + * @throws {Error} + */ +Client.prototype.deleteMessage = function (message_id) { + if (!message_id) { + throw new Error('message_id is required'); + } + + return this._request.delete(this._version + '/messages/' + message_id); +}; + +/** + * Edit message + * @param {Number} message_id + * @param {Object} message + * @returns {Promise} + */ +Client.prototype.editMessage = function (message_id, message) { + return this._request.patch(this._version + '/messages/' + message_id, message); +}; + +/** + * Get bot commands + * @param {Object} params + * @returns {Promise} + */ +Client.prototype.getCommands = function (params) { + return this._request.get(this._version + '/my/commands', params); +}; + +/** + * Edit bot command + * @param {string} command_name + * @param {Object} data + * @returns {Promise} + * @throws {Error} + */ +Client.prototype.editCommand = function (command_name, data) { + if (!command_name) { + throw new Error('Parameter command name is required'); + } + + return this._request.put(this._version + '/my/commands/' + command_name, data); +}; + +/** + * Delete bot command + * @param {string} command_name + * @returns {Promise} + * @throws {Error} + */ +Client.prototype.deleteCommand = function (command_name) { + if (!command_name) { + throw new Error('command_name is required'); + } + + return this._request.delete(this._version + '/my/commands/' + command_name); +}; + +/** + * Bot information update + * @param {Object} data + * @returns {Promise} + */ +Client.prototype.info = function (data) { + return this._request.patch(this._version + '/my/info', data); +}; + +/** + * Get users + * @param {Object} params + * @returns {Promise} + */ +Client.prototype.getUsers = function (params) { + return this._request.get(this._version + '/users', params); +}; + +/** + * Get websocket url + * @param {array} events + * @returns {string} + * @throws {Error} + */ +Client.prototype.getWebsocketUrl = function (events) { + if (!events) { + throw new Error('Events is required'); + } + + var url = 'wss://' + this._request.getHost() + '/api/bot/' + this._version + '/ws?events='; + + events.forEach(function (event) { + url += event + ','; + }); + + url = url.slice(0, -1); + + return url; +}; diff --git a/package.json b/package.json index 23a9fd5..c599480 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "tags": ["API", "retailCRM", "Bot", "Chat"], "version": "1.0.0", "scripts": { - "test": " ./node_modules/.bin/_mocha test.js" + "test": "./node_modules/.bin/_mocha ./tests/." }, "author": "retailCRM", "license": "MIT", diff --git a/tests/test_index.js b/tests/test_index.js new file mode 100644 index 0000000..a58a973 --- /dev/null +++ b/tests/test_index.js @@ -0,0 +1,26 @@ +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://api.example.com', + token: 'test_token' + }); + }).to.throw('HTTPS required'); + }); + + it('Empty token', function () { + chai.expect(function() { + new RetailcrmBotApiClient({host: 'https://api.example.com'}); + }).to.throw('Token is required'); + }); +}); diff --git a/tests/test_request.js b/tests/test_request.js new file mode 100644 index 0000000..f88ca69 --- /dev/null +++ b/tests/test_request.js @@ -0,0 +1,14 @@ +var chai = require('chai'); +var request = require('../lib/request'); + +describe('#Request', function () { + var req = new request.Request({ + host: 'http://api.example.com', + token: 'test_token' + }); + + it('Request parameters', function () { + chai.expect(req._host).to.equal('api.example.com'); + chai.expect(req._token).to.equal('test_token'); + }) +}); diff --git a/test.js b/tests/test_v1_client.js similarity index 69% rename from test.js rename to tests/test_v1_client.js index 0d275eb..49d5f83 100644 --- a/test.js +++ b/tests/test_v1_client.js @@ -1,54 +1,19 @@ var nock = require('nock'); var chai = require('chai'); -var RetailcrmBotApiClient = require('./index'); +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() { +describe('#API client v1', function() { beforeEach(function() { nock.cleanAll(); }); var retailcrm = new RetailcrmBotApiClient({ - host: 'https://test.retailcrm.ru', + host: 'https://api.example.com', token: 'test_token' - }); + }).getClient(); it('Get bots list', function() { - nock('https://test.retailcrm.ru/api/bot/v1').get('/bots').reply(200, [{ + nock('https://api.example.com/api/bot/v1').get('/bots').reply(200, [{ id: 1, isActive: true }]); @@ -60,7 +25,7 @@ describe('#Requests', function() { }); it('Get empty bots list', function () { - nock('https://test.retailcrm.ru/api/bot/v1').get('/bots').reply(200, []); + nock('https://api.example.com/api/bot/v1').get('/bots').reply(200, []); retailcrm.getBots().then(function (value) { chai.expect(value).to.be.an('array'); @@ -69,7 +34,7 @@ describe('#Requests', function() { }); it('Get channels list', function () { - nock('https://test.retailcrm.ru/api/bot/v1').get('/channels').reply(200, [{ + nock('https://api.example.com/api/bot/v1').get('/channels').reply(200, [{ id: 1 }]); @@ -80,7 +45,7 @@ describe('#Requests', function() { }); it('Get empty channels list', function () { - nock('https://test.retailcrm.ru/api/bot/v1').get('/channels').reply(200, []); + nock('https://api.example.com/api/bot/v1').get('/channels').reply(200, []); retailcrm.getChannels().then(function (value) { chai.expect(value).to.be.an('array'); @@ -89,7 +54,7 @@ describe('#Requests', function() { }); it('Get chats list', function () { - nock('https://test.retailcrm.ru/api/bot/v1').get('/chats').reply(200, [{ + nock('https://api.example.com/api/bot/v1').get('/chats').reply(200, [{ author_id: 1, id: 1 }]); @@ -101,7 +66,7 @@ describe('#Requests', function() { }); it('Get empty chats list', function () { - nock('https://test.retailcrm.ru/api/bot/v1').get('/chats').reply(200, []); + nock('https://api.example.com/api/bot/v1').get('/chats').reply(200, []); retailcrm.getChats().then(function (value) { chai.expect(value).to.be.an('array'); @@ -110,7 +75,7 @@ describe('#Requests', function() { }); it('Get customers list', function () { - nock('https://test.retailcrm.ru/api/bot/v1').get('/customers').reply(200, [{ + nock('https://api.example.com/api/bot/v1').get('/customers').reply(200, [{ external_id: 1, channel_id: 1, id: 1 @@ -123,7 +88,7 @@ describe('#Requests', function() { }); it('Get empty customers list', function () { - nock('https://test.retailcrm.ru/api/bot/v1').get('/customers').reply(200, []); + nock('https://api.example.com/api/bot/v1').get('/customers').reply(200, []); retailcrm.getCustomers().then(function (value) { chai.expect(value).to.be.an('array'); @@ -132,7 +97,7 @@ describe('#Requests', function() { }); it('Get dialogs list', function () { - nock('https://test.retailcrm.ru/api/bot/v1').get('/dialogs').reply(200, [{ + nock('https://api.example.com/api/bot/v1').get('/dialogs').reply(200, [{ begin_message_id: 1, id: 1 }]); @@ -144,7 +109,7 @@ describe('#Requests', function() { }); it('Get empty dialogs list', function () { - nock('https://test.retailcrm.ru/api/bot/v1').get('/dialogs').reply(200, []); + nock('https://api.example.com/api/bot/v1').get('/dialogs').reply(200, []); retailcrm.getDialogs().then(function (value) { chai.expect(value).to.be.an('array'); @@ -153,7 +118,7 @@ describe('#Requests', function() { }); it('Get members list', function () { - nock('https://test.retailcrm.ru/api/bot/v1').get('/members').reply(200, [{ + nock('https://api.example.com/api/bot/v1').get('/members').reply(200, [{ id: 1 }]); @@ -164,7 +129,7 @@ describe('#Requests', function() { }); it('Get empty members list', function () { - nock('https://test.retailcrm.ru/api/bot/v1').get('/members').reply(200, []); + nock('https://api.example.com/api/bot/v1').get('/members').reply(200, []); retailcrm.getMembers().then(function (value) { chai.expect(value).to.be.an('array'); @@ -173,7 +138,7 @@ describe('#Requests', function() { }); it('Assign dialog', function () { - nock('https://test.retailcrm.ru/api/bot/v1').patch('/dialogs/1/assign').reply(200, { + nock('https://api.example.com/api/bot/v1').patch('/dialogs/1/assign').reply(200, { is_reassign: true, responsible: { id: 1 @@ -192,7 +157,7 @@ describe('#Requests', function() { }); it('Close dialog', function () { - nock('https://test.retailcrm.ru/api/bot/v1').delete('/dialogs/1/close').reply(200, {}); + nock('https://api.example.com/api/bot/v1').delete('/dialogs/1/close').reply(200, {}); retailcrm.closeDialog(1).then(function (value) { chai.expect(value).to.be.empty; @@ -204,11 +169,11 @@ describe('#Requests', function() { }); it('Send message', function () { - nock('https://test.retailcrm.ru/api/bot/v1').post('/messages', { + nock('https://api.example.com/api/bot/v1').post('/messages', { chat_id: 1, scope: 'public', type: 'text', - content: 'test message' + content: 'tests message' }).reply(200, { message_id: 1 }); @@ -217,7 +182,7 @@ describe('#Requests', function() { chat_id: 1, scope: 'public', type: 'text', - content: 'test message' + content: 'tests message' }).then(function (value) { chai.expect(value).to.be.an('object'); chai.expect(value).to.be.not.empty; @@ -229,7 +194,7 @@ describe('#Requests', function() { }); it('Get messages', function() { - nock('https://test.retailcrm.ru/api/bot/v1').get('/messages').reply(200, [{ + nock('https://api.example.com/api/bot/v1').get('/messages').reply(200, [{ id: 1, chat_id: 1, from: { @@ -244,7 +209,7 @@ describe('#Requests', function() { }); it('Get empty messages', function () { - nock('https://test.retailcrm.ru/api/bot/v1').get('/messages').reply(200, []); + nock('https://api.example.com/api/bot/v1').get('/messages').reply(200, []); retailcrm.getMessages().then(function (value) { chai.expect(value).to.be.an('array'); @@ -253,7 +218,7 @@ describe('#Requests', function() { }); it('Delete message', function () { - nock('https://test.retailcrm.ru/api/bot/v1').delete('/messages/1').reply(200, {}); + nock('https://api.example.com/api/bot/v1').delete('/messages/1').reply(200, {}); retailcrm.deleteMessage(1).then(function (value) { chai.expect(value).to.be.empty; @@ -265,12 +230,12 @@ describe('#Requests', function() { }); it('Edit message', function () { - nock('https://test.retailcrm.ru/api/bot/v1').patch('/messages/1', { - content: 'test message' + nock('https://api.example.com/api/bot/v1').patch('/messages/1', { + content: 'tests message' }).reply(200, {}); retailcrm.editMessage(1, { - content: 'test message' + content: 'tests message' }).then(function (value) { chai.expect(value).to.be.empty; }); @@ -281,7 +246,7 @@ describe('#Requests', function() { }); it('Get commands', function () { - nock('https://test.retailcrm.ru/api/bot/v1').get('/my/commands').reply(200, [{ + nock('https://api.example.com/api/bot/v1').get('/my/commands').reply(200, [{ id: 1, name: 'Command name' }]); @@ -293,7 +258,7 @@ describe('#Requests', function() { }); it('Get empty commands', function () { - nock('https://test.retailcrm.ru/api/bot/v1').get('/my/commands').reply(200, []); + nock('https://api.example.com/api/bot/v1').get('/my/commands').reply(200, []); retailcrm.getCommands().then(function (value) { chai.expect(value).to.be.an('array'); @@ -302,7 +267,7 @@ describe('#Requests', function() { }); it('Edit command', function () { - nock('https://test.retailcrm.ru/api/bot/v1').put('/my/commands/command', { + nock('https://api.example.com/api/bot/v1').put('/my/commands/command', { description: 'Desc', name: 'name' }).reply(200, {}); @@ -321,7 +286,7 @@ describe('#Requests', function() { }); it('Delete command', function () { - nock('https://test.retailcrm.ru/api/bot/v1').delete('/my/commands/command').reply(200, {}); + nock('https://api.example.com/api/bot/v1').delete('/my/commands/command').reply(200, {}); retailcrm.deleteCommand('command').then(function (value) { chai.expect(value).to.be.empty; @@ -333,13 +298,13 @@ describe('#Requests', function() { }); it('Update bot info', function () { - nock('https://test.retailcrm.ru/api/bot/v1').patch('/my/info', { - avatar_url: 'http://test.ru/avatar.png', + nock('https://api.example.com/api/bot/v1').patch('/my/info', { + avatar_url: 'http://tests.ru/avatar.png', name: 'Bot' }).reply(200, {}); retailcrm.info({ - avatar_url: 'http://test.ru/avatar.png', + avatar_url: 'http://tests.ru/avatar.png', name: 'Bot' }).then(function (value) { chai.expect(value).to.be.empty; @@ -351,7 +316,7 @@ describe('#Requests', function() { }); it('Get users', function () { - nock('https://test.retailcrm.ru/api/bot/v1').get('/users').reply(200, [{ + nock('https://api.example.com/api/bot/v1').get('/users').reply(200, [{ id: 1, name: 'Username' }]); @@ -363,7 +328,7 @@ describe('#Requests', function() { }); it('Get empty users', function () { - nock('https://test.retailcrm.ru/api/bot/v1').get('/users').reply(200, []); + nock('https://api.example.com/api/bot/v1').get('/users').reply(200, []); retailcrm.getUsers().then(function (value) { chai.expect(value).to.be.an('array'); @@ -373,7 +338,7 @@ describe('#Requests', function() { 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'; + var expected = 'wss://api.example.com/api/bot/v1/ws?events=message_new,message_updated'; chai.assert.equal(url, expected); });