From efd5fde0352d005676bb1ac5216bde6f0f05e265 Mon Sep 17 00:00:00 2001 From: Le Roux Bodenstein Date: Fri, 15 Jan 2016 16:04:56 +0200 Subject: [PATCH 1/4] Initial commit based off tentacles. --- Makefile | 18 - README.md | 115 ---- VERSION | 1 - gulpfile.js | 21 + lib/client.js | 285 ++++----- lib/errors.js | 13 + lib/faye.js | 75 --- lib/gitter.js | 22 - lib/resources/index.js | 5 + lib/resources/messages.js | 28 + lib/resources/rooms.js | 28 + lib/resources/users.js | 47 ++ lib/rooms.js | 111 ---- lib/users.js | 63 -- output/coverage-reports/coverage.json | 1 + output/coverage-reports/lcov-report/base.css | 182 ++++++ .../coverage-reports/lcov-report/index.html | 86 +++ .../lcov-report/lib/client.js.html | 540 ++++++++++++++++++ .../lcov-report/lib/errors.js.html | 84 +++ .../lcov-report/lib/index.html | 86 +++ .../lcov-report/lib/resources/index.html | 112 ++++ .../lcov-report/lib/resources/index.js.html | 60 ++ .../lib/resources/messages.js.html | 129 +++++ .../lcov-report/lib/resources/rooms.js.html | 129 +++++ .../lcov-report/lib/resources/users.js.html | 186 ++++++ .../coverage-reports/lcov-report/prettify.css | 1 + .../coverage-reports/lcov-report/prettify.js | 1 + .../lcov-report/sort-arrow-sprite.png | Bin 0 -> 209 bytes output/coverage-reports/lcov-report/sorter.js | 156 +++++ output/coverage-reports/lcov.info | 195 +++++++ package.json | 19 +- test/custom-request.js | 52 ++ test/extensions.js | 20 + test/mocha.opts | 3 + test/options-passthrough.js | 64 +++ test/resources/messages.js | 59 ++ test/resources/rooms.js | 47 ++ test/resources/users.js | 72 +++ test/rooms-test.js | 196 ------- test/spread.js | 58 ++ test/users-test.js | 88 --- 41 files changed, 2620 insertions(+), 838 deletions(-) delete mode 100644 Makefile delete mode 100644 VERSION create mode 100644 gulpfile.js create mode 100644 lib/errors.js delete mode 100644 lib/faye.js delete mode 100644 lib/gitter.js create mode 100644 lib/resources/index.js create mode 100644 lib/resources/messages.js create mode 100644 lib/resources/rooms.js create mode 100644 lib/resources/users.js delete mode 100644 lib/rooms.js delete mode 100644 lib/users.js create mode 100644 output/coverage-reports/coverage.json create mode 100644 output/coverage-reports/lcov-report/base.css create mode 100644 output/coverage-reports/lcov-report/index.html create mode 100644 output/coverage-reports/lcov-report/lib/client.js.html create mode 100644 output/coverage-reports/lcov-report/lib/errors.js.html create mode 100644 output/coverage-reports/lcov-report/lib/index.html create mode 100644 output/coverage-reports/lcov-report/lib/resources/index.html create mode 100644 output/coverage-reports/lcov-report/lib/resources/index.js.html create mode 100644 output/coverage-reports/lcov-report/lib/resources/messages.js.html create mode 100644 output/coverage-reports/lcov-report/lib/resources/rooms.js.html create mode 100644 output/coverage-reports/lcov-report/lib/resources/users.js.html create mode 100644 output/coverage-reports/lcov-report/prettify.css create mode 100644 output/coverage-reports/lcov-report/prettify.js create mode 100644 output/coverage-reports/lcov-report/sort-arrow-sprite.png create mode 100644 output/coverage-reports/lcov-report/sorter.js create mode 100644 output/coverage-reports/lcov.info create mode 100644 test/custom-request.js create mode 100644 test/extensions.js create mode 100644 test/mocha.opts create mode 100644 test/options-passthrough.js create mode 100644 test/resources/messages.js create mode 100644 test/resources/rooms.js create mode 100644 test/resources/users.js delete mode 100644 test/rooms-test.js create mode 100644 test/spread.js delete mode 100644 test/users-test.js diff --git a/Makefile b/Makefile deleted file mode 100644 index 69da9a3..0000000 --- a/Makefile +++ /dev/null @@ -1,18 +0,0 @@ -.PHONY: all npm validate test security-check clean - -ci: clean npm validate test - -clean: - rm -rf output/ - -npm: - npm prune - npm install - -validate: npm security-check - -test: - npm test - -security-check: - ./node_modules/.bin/retire -n diff --git a/README.md b/README.md index a6c3ea3..6345019 100644 --- a/README.md +++ b/README.md @@ -11,126 +11,11 @@ $ npm install --save node-gitter ## Basics -```js -var Gitter = require('node-gitter'); - -var gitter = new Gitter(token); - -gitter.currentUser() -.then(function(user) { - console.log('You are logged in as:', user.username); -}); -``` ### Authentication It's mandatory to provide a valid Gitter OAuth token in order to use the client. You can obtain one from [https://developer.gitter.im/apps](https://developer.gitter.im/apps). -### Promises or Callbacks - -The client implements both. The following code is equivalent: - -Using promises: - -```js -gitter.rooms.join('gitterhq/sandbox') -.then(function(room) { - console.log('Joined room: ', room.name); -}) -.fail(function(err) { - console.log('Not possible to join the room: ', err); -}) -``` - -Using node-style callbacks: - -```js -gitter.rooms.join('gitterhq/sandbox', function(err, room) { - if (err) { - console.log('Not possible to join the room: ', err); - return; - } - - console.log('Joined room: ', room.name); -}); - -``` - -## Users - -### Current user -```js -gitter.currentUser() -``` - -### Current user rooms, repos, orgs and channels -```js -gitter.currentUser() -.then(function(user) { - user.rooms() - user.repos() - user.orgs() - user.channels() -}) -``` - -### Find a user -```js -gitter.users.find(userId) -``` - -## Rooms - -### Join a room -```js -gitter.rooms.join('gitterhq/sandbox') -``` - -### Post a message to a room -```js -gitter.rooms.join('gitterhq/sandbox') -.then(function(room) { - room.send('Hello world!'); -}); - -``` - -### Listen for chatMessages, Events or Users in a room -```js -gitter.rooms.find(roomId).then(function(room) { - - var events = room.streaming().chatMessages(); - - // The 'snapshot' event is emitted once, with the last messages in the room - events.on('snapshot', function(snapshot) { - console.log(snapshot.length + ' messages in the snapshot'); - }); - - // The 'chatMessages' event is emitted on each new message - events.on('chatMessages', function(message) { - console.log('A message was ' + message.operation); - console.log('Text: ', message.model.text); - }); -}); -``` - -### Room users, channels and messages -```js -gitter.rooms.find(roomId) -.then(function(room) { - room.users() - room.channels() - room.chatMessages() -}); -``` - -### Leave a room -```js -gitter.rooms.find(roomId) -.then(function(room) { - room.leave() -}); -``` # License diff --git a/VERSION b/VERSION deleted file mode 100644 index 3c43790..0000000 --- a/VERSION +++ /dev/null @@ -1 +0,0 @@ -1.2.6 diff --git a/gulpfile.js b/gulpfile.js new file mode 100644 index 0000000..b05a00a --- /dev/null +++ b/gulpfile.js @@ -0,0 +1,21 @@ +var gulp = require('gulp'); +var mocha = require('gulp-spawn-mocha'); + +/** + * test + */ +gulp.task('test', function() { + return gulp.src(['./test/**/*.js'], { read: false }) + .pipe(mocha({ + reporter: 'spec', + timeout: 10000, + istanbul: { + dir: 'output/coverage-reports/' + }, + env: { + Q_DEBUG: 1 + } + })); +}); + +gulp.task('default', ['test']); diff --git a/lib/client.js b/lib/client.js index 8ef90e3..dd6040f 100644 --- a/lib/client.js +++ b/lib/client.js @@ -1,162 +1,165 @@ -/* jshint node:true, unused:true */ - -var https = require('https'); -var http = require('http'); -var qs = require('qs'); -var Q = require('q'); -var url = require('url'); -var debug = require('debug')('node-gitter'); - -var Client = function(token, opts) { - opts = opts || {}; - this.token = token; - - // Will be set once authenticated - this.currentUser = null; - - if(opts.apiEndpoint) { - var parsed = url.parse(opts.apiEndpoint); - - this.host = parsed.hostname; - this.port = parsed.port; - this.protocol = parsed.protocol.replace(/:\/?\/?$/,''); - - var pathname = parsed.pathname; - if(pathname[pathname.length - 1] === '/') { - pathname = pathname.substring(0, pathname.length - 1); - } - - this.pathPrefix = pathname; - } else { - this.host = opts.host || 'api.gitter.im'; - this.port = opts.port || 443; - this.protocol = this.port === 443 ? 'https' : 'http'; - this.pathPrefix = (opts.prefix ? '/api/' : '/') + (opts.version || 'v1'); +'use strict'; + +var _ = require('lodash'); +var request = require('request'); +var Promise = require('bluebird'); +var url = require('url'); +var errors = require('./errors'); +var requestExt = require('request-extensible'); +Client.PACKAGE_VERSION = require('../package.json').version; +var resources = require('./resources'); +Client.resources = resources; +var debug = require('debug')('node-gitter:client'); + +/* Constructs the request which the client will use */ +function getRequestLib(options) { + var underlyingRequest = options.request || request; + /* If extensions have been specified, use request-extensible */ + if (options.extensions) { + return requestExt({ + request: underlyingRequest, + extensions: options.extensions + }); } -}; - -['GET', 'POST', 'PUT', 'PATCH', 'DELETE'].forEach(function(method) { - Client.prototype[method.toLowerCase()] = function(path, opts) { - return this.request(method, path, opts); - }; -}); -Client.prototype.request = function(method, path, opts) { - opts = opts || {}; - var self = this; - var defer = Q.defer(); - - var headers = { - 'Authorization': 'Bearer ' + this.token, - 'Accept': 'application/json' - }; + return underlyingRequest; +} + +function Client(options) { + if (!options) options = {}; + this.spread = options.spread; + this.accessToken = options.accessToken; + this.requestLib = getRequestLib(options); + this.defaultHeaders = _.extend({ + 'Accept': 'application/json', + 'Content-Type': 'application/json', + 'User-Agent': 'NodeGitter/' + Client.PACKAGE_VERSION + }, options.headers); + + this._prepResources(); +} + +Client.prototype = { + _prepResources: function() { + + for (var name in resources) { + this[ + name[0].toLowerCase() + name.substring(1) + ] = new resources[name](this); + } - if(opts.body) { - headers['Content-Type'] = 'application/json'; - } + }, - var req_opts = { - hostname: this.host, - port: this.port, - method: method, - path: this.pathPrefix + (opts.query ? path + '?' + qs.stringify(opts.query) : path), - headers: headers - }; + _request: function(method, path, data, spec, options) { + var self = this; - var scheme = { http: http, https: https}[this.protocol]; + var headers = _.extend({}, this.defaultHeaders, spec.headers, options.headers); - debug('%s %s', req_opts.method, req_opts.path); + headers.Authorization = 'Bearer ' + (options.accessToken || this.accessToken); - var req = scheme.request(req_opts, function(res) { - // Accommodate webpack/browserify - if(res.setEncoding) { - res.setEncoding('utf-8'); - } + return new Promise(_.bind(function(resolve, reject) { + var uri = url.format({ + protocol: "https:", + host: "api.gitter.im", + pathname: path, + query: options.query + }); - self.rateLimit = res.headers['x-ratelimit-limit']; - self.remaining = res.headers['x-ratelimit-remaining']; + debug(method+' '+uri, headers); - var data = ''; - res.on('data' , function(chunk) { - data += chunk; - }); + var useSpread = options.spread !== undefined ? options.spread : this.spread; - res.on('end', function() { - var body; - try { - body = JSON.parse(data); - } catch(err) { - defer.reject(new Error(res.statusCode + ' ' + data)); + function spreadResponse(body, response) { + resolve([body, response]); } - if (res.statusCode !== 200) { - defer.reject(new Error(res.statusCode + ' ' + data)); - } else { - defer.resolve(body); + function noSpreadResponse(body) { + resolve(body); } - }); - }); - req.on('error', function(err) { - defer.reject(err); - }); - - if (opts.body) { - req.write(JSON.stringify(opts.body)); - } - - req.end(); - - return defer.promise; -}; - -Client.prototype.stream = function(path, cb) { - var headers = { - 'Authorization': 'Bearer ' + this.token, - 'Accept': 'application/json', - 'Content-Type': 'application/json' - }; - - var opts = { - host: 'stream.gitter.im', - port: 443, - method: 'GET', - path: this.pathPrefix + path, - headers: headers - }; - - debug('%s %s', opts.method, opts.path); - - var heartbeat = " \n"; - - var req = https.request(opts, function(res) { - var msg = ''; - - res.setEncoding('utf-8'); - - res.on('data' , function(chunk) { - var m = chunk.toString(); - if (m === heartbeat) { - msg = ''; - return; + var resolver = useSpread ? spreadResponse : noSpreadResponse; + + // Pass the options through to the extensions, but don't include the options + // that have been mutated by this method + var passThroughOptions = _.omit(options, 'query', 'accessToken', 'spread', 'headers', 'body', 'url', 'json', 'followRedirect', 'followAllRedirects'); + + var requestOptions = _.defaults({ + method: method, + uri: uri, + headers: headers, + body: data, + json: !!data, + gzip: true, + encoding: options.encoding === undefined ? 'utf8' : options.encoding, + followRedirect: true, + followAllRedirects: true, // Redirects for non-GET requests + }, passThroughOptions); + + this.requestLib(requestOptions, function(err, response, body) { + if (err) { + err.response = response; + return reject(err); + } + + if (spec.checkOperation) { + /* 404 means "false" */ + if (response.statusCode === 404) { + return resolver(false, response); + } + + /* 2XX means "true" */ + if (response.statusCode < 300) { + return resolver(true, response); + } + } + + if (options.treat404asEmpty && response.statusCode === 404) { + return resolver(null, response); + } + + try { + var parsedBody = self._parseBody(response, body); + + if (response.statusCode >= 400) { + var message = typeof parsedBody.message === 'string' ? parsedBody.message.replace(/\n+/g, ' ') : "HTTP " + response.statusCode; + debug(message, parsedBody || body); + return reject(new errors.GitterError(message, { + url: uri, + statusCode: response.statusCode, + headers: response.headers, + body: parsedBody || body + })); + } + + return resolver(parsedBody, response); + + } catch(e) { + return reject(e); + } + + }); + + }, this)); + + }, + + _parseBody: function(response, body) { + if (typeof body !== 'string') return body; + + // TODO: deal with various types + var contentType = response.headers['content-type']; + if (contentType) { + var ct = contentType.split(';')[0]; + + if (ct === 'application/json') { + return JSON.parse(body); } - msg += m; - try { - var evt = JSON.parse(msg); - msg = ''; - cb(evt); - } catch (err) { - // Partial message. Ignore it. - } - }); - }); + } - req.on('error', function(err) { - console.error('[stream]', err); - }); + return body; + } - req.end(); }; module.exports = Client; diff --git a/lib/errors.js b/lib/errors.js new file mode 100644 index 0000000..176cb7e --- /dev/null +++ b/lib/errors.js @@ -0,0 +1,13 @@ +'use strict'; + +var createError = require('create-error'); + +// an error this library threw +var NodeGitterError = createError('NodeGitterError'); +// gitter's threw this error +var GitterError = createError(NodeGitterError, 'GitterError'); + +module.exports = { + NodeGitterError: NodeGitterError, + GitterError: GitterError +}; diff --git a/lib/faye.js b/lib/faye.js deleted file mode 100644 index 82df014..0000000 --- a/lib/faye.js +++ /dev/null @@ -1,75 +0,0 @@ -/* jshint node:true, unused:true */ - -var Faye = require('gitter-faye'); -var EventEmitter = require('eventemitter3'); - -// Authentication extension for Faye -var ClientAuthExt = function(opts) { - this.token = opts.token; - this.clientType = opts.clientType; -}; - -ClientAuthExt.prototype.outgoing = function(message, callback) { - if (message.channel == '/meta/handshake') { - if (!message.ext) message.ext = {}; - if (this.clientType) message.ext.client = this.clientType; - message.ext.token = this.token; - } - - callback(message); -}; - -// Snapshot extension for Faye -var SnapshotExt = function(opts) { - this.subscriptions = opts.subscriptions; -}; - -SnapshotExt.prototype.incoming = function(message, callback) { - if(message.channel == '/meta/subscribe' && message.ext && message.ext.snapshot) { - var sub = this.subscriptions[message.subscription]; - if (sub) sub.emitter.emit('snapshot', message.ext.snapshot); - } - - callback(message); -}; - -// Client wrapper - -var FayeClient = function(token, opts) { - opts = opts || {}; - var host = opts.host || 'https://ws.gitter.im/faye'; - - this.subscriptions = {}; - - this.client = new Faye.Client(host, {timeout: 60, retry: 5, interval: 1}); - this.client.addExtension(new ClientAuthExt({token: token, clientType: opts.clientType})); - this.client.addExtension(new SnapshotExt({subscriptions: this.subscriptions})); -}; - -FayeClient.prototype.subscribeTo = function(resource, eventName) { - if (this.subscriptions[resource]) return this.subscriptions[resource].emitter; - - var emitter = new EventEmitter(); - var subscription = this.client.subscribe(resource, function(msg) { - emitter.emit(eventName, msg); - }); - - this.subscriptions[resource] = { - eventName: eventName, - emitter: emitter, - subscription: subscription - }; - - return emitter; -}; - -FayeClient.prototype.disconnect = function() { - var self = this; - - Object.keys(this.subscriptions).forEach(function(sub) { - self.subscriptions[sub].subscription.cancel(); - self.subscriptions[sub].emitter.removeAllListeners(); - }); -}; - -module.exports = FayeClient; diff --git a/lib/gitter.js b/lib/gitter.js deleted file mode 100644 index 3e562e5..0000000 --- a/lib/gitter.js +++ /dev/null @@ -1,22 +0,0 @@ -/* jshint node:true, unused:true */ - -var Client = require('./client.js'); -var Users = require('./users.js'); -var Rooms = require('./rooms.js'); -var FayeClient = require('./faye.js'); - -var Gitter = function(token, opts) { - opts = opts || {}; - - this.client = new Client(token, opts.client); - this.faye = new FayeClient(token, opts.faye); - - this.users = new Users(null, this.client, this.faye); - this.rooms = new Rooms(null, this.client, this.faye); -}; - -Gitter.prototype.currentUser = function(cb) { - return cb ? this.users.current().nodeify(cb) : this.users.current(); -}; - -module.exports = Gitter; diff --git a/lib/resources/index.js b/lib/resources/index.js new file mode 100644 index 0000000..ba687c2 --- /dev/null +++ b/lib/resources/index.js @@ -0,0 +1,5 @@ +'use strict'; + +var requireDirectory = require('require-directory'); + +module.exports = requireDirectory(module); diff --git a/lib/resources/messages.js b/lib/resources/messages.js new file mode 100644 index 0000000..2cfce47 --- /dev/null +++ b/lib/resources/messages.js @@ -0,0 +1,28 @@ +'use strict'; + +var Resource = require('tentacles/lib/Resource'); +var method = Resource.method; + +module.exports = Resource.extend({ + listForRoom: method({ + method: 'GET', + path: '/v1/rooms/:roomId/chatMessages', + urlParams: ['roomId'] + }), + + create: method({ + method: 'POST', + path: '/v1/rooms/:roomId/chatMessages', + urlParams: ['roomId'] + }), + + update: method({ + method: 'PUT', + path: '/v1/rooms/:roomId/chatMessages/:chatMessageId', + urlParams: ['roomId', 'chatMessageId'] + }), + + streamForRoom: function() { + // TODO + } +}); diff --git a/lib/resources/rooms.js b/lib/resources/rooms.js new file mode 100644 index 0000000..81de2ac --- /dev/null +++ b/lib/resources/rooms.js @@ -0,0 +1,28 @@ +'use strict'; + +var Resource = require('tentacles/lib/Resource'); +var method = Resource.method; + +module.exports = Resource.extend({ + listForAuthUser: method({ + method: 'GET', + path: '/v1/rooms' + }), + + listUsers: method({ + method: 'GET', + path: '/v1/rooms/:roomId/users', + urlParams: ['roomId'] + }), + + listChannels: method({ + method: 'GET', + path: '/v1/rooms/:roomId/channels', + urlParams: ['roomId'] + }), + + join: method({ + method: 'POST', + path: '/v1/rooms' + }) +}); diff --git a/lib/resources/users.js b/lib/resources/users.js new file mode 100644 index 0000000..6637f4c --- /dev/null +++ b/lib/resources/users.js @@ -0,0 +1,47 @@ +'use strict'; + +var Resource = require('tentacles/lib/Resource'); +var method = Resource.method; + +module.exports = Resource.extend({ + getAuthUser: method({ + method: 'GET', + path: '/v1/user/me' + }), + + listRooms: method({ + method: 'GET', + path: '/v1/user/:userId/rooms', + urlParams: ['userId'] + }), + + listOrgs: method({ + method: 'GET', + path: '/v1/user/:userId/orgs', + urlParams: ['userId'] + }), + + listRepos: method({ + method: 'GET', + path: '/v1/user/:userId/repos', + urlParams: ['userId'] + }), + + listChannels: method({ + method: 'GET', + path: '/v1/user/:userId/channels', + urlParams: ['userId'] + }), + + listUnreadsForRoom: method({ + method: 'GET', + path: '/v1/user/:userId/rooms/:roomId/unreadItems', + urlParams: ['userId', 'roomId'] + }), + + markUnreadsForRoom: method({ + method: 'POST', + path: '/v1/user/:userId/rooms/:roomId/unreadItems', + urlParams: ['userId', 'roomId'] + }) +}); diff --git a/lib/rooms.js b/lib/rooms.js deleted file mode 100644 index 3b8aea6..0000000 --- a/lib/rooms.js +++ /dev/null @@ -1,111 +0,0 @@ -/* jshint node:true, unused:true */ - -var util = require('util'); -var EventEmitter = require('eventemitter3'); -var Q = require('q'); - -var Room = function(attrs, client, faye) { - EventEmitter.call(this); - - // API path to Room - this.path = '/rooms'; - - if (attrs) - Object.keys(attrs).forEach(function(k) { - this[k] = attrs[k]; - }.bind(this)); - - if (typeof this.users !== 'function') { - var users = this.users; - this.users = function() { - return Q.resolve(users); - } - } - - this.client = client; - this.faye = faye; -}; - -util.inherits(Room, EventEmitter); - -Room.prototype.findAll = function() { - return this.client.get(this.path); -}; - -Room.prototype.find = function(id, cb) { - var room = this.client.get(this.path + '/' + id) - .then(function(roomData) { - return new Room(roomData, this.client, this.faye); - }.bind(this)); - return cb ? room.nodeify(cb) : room; -}; - -Room.prototype.join = function(room_uri, cb) { - var room = this.client.post(this.path, {body: {uri: room_uri}}) - .then(function(roomData) { - return new Room(roomData, this.client, this.faye); - }.bind(this)); - return cb ? room.nodeify(cb) : room; -}; - -Room.prototype.send = function(message, cb) { - var msg = this.client.post(this.path + '/' + this.id + '/chatMessages', {body: {text: message}}); - return cb ? msg.nodeify(cb) : msg; -}; - -Room.prototype.sendStatus = function(message, cb) { - var msg = this.client.post(this.path + '/' + this.id + '/chatMessages', {body: {text: message, status: true}}); - return cb ? msg.nodeify(cb) : msg; -}; - -Room.prototype.removeUser = function(userId) { - return this.client.delete(this.path + '/' + this.id + '/users/' + userId); -}; - -Room.prototype.listen = function() { - this.client.stream(this.path + '/' + this.id + '/chatMessages', function(message) { - this.emit('message', message); - }.bind(this)); - return this; -}; - -['users', 'channels', 'chatMessages'].forEach(function(resource) { - Room.prototype[resource] = function(query, cb) { - var items = this.client.get(this.path + '/' + this.id + '/' + resource, { query: query }); - return cb ? items.nodeify(cb) : items; - }; -}); - -Room.prototype.subscribe = function() { - ['chatMessages', 'events', 'users'].forEach(function(resource) { - var resourcePath = '/api/v1/rooms/' + this.id + '/' + resource; - var events = this.faye.subscribeTo(resourcePath, resourcePath) - events.on(resourcePath, function(msg) { - this.emit(resource, msg); - }.bind(this)); - }.bind(this)); -}; - -Room.prototype.unsubscribe = function() { - ['chatMessages', 'events', 'users'].forEach(function(resource) { - var resourcePath = '/api/v1/rooms/' + this.id + '/' + resource; - var meta = this.faye.subscriptions[resourcePath]; - if (meta) meta.subscription.cancel(); - }.bind(this)); -}; - -// DEPRECATED Rooms is now an event emitter and all you need is to -// subscribe() to start receiving events -Room.prototype.streaming = function() { - this.subscribe(); - var fn = function() { return this; }.bind(this); - - return { - chatMessages: fn, - events: fn, - users: fn, - disconnect: function() { this.faye.disconnect(); }.bind(this) - } -} - -module.exports = Room; diff --git a/lib/users.js b/lib/users.js deleted file mode 100644 index b311fc8..0000000 --- a/lib/users.js +++ /dev/null @@ -1,63 +0,0 @@ -/* jshint node:true, unused:true */ - -var User = function(attrs, client, faye) { - // API path to Users - this.path = '/user'; - - if (attrs) - Object.keys(attrs).forEach(function(k) { - this[k] = attrs[k]; - }.bind(this)); - - this.client = client; - this.faye = faye; -}; - -User.prototype.current = function() { - return this.client.get(this.path) - .then(function(users) { - var userData = users[0]; - return new User(userData, this.client, this.faye); - }.bind(this)); -}; - -User.prototype.find = function(id, cb) { - var path = this.path + '/' + id; - return cb ? this.client.get(path).nodeify(cb) : this.client.get(path); -}; - -User.prototype.findById = function(id, cb) { - var path = this.path + '/' + id; - var user = this.client.get(path) - .then(function(userData) { - return new User(userData, this.client, this.faye); - }.bind(this)); - - return cb ? user.nodeify(cb) : user; -}; - -User.prototype.findByUsername = function(username, cb) { - var user = this.client.get(this.path, {query: {q: username}}) - .then(function(results) { - var userData = results.results[0]; - return new User(userData, this.client, this.faye); - }.bind(this)); - - return cb ? user.nodeify(cb) : user; -}; - -['rooms', 'repos', 'orgs', 'channels'].forEach(function(resource) { - User.prototype[resource] = function(query, cb) { - var resourcePath = this.path + '/' + this.id + '/' + resource; - var resources = this.client.get(resourcePath, {query: query}); - return cb ? resources.nodeify(cb) : resources; - }; -}); - -User.prototype.markAsRead = function(roomId, chatIds, cb) { - var resourcePath = this.path + '/' + this.id + '/rooms/' + roomId + '/unreadItems'; - var resource = this.client.post(resourcePath, {body: {chat: chatIds}}); - return cb ? resource.nodeify(cb) : resource; -}; - -module.exports = User; diff --git a/output/coverage-reports/coverage.json b/output/coverage-reports/coverage.json new file mode 100644 index 0000000..b980d97 --- /dev/null +++ b/output/coverage-reports/coverage.json @@ -0,0 +1 @@ +{"/Users/leroux/gitter/node-gitter/lib/client.js":{"path":"/Users/leroux/gitter/node-gitter/lib/client.js","s":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":10,"13":10,"14":1,"15":9,"16":1,"17":10,"18":0,"19":10,"20":10,"21":10,"22":10,"23":10,"24":1,"25":10,"26":30,"27":29,"28":29,"29":29,"30":29,"31":29,"32":29,"33":29,"34":1,"35":2,"36":1,"37":27,"38":29,"39":29,"40":29,"41":29,"42":29,"43":0,"44":0,"45":29,"46":0,"47":0,"48":0,"49":0,"50":29,"51":0,"52":29,"53":29,"54":29,"55":0,"56":0,"57":0,"58":29,"59":0,"60":29,"61":8,"62":21,"63":21,"64":21,"65":21,"66":21,"67":0,"68":1},"b":{"1":[10,6],"2":[1,9],"3":[0,10],"4":[29,29],"5":[2,27],"6":[2,27],"7":[29,0],"8":[0,29],"9":[0,29],"10":[0,0],"11":[0,0],"12":[0,29],"13":[29,0],"14":[0,29],"15":[0,0],"16":[0,0],"17":[0,0],"18":[8,21],"19":[21,0],"20":[21,0]},"f":{"1":10,"2":10,"3":10,"4":29,"5":29,"6":2,"7":27,"8":29,"9":29},"fnMap":{"1":{"name":"getRequestLib","line":15,"loc":{"start":{"line":15,"column":0},"end":{"line":15,"column":32}}},"2":{"name":"Client","line":28,"loc":{"start":{"line":28,"column":0},"end":{"line":28,"column":25}}},"3":{"name":"(anonymous_3)","line":43,"loc":{"start":{"line":43,"column":18},"end":{"line":43,"column":29}}},"4":{"name":"(anonymous_4)","line":53,"loc":{"start":{"line":53,"column":12},"end":{"line":53,"column":56}}},"5":{"name":"(anonymous_5)","line":60,"loc":{"start":{"line":60,"column":30},"end":{"line":60,"column":56}}},"6":{"name":"spreadResponse","line":72,"loc":{"start":{"line":72,"column":6},"end":{"line":72,"column":46}}},"7":{"name":"noSpreadResponse","line":76,"loc":{"start":{"line":76,"column":6},"end":{"line":76,"column":38}}},"8":{"name":"(anonymous_8)","line":98,"loc":{"start":{"line":98,"column":38},"end":{"line":98,"column":68}}},"9":{"name":"(anonymous_9)","line":146,"loc":{"start":{"line":146,"column":14},"end":{"line":146,"column":39}}}},"statementMap":{"1":{"start":{"line":3,"column":0},"end":{"line":3,"column":26}},"2":{"start":{"line":4,"column":0},"end":{"line":4,"column":33}},"3":{"start":{"line":5,"column":0},"end":{"line":5,"column":34}},"4":{"start":{"line":6,"column":0},"end":{"line":6,"column":25}},"5":{"start":{"line":7,"column":0},"end":{"line":7,"column":33}},"6":{"start":{"line":8,"column":0},"end":{"line":8,"column":47}},"7":{"start":{"line":9,"column":0},"end":{"line":9,"column":60}},"8":{"start":{"line":10,"column":0},"end":{"line":10,"column":39}},"9":{"start":{"line":11,"column":0},"end":{"line":11,"column":29}},"10":{"start":{"line":12,"column":0},"end":{"line":12,"column":51}},"11":{"start":{"line":15,"column":0},"end":{"line":26,"column":1}},"12":{"start":{"line":16,"column":2},"end":{"line":16,"column":53}},"13":{"start":{"line":18,"column":2},"end":{"line":23,"column":3}},"14":{"start":{"line":19,"column":4},"end":{"line":22,"column":7}},"15":{"start":{"line":25,"column":2},"end":{"line":25,"column":27}},"16":{"start":{"line":28,"column":0},"end":{"line":40,"column":1}},"17":{"start":{"line":29,"column":2},"end":{"line":29,"column":29}},"18":{"start":{"line":29,"column":16},"end":{"line":29,"column":29}},"19":{"start":{"line":30,"column":2},"end":{"line":30,"column":31}},"20":{"start":{"line":31,"column":2},"end":{"line":31,"column":41}},"21":{"start":{"line":32,"column":2},"end":{"line":32,"column":43}},"22":{"start":{"line":33,"column":2},"end":{"line":37,"column":22}},"23":{"start":{"line":39,"column":2},"end":{"line":39,"column":24}},"24":{"start":{"line":42,"column":0},"end":{"line":163,"column":2}},"25":{"start":{"line":45,"column":4},"end":{"line":49,"column":5}},"26":{"start":{"line":46,"column":6},"end":{"line":48,"column":36}},"27":{"start":{"line":54,"column":4},"end":{"line":54,"column":20}},"28":{"start":{"line":56,"column":4},"end":{"line":56,"column":83}},"29":{"start":{"line":58,"column":4},"end":{"line":58,"column":82}},"30":{"start":{"line":60,"column":4},"end":{"line":142,"column":14}},"31":{"start":{"line":61,"column":6},"end":{"line":66,"column":9}},"32":{"start":{"line":68,"column":6},"end":{"line":68,"column":37}},"33":{"start":{"line":70,"column":6},"end":{"line":70,"column":83}},"34":{"start":{"line":72,"column":6},"end":{"line":74,"column":7}},"35":{"start":{"line":73,"column":8},"end":{"line":73,"column":34}},"36":{"start":{"line":76,"column":6},"end":{"line":78,"column":7}},"37":{"start":{"line":77,"column":8},"end":{"line":77,"column":22}},"38":{"start":{"line":80,"column":6},"end":{"line":80,"column":67}},"39":{"start":{"line":84,"column":6},"end":{"line":84,"column":155}},"40":{"start":{"line":86,"column":6},"end":{"line":96,"column":29}},"41":{"start":{"line":98,"column":6},"end":{"line":140,"column":9}},"42":{"start":{"line":99,"column":8},"end":{"line":102,"column":9}},"43":{"start":{"line":100,"column":10},"end":{"line":100,"column":34}},"44":{"start":{"line":101,"column":10},"end":{"line":101,"column":29}},"45":{"start":{"line":104,"column":8},"end":{"line":114,"column":9}},"46":{"start":{"line":106,"column":10},"end":{"line":108,"column":11}},"47":{"start":{"line":107,"column":12},"end":{"line":107,"column":45}},"48":{"start":{"line":111,"column":10},"end":{"line":113,"column":11}},"49":{"start":{"line":112,"column":12},"end":{"line":112,"column":44}},"50":{"start":{"line":116,"column":8},"end":{"line":118,"column":9}},"51":{"start":{"line":117,"column":10},"end":{"line":117,"column":42}},"52":{"start":{"line":120,"column":8},"end":{"line":138,"column":9}},"53":{"start":{"line":121,"column":10},"end":{"line":121,"column":59}},"54":{"start":{"line":123,"column":10},"end":{"line":132,"column":11}},"55":{"start":{"line":124,"column":12},"end":{"line":124,"column":139}},"56":{"start":{"line":125,"column":12},"end":{"line":125,"column":47}},"57":{"start":{"line":126,"column":12},"end":{"line":131,"column":16}},"58":{"start":{"line":134,"column":10},"end":{"line":134,"column":48}},"59":{"start":{"line":137,"column":10},"end":{"line":137,"column":27}},"60":{"start":{"line":147,"column":4},"end":{"line":147,"column":46}},"61":{"start":{"line":147,"column":34},"end":{"line":147,"column":46}},"62":{"start":{"line":150,"column":4},"end":{"line":150,"column":55}},"63":{"start":{"line":151,"column":4},"end":{"line":158,"column":5}},"64":{"start":{"line":152,"column":6},"end":{"line":152,"column":41}},"65":{"start":{"line":154,"column":6},"end":{"line":156,"column":7}},"66":{"start":{"line":155,"column":8},"end":{"line":155,"column":32}},"67":{"start":{"line":160,"column":4},"end":{"line":160,"column":16}},"68":{"start":{"line":165,"column":0},"end":{"line":165,"column":24}}},"branchMap":{"1":{"line":16,"type":"binary-expr","locations":[{"start":{"line":16,"column":26},"end":{"line":16,"column":41}},{"start":{"line":16,"column":45},"end":{"line":16,"column":52}}]},"2":{"line":18,"type":"if","locations":[{"start":{"line":18,"column":2},"end":{"line":18,"column":2}},{"start":{"line":18,"column":2},"end":{"line":18,"column":2}}]},"3":{"line":29,"type":"if","locations":[{"start":{"line":29,"column":2},"end":{"line":29,"column":2}},{"start":{"line":29,"column":2},"end":{"line":29,"column":2}}]},"4":{"line":58,"type":"binary-expr","locations":[{"start":{"line":58,"column":41},"end":{"line":58,"column":60}},{"start":{"line":58,"column":64},"end":{"line":58,"column":80}}]},"5":{"line":70,"type":"cond-expr","locations":[{"start":{"line":70,"column":54},"end":{"line":70,"column":68}},{"start":{"line":70,"column":71},"end":{"line":70,"column":82}}]},"6":{"line":80,"type":"cond-expr","locations":[{"start":{"line":80,"column":33},"end":{"line":80,"column":47}},{"start":{"line":80,"column":50},"end":{"line":80,"column":66}}]},"7":{"line":93,"type":"cond-expr","locations":[{"start":{"line":93,"column":51},"end":{"line":93,"column":57}},{"start":{"line":93,"column":60},"end":{"line":93,"column":76}}]},"8":{"line":99,"type":"if","locations":[{"start":{"line":99,"column":8},"end":{"line":99,"column":8}},{"start":{"line":99,"column":8},"end":{"line":99,"column":8}}]},"9":{"line":104,"type":"if","locations":[{"start":{"line":104,"column":8},"end":{"line":104,"column":8}},{"start":{"line":104,"column":8},"end":{"line":104,"column":8}}]},"10":{"line":106,"type":"if","locations":[{"start":{"line":106,"column":10},"end":{"line":106,"column":10}},{"start":{"line":106,"column":10},"end":{"line":106,"column":10}}]},"11":{"line":111,"type":"if","locations":[{"start":{"line":111,"column":10},"end":{"line":111,"column":10}},{"start":{"line":111,"column":10},"end":{"line":111,"column":10}}]},"12":{"line":116,"type":"if","locations":[{"start":{"line":116,"column":8},"end":{"line":116,"column":8}},{"start":{"line":116,"column":8},"end":{"line":116,"column":8}}]},"13":{"line":116,"type":"binary-expr","locations":[{"start":{"line":116,"column":12},"end":{"line":116,"column":35}},{"start":{"line":116,"column":39},"end":{"line":116,"column":66}}]},"14":{"line":123,"type":"if","locations":[{"start":{"line":123,"column":10},"end":{"line":123,"column":10}},{"start":{"line":123,"column":10},"end":{"line":123,"column":10}}]},"15":{"line":124,"type":"cond-expr","locations":[{"start":{"line":124,"column":67},"end":{"line":124,"column":106}},{"start":{"line":124,"column":109},"end":{"line":124,"column":138}}]},"16":{"line":125,"type":"binary-expr","locations":[{"start":{"line":125,"column":27},"end":{"line":125,"column":37}},{"start":{"line":125,"column":41},"end":{"line":125,"column":45}}]},"17":{"line":130,"type":"binary-expr","locations":[{"start":{"line":130,"column":20},"end":{"line":130,"column":30}},{"start":{"line":130,"column":34},"end":{"line":130,"column":38}}]},"18":{"line":147,"type":"if","locations":[{"start":{"line":147,"column":4},"end":{"line":147,"column":4}},{"start":{"line":147,"column":4},"end":{"line":147,"column":4}}]},"19":{"line":151,"type":"if","locations":[{"start":{"line":151,"column":4},"end":{"line":151,"column":4}},{"start":{"line":151,"column":4},"end":{"line":151,"column":4}}]},"20":{"line":154,"type":"if","locations":[{"start":{"line":154,"column":6},"end":{"line":154,"column":6}},{"start":{"line":154,"column":6},"end":{"line":154,"column":6}}]}}},"/Users/leroux/gitter/node-gitter/lib/errors.js":{"path":"/Users/leroux/gitter/node-gitter/lib/errors.js","s":{"1":1,"2":1,"3":1,"4":1},"b":{},"f":{},"fnMap":{},"statementMap":{"1":{"start":{"line":3,"column":0},"end":{"line":3,"column":42}},"2":{"start":{"line":6,"column":0},"end":{"line":6,"column":53}},"3":{"start":{"line":8,"column":0},"end":{"line":8,"column":62}},"4":{"start":{"line":10,"column":0},"end":{"line":13,"column":2}}},"branchMap":{}},"/Users/leroux/gitter/node-gitter/lib/resources/index.js":{"path":"/Users/leroux/gitter/node-gitter/lib/resources/index.js","s":{"1":1,"2":1},"b":{},"f":{},"fnMap":{},"statementMap":{"1":{"start":{"line":3,"column":0},"end":{"line":3,"column":52}},"2":{"start":{"line":5,"column":0},"end":{"line":5,"column":42}}},"branchMap":{}},"/Users/leroux/gitter/node-gitter/lib/resources/messages.js":{"path":"/Users/leroux/gitter/node-gitter/lib/resources/messages.js","s":{"1":1,"2":1,"3":1},"b":{},"f":{"1":0},"fnMap":{"1":{"name":"(anonymous_1)","line":25,"loc":{"start":{"line":25,"column":17},"end":{"line":25,"column":28}}}},"statementMap":{"1":{"start":{"line":3,"column":0},"end":{"line":3,"column":49}},"2":{"start":{"line":4,"column":0},"end":{"line":4,"column":29}},"3":{"start":{"line":6,"column":0},"end":{"line":28,"column":3}}},"branchMap":{}},"/Users/leroux/gitter/node-gitter/lib/resources/rooms.js":{"path":"/Users/leroux/gitter/node-gitter/lib/resources/rooms.js","s":{"1":1,"2":1,"3":1},"b":{},"f":{},"fnMap":{},"statementMap":{"1":{"start":{"line":3,"column":0},"end":{"line":3,"column":49}},"2":{"start":{"line":4,"column":0},"end":{"line":4,"column":29}},"3":{"start":{"line":6,"column":0},"end":{"line":28,"column":3}}},"branchMap":{}},"/Users/leroux/gitter/node-gitter/lib/resources/users.js":{"path":"/Users/leroux/gitter/node-gitter/lib/resources/users.js","s":{"1":1,"2":1,"3":1},"b":{},"f":{},"fnMap":{},"statementMap":{"1":{"start":{"line":3,"column":0},"end":{"line":3,"column":49}},"2":{"start":{"line":4,"column":0},"end":{"line":4,"column":29}},"3":{"start":{"line":6,"column":0},"end":{"line":47,"column":3}}},"branchMap":{}}} \ No newline at end of file diff --git a/output/coverage-reports/lcov-report/base.css b/output/coverage-reports/lcov-report/base.css new file mode 100644 index 0000000..a6a2f32 --- /dev/null +++ b/output/coverage-reports/lcov-report/base.css @@ -0,0 +1,182 @@ +body, html { + margin:0; padding: 0; +} +body { + font-family: Helvetica Neue, Helvetica,Arial; + font-size: 10pt; +} +div.header, div.footer { + background: #eee; + padding: 1em; +} +div.header { + z-index: 100; + position: fixed; + top: 0; + border-bottom: 1px solid #666; + width: 100%; +} +div.footer { + border-top: 1px solid #666; +} +div.body { + margin-top: 10em; +} +div.meta { + font-size: 90%; + text-align: center; +} +h1, h2, h3 { + font-weight: normal; +} +h1 { + font-size: 12pt; +} +h2 { + font-size: 10pt; +} +pre { + font-family: Consolas, Menlo, Monaco, monospace; + margin: 0; + padding: 0; + line-height: 1.3; + font-size: 14px; + -moz-tab-size: 2; + -o-tab-size: 2; + tab-size: 2; +} + +div.path { font-size: 110%; } +div.path a:link, div.path a:visited { color: #000; } +table.coverage { border-collapse: collapse; margin:0; padding: 0 } + +table.coverage td { + margin: 0; + padding: 0; + color: #111; + vertical-align: top; +} +table.coverage td.line-count { + width: 50px; + text-align: right; + padding-right: 5px; +} +table.coverage td.line-coverage { + color: #777 !important; + text-align: right; + border-left: 1px solid #666; + border-right: 1px solid #666; +} + +table.coverage td.text { +} + +table.coverage td span.cline-any { + display: inline-block; + padding: 0 5px; + width: 40px; +} +table.coverage td span.cline-neutral { + background: #eee; +} +table.coverage td span.cline-yes { + background: #b5d592; + color: #999; +} +table.coverage td span.cline-no { + background: #fc8c84; +} + +.cstat-yes { color: #111; } +.cstat-no { background: #fc8c84; color: #111; } +.fstat-no { background: #ffc520; color: #111 !important; } +.cbranch-no { background: yellow !important; color: #111; } + +.cstat-skip { background: #ddd; color: #111; } +.fstat-skip { background: #ddd; color: #111 !important; } +.cbranch-skip { background: #ddd !important; color: #111; } + +.missing-if-branch { + display: inline-block; + margin-right: 10px; + position: relative; + padding: 0 4px; + background: black; + color: yellow; +} + +.skip-if-branch { + display: none; + margin-right: 10px; + position: relative; + padding: 0 4px; + background: #ccc; + color: white; +} + +.missing-if-branch .typ, .skip-if-branch .typ { + color: inherit !important; +} + +.entity, .metric { font-weight: bold; } +.metric { display: inline-block; border: 1px solid #333; padding: 0.3em; background: white; } +.metric small { font-size: 80%; font-weight: normal; color: #666; } + +div.coverage-summary table { border-collapse: collapse; margin: 3em; font-size: 110%; } +div.coverage-summary td, div.coverage-summary table th { margin: 0; padding: 0.25em 1em; border-top: 1px solid #666; border-bottom: 1px solid #666; } +div.coverage-summary th { text-align: left; border: 1px solid #666; background: #eee; font-weight: normal; } +div.coverage-summary th.file { border-right: none !important; } +div.coverage-summary th.pic { border-left: none !important; text-align: right; } +div.coverage-summary th.pct { border-right: none !important; } +div.coverage-summary th.abs { border-left: none !important; text-align: right; } +div.coverage-summary td.pct { text-align: right; border-left: 1px solid #666; } +div.coverage-summary td.abs { text-align: right; font-size: 90%; color: #444; border-right: 1px solid #666; } +div.coverage-summary td.file { border-left: 1px solid #666; white-space: nowrap; } +div.coverage-summary td.pic { min-width: 120px !important; } +div.coverage-summary a:link { text-decoration: none; color: #000; } +div.coverage-summary a:visited { text-decoration: none; color: #777; } +div.coverage-summary a:hover { text-decoration: underline; } +div.coverage-summary tfoot td { border-top: 1px solid #666; } + +div.coverage-summary .sorter { + height: 10px; + width: 7px; + display: inline-block; + margin-left: 0.5em; + background: url(sort-arrow-sprite.png) no-repeat scroll 0 0 transparent; +} +div.coverage-summary .sorted .sorter { + background-position: 0 -20px; +} +div.coverage-summary .sorted-desc .sorter { + background-position: 0 -10px; +} + +.high { background: #b5d592 !important; } +.medium { background: #ffe87c !important; } +.low { background: #fc8c84 !important; } + +span.cover-fill, span.cover-empty { + display:inline-block; + border:1px solid #444; + background: white; + height: 12px; +} +span.cover-fill { + background: #ccc; + border-right: 1px solid #444; +} +span.cover-empty { + background: white; + border-left: none; +} +span.cover-full { + border-right: none !important; +} +pre.prettyprint { + border: none !important; + padding: 0 !important; + margin: 0 !important; +} +.com { color: #999 !important; } +.ignore-none { color: #999; font-weight: normal; } diff --git a/output/coverage-reports/lcov-report/index.html b/output/coverage-reports/lcov-report/index.html new file mode 100644 index 0000000..7daf71e --- /dev/null +++ b/output/coverage-reports/lcov-report/index.html @@ -0,0 +1,86 @@ + + + + Code coverage report for All files + + + + + + +
+

Code coverage report for All files

+

+ Statements: 84.34% (70 / 83)      + Branches: 52.5% (21 / 40)      + Functions: 90% (9 / 10)      + Lines: 85.19% (69 / 81)      + Ignored: none      +

+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
lib/81.94%(59 / 72)52.5%(21 / 40)100%(9 / 9)82.86%(58 / 70)
lib/resources/100%(11 / 11)100%(0 / 0)0%(0 / 1)100%(11 / 11)
+
+
+ + + + + + diff --git a/output/coverage-reports/lcov-report/lib/client.js.html b/output/coverage-reports/lcov-report/lib/client.js.html new file mode 100644 index 0000000..35b9af4 --- /dev/null +++ b/output/coverage-reports/lcov-report/lib/client.js.html @@ -0,0 +1,540 @@ + + + + Code coverage report for lib/client.js + + + + + + +
+

Code coverage report for lib/client.js

+

+ Statements: 80.88% (55 / 68)      + Branches: 52.5% (21 / 40)      + Functions: 100% (9 / 9)      + Lines: 81.82% (54 / 66)      + Ignored: none      +

+
All files » lib/ » client.js
+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166  +  +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +  +  +1 +10 +  +10 +1 +  +  +  +  +  +9 +  +  +1 +10 +10 +10 +10 +10 +  +  +  +  +  +10 +  +  +1 +  +  +10 +30 +  +  +  +  +  +  +  +29 +  +29 +  +29 +  +29 +29 +  +  +  +  +  +  +29 +  +29 +  +1 +2 +  +  +1 +27 +  +  +29 +  +  +  +29 +  +29 +  +  +  +  +  +  +  +  +  +  +  +29 +29 +  +  +  +  +29 +  +  +  +  +  +  +  +  +  +  +  +29 +  +  +  +29 +29 +  +29 +  +  +  +  +  +  +  +  +  +  +29 +  +  +  +  +  +  +  +  +  +  +  +  +29 +  +  +21 +21 +21 +  +21 +21 +  +  +  +  +  +  +  +  +  +1 + 
'use strict';
+ 
+var _ = require('lodash');
+var request = require('request');
+var Promise = require('bluebird');
+var url = require('url');
+var errors = require('./errors');
+var requestExt = require('request-extensible');
+Client.PACKAGE_VERSION = require('../package.json').version;
+var resources = require('./resources');
+Client.resources = resources;
+var debug = require('debug')('node-gitter:client');
+ 
+/* Constructs the request which the client will use */
+function getRequestLib(options) {
+  var underlyingRequest = options.request || request;
+  /* If extensions have been specified, use request-extensible */
+  if (options.extensions) {
+    return requestExt({
+      request: underlyingRequest,
+      extensions: options.extensions
+    });
+  }
+ 
+  return underlyingRequest;
+}
+ 
+function Client(options) {
+  Iif (!options) options = {};
+  this.spread = options.spread;
+  this.accessToken = options.accessToken;
+  this.requestLib = getRequestLib(options);
+  this.defaultHeaders = _.extend({
+    'Accept': 'application/json',
+    'Content-Type': 'application/json',
+    'User-Agent': 'NodeGitter/' + Client.PACKAGE_VERSION
+  }, options.headers);
+ 
+  this._prepResources();
+}
+ 
+Client.prototype = {
+  _prepResources: function() {
+ 
+    for (var name in resources) {
+      this[
+        name[0].toLowerCase() + name.substring(1)
+      ] = new resources[name](this);
+    }
+ 
+  },
+ 
+  _request: function(method, path, data, spec, options) {
+    var self = this;
+ 
+    var headers = _.extend({}, this.defaultHeaders, spec.headers, options.headers);
+ 
+    headers.Authorization = 'Bearer ' + (options.accessToken || this.accessToken);
+ 
+    return new Promise(_.bind(function(resolve, reject) {
+      var uri = url.format({
+        protocol: "https:",
+        host: "api.gitter.im",
+        pathname: path,
+        query: options.query
+      });
+ 
+      debug(method+' '+uri, headers);
+ 
+      var useSpread = options.spread !== undefined  ? options.spread : this.spread;
+ 
+      function spreadResponse(body, response) {
+        resolve([body, response]);
+      }
+ 
+      function noSpreadResponse(body) {
+        resolve(body);
+      }
+ 
+      var resolver = useSpread ? spreadResponse : noSpreadResponse;
+ 
+      // Pass the options through to the extensions, but don't include the options
+      // that have been mutated by this method
+      var passThroughOptions = _.omit(options, 'query', 'accessToken', 'spread', 'headers', 'body', 'url', 'json', 'followRedirect', 'followAllRedirects');
+ 
+      var requestOptions = _.defaults({
+        method: method,
+        uri: uri,
+        headers: headers,
+        body: data,
+        json: !!data,
+        gzip: true,
+        encoding: options.encoding === undefined ? 'utf8' : options.encoding,
+        followRedirect: true,
+        followAllRedirects: true, // Redirects for non-GET requests
+      }, passThroughOptions);
+ 
+      this.requestLib(requestOptions, function(err, response, body) {
+        Iif (err) {
+          err.response = response;
+          return reject(err);
+        }
+ 
+        Iif (spec.checkOperation) {
+          /* 404 means "false" */
+          if (response.statusCode === 404) {
+            return resolver(false, response);
+          }
+ 
+          /* 2XX means "true" */
+          if (response.statusCode < 300) {
+            return resolver(true, response);
+          }
+        }
+ 
+        Iif (options.treat404asEmpty && response.statusCode === 404) {
+          return resolver(null, response);
+        }
+ 
+        try {
+          var parsedBody = self._parseBody(response, body);
+ 
+          Iif (response.statusCode >= 400) {
+            var message = typeof parsedBody.message === 'string' ? parsedBody.message.replace(/\n+/g, ' ') : "HTTP " + response.statusCode;
+            debug(message, parsedBody || body);
+            return reject(new errors.GitterError(message, {
+              url: uri,
+              statusCode: response.statusCode,
+              headers: response.headers,
+              body: parsedBody || body
+            }));
+          }
+ 
+          return resolver(parsedBody, response);
+ 
+        } catch(e) {
+          return reject(e);
+        }
+ 
+      });
+ 
+    }, this));
+ 
+  },
+ 
+  _parseBody: function(response, body) {
+    if (typeof body !== 'string') return body;
+ 
+    // TODO: deal with various types
+    var contentType = response.headers['content-type'];
+    Eif (contentType) {
+      var ct = contentType.split(';')[0];
+ 
+      Eif (ct === 'application/json') {
+        return JSON.parse(body);
+      }
+ 
+    }
+ 
+    return body;
+  }
+ 
+};
+ 
+module.exports = Client;
+ 
+ +
+ + + + + + diff --git a/output/coverage-reports/lcov-report/lib/errors.js.html b/output/coverage-reports/lcov-report/lib/errors.js.html new file mode 100644 index 0000000..bbc51ba --- /dev/null +++ b/output/coverage-reports/lcov-report/lib/errors.js.html @@ -0,0 +1,84 @@ + + + + Code coverage report for lib/errors.js + + + + + + +
+

Code coverage report for lib/errors.js

+

+ Statements: 100% (4 / 4)      + Branches: 100% (0 / 0)      + Functions: 100% (0 / 0)      + Lines: 100% (4 / 4)      + Ignored: none      +

+
All files » lib/ » errors.js
+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14  +  +1 +  +  +1 +  +1 +  +1 +  +  +  + 
'use strict';
+ 
+var createError = require('create-error');
+ 
+// an error this library threw
+var NodeGitterError = createError('NodeGitterError');
+// gitter's threw this error
+var GitterError = createError(NodeGitterError, 'GitterError');
+ 
+module.exports = {
+  NodeGitterError: NodeGitterError,
+  GitterError: GitterError
+};
+ 
+ +
+ + + + + + diff --git a/output/coverage-reports/lcov-report/lib/index.html b/output/coverage-reports/lcov-report/lib/index.html new file mode 100644 index 0000000..d1f1b28 --- /dev/null +++ b/output/coverage-reports/lcov-report/lib/index.html @@ -0,0 +1,86 @@ + + + + Code coverage report for lib/ + + + + + + +
+

Code coverage report for lib/

+

+ Statements: 81.94% (59 / 72)      + Branches: 52.5% (21 / 40)      + Functions: 100% (9 / 9)      + Lines: 82.86% (58 / 70)      + Ignored: none      +

+
All files » lib/
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
client.js80.88%(55 / 68)52.5%(21 / 40)100%(9 / 9)81.82%(54 / 66)
errors.js100%(4 / 4)100%(0 / 0)100%(0 / 0)100%(4 / 4)
+
+
+ + + + + + diff --git a/output/coverage-reports/lcov-report/lib/resources/index.html b/output/coverage-reports/lcov-report/lib/resources/index.html new file mode 100644 index 0000000..b21aa4d --- /dev/null +++ b/output/coverage-reports/lcov-report/lib/resources/index.html @@ -0,0 +1,112 @@ + + + + Code coverage report for lib/resources/ + + + + + + +
+

Code coverage report for lib/resources/

+

+ Statements: 100% (11 / 11)      + Branches: 100% (0 / 0)      + Functions: 0% (0 / 1)      + Lines: 100% (11 / 11)      + Ignored: none      +

+
All files » lib/resources/
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
index.js100%(2 / 2)100%(0 / 0)100%(0 / 0)100%(2 / 2)
messages.js100%(3 / 3)100%(0 / 0)0%(0 / 1)100%(3 / 3)
rooms.js100%(3 / 3)100%(0 / 0)100%(0 / 0)100%(3 / 3)
users.js100%(3 / 3)100%(0 / 0)100%(0 / 0)100%(3 / 3)
+
+
+ + + + + + diff --git a/output/coverage-reports/lcov-report/lib/resources/index.js.html b/output/coverage-reports/lcov-report/lib/resources/index.js.html new file mode 100644 index 0000000..3e7b3d5 --- /dev/null +++ b/output/coverage-reports/lcov-report/lib/resources/index.js.html @@ -0,0 +1,60 @@ + + + + Code coverage report for lib/resources/index.js + + + + + + +
+

Code coverage report for lib/resources/index.js

+

+ Statements: 100% (2 / 2)      + Branches: 100% (0 / 0)      + Functions: 100% (0 / 0)      + Lines: 100% (2 / 2)      + Ignored: none      +

+
All files » lib/resources/ » index.js
+
+
+

+
+
1 +2 +3 +4 +5 +6  +  +1 +  +1 + 
'use strict';
+ 
+var requireDirectory = require('require-directory');
+ 
+module.exports = requireDirectory(module);
+ 
+ +
+ + + + + + diff --git a/output/coverage-reports/lcov-report/lib/resources/messages.js.html b/output/coverage-reports/lcov-report/lib/resources/messages.js.html new file mode 100644 index 0000000..061b601 --- /dev/null +++ b/output/coverage-reports/lcov-report/lib/resources/messages.js.html @@ -0,0 +1,129 @@ + + + + Code coverage report for lib/resources/messages.js + + + + + + +
+

Code coverage report for lib/resources/messages.js

+

+ Statements: 100% (3 / 3)      + Branches: 100% (0 / 0)      + Functions: 0% (0 / 1)      + Lines: 100% (3 / 3)      + Ignored: none      +

+
All files » lib/resources/ » messages.js
+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29  +  +1 +1 +  +1 +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
'use strict';
+ 
+var Resource = require('tentacles/lib/Resource');
+var method = Resource.method;
+ 
+module.exports = Resource.extend({
+  listForRoom: method({
+    method: 'GET',
+    path: '/v1/rooms/:roomId/chatMessages',
+    urlParams: ['roomId']
+  }),
+ 
+  create: method({
+    method: 'POST',
+    path: '/v1/rooms/:roomId/chatMessages',
+    urlParams: ['roomId']
+  }),
+ 
+  update: method({
+    method: 'PUT',
+    path: '/v1/rooms/:roomId/chatMessages/:chatMessageId',
+    urlParams: ['roomId', 'chatMessageId']
+  }),
+ 
+  streamForRoom: function() {
+    // TODO
+  }
+});
+ 
+ +
+ + + + + + diff --git a/output/coverage-reports/lcov-report/lib/resources/rooms.js.html b/output/coverage-reports/lcov-report/lib/resources/rooms.js.html new file mode 100644 index 0000000..697eec9 --- /dev/null +++ b/output/coverage-reports/lcov-report/lib/resources/rooms.js.html @@ -0,0 +1,129 @@ + + + + Code coverage report for lib/resources/rooms.js + + + + + + +
+

Code coverage report for lib/resources/rooms.js

+

+ Statements: 100% (3 / 3)      + Branches: 100% (0 / 0)      + Functions: 100% (0 / 0)      + Lines: 100% (3 / 3)      + Ignored: none      +

+
All files » lib/resources/ » rooms.js
+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29  +  +1 +1 +  +1 +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
'use strict';
+ 
+var Resource = require('tentacles/lib/Resource');
+var method = Resource.method;
+ 
+module.exports = Resource.extend({
+  listForAuthUser: method({
+    method: 'GET',
+    path: '/v1/rooms'
+  }),
+ 
+  listUsers: method({
+    method: 'GET',
+    path: '/v1/rooms/:roomId/users',
+    urlParams: ['roomId']
+  }),
+ 
+  listChannels: method({
+    method: 'GET',
+    path: '/v1/rooms/:roomId/channels',
+    urlParams: ['roomId']
+  }),
+ 
+  join: method({
+    method: 'POST',
+    path: '/v1/rooms'
+  })
+});
+ 
+ +
+ + + + + + diff --git a/output/coverage-reports/lcov-report/lib/resources/users.js.html b/output/coverage-reports/lcov-report/lib/resources/users.js.html new file mode 100644 index 0000000..e630e3c --- /dev/null +++ b/output/coverage-reports/lcov-report/lib/resources/users.js.html @@ -0,0 +1,186 @@ + + + + Code coverage report for lib/resources/users.js + + + + + + +
+

Code coverage report for lib/resources/users.js

+

+ Statements: 100% (3 / 3)      + Branches: 100% (0 / 0)      + Functions: 100% (0 / 0)      + Lines: 100% (3 / 3)      + Ignored: none      +

+
All files » lib/resources/ » users.js
+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48  +  +1 +1 +  +1 +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
'use strict';
+ 
+var Resource = require('tentacles/lib/Resource');
+var method = Resource.method;
+ 
+module.exports = Resource.extend({
+  getAuthUser: method({
+    method: 'GET',
+    path: '/v1/user/me'
+  }),
+ 
+  listRooms: method({
+    method: 'GET',
+    path: '/v1/user/:userId/rooms',
+    urlParams: ['userId']
+  }),
+ 
+  listOrgs: method({
+    method: 'GET',
+    path: '/v1/user/:userId/orgs',
+    urlParams: ['userId']
+  }),
+ 
+  listRepos: method({
+    method: 'GET',
+    path: '/v1/user/:userId/repos',
+    urlParams: ['userId']
+  }),
+ 
+  listChannels: method({
+    method: 'GET',
+    path: '/v1/user/:userId/channels',
+    urlParams: ['userId']
+  }),
+ 
+  listUnreadsForRoom: method({
+    method: 'GET',
+    path: '/v1/user/:userId/rooms/:roomId/unreadItems',
+    urlParams: ['userId', 'roomId']
+  }),
+ 
+  markUnreadsForRoom: method({
+    method: 'POST',
+    path: '/v1/user/:userId/rooms/:roomId/unreadItems',
+    urlParams: ['userId', 'roomId']
+  })
+});
+ 
+ +
+ + + + + + diff --git a/output/coverage-reports/lcov-report/prettify.css b/output/coverage-reports/lcov-report/prettify.css new file mode 100644 index 0000000..b317a7c --- /dev/null +++ b/output/coverage-reports/lcov-report/prettify.css @@ -0,0 +1 @@ +.pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee} diff --git a/output/coverage-reports/lcov-report/prettify.js b/output/coverage-reports/lcov-report/prettify.js new file mode 100644 index 0000000..ef51e03 --- /dev/null +++ b/output/coverage-reports/lcov-report/prettify.js @@ -0,0 +1 @@ +window.PR_SHOULD_USE_CONTINUATION=true;(function(){var h=["break,continue,do,else,for,if,return,while"];var u=[h,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"];var p=[u,"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"];var l=[p,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"];var x=[p,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"];var R=[x,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"];var r="all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes";var w=[p,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"];var s="caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END";var I=[h,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"];var f=[h,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"];var H=[h,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"];var A=[l,R,w,s+I,f,H];var e=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/;var C="str";var z="kwd";var j="com";var O="typ";var G="lit";var L="pun";var F="pln";var m="tag";var E="dec";var J="src";var P="atn";var n="atv";var N="nocode";var M="(?:^^\\.?|[+-]|\\!|\\!=|\\!==|\\#|\\%|\\%=|&|&&|&&=|&=|\\(|\\*|\\*=|\\+=|\\,|\\-=|\\->|\\/|\\/=|:|::|\\;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\@|\\[|\\^|\\^=|\\^\\^|\\^\\^=|\\{|\\||\\|=|\\|\\||\\|\\|=|\\~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*";function k(Z){var ad=0;var S=false;var ac=false;for(var V=0,U=Z.length;V122)){if(!(al<65||ag>90)){af.push([Math.max(65,ag)|32,Math.min(al,90)|32])}if(!(al<97||ag>122)){af.push([Math.max(97,ag)&~32,Math.min(al,122)&~32])}}}}af.sort(function(av,au){return(av[0]-au[0])||(au[1]-av[1])});var ai=[];var ap=[NaN,NaN];for(var ar=0;arat[0]){if(at[1]+1>at[0]){an.push("-")}an.push(T(at[1]))}}an.push("]");return an.join("")}function W(al){var aj=al.source.match(new RegExp("(?:\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]|\\\\u[A-Fa-f0-9]{4}|\\\\x[A-Fa-f0-9]{2}|\\\\[0-9]+|\\\\[^ux0-9]|\\(\\?[:!=]|[\\(\\)\\^]|[^\\x5B\\x5C\\(\\)\\^]+)","g"));var ah=aj.length;var an=[];for(var ak=0,am=0;ak=2&&ai==="["){aj[ak]=X(ag)}else{if(ai!=="\\"){aj[ak]=ag.replace(/[a-zA-Z]/g,function(ao){var ap=ao.charCodeAt(0);return"["+String.fromCharCode(ap&~32,ap|32)+"]"})}}}}return aj.join("")}var aa=[];for(var V=0,U=Z.length;V=0;){S[ac.charAt(ae)]=Y}}var af=Y[1];var aa=""+af;if(!ag.hasOwnProperty(aa)){ah.push(af);ag[aa]=null}}ah.push(/[\0-\uffff]/);V=k(ah)})();var X=T.length;var W=function(ah){var Z=ah.sourceCode,Y=ah.basePos;var ad=[Y,F];var af=0;var an=Z.match(V)||[];var aj={};for(var ae=0,aq=an.length;ae=5&&"lang-"===ap.substring(0,5);if(am&&!(ai&&typeof ai[1]==="string")){am=false;ap=J}if(!am){aj[ag]=ap}}var ab=af;af+=ag.length;if(!am){ad.push(Y+ab,ap)}else{var al=ai[1];var ak=ag.indexOf(al);var ac=ak+al.length;if(ai[2]){ac=ag.length-ai[2].length;ak=ac-al.length}var ar=ap.substring(5);B(Y+ab,ag.substring(0,ak),W,ad);B(Y+ab+ak,al,q(ar,al),ad);B(Y+ab+ac,ag.substring(ac),W,ad)}}ah.decorations=ad};return W}function i(T){var W=[],S=[];if(T.tripleQuotedStrings){W.push([C,/^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,null,"'\""])}else{if(T.multiLineStrings){W.push([C,/^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,null,"'\"`"])}else{W.push([C,/^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,null,"\"'"])}}if(T.verbatimStrings){S.push([C,/^@\"(?:[^\"]|\"\")*(?:\"|$)/,null])}var Y=T.hashComments;if(Y){if(T.cStyleComments){if(Y>1){W.push([j,/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,null,"#"])}else{W.push([j,/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,null,"#"])}S.push([C,/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,null])}else{W.push([j,/^#[^\r\n]*/,null,"#"])}}if(T.cStyleComments){S.push([j,/^\/\/[^\r\n]*/,null]);S.push([j,/^\/\*[\s\S]*?(?:\*\/|$)/,null])}if(T.regexLiterals){var X=("/(?=[^/*])(?:[^/\\x5B\\x5C]|\\x5C[\\s\\S]|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+/");S.push(["lang-regex",new RegExp("^"+M+"("+X+")")])}var V=T.types;if(V){S.push([O,V])}var U=(""+T.keywords).replace(/^ | $/g,"");if(U.length){S.push([z,new RegExp("^(?:"+U.replace(/[\s,]+/g,"|")+")\\b"),null])}W.push([F,/^\s+/,null," \r\n\t\xA0"]);S.push([G,/^@[a-z_$][a-z_$@0-9]*/i,null],[O,/^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/,null],[F,/^[a-z_$][a-z_$@0-9]*/i,null],[G,new RegExp("^(?:0x[a-f0-9]+|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)(?:e[+\\-]?\\d+)?)[a-z]*","i"),null,"0123456789"],[F,/^\\[\s\S]?/,null],[L,/^.[^\s\w\.$@\'\"\`\/\#\\]*/,null]);return g(W,S)}var K=i({keywords:A,hashComments:true,cStyleComments:true,multiLineStrings:true,regexLiterals:true});function Q(V,ag){var U=/(?:^|\s)nocode(?:\s|$)/;var ab=/\r\n?|\n/;var ac=V.ownerDocument;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=ac.defaultView.getComputedStyle(V,null).getPropertyValue("white-space")}}var Z=S&&"pre"===S.substring(0,3);var af=ac.createElement("LI");while(V.firstChild){af.appendChild(V.firstChild)}var W=[af];function ae(al){switch(al.nodeType){case 1:if(U.test(al.className)){break}if("BR"===al.nodeName){ad(al);if(al.parentNode){al.parentNode.removeChild(al)}}else{for(var an=al.firstChild;an;an=an.nextSibling){ae(an)}}break;case 3:case 4:if(Z){var am=al.nodeValue;var aj=am.match(ab);if(aj){var ai=am.substring(0,aj.index);al.nodeValue=ai;var ah=am.substring(aj.index+aj[0].length);if(ah){var ak=al.parentNode;ak.insertBefore(ac.createTextNode(ah),al.nextSibling)}ad(al);if(!ai){al.parentNode.removeChild(al)}}}break}}function ad(ak){while(!ak.nextSibling){ak=ak.parentNode;if(!ak){return}}function ai(al,ar){var aq=ar?al.cloneNode(false):al;var ao=al.parentNode;if(ao){var ap=ai(ao,1);var an=al.nextSibling;ap.appendChild(aq);for(var am=an;am;am=an){an=am.nextSibling;ap.appendChild(am)}}return aq}var ah=ai(ak.nextSibling,0);for(var aj;(aj=ah.parentNode)&&aj.nodeType===1;){ah=aj}W.push(ah)}for(var Y=0;Y=S){ah+=2}if(V>=ap){Z+=2}}}var t={};function c(U,V){for(var S=V.length;--S>=0;){var T=V[S];if(!t.hasOwnProperty(T)){t[T]=U}else{if(window.console){console.warn("cannot override language handler %s",T)}}}}function q(T,S){if(!(T&&t.hasOwnProperty(T))){T=/^\s*]*(?:>|$)/],[j,/^<\!--[\s\S]*?(?:-\->|$)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],[L,/^(?:<[%?]|[%?]>)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),["default-markup","htm","html","mxml","xhtml","xml","xsl"]);c(g([[F,/^[\s]+/,null," \t\r\n"],[n,/^(?:\"[^\"]*\"?|\'[^\']*\'?)/,null,"\"'"]],[[m,/^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],[P,/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],[L,/^[=<>\/]+/],["lang-js",/^on\w+\s*=\s*\"([^\"]+)\"/i],["lang-js",/^on\w+\s*=\s*\'([^\']+)\'/i],["lang-js",/^on\w+\s*=\s*([^\"\'>\s]+)/i],["lang-css",/^style\s*=\s*\"([^\"]+)\"/i],["lang-css",/^style\s*=\s*\'([^\']+)\'/i],["lang-css",/^style\s*=\s*([^\"\'>\s]+)/i]]),["in.tag"]);c(g([],[[n,/^[\s\S]+/]]),["uq.val"]);c(i({keywords:l,hashComments:true,cStyleComments:true,types:e}),["c","cc","cpp","cxx","cyc","m"]);c(i({keywords:"null,true,false"}),["json"]);c(i({keywords:R,hashComments:true,cStyleComments:true,verbatimStrings:true,types:e}),["cs"]);c(i({keywords:x,cStyleComments:true}),["java"]);c(i({keywords:H,hashComments:true,multiLineStrings:true}),["bsh","csh","sh"]);c(i({keywords:I,hashComments:true,multiLineStrings:true,tripleQuotedStrings:true}),["cv","py"]);c(i({keywords:s,hashComments:true,multiLineStrings:true,regexLiterals:true}),["perl","pl","pm"]);c(i({keywords:f,hashComments:true,multiLineStrings:true,regexLiterals:true}),["rb"]);c(i({keywords:w,cStyleComments:true,regexLiterals:true}),["js"]);c(i({keywords:r,hashComments:3,cStyleComments:true,multilineStrings:true,tripleQuotedStrings:true,regexLiterals:true}),["coffee"]);c(g([],[[C,/^[\s\S]+/]]),["regex"]);function d(V){var U=V.langExtension;try{var S=a(V.sourceNode);var T=S.sourceCode;V.sourceCode=T;V.spans=S.spans;V.basePos=0;q(U,T)(V);D(V)}catch(W){if("console" in window){console.log(W&&W.stack?W.stack:W)}}}function y(W,V,U){var S=document.createElement("PRE");S.innerHTML=W;if(U){Q(S,U)}var T={langExtension:V,numberLines:U,sourceNode:S};d(T);return S.innerHTML}function b(ad){function Y(af){return document.getElementsByTagName(af)}var ac=[Y("pre"),Y("code"),Y("xmp")];var T=[];for(var aa=0;aa=0){var ah=ai.match(ab);var am;if(!ah&&(am=o(aj))&&"CODE"===am.tagName){ah=am.className.match(ab)}if(ah){ah=ah[1]}var al=false;for(var ak=aj.parentNode;ak;ak=ak.parentNode){if((ak.tagName==="pre"||ak.tagName==="code"||ak.tagName==="xmp")&&ak.className&&ak.className.indexOf("prettyprint")>=0){al=true;break}}if(!al){var af=aj.className.match(/\blinenums\b(?::(\d+))?/);af=af?af[1]&&af[1].length?+af[1]:true:false;if(af){Q(aj,af)}S={langExtension:ah,sourceNode:aj,numberLines:af};d(S)}}}if(X]*(?:>|$)/],[PR.PR_COMMENT,/^<\!--[\s\S]*?(?:-\->|$)/],[PR.PR_PUNCTUATION,/^(?:<[%?]|[%?]>)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-handlebars",/^]*type\s*=\s*['"]?text\/x-handlebars-template['"]?\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i],[PR.PR_DECLARATION,/^{{[#^>/]?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{&?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{{>?\s*[\w.][^}]*}}}/],[PR.PR_COMMENT,/^{{![^}]*}}/]]),["handlebars","hbs"]);PR.registerLangHandler(PR.createSimpleLexer([[PR.PR_PLAIN,/^[ \t\r\n\f]+/,null," \t\r\n\f"]],[[PR.PR_STRING,/^\"(?:[^\n\r\f\\\"]|\\(?:\r\n?|\n|\f)|\\[\s\S])*\"/,null],[PR.PR_STRING,/^\'(?:[^\n\r\f\\\']|\\(?:\r\n?|\n|\f)|\\[\s\S])*\'/,null],["lang-css-str",/^url\(([^\)\"\']*)\)/i],[PR.PR_KEYWORD,/^(?:url|rgb|\!important|@import|@page|@media|@charset|inherit)(?=[^\-\w]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|(?:\\[0-9a-f]+ ?))(?:[_a-z0-9\-]|\\(?:\\[0-9a-f]+ ?))*)\s*:/i],[PR.PR_COMMENT,/^\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\//],[PR.PR_COMMENT,/^(?:)/],[PR.PR_LITERAL,/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],[PR.PR_LITERAL,/^#(?:[0-9a-f]{3}){1,2}/i],[PR.PR_PLAIN,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i],[PR.PR_PUNCTUATION,/^[^\s\w\'\"]+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_KEYWORD,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_STRING,/^[^\)\"\']+/]]),["css-str"]); diff --git a/output/coverage-reports/lcov-report/sort-arrow-sprite.png b/output/coverage-reports/lcov-report/sort-arrow-sprite.png new file mode 100644 index 0000000000000000000000000000000000000000..03f704a609c6fd0dbfdac63466a7d7c958b5cbf3 GIT binary patch literal 209 zcmeAS@N?(olHy`uVBq!ia0vp^>_9Bd!3HEZxJ@+%Qj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS>Jii$m5978H@?Fn+^JD|Y9yzj{W`447Gxa{7*dM7nnnD-Lb z6^}Hx2)'; + } + } + return cols; + } + // attaches a data attribute to every tr element with an object + // of data values keyed by column name + function loadRowData(tableRow) { + var tableCols = tableRow.querySelectorAll('td'), + colNode, + col, + data = {}, + i, + val; + for (i = 0; i < tableCols.length; i += 1) { + colNode = tableCols[i]; + col = cols[i]; + val = colNode.getAttribute('data-value'); + if (col.type === 'number') { + val = Number(val); + } + data[col.key] = val; + } + return data; + } + // loads all row data + function loadData() { + var rows = getTableBody().querySelectorAll('tr'), + i; + + for (i = 0; i < rows.length; i += 1) { + rows[i].data = loadRowData(rows[i]); + } + } + // sorts the table using the data for the ith column + function sortByIndex(index, desc) { + var key = cols[index].key, + sorter = function (a, b) { + a = a.data[key]; + b = b.data[key]; + return a < b ? -1 : a > b ? 1 : 0; + }, + finalSorter = sorter, + tableBody = document.querySelector('.coverage-summary tbody'), + rowNodes = tableBody.querySelectorAll('tr'), + rows = [], + i; + + if (desc) { + finalSorter = function (a, b) { + return -1 * sorter(a, b); + }; + } + + for (i = 0; i < rowNodes.length; i += 1) { + rows.push(rowNodes[i]); + tableBody.removeChild(rowNodes[i]); + } + + rows.sort(finalSorter); + + for (i = 0; i < rows.length; i += 1) { + tableBody.appendChild(rows[i]); + } + } + // removes sort indicators for current column being sorted + function removeSortIndicators() { + var col = getNthColumn(currentSort.index), + cls = col.className; + + cls = cls.replace(/ sorted$/, '').replace(/ sorted-desc$/, ''); + col.className = cls; + } + // adds sort indicators for current column being sorted + function addSortIndicators() { + getNthColumn(currentSort.index).className += currentSort.desc ? ' sorted-desc' : ' sorted'; + } + // adds event listeners for all sorter widgets + function enableUI() { + var i, + el, + ithSorter = function ithSorter(i) { + var col = cols[i]; + + return function () { + var desc = col.defaultDescSort; + + if (currentSort.index === i) { + desc = !currentSort.desc; + } + sortByIndex(i, desc); + removeSortIndicators(); + currentSort.index = i; + currentSort.desc = desc; + addSortIndicators(); + }; + }; + for (i =0 ; i < cols.length; i += 1) { + if (cols[i].sortable) { + el = getNthColumn(i).querySelector('.sorter'); + if (el.addEventListener) { + el.addEventListener('click', ithSorter(i)); + } else { + el.attachEvent('onclick', ithSorter(i)); + } + } + } + } + // adds sorting functionality to the UI + return function () { + if (!getTable()) { + return; + } + cols = loadColumns(); + loadData(cols); + addSortIndicators(); + enableUI(); + }; +})(); + +window.addEventListener('load', addSorting); diff --git a/output/coverage-reports/lcov.info b/output/coverage-reports/lcov.info new file mode 100644 index 0000000..18c45d7 --- /dev/null +++ b/output/coverage-reports/lcov.info @@ -0,0 +1,195 @@ +TN: +SF:/Users/leroux/gitter/node-gitter/lib/client.js +FN:15,getRequestLib +FN:28,Client +FN:43,(anonymous_3) +FN:53,(anonymous_4) +FN:60,(anonymous_5) +FN:72,spreadResponse +FN:76,noSpreadResponse +FN:98,(anonymous_8) +FN:146,(anonymous_9) +FNF:9 +FNH:9 +FNDA:10,getRequestLib +FNDA:10,Client +FNDA:10,(anonymous_3) +FNDA:29,(anonymous_4) +FNDA:29,(anonymous_5) +FNDA:2,spreadResponse +FNDA:27,noSpreadResponse +FNDA:29,(anonymous_8) +FNDA:29,(anonymous_9) +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:7,1 +DA:8,1 +DA:9,1 +DA:10,1 +DA:11,1 +DA:12,1 +DA:15,1 +DA:16,10 +DA:18,10 +DA:19,1 +DA:25,9 +DA:28,1 +DA:29,10 +DA:30,10 +DA:31,10 +DA:32,10 +DA:33,10 +DA:39,10 +DA:42,1 +DA:45,10 +DA:46,30 +DA:54,29 +DA:56,29 +DA:58,29 +DA:60,29 +DA:61,29 +DA:68,29 +DA:70,29 +DA:72,1 +DA:73,2 +DA:76,1 +DA:77,27 +DA:80,29 +DA:84,29 +DA:86,29 +DA:98,29 +DA:99,29 +DA:100,0 +DA:101,0 +DA:104,29 +DA:106,0 +DA:107,0 +DA:111,0 +DA:112,0 +DA:116,29 +DA:117,0 +DA:120,29 +DA:121,29 +DA:123,29 +DA:124,0 +DA:125,0 +DA:126,0 +DA:134,29 +DA:137,0 +DA:147,29 +DA:150,21 +DA:151,21 +DA:152,21 +DA:154,21 +DA:155,21 +DA:160,0 +DA:165,1 +LF:66 +LH:54 +BRDA:16,1,0,10 +BRDA:16,1,1,6 +BRDA:18,2,0,1 +BRDA:18,2,1,9 +BRDA:29,3,0,0 +BRDA:29,3,1,10 +BRDA:58,4,0,29 +BRDA:58,4,1,29 +BRDA:70,5,0,2 +BRDA:70,5,1,27 +BRDA:80,6,0,2 +BRDA:80,6,1,27 +BRDA:93,7,0,29 +BRDA:93,7,1,0 +BRDA:99,8,0,0 +BRDA:99,8,1,29 +BRDA:104,9,0,0 +BRDA:104,9,1,29 +BRDA:106,10,0,0 +BRDA:106,10,1,0 +BRDA:111,11,0,0 +BRDA:111,11,1,0 +BRDA:116,12,0,0 +BRDA:116,12,1,29 +BRDA:116,13,0,29 +BRDA:116,13,1,0 +BRDA:123,14,0,0 +BRDA:123,14,1,29 +BRDA:124,15,0,0 +BRDA:124,15,1,0 +BRDA:125,16,0,0 +BRDA:125,16,1,0 +BRDA:130,17,0,0 +BRDA:130,17,1,0 +BRDA:147,18,0,8 +BRDA:147,18,1,21 +BRDA:151,19,0,21 +BRDA:151,19,1,0 +BRDA:154,20,0,21 +BRDA:154,20,1,0 +BRF:40 +BRH:21 +end_of_record +TN: +SF:/Users/leroux/gitter/node-gitter/lib/errors.js +FNF:0 +FNH:0 +DA:3,1 +DA:6,1 +DA:8,1 +DA:10,1 +LF:4 +LH:4 +BRF:0 +BRH:0 +end_of_record +TN: +SF:/Users/leroux/gitter/node-gitter/lib/resources/index.js +FNF:0 +FNH:0 +DA:3,1 +DA:5,1 +LF:2 +LH:2 +BRF:0 +BRH:0 +end_of_record +TN: +SF:/Users/leroux/gitter/node-gitter/lib/resources/messages.js +FN:25,(anonymous_1) +FNF:1 +FNH:0 +FNDA:0,(anonymous_1) +DA:3,1 +DA:4,1 +DA:6,1 +LF:3 +LH:3 +BRF:0 +BRH:0 +end_of_record +TN: +SF:/Users/leroux/gitter/node-gitter/lib/resources/rooms.js +FNF:0 +FNH:0 +DA:3,1 +DA:4,1 +DA:6,1 +LF:3 +LH:3 +BRF:0 +BRH:0 +end_of_record +TN: +SF:/Users/leroux/gitter/node-gitter/lib/resources/users.js +FNF:0 +FNH:0 +DA:3,1 +DA:4,1 +DA:6,1 +LF:3 +LH:3 +BRF:0 +BRH:0 +end_of_record diff --git a/package.json b/package.json index c1831b8..a695eec 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "node-gitter", "version": "1.2.9", "description": "Gitter client", - "main": "lib/gitter.js", + "main": "lib/client.js", "scripts": { "test": "./node_modules/.bin/mocha -R spec test" }, @@ -20,15 +20,18 @@ }, "homepage": "https://github.com/gitterHQ/node-gitter", "dependencies": { + "bluebird": "^3.1.1", + "create-error": "^0.3.1", "debug": "^0.8.1", - "eventemitter3": "^0.1.6", - "faye": "~1.0.1", - "gitter-faye": "^1.1.0-e", - "q": "~1.0.1", - "qs": "~1.2.1" + "lodash": "^4.0.0", + "request": "^2.67.0", + "request-extensible": "^0.1.1", + "require-directory": "^2.1.1", + "tentacles": "^0.2.8" }, "devDependencies": { - "mocha": "~1.18.2", - "retire": "latest" + "gulp": "^3.9.0", + "gulp-spawn-mocha": "^2.2.2", + "mocha": "^2.3.4" } } diff --git a/test/custom-request.js b/test/custom-request.js new file mode 100644 index 0000000..3e02634 --- /dev/null +++ b/test/custom-request.js @@ -0,0 +1,52 @@ +var Client = require('..'); +var assert = require('assert'); + +describe('custom-request', function() { + + var client, mockRequest, count, sentBody; + + beforeEach(function() { + count = 0; + }); + + it('should deal with json', function(done) { + mockRequest = function(options, callback) { + sentBody = { hello: 'cow' }; + count++; + + setImmediate(function() { + callback(null, { statusCode: 200, headers: { 'content-type': 'application/json' } }, JSON.stringify(sentBody) ); + }); + }; + + client = new Client({ accessToken: process.env.GITTER_ACCESS_TOKEN, request: mockRequest }); + + client.users.getAuthUser() + .then(function(body) { + assert.deepEqual(body, sentBody); + assert.strictEqual(count, 1); + }) + .nodeify(done); + }); + + it('should deal with objects', function(done) { + mockRequest = function(options, callback) { + sentBody = { hello: 'cow' }; + count++; + + setImmediate(function() { + callback(null, { statusCode: 200, headers: { 'content-type': 'application/json' } }, sentBody ); + }); + }; + + client = new Client({ accessToken: process.env.GITTER_ACCESS_TOKEN, request: mockRequest }); + + client.users.getAuthUser() + .then(function(body) { + assert.deepEqual(body, sentBody); + assert.strictEqual(count, 1); + }) + .nodeify(done); + }); + +}); diff --git a/test/extensions.js b/test/extensions.js new file mode 100644 index 0000000..c98b5e2 --- /dev/null +++ b/test/extensions.js @@ -0,0 +1,20 @@ +var Client = require('..'); +var assert = require('assert'); + +describe('extensions', function() { + + it('should allow extensions to be specified', function() { + var client = new Client({ + extensions: [function(options, callback/*, next */) { + /* Shortcut extension */ + callback(null, { statusCode: 200 }, { fakeUser: true }); + }] + }); + + return client.users.getAuthUser() + .then(function(body) { + assert.deepEqual(body, { fakeUser: true }); + }); + }); + +}); diff --git a/test/mocha.opts b/test/mocha.opts new file mode 100644 index 0000000..ce80316 --- /dev/null +++ b/test/mocha.opts @@ -0,0 +1,3 @@ +--reporter spec +--recursive +--timeout 10000 diff --git a/test/options-passthrough.js b/test/options-passthrough.js new file mode 100644 index 0000000..aaa7326 --- /dev/null +++ b/test/options-passthrough.js @@ -0,0 +1,64 @@ +var Client = require('..'); +var assert = require('assert'); + +describe('options-passthrough', function() { + + var client, mockRequest, count, sentBody; + + beforeEach(function() { + count = 0; + }); + + it('should passthrough custom options', function() { + mockRequest = function(options, callback) { + assert(!options.accessToken); + assert.strictEqual(options.headers.Something, 'Else'); + assert.strictEqual(options.firstPageOnly, true); + + sentBody = { hello: 'cow' }; + count++; + + setImmediate(function() { + callback(null, { statusCode: 200, headers: { 'content-type': 'application/json' } }, JSON.stringify(sentBody) ); + }); + }; + + client = new Client({ accessToken: process.env.GITTER_ACCESS_TOKEN, request: mockRequest, headers: { Something: 'Else' } }); + + return client.users.getAuthUser({ firstPageOnly: true }) + .then(function(body) { + assert.deepEqual(body, sentBody); + assert.strictEqual(count, 1); + }); + }); + + it('should not passthrough filtered values', function() { + mockRequest = function(options, callback) { + assert(options.uri.indexOf('?q=123') > 0); + assert(!options.url); + assert.strictEqual(options.headers.Something, 'Else'); + assert.strictEqual(options.headers.X, 'Y'); + assert.strictEqual(options.firstPageOnly, '456'); + assert.strictEqual(options.gzip, true); + assert(!options.query); + assert(!options.accessToken); + + sentBody = { hello: 'cow' }; + count++; + + setImmediate(function() { + callback(null, { statusCode: 200, headers: { 'content-type': 'application/json' } }, JSON.stringify(sentBody) ); + }); + }; + + client = new Client({ accessToken: process.env.GITTER_ACCESS_TOKEN, request: mockRequest, headers: { Something: 'Else' } }); + + return client.users.getAuthUser({ query: { q: '123' }, firstPageOnly: '456', headers: { X: 'Y' }, gzip: false, url: 'bob' }) + .then(function(body) { + assert.deepEqual(body, sentBody); + assert.strictEqual(count, 1); + }); + }); + + +}); diff --git a/test/resources/messages.js b/test/resources/messages.js new file mode 100644 index 0000000..6c0e335 --- /dev/null +++ b/test/resources/messages.js @@ -0,0 +1,59 @@ +var Client = require('../..'); +var assert = require('assert'); + +describe('messages', function() { + var client; + var userId; + var username; + var roomId; + + before(function() { + assert(process.env.GITTER_ACCESS_TOKEN, 'Please set GITTER_ACCESS_TOKEN'); + + client = new Client({ accessToken: process.env.GITTER_ACCESS_TOKEN }); + + return client.users.getAuthUser() + .then(function(user) { + userId = user.id; + username = user.username; + uri = username+'/test'; + return client.rooms.join({uri: uri}) + }) + .then(function(room) { + roomId = room.id; + }); + }); + + it("should list the messages in a room", function() { + return client.messages.listForRoom(roomId) + .then(function(messages) { + assert(Array.isArray(messages)); + }); + }); + + it('should allow a user to create a message', function() { + var text = "testing create message"; + return client.messages.create(roomId, {text: text}) + .then(function(message) { + assert.equal(message.text, text); + }); + }); + + it('should allow a user to update a message', function() { + var textCreate = "testing update message (before)"; + var textUpdate = "testing update message"; + return client.messages.create(roomId, {text: textCreate}) + .then(function(message) { + assert.equal(message.text, textCreate); + return client.messages.update(roomId, message.id, {text: textUpdate}); + }) + .then(function(message) { + assert.equal(message.text, textUpdate); + }); + }); + + it('should stream the events in a room', function() { + // TODO + }); + +}); diff --git a/test/resources/rooms.js b/test/resources/rooms.js new file mode 100644 index 0000000..b9601f3 --- /dev/null +++ b/test/resources/rooms.js @@ -0,0 +1,47 @@ +var Client = require('../..'); +var assert = require('assert'); + +describe('rooms', function() { + var client; + var roomId; + + before(function() { + assert(process.env.GITTER_ACCESS_TOKEN, 'Please set GITTER_ACCESS_TOKEN'); + + client = new Client({ accessToken: process.env.GITTER_ACCESS_TOKEN }); + return client.rooms.listForAuthUser() + .then(function(rooms) { + roomId = rooms[0].id; + }); + }); + + it("should list the current user's rooms", function() { + return client.rooms.listForAuthUser() + .then(function(rooms) { + assert(rooms[0].name); + }) + }); + + it('should list the users in a room', function() { + return client.rooms.listUsers(roomId) + .then(function(users) { + assert(Array.isArray(users)); + }) + }); + + it('should list the channels in a room', function() { + return client.rooms.listChannels(roomId) + .then(function(channels) { + assert(Array.isArray(channels)); + }) + }); + + it('should allow a user to join a room', function() { + var uri = 'gitterHQ/gitter'; + return client.rooms.join({uri: uri}) + .then(function(room) { + assert.equal(room.uri, uri); + }); + }); + +}); diff --git a/test/resources/users.js b/test/resources/users.js new file mode 100644 index 0000000..bcab74a --- /dev/null +++ b/test/resources/users.js @@ -0,0 +1,72 @@ +var Client = require('../..'); +var assert = require('assert'); + +describe('users', function() { + var client; + var userId; + var roomId; + + before(function() { + assert(process.env.GITTER_ACCESS_TOKEN, 'Please set GITTER_ACCESS_TOKEN'); + + client = new Client({ accessToken: process.env.GITTER_ACCESS_TOKEN }); + return client.users.getAuthUser() + .then(function(user) { + userId = user.id; + return client.users.listRooms(userId); + }) + .then(function(rooms) { + roomId = rooms[0].id; + }); + }); + + it('should get the authenticated user', function() { + return client.users.getAuthUser() + .then(function(user) { + assert(user.username); + }) + }); + + it("should list a user's rooms", function() { + return client.users.listRooms(userId) + .then(function(rooms) { + assert(Array.isArray(rooms)); + }); + }); + + it("should list a user's orgs", function() { + return client.users.listOrgs(userId) + .then(function(orgs) { + assert(Array.isArray(orgs)); + }); + }); + + it("should list a user's repos", function() { + return client.users.listRepos(userId) + .then(function(repos) { + assert(Array.isArray(repos)); + }); + }); + + it("should list a user's channels", function() { + return client.users.listChannels(userId) + .then(function(channels) { + assert(Array.isArray(channels)); + }); + }); + + it("should list a user's unreads for a room", function() { + return client.users.listUnreadsForRoom(userId, roomId) + .then(function(result) { + assert(Array.isArray(result.chat)); + assert(Array.isArray(result.mention)); + }); + }); + + it("should mark a user's unreads for a room", function() { + return client.users.markUnreadsForRoom(userId, roomId, {chat: ['foo']}) + .then(function(result) { + assert.equal(result.success, true); + }); + }); +}); diff --git a/test/rooms-test.js b/test/rooms-test.js deleted file mode 100644 index bf33aab..0000000 --- a/test/rooms-test.js +++ /dev/null @@ -1,196 +0,0 @@ -/* jshint node:true, unused:true */ - -var assert = require('assert'); -var Q = require('q'); -var Gitter = require('../lib/gitter.js'); - -var token = process.env.TOKEN; - -if (!token) { - console.log('========================================'); - console.log('You need to provide a valid OAuth token:'); - console.log('$ TOKEN= USERNAME= npm test'); - console.log('========================================\n'); - process.exit(1); -} - -var yacht_room = '534bfb095e986b0712f0338e'; - -describe('Gitter Rooms', function() { - this.timeout(20000); - var gitter; - - before(function() { - var opts = {}; - - //var opts = { - // client: { - // host: "localhost", - // port: 5000, - // prefix: true, - // streamingEndpoint: 'http://localhost:5000/faye' - // } - //}; - - gitter = new Gitter(process.env.TOKEN, opts); - }); - - it('should find a room with cb', function(done) { - gitter.rooms.find(yacht_room, function(err, room) { - if (err) done(err); - assert.equal(room.name, 'node-gitter/yacht'); - done(); - }); - }); - - it('should find a room', function(done) { - gitter.rooms.find(yacht_room).then(function(room) { - assert.equal(room.name, 'node-gitter/yacht'); - }).nodeify(done); - }); - - it('should be able to join a room', function(done) { - gitter.rooms.join('node-gitter/yacht').then(function(room) { - assert.equal(room.name, 'node-gitter/yacht'); - }).nodeify(done); - }); - - it('should be able to leave a room', function(done) { - // Join the room first - gitter.rooms.join('node-gitter/yacht').then(function(room) { - return gitter.currentUser() - .then(function(currentUser) { - return room.removeUser(currentUser.id); - }); - }).then(function() { - return gitter.currentUser(); - }).then(function(user) { - return user.rooms(); - }).then(function(rooms) { - var check = rooms.some(function(room) { return room.name === 'node-gitter/yacht'; }); - assert.equal(false, check); - }).fin(function() { - // Join the room again for the rest of the tests - gitter.rooms.join('node-gitter/yacht'); - }).nodeify(done); - }); - - it('should not be able to join an invalid room', function(done) { - gitter.rooms.join('some-invalid-room').then(function() { - }).fail(function(err) { - assert(err); - done(); - }).fail(done); - }); - - it('should be able to send a message', function(done) { - gitter.rooms.find(yacht_room).then(function(room) { - return room.send('Time is ' + new Date()); - }).then(function(message) { - assert(message); - }).nodeify(done); - }); - - it('should be able to send a status message', function(done) { - gitter.rooms.find(yacht_room).then(function(room) { - return room.sendStatus('Yo! checking time is ' + new Date()); - }).then(function(message) { - assert(message.status); - }).nodeify(done); - }); - - it('should fetch messages from a room', function(done) { - gitter.rooms.find(yacht_room).then(function(room) { - return room.chatMessages({limit: 5}); - }).then(function(messages) { - assert(messages.length === 5); - }).nodeify(done); - }); - - it('should fetch users in a room', function(done) { - gitter.rooms.find(yacht_room).then(function(room) { - return room.users(); - }).then(function(users) { - assert(users.some(function(user) { return user.username === 'node-gitter'; })); - }).nodeify(done); - }); - - it('should fetch channels in a room', function(done) { - gitter.rooms.find(yacht_room).then(function(room) { - return room.channels(); - }).then(function(channels) { - assert(channels.some(function(channel) { return channel.name === 'node-gitter/yacht/pub'; })); - }).nodeify(done); - }); - - it('should be able to listen on a room', function(done) { - var msg = '[streaming] ' + new Date(); - - gitter.rooms.find(yacht_room).then(function(room) { - var events = room.listen(); - - events.on('message', function(message) { - if (message.text === msg) { - done(); - } - }); - - setTimeout(function() { room.send(msg); }, 500); - }).fail(done); - }); - - it('should be able to subscribe to a room', function(done) { - var msg = '[faye] ' + new Date(); - - gitter.rooms.find(yacht_room).then(function(room) { - - // Events snapshot - //var eventz = room.streaming().events(); - //eventz.on('snapshot', function(snapshot) { - // assert(snapshot.length !== 0); - //}); - - var events = room.streaming().chatMessages(); - - events.on('snapshot', function(snapshot) { - assert(snapshot.length !== 0); - }); - - events.on('chatMessages', function(message) { - if (message.model.text === msg) { - room.streaming().disconnect(); - done(); - } - }); - - setTimeout(function() { room.send(msg); }, 750); - }).fail(done); - }); - - - it('should post to multiple rooms', function(done) { - function postMessageInRoom(roomUri, message) { - return gitter.rooms.join(roomUri) - .then(function(room) { - room.send(message); - return room; - }) - .delay(1000) - .then(function(room) { - return room.chatMessages({ limit: 2 }); - }) - .then(function(messages) { - assert(messages.some(function(msg) { - return msg.text === message; - }), "Expecting to see posted message"); - }); - } - - Q.all([ - postMessageInRoom('node-gitter/yacht', 'yacht repo ping at ' + new Date()), - postMessageInRoom('node-gitter/yacht/pub', 'yacht pub channel ping at ' + new Date()), - ]) - .nodeify(done); - }); - -}); diff --git a/test/spread.js b/test/spread.js new file mode 100644 index 0000000..7c691d9 --- /dev/null +++ b/test/spread.js @@ -0,0 +1,58 @@ +var Client = require('..'); +var assert = require('assert'); + +describe('spread', function() { + + describe('default on', function() { + var client; + + before(function() { + client = new Client({ accessToken: process.env.GITTER_ACCESS_TOKEN, spread: true }); + }); + + it('listForAuthUser', function() { + return client.users.getAuthUser() + .spread(function(user, response) { + assert(user); + assert(response); + assert.strictEqual(response.statusCode, 200); + }); + }); + + it('listForAuthUser', function() { + return client.users.getAuthUser({ spread: false }) + .then(function(user) { + assert(user); + assert(user.id); + }); + }); + + }); + + describe('default off', function() { + var client; + + before(function() { + client = new Client({ accessToken: process.env.GITTER_ACCESS_TOKEN }); + }); + + it('listForAuthUser', function() { + return client.users.getAuthUser() + .then(function(user) { + assert(user); + assert(user.id); + }); + }); + + it('listForAuthUser', function() { + return client.users.getAuthUser({ spread: true }) + .spread(function(user, response) { + assert(user); + assert(response); + assert.strictEqual(response.statusCode, 200); + }); + }); + + }); + +}); diff --git a/test/users-test.js b/test/users-test.js deleted file mode 100644 index 9b62182..0000000 --- a/test/users-test.js +++ /dev/null @@ -1,88 +0,0 @@ -/* jshint node:true, unused:true */ - -var assert = require('assert'); -var Gitter = require('../lib/gitter.js'); - -var token = process.env.TOKEN; -var username = process.env.USERNAME || 'node-gitter'; - -if (!token) { - console.log('========================================'); - console.log('You need to provide a valid OAuth token:'); - console.log('$ TOKEN= USERNAME= npm test'); - console.log('========================================\n'); - process.exit(1); -} - -describe('Gitter Users', function() { - this.timeout(5000); - - var gitter; - - before(function() { - gitter = new Gitter(process.env.TOKEN); - }); - - it('should fetch the current user cb', function(done) { - gitter.currentUser(function(err, user) { - if (err) done(err); - assert.equal(user.username, username); - done(); - }); - }); - - it('should fetch the current user', function(done) { - gitter.currentUser().then(function(user) { - assert.equal(user.username, username); - }).nodeify(done); - }); - - it('should fetch the user rooms', function(done) { - gitter.currentUser().then(function(user) { - return user.rooms(); - }).then(function(rooms) { - assert(rooms.length !== 0); - }).nodeify(done); - }); - - it('should fetch the user repos', function(done) { - gitter.currentUser().then(function(user) { - return user.repos(); - }).then(function(repos) { - assert(repos.length !== 0); - }).nodeify(done); - }); - - it('should fetch the user orgs', function(done) { - gitter.currentUser().then(function(user) { - return user.orgs(); - }).then(function(orgs) { - assert(orgs.length !== 0); - }).nodeify(done); - }); - - it('should fetch the user channels', function(done) { - gitter.currentUser().then(function(user) { - return user.channels(); - }).then(function(channels) { - assert(channels.length !== 0); - }).nodeify(done); - }); - - it('should fail when fidning an invalid user', function(done) { - gitter.users.find('invalid').then(function() { - assert(false); - }).fail(function() { - done(); - }); - }); - - it('should fail when fidning an invalid user with cb', function(done) { - gitter.users.find('invalid', function(err, user) { - assert.equal(user, null); - assert(err); - done(); - }); - }); - -}); From 41babfae40af4197c8b531c5f979db62f8674537 Mon Sep 17 00:00:00 2001 From: Le Roux Bodenstein Date: Fri, 15 Jan 2016 16:07:33 +0200 Subject: [PATCH 2/4] without coverage.. --- .gitignore | 1 + output/coverage-reports/coverage.json | 1 - output/coverage-reports/lcov-report/base.css | 182 ------ .../coverage-reports/lcov-report/index.html | 86 --- .../lcov-report/lib/client.js.html | 540 ------------------ .../lcov-report/lib/errors.js.html | 84 --- .../lcov-report/lib/index.html | 86 --- .../lcov-report/lib/resources/index.html | 112 ---- .../lcov-report/lib/resources/index.js.html | 60 -- .../lib/resources/messages.js.html | 129 ----- .../lcov-report/lib/resources/rooms.js.html | 129 ----- .../lcov-report/lib/resources/users.js.html | 186 ------ .../coverage-reports/lcov-report/prettify.css | 1 - .../coverage-reports/lcov-report/prettify.js | 1 - .../lcov-report/sort-arrow-sprite.png | Bin 209 -> 0 bytes output/coverage-reports/lcov-report/sorter.js | 156 ----- output/coverage-reports/lcov.info | 195 ------- 17 files changed, 1 insertion(+), 1948 deletions(-) delete mode 100644 output/coverage-reports/coverage.json delete mode 100644 output/coverage-reports/lcov-report/base.css delete mode 100644 output/coverage-reports/lcov-report/index.html delete mode 100644 output/coverage-reports/lcov-report/lib/client.js.html delete mode 100644 output/coverage-reports/lcov-report/lib/errors.js.html delete mode 100644 output/coverage-reports/lcov-report/lib/index.html delete mode 100644 output/coverage-reports/lcov-report/lib/resources/index.html delete mode 100644 output/coverage-reports/lcov-report/lib/resources/index.js.html delete mode 100644 output/coverage-reports/lcov-report/lib/resources/messages.js.html delete mode 100644 output/coverage-reports/lcov-report/lib/resources/rooms.js.html delete mode 100644 output/coverage-reports/lcov-report/lib/resources/users.js.html delete mode 100644 output/coverage-reports/lcov-report/prettify.css delete mode 100644 output/coverage-reports/lcov-report/prettify.js delete mode 100644 output/coverage-reports/lcov-report/sort-arrow-sprite.png delete mode 100644 output/coverage-reports/lcov-report/sorter.js delete mode 100644 output/coverage-reports/lcov.info diff --git a/.gitignore b/.gitignore index 194c116..9f91844 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ node_modules npm-debug.log .env +output diff --git a/output/coverage-reports/coverage.json b/output/coverage-reports/coverage.json deleted file mode 100644 index b980d97..0000000 --- a/output/coverage-reports/coverage.json +++ /dev/null @@ -1 +0,0 @@ -{"/Users/leroux/gitter/node-gitter/lib/client.js":{"path":"/Users/leroux/gitter/node-gitter/lib/client.js","s":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":10,"13":10,"14":1,"15":9,"16":1,"17":10,"18":0,"19":10,"20":10,"21":10,"22":10,"23":10,"24":1,"25":10,"26":30,"27":29,"28":29,"29":29,"30":29,"31":29,"32":29,"33":29,"34":1,"35":2,"36":1,"37":27,"38":29,"39":29,"40":29,"41":29,"42":29,"43":0,"44":0,"45":29,"46":0,"47":0,"48":0,"49":0,"50":29,"51":0,"52":29,"53":29,"54":29,"55":0,"56":0,"57":0,"58":29,"59":0,"60":29,"61":8,"62":21,"63":21,"64":21,"65":21,"66":21,"67":0,"68":1},"b":{"1":[10,6],"2":[1,9],"3":[0,10],"4":[29,29],"5":[2,27],"6":[2,27],"7":[29,0],"8":[0,29],"9":[0,29],"10":[0,0],"11":[0,0],"12":[0,29],"13":[29,0],"14":[0,29],"15":[0,0],"16":[0,0],"17":[0,0],"18":[8,21],"19":[21,0],"20":[21,0]},"f":{"1":10,"2":10,"3":10,"4":29,"5":29,"6":2,"7":27,"8":29,"9":29},"fnMap":{"1":{"name":"getRequestLib","line":15,"loc":{"start":{"line":15,"column":0},"end":{"line":15,"column":32}}},"2":{"name":"Client","line":28,"loc":{"start":{"line":28,"column":0},"end":{"line":28,"column":25}}},"3":{"name":"(anonymous_3)","line":43,"loc":{"start":{"line":43,"column":18},"end":{"line":43,"column":29}}},"4":{"name":"(anonymous_4)","line":53,"loc":{"start":{"line":53,"column":12},"end":{"line":53,"column":56}}},"5":{"name":"(anonymous_5)","line":60,"loc":{"start":{"line":60,"column":30},"end":{"line":60,"column":56}}},"6":{"name":"spreadResponse","line":72,"loc":{"start":{"line":72,"column":6},"end":{"line":72,"column":46}}},"7":{"name":"noSpreadResponse","line":76,"loc":{"start":{"line":76,"column":6},"end":{"line":76,"column":38}}},"8":{"name":"(anonymous_8)","line":98,"loc":{"start":{"line":98,"column":38},"end":{"line":98,"column":68}}},"9":{"name":"(anonymous_9)","line":146,"loc":{"start":{"line":146,"column":14},"end":{"line":146,"column":39}}}},"statementMap":{"1":{"start":{"line":3,"column":0},"end":{"line":3,"column":26}},"2":{"start":{"line":4,"column":0},"end":{"line":4,"column":33}},"3":{"start":{"line":5,"column":0},"end":{"line":5,"column":34}},"4":{"start":{"line":6,"column":0},"end":{"line":6,"column":25}},"5":{"start":{"line":7,"column":0},"end":{"line":7,"column":33}},"6":{"start":{"line":8,"column":0},"end":{"line":8,"column":47}},"7":{"start":{"line":9,"column":0},"end":{"line":9,"column":60}},"8":{"start":{"line":10,"column":0},"end":{"line":10,"column":39}},"9":{"start":{"line":11,"column":0},"end":{"line":11,"column":29}},"10":{"start":{"line":12,"column":0},"end":{"line":12,"column":51}},"11":{"start":{"line":15,"column":0},"end":{"line":26,"column":1}},"12":{"start":{"line":16,"column":2},"end":{"line":16,"column":53}},"13":{"start":{"line":18,"column":2},"end":{"line":23,"column":3}},"14":{"start":{"line":19,"column":4},"end":{"line":22,"column":7}},"15":{"start":{"line":25,"column":2},"end":{"line":25,"column":27}},"16":{"start":{"line":28,"column":0},"end":{"line":40,"column":1}},"17":{"start":{"line":29,"column":2},"end":{"line":29,"column":29}},"18":{"start":{"line":29,"column":16},"end":{"line":29,"column":29}},"19":{"start":{"line":30,"column":2},"end":{"line":30,"column":31}},"20":{"start":{"line":31,"column":2},"end":{"line":31,"column":41}},"21":{"start":{"line":32,"column":2},"end":{"line":32,"column":43}},"22":{"start":{"line":33,"column":2},"end":{"line":37,"column":22}},"23":{"start":{"line":39,"column":2},"end":{"line":39,"column":24}},"24":{"start":{"line":42,"column":0},"end":{"line":163,"column":2}},"25":{"start":{"line":45,"column":4},"end":{"line":49,"column":5}},"26":{"start":{"line":46,"column":6},"end":{"line":48,"column":36}},"27":{"start":{"line":54,"column":4},"end":{"line":54,"column":20}},"28":{"start":{"line":56,"column":4},"end":{"line":56,"column":83}},"29":{"start":{"line":58,"column":4},"end":{"line":58,"column":82}},"30":{"start":{"line":60,"column":4},"end":{"line":142,"column":14}},"31":{"start":{"line":61,"column":6},"end":{"line":66,"column":9}},"32":{"start":{"line":68,"column":6},"end":{"line":68,"column":37}},"33":{"start":{"line":70,"column":6},"end":{"line":70,"column":83}},"34":{"start":{"line":72,"column":6},"end":{"line":74,"column":7}},"35":{"start":{"line":73,"column":8},"end":{"line":73,"column":34}},"36":{"start":{"line":76,"column":6},"end":{"line":78,"column":7}},"37":{"start":{"line":77,"column":8},"end":{"line":77,"column":22}},"38":{"start":{"line":80,"column":6},"end":{"line":80,"column":67}},"39":{"start":{"line":84,"column":6},"end":{"line":84,"column":155}},"40":{"start":{"line":86,"column":6},"end":{"line":96,"column":29}},"41":{"start":{"line":98,"column":6},"end":{"line":140,"column":9}},"42":{"start":{"line":99,"column":8},"end":{"line":102,"column":9}},"43":{"start":{"line":100,"column":10},"end":{"line":100,"column":34}},"44":{"start":{"line":101,"column":10},"end":{"line":101,"column":29}},"45":{"start":{"line":104,"column":8},"end":{"line":114,"column":9}},"46":{"start":{"line":106,"column":10},"end":{"line":108,"column":11}},"47":{"start":{"line":107,"column":12},"end":{"line":107,"column":45}},"48":{"start":{"line":111,"column":10},"end":{"line":113,"column":11}},"49":{"start":{"line":112,"column":12},"end":{"line":112,"column":44}},"50":{"start":{"line":116,"column":8},"end":{"line":118,"column":9}},"51":{"start":{"line":117,"column":10},"end":{"line":117,"column":42}},"52":{"start":{"line":120,"column":8},"end":{"line":138,"column":9}},"53":{"start":{"line":121,"column":10},"end":{"line":121,"column":59}},"54":{"start":{"line":123,"column":10},"end":{"line":132,"column":11}},"55":{"start":{"line":124,"column":12},"end":{"line":124,"column":139}},"56":{"start":{"line":125,"column":12},"end":{"line":125,"column":47}},"57":{"start":{"line":126,"column":12},"end":{"line":131,"column":16}},"58":{"start":{"line":134,"column":10},"end":{"line":134,"column":48}},"59":{"start":{"line":137,"column":10},"end":{"line":137,"column":27}},"60":{"start":{"line":147,"column":4},"end":{"line":147,"column":46}},"61":{"start":{"line":147,"column":34},"end":{"line":147,"column":46}},"62":{"start":{"line":150,"column":4},"end":{"line":150,"column":55}},"63":{"start":{"line":151,"column":4},"end":{"line":158,"column":5}},"64":{"start":{"line":152,"column":6},"end":{"line":152,"column":41}},"65":{"start":{"line":154,"column":6},"end":{"line":156,"column":7}},"66":{"start":{"line":155,"column":8},"end":{"line":155,"column":32}},"67":{"start":{"line":160,"column":4},"end":{"line":160,"column":16}},"68":{"start":{"line":165,"column":0},"end":{"line":165,"column":24}}},"branchMap":{"1":{"line":16,"type":"binary-expr","locations":[{"start":{"line":16,"column":26},"end":{"line":16,"column":41}},{"start":{"line":16,"column":45},"end":{"line":16,"column":52}}]},"2":{"line":18,"type":"if","locations":[{"start":{"line":18,"column":2},"end":{"line":18,"column":2}},{"start":{"line":18,"column":2},"end":{"line":18,"column":2}}]},"3":{"line":29,"type":"if","locations":[{"start":{"line":29,"column":2},"end":{"line":29,"column":2}},{"start":{"line":29,"column":2},"end":{"line":29,"column":2}}]},"4":{"line":58,"type":"binary-expr","locations":[{"start":{"line":58,"column":41},"end":{"line":58,"column":60}},{"start":{"line":58,"column":64},"end":{"line":58,"column":80}}]},"5":{"line":70,"type":"cond-expr","locations":[{"start":{"line":70,"column":54},"end":{"line":70,"column":68}},{"start":{"line":70,"column":71},"end":{"line":70,"column":82}}]},"6":{"line":80,"type":"cond-expr","locations":[{"start":{"line":80,"column":33},"end":{"line":80,"column":47}},{"start":{"line":80,"column":50},"end":{"line":80,"column":66}}]},"7":{"line":93,"type":"cond-expr","locations":[{"start":{"line":93,"column":51},"end":{"line":93,"column":57}},{"start":{"line":93,"column":60},"end":{"line":93,"column":76}}]},"8":{"line":99,"type":"if","locations":[{"start":{"line":99,"column":8},"end":{"line":99,"column":8}},{"start":{"line":99,"column":8},"end":{"line":99,"column":8}}]},"9":{"line":104,"type":"if","locations":[{"start":{"line":104,"column":8},"end":{"line":104,"column":8}},{"start":{"line":104,"column":8},"end":{"line":104,"column":8}}]},"10":{"line":106,"type":"if","locations":[{"start":{"line":106,"column":10},"end":{"line":106,"column":10}},{"start":{"line":106,"column":10},"end":{"line":106,"column":10}}]},"11":{"line":111,"type":"if","locations":[{"start":{"line":111,"column":10},"end":{"line":111,"column":10}},{"start":{"line":111,"column":10},"end":{"line":111,"column":10}}]},"12":{"line":116,"type":"if","locations":[{"start":{"line":116,"column":8},"end":{"line":116,"column":8}},{"start":{"line":116,"column":8},"end":{"line":116,"column":8}}]},"13":{"line":116,"type":"binary-expr","locations":[{"start":{"line":116,"column":12},"end":{"line":116,"column":35}},{"start":{"line":116,"column":39},"end":{"line":116,"column":66}}]},"14":{"line":123,"type":"if","locations":[{"start":{"line":123,"column":10},"end":{"line":123,"column":10}},{"start":{"line":123,"column":10},"end":{"line":123,"column":10}}]},"15":{"line":124,"type":"cond-expr","locations":[{"start":{"line":124,"column":67},"end":{"line":124,"column":106}},{"start":{"line":124,"column":109},"end":{"line":124,"column":138}}]},"16":{"line":125,"type":"binary-expr","locations":[{"start":{"line":125,"column":27},"end":{"line":125,"column":37}},{"start":{"line":125,"column":41},"end":{"line":125,"column":45}}]},"17":{"line":130,"type":"binary-expr","locations":[{"start":{"line":130,"column":20},"end":{"line":130,"column":30}},{"start":{"line":130,"column":34},"end":{"line":130,"column":38}}]},"18":{"line":147,"type":"if","locations":[{"start":{"line":147,"column":4},"end":{"line":147,"column":4}},{"start":{"line":147,"column":4},"end":{"line":147,"column":4}}]},"19":{"line":151,"type":"if","locations":[{"start":{"line":151,"column":4},"end":{"line":151,"column":4}},{"start":{"line":151,"column":4},"end":{"line":151,"column":4}}]},"20":{"line":154,"type":"if","locations":[{"start":{"line":154,"column":6},"end":{"line":154,"column":6}},{"start":{"line":154,"column":6},"end":{"line":154,"column":6}}]}}},"/Users/leroux/gitter/node-gitter/lib/errors.js":{"path":"/Users/leroux/gitter/node-gitter/lib/errors.js","s":{"1":1,"2":1,"3":1,"4":1},"b":{},"f":{},"fnMap":{},"statementMap":{"1":{"start":{"line":3,"column":0},"end":{"line":3,"column":42}},"2":{"start":{"line":6,"column":0},"end":{"line":6,"column":53}},"3":{"start":{"line":8,"column":0},"end":{"line":8,"column":62}},"4":{"start":{"line":10,"column":0},"end":{"line":13,"column":2}}},"branchMap":{}},"/Users/leroux/gitter/node-gitter/lib/resources/index.js":{"path":"/Users/leroux/gitter/node-gitter/lib/resources/index.js","s":{"1":1,"2":1},"b":{},"f":{},"fnMap":{},"statementMap":{"1":{"start":{"line":3,"column":0},"end":{"line":3,"column":52}},"2":{"start":{"line":5,"column":0},"end":{"line":5,"column":42}}},"branchMap":{}},"/Users/leroux/gitter/node-gitter/lib/resources/messages.js":{"path":"/Users/leroux/gitter/node-gitter/lib/resources/messages.js","s":{"1":1,"2":1,"3":1},"b":{},"f":{"1":0},"fnMap":{"1":{"name":"(anonymous_1)","line":25,"loc":{"start":{"line":25,"column":17},"end":{"line":25,"column":28}}}},"statementMap":{"1":{"start":{"line":3,"column":0},"end":{"line":3,"column":49}},"2":{"start":{"line":4,"column":0},"end":{"line":4,"column":29}},"3":{"start":{"line":6,"column":0},"end":{"line":28,"column":3}}},"branchMap":{}},"/Users/leroux/gitter/node-gitter/lib/resources/rooms.js":{"path":"/Users/leroux/gitter/node-gitter/lib/resources/rooms.js","s":{"1":1,"2":1,"3":1},"b":{},"f":{},"fnMap":{},"statementMap":{"1":{"start":{"line":3,"column":0},"end":{"line":3,"column":49}},"2":{"start":{"line":4,"column":0},"end":{"line":4,"column":29}},"3":{"start":{"line":6,"column":0},"end":{"line":28,"column":3}}},"branchMap":{}},"/Users/leroux/gitter/node-gitter/lib/resources/users.js":{"path":"/Users/leroux/gitter/node-gitter/lib/resources/users.js","s":{"1":1,"2":1,"3":1},"b":{},"f":{},"fnMap":{},"statementMap":{"1":{"start":{"line":3,"column":0},"end":{"line":3,"column":49}},"2":{"start":{"line":4,"column":0},"end":{"line":4,"column":29}},"3":{"start":{"line":6,"column":0},"end":{"line":47,"column":3}}},"branchMap":{}}} \ No newline at end of file diff --git a/output/coverage-reports/lcov-report/base.css b/output/coverage-reports/lcov-report/base.css deleted file mode 100644 index a6a2f32..0000000 --- a/output/coverage-reports/lcov-report/base.css +++ /dev/null @@ -1,182 +0,0 @@ -body, html { - margin:0; padding: 0; -} -body { - font-family: Helvetica Neue, Helvetica,Arial; - font-size: 10pt; -} -div.header, div.footer { - background: #eee; - padding: 1em; -} -div.header { - z-index: 100; - position: fixed; - top: 0; - border-bottom: 1px solid #666; - width: 100%; -} -div.footer { - border-top: 1px solid #666; -} -div.body { - margin-top: 10em; -} -div.meta { - font-size: 90%; - text-align: center; -} -h1, h2, h3 { - font-weight: normal; -} -h1 { - font-size: 12pt; -} -h2 { - font-size: 10pt; -} -pre { - font-family: Consolas, Menlo, Monaco, monospace; - margin: 0; - padding: 0; - line-height: 1.3; - font-size: 14px; - -moz-tab-size: 2; - -o-tab-size: 2; - tab-size: 2; -} - -div.path { font-size: 110%; } -div.path a:link, div.path a:visited { color: #000; } -table.coverage { border-collapse: collapse; margin:0; padding: 0 } - -table.coverage td { - margin: 0; - padding: 0; - color: #111; - vertical-align: top; -} -table.coverage td.line-count { - width: 50px; - text-align: right; - padding-right: 5px; -} -table.coverage td.line-coverage { - color: #777 !important; - text-align: right; - border-left: 1px solid #666; - border-right: 1px solid #666; -} - -table.coverage td.text { -} - -table.coverage td span.cline-any { - display: inline-block; - padding: 0 5px; - width: 40px; -} -table.coverage td span.cline-neutral { - background: #eee; -} -table.coverage td span.cline-yes { - background: #b5d592; - color: #999; -} -table.coverage td span.cline-no { - background: #fc8c84; -} - -.cstat-yes { color: #111; } -.cstat-no { background: #fc8c84; color: #111; } -.fstat-no { background: #ffc520; color: #111 !important; } -.cbranch-no { background: yellow !important; color: #111; } - -.cstat-skip { background: #ddd; color: #111; } -.fstat-skip { background: #ddd; color: #111 !important; } -.cbranch-skip { background: #ddd !important; color: #111; } - -.missing-if-branch { - display: inline-block; - margin-right: 10px; - position: relative; - padding: 0 4px; - background: black; - color: yellow; -} - -.skip-if-branch { - display: none; - margin-right: 10px; - position: relative; - padding: 0 4px; - background: #ccc; - color: white; -} - -.missing-if-branch .typ, .skip-if-branch .typ { - color: inherit !important; -} - -.entity, .metric { font-weight: bold; } -.metric { display: inline-block; border: 1px solid #333; padding: 0.3em; background: white; } -.metric small { font-size: 80%; font-weight: normal; color: #666; } - -div.coverage-summary table { border-collapse: collapse; margin: 3em; font-size: 110%; } -div.coverage-summary td, div.coverage-summary table th { margin: 0; padding: 0.25em 1em; border-top: 1px solid #666; border-bottom: 1px solid #666; } -div.coverage-summary th { text-align: left; border: 1px solid #666; background: #eee; font-weight: normal; } -div.coverage-summary th.file { border-right: none !important; } -div.coverage-summary th.pic { border-left: none !important; text-align: right; } -div.coverage-summary th.pct { border-right: none !important; } -div.coverage-summary th.abs { border-left: none !important; text-align: right; } -div.coverage-summary td.pct { text-align: right; border-left: 1px solid #666; } -div.coverage-summary td.abs { text-align: right; font-size: 90%; color: #444; border-right: 1px solid #666; } -div.coverage-summary td.file { border-left: 1px solid #666; white-space: nowrap; } -div.coverage-summary td.pic { min-width: 120px !important; } -div.coverage-summary a:link { text-decoration: none; color: #000; } -div.coverage-summary a:visited { text-decoration: none; color: #777; } -div.coverage-summary a:hover { text-decoration: underline; } -div.coverage-summary tfoot td { border-top: 1px solid #666; } - -div.coverage-summary .sorter { - height: 10px; - width: 7px; - display: inline-block; - margin-left: 0.5em; - background: url(sort-arrow-sprite.png) no-repeat scroll 0 0 transparent; -} -div.coverage-summary .sorted .sorter { - background-position: 0 -20px; -} -div.coverage-summary .sorted-desc .sorter { - background-position: 0 -10px; -} - -.high { background: #b5d592 !important; } -.medium { background: #ffe87c !important; } -.low { background: #fc8c84 !important; } - -span.cover-fill, span.cover-empty { - display:inline-block; - border:1px solid #444; - background: white; - height: 12px; -} -span.cover-fill { - background: #ccc; - border-right: 1px solid #444; -} -span.cover-empty { - background: white; - border-left: none; -} -span.cover-full { - border-right: none !important; -} -pre.prettyprint { - border: none !important; - padding: 0 !important; - margin: 0 !important; -} -.com { color: #999 !important; } -.ignore-none { color: #999; font-weight: normal; } diff --git a/output/coverage-reports/lcov-report/index.html b/output/coverage-reports/lcov-report/index.html deleted file mode 100644 index 7daf71e..0000000 --- a/output/coverage-reports/lcov-report/index.html +++ /dev/null @@ -1,86 +0,0 @@ - - - - Code coverage report for All files - - - - - - -
-

Code coverage report for All files

-

- Statements: 84.34% (70 / 83)      - Branches: 52.5% (21 / 40)      - Functions: 90% (9 / 10)      - Lines: 85.19% (69 / 81)      - Ignored: none      -

-
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
lib/81.94%(59 / 72)52.5%(21 / 40)100%(9 / 9)82.86%(58 / 70)
lib/resources/100%(11 / 11)100%(0 / 0)0%(0 / 1)100%(11 / 11)
-
-
- - - - - - diff --git a/output/coverage-reports/lcov-report/lib/client.js.html b/output/coverage-reports/lcov-report/lib/client.js.html deleted file mode 100644 index 35b9af4..0000000 --- a/output/coverage-reports/lcov-report/lib/client.js.html +++ /dev/null @@ -1,540 +0,0 @@ - - - - Code coverage report for lib/client.js - - - - - - -
-

Code coverage report for lib/client.js

-

- Statements: 80.88% (55 / 68)      - Branches: 52.5% (21 / 40)      - Functions: 100% (9 / 9)      - Lines: 81.82% (54 / 66)      - Ignored: none      -

-
All files » lib/ » client.js
-
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166  -  -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -  -  -1 -10 -  -10 -1 -  -  -  -  -  -9 -  -  -1 -10 -10 -10 -10 -10 -  -  -  -  -  -10 -  -  -1 -  -  -10 -30 -  -  -  -  -  -  -  -29 -  -29 -  -29 -  -29 -29 -  -  -  -  -  -  -29 -  -29 -  -1 -2 -  -  -1 -27 -  -  -29 -  -  -  -29 -  -29 -  -  -  -  -  -  -  -  -  -  -  -29 -29 -  -  -  -  -29 -  -  -  -  -  -  -  -  -  -  -  -29 -  -  -  -29 -29 -  -29 -  -  -  -  -  -  -  -  -  -  -29 -  -  -  -  -  -  -  -  -  -  -  -  -29 -  -  -21 -21 -21 -  -21 -21 -  -  -  -  -  -  -  -  -  -1 - 
'use strict';
- 
-var _ = require('lodash');
-var request = require('request');
-var Promise = require('bluebird');
-var url = require('url');
-var errors = require('./errors');
-var requestExt = require('request-extensible');
-Client.PACKAGE_VERSION = require('../package.json').version;
-var resources = require('./resources');
-Client.resources = resources;
-var debug = require('debug')('node-gitter:client');
- 
-/* Constructs the request which the client will use */
-function getRequestLib(options) {
-  var underlyingRequest = options.request || request;
-  /* If extensions have been specified, use request-extensible */
-  if (options.extensions) {
-    return requestExt({
-      request: underlyingRequest,
-      extensions: options.extensions
-    });
-  }
- 
-  return underlyingRequest;
-}
- 
-function Client(options) {
-  Iif (!options) options = {};
-  this.spread = options.spread;
-  this.accessToken = options.accessToken;
-  this.requestLib = getRequestLib(options);
-  this.defaultHeaders = _.extend({
-    'Accept': 'application/json',
-    'Content-Type': 'application/json',
-    'User-Agent': 'NodeGitter/' + Client.PACKAGE_VERSION
-  }, options.headers);
- 
-  this._prepResources();
-}
- 
-Client.prototype = {
-  _prepResources: function() {
- 
-    for (var name in resources) {
-      this[
-        name[0].toLowerCase() + name.substring(1)
-      ] = new resources[name](this);
-    }
- 
-  },
- 
-  _request: function(method, path, data, spec, options) {
-    var self = this;
- 
-    var headers = _.extend({}, this.defaultHeaders, spec.headers, options.headers);
- 
-    headers.Authorization = 'Bearer ' + (options.accessToken || this.accessToken);
- 
-    return new Promise(_.bind(function(resolve, reject) {
-      var uri = url.format({
-        protocol: "https:",
-        host: "api.gitter.im",
-        pathname: path,
-        query: options.query
-      });
- 
-      debug(method+' '+uri, headers);
- 
-      var useSpread = options.spread !== undefined  ? options.spread : this.spread;
- 
-      function spreadResponse(body, response) {
-        resolve([body, response]);
-      }
- 
-      function noSpreadResponse(body) {
-        resolve(body);
-      }
- 
-      var resolver = useSpread ? spreadResponse : noSpreadResponse;
- 
-      // Pass the options through to the extensions, but don't include the options
-      // that have been mutated by this method
-      var passThroughOptions = _.omit(options, 'query', 'accessToken', 'spread', 'headers', 'body', 'url', 'json', 'followRedirect', 'followAllRedirects');
- 
-      var requestOptions = _.defaults({
-        method: method,
-        uri: uri,
-        headers: headers,
-        body: data,
-        json: !!data,
-        gzip: true,
-        encoding: options.encoding === undefined ? 'utf8' : options.encoding,
-        followRedirect: true,
-        followAllRedirects: true, // Redirects for non-GET requests
-      }, passThroughOptions);
- 
-      this.requestLib(requestOptions, function(err, response, body) {
-        Iif (err) {
-          err.response = response;
-          return reject(err);
-        }
- 
-        Iif (spec.checkOperation) {
-          /* 404 means "false" */
-          if (response.statusCode === 404) {
-            return resolver(false, response);
-          }
- 
-          /* 2XX means "true" */
-          if (response.statusCode < 300) {
-            return resolver(true, response);
-          }
-        }
- 
-        Iif (options.treat404asEmpty && response.statusCode === 404) {
-          return resolver(null, response);
-        }
- 
-        try {
-          var parsedBody = self._parseBody(response, body);
- 
-          Iif (response.statusCode >= 400) {
-            var message = typeof parsedBody.message === 'string' ? parsedBody.message.replace(/\n+/g, ' ') : "HTTP " + response.statusCode;
-            debug(message, parsedBody || body);
-            return reject(new errors.GitterError(message, {
-              url: uri,
-              statusCode: response.statusCode,
-              headers: response.headers,
-              body: parsedBody || body
-            }));
-          }
- 
-          return resolver(parsedBody, response);
- 
-        } catch(e) {
-          return reject(e);
-        }
- 
-      });
- 
-    }, this));
- 
-  },
- 
-  _parseBody: function(response, body) {
-    if (typeof body !== 'string') return body;
- 
-    // TODO: deal with various types
-    var contentType = response.headers['content-type'];
-    Eif (contentType) {
-      var ct = contentType.split(';')[0];
- 
-      Eif (ct === 'application/json') {
-        return JSON.parse(body);
-      }
- 
-    }
- 
-    return body;
-  }
- 
-};
- 
-module.exports = Client;
- 
- -
- - - - - - diff --git a/output/coverage-reports/lcov-report/lib/errors.js.html b/output/coverage-reports/lcov-report/lib/errors.js.html deleted file mode 100644 index bbc51ba..0000000 --- a/output/coverage-reports/lcov-report/lib/errors.js.html +++ /dev/null @@ -1,84 +0,0 @@ - - - - Code coverage report for lib/errors.js - - - - - - -
-

Code coverage report for lib/errors.js

-

- Statements: 100% (4 / 4)      - Branches: 100% (0 / 0)      - Functions: 100% (0 / 0)      - Lines: 100% (4 / 4)      - Ignored: none      -

-
All files » lib/ » errors.js
-
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14  -  -1 -  -  -1 -  -1 -  -1 -  -  -  - 
'use strict';
- 
-var createError = require('create-error');
- 
-// an error this library threw
-var NodeGitterError = createError('NodeGitterError');
-// gitter's threw this error
-var GitterError = createError(NodeGitterError, 'GitterError');
- 
-module.exports = {
-  NodeGitterError: NodeGitterError,
-  GitterError: GitterError
-};
- 
- -
- - - - - - diff --git a/output/coverage-reports/lcov-report/lib/index.html b/output/coverage-reports/lcov-report/lib/index.html deleted file mode 100644 index d1f1b28..0000000 --- a/output/coverage-reports/lcov-report/lib/index.html +++ /dev/null @@ -1,86 +0,0 @@ - - - - Code coverage report for lib/ - - - - - - -
-

Code coverage report for lib/

-

- Statements: 81.94% (59 / 72)      - Branches: 52.5% (21 / 40)      - Functions: 100% (9 / 9)      - Lines: 82.86% (58 / 70)      - Ignored: none      -

-
All files » lib/
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
client.js80.88%(55 / 68)52.5%(21 / 40)100%(9 / 9)81.82%(54 / 66)
errors.js100%(4 / 4)100%(0 / 0)100%(0 / 0)100%(4 / 4)
-
-
- - - - - - diff --git a/output/coverage-reports/lcov-report/lib/resources/index.html b/output/coverage-reports/lcov-report/lib/resources/index.html deleted file mode 100644 index b21aa4d..0000000 --- a/output/coverage-reports/lcov-report/lib/resources/index.html +++ /dev/null @@ -1,112 +0,0 @@ - - - - Code coverage report for lib/resources/ - - - - - - -
-

Code coverage report for lib/resources/

-

- Statements: 100% (11 / 11)      - Branches: 100% (0 / 0)      - Functions: 0% (0 / 1)      - Lines: 100% (11 / 11)      - Ignored: none      -

-
All files » lib/resources/
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
index.js100%(2 / 2)100%(0 / 0)100%(0 / 0)100%(2 / 2)
messages.js100%(3 / 3)100%(0 / 0)0%(0 / 1)100%(3 / 3)
rooms.js100%(3 / 3)100%(0 / 0)100%(0 / 0)100%(3 / 3)
users.js100%(3 / 3)100%(0 / 0)100%(0 / 0)100%(3 / 3)
-
-
- - - - - - diff --git a/output/coverage-reports/lcov-report/lib/resources/index.js.html b/output/coverage-reports/lcov-report/lib/resources/index.js.html deleted file mode 100644 index 3e7b3d5..0000000 --- a/output/coverage-reports/lcov-report/lib/resources/index.js.html +++ /dev/null @@ -1,60 +0,0 @@ - - - - Code coverage report for lib/resources/index.js - - - - - - -
-

Code coverage report for lib/resources/index.js

-

- Statements: 100% (2 / 2)      - Branches: 100% (0 / 0)      - Functions: 100% (0 / 0)      - Lines: 100% (2 / 2)      - Ignored: none      -

-
All files » lib/resources/ » index.js
-
-
-

-
-
1 -2 -3 -4 -5 -6  -  -1 -  -1 - 
'use strict';
- 
-var requireDirectory = require('require-directory');
- 
-module.exports = requireDirectory(module);
- 
- -
- - - - - - diff --git a/output/coverage-reports/lcov-report/lib/resources/messages.js.html b/output/coverage-reports/lcov-report/lib/resources/messages.js.html deleted file mode 100644 index 061b601..0000000 --- a/output/coverage-reports/lcov-report/lib/resources/messages.js.html +++ /dev/null @@ -1,129 +0,0 @@ - - - - Code coverage report for lib/resources/messages.js - - - - - - -
-

Code coverage report for lib/resources/messages.js

-

- Statements: 100% (3 / 3)      - Branches: 100% (0 / 0)      - Functions: 0% (0 / 1)      - Lines: 100% (3 / 3)      - Ignored: none      -

-
All files » lib/resources/ » messages.js
-
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29  -  -1 -1 -  -1 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
'use strict';
- 
-var Resource = require('tentacles/lib/Resource');
-var method = Resource.method;
- 
-module.exports = Resource.extend({
-  listForRoom: method({
-    method: 'GET',
-    path: '/v1/rooms/:roomId/chatMessages',
-    urlParams: ['roomId']
-  }),
- 
-  create: method({
-    method: 'POST',
-    path: '/v1/rooms/:roomId/chatMessages',
-    urlParams: ['roomId']
-  }),
- 
-  update: method({
-    method: 'PUT',
-    path: '/v1/rooms/:roomId/chatMessages/:chatMessageId',
-    urlParams: ['roomId', 'chatMessageId']
-  }),
- 
-  streamForRoom: function() {
-    // TODO
-  }
-});
- 
- -
- - - - - - diff --git a/output/coverage-reports/lcov-report/lib/resources/rooms.js.html b/output/coverage-reports/lcov-report/lib/resources/rooms.js.html deleted file mode 100644 index 697eec9..0000000 --- a/output/coverage-reports/lcov-report/lib/resources/rooms.js.html +++ /dev/null @@ -1,129 +0,0 @@ - - - - Code coverage report for lib/resources/rooms.js - - - - - - -
-

Code coverage report for lib/resources/rooms.js

-

- Statements: 100% (3 / 3)      - Branches: 100% (0 / 0)      - Functions: 100% (0 / 0)      - Lines: 100% (3 / 3)      - Ignored: none      -

-
All files » lib/resources/ » rooms.js
-
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29  -  -1 -1 -  -1 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
'use strict';
- 
-var Resource = require('tentacles/lib/Resource');
-var method = Resource.method;
- 
-module.exports = Resource.extend({
-  listForAuthUser: method({
-    method: 'GET',
-    path: '/v1/rooms'
-  }),
- 
-  listUsers: method({
-    method: 'GET',
-    path: '/v1/rooms/:roomId/users',
-    urlParams: ['roomId']
-  }),
- 
-  listChannels: method({
-    method: 'GET',
-    path: '/v1/rooms/:roomId/channels',
-    urlParams: ['roomId']
-  }),
- 
-  join: method({
-    method: 'POST',
-    path: '/v1/rooms'
-  })
-});
- 
- -
- - - - - - diff --git a/output/coverage-reports/lcov-report/lib/resources/users.js.html b/output/coverage-reports/lcov-report/lib/resources/users.js.html deleted file mode 100644 index e630e3c..0000000 --- a/output/coverage-reports/lcov-report/lib/resources/users.js.html +++ /dev/null @@ -1,186 +0,0 @@ - - - - Code coverage report for lib/resources/users.js - - - - - - -
-

Code coverage report for lib/resources/users.js

-

- Statements: 100% (3 / 3)      - Branches: 100% (0 / 0)      - Functions: 100% (0 / 0)      - Lines: 100% (3 / 3)      - Ignored: none      -

-
All files » lib/resources/ » users.js
-
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48  -  -1 -1 -  -1 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
'use strict';
- 
-var Resource = require('tentacles/lib/Resource');
-var method = Resource.method;
- 
-module.exports = Resource.extend({
-  getAuthUser: method({
-    method: 'GET',
-    path: '/v1/user/me'
-  }),
- 
-  listRooms: method({
-    method: 'GET',
-    path: '/v1/user/:userId/rooms',
-    urlParams: ['userId']
-  }),
- 
-  listOrgs: method({
-    method: 'GET',
-    path: '/v1/user/:userId/orgs',
-    urlParams: ['userId']
-  }),
- 
-  listRepos: method({
-    method: 'GET',
-    path: '/v1/user/:userId/repos',
-    urlParams: ['userId']
-  }),
- 
-  listChannels: method({
-    method: 'GET',
-    path: '/v1/user/:userId/channels',
-    urlParams: ['userId']
-  }),
- 
-  listUnreadsForRoom: method({
-    method: 'GET',
-    path: '/v1/user/:userId/rooms/:roomId/unreadItems',
-    urlParams: ['userId', 'roomId']
-  }),
- 
-  markUnreadsForRoom: method({
-    method: 'POST',
-    path: '/v1/user/:userId/rooms/:roomId/unreadItems',
-    urlParams: ['userId', 'roomId']
-  })
-});
- 
- -
- - - - - - diff --git a/output/coverage-reports/lcov-report/prettify.css b/output/coverage-reports/lcov-report/prettify.css deleted file mode 100644 index b317a7c..0000000 --- a/output/coverage-reports/lcov-report/prettify.css +++ /dev/null @@ -1 +0,0 @@ -.pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee} diff --git a/output/coverage-reports/lcov-report/prettify.js b/output/coverage-reports/lcov-report/prettify.js deleted file mode 100644 index ef51e03..0000000 --- a/output/coverage-reports/lcov-report/prettify.js +++ /dev/null @@ -1 +0,0 @@ -window.PR_SHOULD_USE_CONTINUATION=true;(function(){var h=["break,continue,do,else,for,if,return,while"];var u=[h,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"];var p=[u,"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"];var l=[p,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"];var x=[p,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"];var R=[x,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"];var r="all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes";var w=[p,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"];var s="caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END";var I=[h,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"];var f=[h,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"];var H=[h,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"];var A=[l,R,w,s+I,f,H];var e=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/;var C="str";var z="kwd";var j="com";var O="typ";var G="lit";var L="pun";var F="pln";var m="tag";var E="dec";var J="src";var P="atn";var n="atv";var N="nocode";var M="(?:^^\\.?|[+-]|\\!|\\!=|\\!==|\\#|\\%|\\%=|&|&&|&&=|&=|\\(|\\*|\\*=|\\+=|\\,|\\-=|\\->|\\/|\\/=|:|::|\\;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\@|\\[|\\^|\\^=|\\^\\^|\\^\\^=|\\{|\\||\\|=|\\|\\||\\|\\|=|\\~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*";function k(Z){var ad=0;var S=false;var ac=false;for(var V=0,U=Z.length;V122)){if(!(al<65||ag>90)){af.push([Math.max(65,ag)|32,Math.min(al,90)|32])}if(!(al<97||ag>122)){af.push([Math.max(97,ag)&~32,Math.min(al,122)&~32])}}}}af.sort(function(av,au){return(av[0]-au[0])||(au[1]-av[1])});var ai=[];var ap=[NaN,NaN];for(var ar=0;arat[0]){if(at[1]+1>at[0]){an.push("-")}an.push(T(at[1]))}}an.push("]");return an.join("")}function W(al){var aj=al.source.match(new RegExp("(?:\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]|\\\\u[A-Fa-f0-9]{4}|\\\\x[A-Fa-f0-9]{2}|\\\\[0-9]+|\\\\[^ux0-9]|\\(\\?[:!=]|[\\(\\)\\^]|[^\\x5B\\x5C\\(\\)\\^]+)","g"));var ah=aj.length;var an=[];for(var ak=0,am=0;ak=2&&ai==="["){aj[ak]=X(ag)}else{if(ai!=="\\"){aj[ak]=ag.replace(/[a-zA-Z]/g,function(ao){var ap=ao.charCodeAt(0);return"["+String.fromCharCode(ap&~32,ap|32)+"]"})}}}}return aj.join("")}var aa=[];for(var V=0,U=Z.length;V=0;){S[ac.charAt(ae)]=Y}}var af=Y[1];var aa=""+af;if(!ag.hasOwnProperty(aa)){ah.push(af);ag[aa]=null}}ah.push(/[\0-\uffff]/);V=k(ah)})();var X=T.length;var W=function(ah){var Z=ah.sourceCode,Y=ah.basePos;var ad=[Y,F];var af=0;var an=Z.match(V)||[];var aj={};for(var ae=0,aq=an.length;ae=5&&"lang-"===ap.substring(0,5);if(am&&!(ai&&typeof ai[1]==="string")){am=false;ap=J}if(!am){aj[ag]=ap}}var ab=af;af+=ag.length;if(!am){ad.push(Y+ab,ap)}else{var al=ai[1];var ak=ag.indexOf(al);var ac=ak+al.length;if(ai[2]){ac=ag.length-ai[2].length;ak=ac-al.length}var ar=ap.substring(5);B(Y+ab,ag.substring(0,ak),W,ad);B(Y+ab+ak,al,q(ar,al),ad);B(Y+ab+ac,ag.substring(ac),W,ad)}}ah.decorations=ad};return W}function i(T){var W=[],S=[];if(T.tripleQuotedStrings){W.push([C,/^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,null,"'\""])}else{if(T.multiLineStrings){W.push([C,/^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,null,"'\"`"])}else{W.push([C,/^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,null,"\"'"])}}if(T.verbatimStrings){S.push([C,/^@\"(?:[^\"]|\"\")*(?:\"|$)/,null])}var Y=T.hashComments;if(Y){if(T.cStyleComments){if(Y>1){W.push([j,/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,null,"#"])}else{W.push([j,/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,null,"#"])}S.push([C,/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,null])}else{W.push([j,/^#[^\r\n]*/,null,"#"])}}if(T.cStyleComments){S.push([j,/^\/\/[^\r\n]*/,null]);S.push([j,/^\/\*[\s\S]*?(?:\*\/|$)/,null])}if(T.regexLiterals){var X=("/(?=[^/*])(?:[^/\\x5B\\x5C]|\\x5C[\\s\\S]|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+/");S.push(["lang-regex",new RegExp("^"+M+"("+X+")")])}var V=T.types;if(V){S.push([O,V])}var U=(""+T.keywords).replace(/^ | $/g,"");if(U.length){S.push([z,new RegExp("^(?:"+U.replace(/[\s,]+/g,"|")+")\\b"),null])}W.push([F,/^\s+/,null," \r\n\t\xA0"]);S.push([G,/^@[a-z_$][a-z_$@0-9]*/i,null],[O,/^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/,null],[F,/^[a-z_$][a-z_$@0-9]*/i,null],[G,new RegExp("^(?:0x[a-f0-9]+|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)(?:e[+\\-]?\\d+)?)[a-z]*","i"),null,"0123456789"],[F,/^\\[\s\S]?/,null],[L,/^.[^\s\w\.$@\'\"\`\/\#\\]*/,null]);return g(W,S)}var K=i({keywords:A,hashComments:true,cStyleComments:true,multiLineStrings:true,regexLiterals:true});function Q(V,ag){var U=/(?:^|\s)nocode(?:\s|$)/;var ab=/\r\n?|\n/;var ac=V.ownerDocument;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=ac.defaultView.getComputedStyle(V,null).getPropertyValue("white-space")}}var Z=S&&"pre"===S.substring(0,3);var af=ac.createElement("LI");while(V.firstChild){af.appendChild(V.firstChild)}var W=[af];function ae(al){switch(al.nodeType){case 1:if(U.test(al.className)){break}if("BR"===al.nodeName){ad(al);if(al.parentNode){al.parentNode.removeChild(al)}}else{for(var an=al.firstChild;an;an=an.nextSibling){ae(an)}}break;case 3:case 4:if(Z){var am=al.nodeValue;var aj=am.match(ab);if(aj){var ai=am.substring(0,aj.index);al.nodeValue=ai;var ah=am.substring(aj.index+aj[0].length);if(ah){var ak=al.parentNode;ak.insertBefore(ac.createTextNode(ah),al.nextSibling)}ad(al);if(!ai){al.parentNode.removeChild(al)}}}break}}function ad(ak){while(!ak.nextSibling){ak=ak.parentNode;if(!ak){return}}function ai(al,ar){var aq=ar?al.cloneNode(false):al;var ao=al.parentNode;if(ao){var ap=ai(ao,1);var an=al.nextSibling;ap.appendChild(aq);for(var am=an;am;am=an){an=am.nextSibling;ap.appendChild(am)}}return aq}var ah=ai(ak.nextSibling,0);for(var aj;(aj=ah.parentNode)&&aj.nodeType===1;){ah=aj}W.push(ah)}for(var Y=0;Y=S){ah+=2}if(V>=ap){Z+=2}}}var t={};function c(U,V){for(var S=V.length;--S>=0;){var T=V[S];if(!t.hasOwnProperty(T)){t[T]=U}else{if(window.console){console.warn("cannot override language handler %s",T)}}}}function q(T,S){if(!(T&&t.hasOwnProperty(T))){T=/^\s*]*(?:>|$)/],[j,/^<\!--[\s\S]*?(?:-\->|$)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],[L,/^(?:<[%?]|[%?]>)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),["default-markup","htm","html","mxml","xhtml","xml","xsl"]);c(g([[F,/^[\s]+/,null," \t\r\n"],[n,/^(?:\"[^\"]*\"?|\'[^\']*\'?)/,null,"\"'"]],[[m,/^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],[P,/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],[L,/^[=<>\/]+/],["lang-js",/^on\w+\s*=\s*\"([^\"]+)\"/i],["lang-js",/^on\w+\s*=\s*\'([^\']+)\'/i],["lang-js",/^on\w+\s*=\s*([^\"\'>\s]+)/i],["lang-css",/^style\s*=\s*\"([^\"]+)\"/i],["lang-css",/^style\s*=\s*\'([^\']+)\'/i],["lang-css",/^style\s*=\s*([^\"\'>\s]+)/i]]),["in.tag"]);c(g([],[[n,/^[\s\S]+/]]),["uq.val"]);c(i({keywords:l,hashComments:true,cStyleComments:true,types:e}),["c","cc","cpp","cxx","cyc","m"]);c(i({keywords:"null,true,false"}),["json"]);c(i({keywords:R,hashComments:true,cStyleComments:true,verbatimStrings:true,types:e}),["cs"]);c(i({keywords:x,cStyleComments:true}),["java"]);c(i({keywords:H,hashComments:true,multiLineStrings:true}),["bsh","csh","sh"]);c(i({keywords:I,hashComments:true,multiLineStrings:true,tripleQuotedStrings:true}),["cv","py"]);c(i({keywords:s,hashComments:true,multiLineStrings:true,regexLiterals:true}),["perl","pl","pm"]);c(i({keywords:f,hashComments:true,multiLineStrings:true,regexLiterals:true}),["rb"]);c(i({keywords:w,cStyleComments:true,regexLiterals:true}),["js"]);c(i({keywords:r,hashComments:3,cStyleComments:true,multilineStrings:true,tripleQuotedStrings:true,regexLiterals:true}),["coffee"]);c(g([],[[C,/^[\s\S]+/]]),["regex"]);function d(V){var U=V.langExtension;try{var S=a(V.sourceNode);var T=S.sourceCode;V.sourceCode=T;V.spans=S.spans;V.basePos=0;q(U,T)(V);D(V)}catch(W){if("console" in window){console.log(W&&W.stack?W.stack:W)}}}function y(W,V,U){var S=document.createElement("PRE");S.innerHTML=W;if(U){Q(S,U)}var T={langExtension:V,numberLines:U,sourceNode:S};d(T);return S.innerHTML}function b(ad){function Y(af){return document.getElementsByTagName(af)}var ac=[Y("pre"),Y("code"),Y("xmp")];var T=[];for(var aa=0;aa=0){var ah=ai.match(ab);var am;if(!ah&&(am=o(aj))&&"CODE"===am.tagName){ah=am.className.match(ab)}if(ah){ah=ah[1]}var al=false;for(var ak=aj.parentNode;ak;ak=ak.parentNode){if((ak.tagName==="pre"||ak.tagName==="code"||ak.tagName==="xmp")&&ak.className&&ak.className.indexOf("prettyprint")>=0){al=true;break}}if(!al){var af=aj.className.match(/\blinenums\b(?::(\d+))?/);af=af?af[1]&&af[1].length?+af[1]:true:false;if(af){Q(aj,af)}S={langExtension:ah,sourceNode:aj,numberLines:af};d(S)}}}if(X]*(?:>|$)/],[PR.PR_COMMENT,/^<\!--[\s\S]*?(?:-\->|$)/],[PR.PR_PUNCTUATION,/^(?:<[%?]|[%?]>)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-handlebars",/^]*type\s*=\s*['"]?text\/x-handlebars-template['"]?\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i],[PR.PR_DECLARATION,/^{{[#^>/]?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{&?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{{>?\s*[\w.][^}]*}}}/],[PR.PR_COMMENT,/^{{![^}]*}}/]]),["handlebars","hbs"]);PR.registerLangHandler(PR.createSimpleLexer([[PR.PR_PLAIN,/^[ \t\r\n\f]+/,null," \t\r\n\f"]],[[PR.PR_STRING,/^\"(?:[^\n\r\f\\\"]|\\(?:\r\n?|\n|\f)|\\[\s\S])*\"/,null],[PR.PR_STRING,/^\'(?:[^\n\r\f\\\']|\\(?:\r\n?|\n|\f)|\\[\s\S])*\'/,null],["lang-css-str",/^url\(([^\)\"\']*)\)/i],[PR.PR_KEYWORD,/^(?:url|rgb|\!important|@import|@page|@media|@charset|inherit)(?=[^\-\w]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|(?:\\[0-9a-f]+ ?))(?:[_a-z0-9\-]|\\(?:\\[0-9a-f]+ ?))*)\s*:/i],[PR.PR_COMMENT,/^\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\//],[PR.PR_COMMENT,/^(?:)/],[PR.PR_LITERAL,/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],[PR.PR_LITERAL,/^#(?:[0-9a-f]{3}){1,2}/i],[PR.PR_PLAIN,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i],[PR.PR_PUNCTUATION,/^[^\s\w\'\"]+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_KEYWORD,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_STRING,/^[^\)\"\']+/]]),["css-str"]); diff --git a/output/coverage-reports/lcov-report/sort-arrow-sprite.png b/output/coverage-reports/lcov-report/sort-arrow-sprite.png deleted file mode 100644 index 03f704a609c6fd0dbfdac63466a7d7c958b5cbf3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 209 zcmeAS@N?(olHy`uVBq!ia0vp^>_9Bd!3HEZxJ@+%Qj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS>Jii$m5978H@?Fn+^JD|Y9yzj{W`447Gxa{7*dM7nnnD-Lb z6^}Hx2)'; - } - } - return cols; - } - // attaches a data attribute to every tr element with an object - // of data values keyed by column name - function loadRowData(tableRow) { - var tableCols = tableRow.querySelectorAll('td'), - colNode, - col, - data = {}, - i, - val; - for (i = 0; i < tableCols.length; i += 1) { - colNode = tableCols[i]; - col = cols[i]; - val = colNode.getAttribute('data-value'); - if (col.type === 'number') { - val = Number(val); - } - data[col.key] = val; - } - return data; - } - // loads all row data - function loadData() { - var rows = getTableBody().querySelectorAll('tr'), - i; - - for (i = 0; i < rows.length; i += 1) { - rows[i].data = loadRowData(rows[i]); - } - } - // sorts the table using the data for the ith column - function sortByIndex(index, desc) { - var key = cols[index].key, - sorter = function (a, b) { - a = a.data[key]; - b = b.data[key]; - return a < b ? -1 : a > b ? 1 : 0; - }, - finalSorter = sorter, - tableBody = document.querySelector('.coverage-summary tbody'), - rowNodes = tableBody.querySelectorAll('tr'), - rows = [], - i; - - if (desc) { - finalSorter = function (a, b) { - return -1 * sorter(a, b); - }; - } - - for (i = 0; i < rowNodes.length; i += 1) { - rows.push(rowNodes[i]); - tableBody.removeChild(rowNodes[i]); - } - - rows.sort(finalSorter); - - for (i = 0; i < rows.length; i += 1) { - tableBody.appendChild(rows[i]); - } - } - // removes sort indicators for current column being sorted - function removeSortIndicators() { - var col = getNthColumn(currentSort.index), - cls = col.className; - - cls = cls.replace(/ sorted$/, '').replace(/ sorted-desc$/, ''); - col.className = cls; - } - // adds sort indicators for current column being sorted - function addSortIndicators() { - getNthColumn(currentSort.index).className += currentSort.desc ? ' sorted-desc' : ' sorted'; - } - // adds event listeners for all sorter widgets - function enableUI() { - var i, - el, - ithSorter = function ithSorter(i) { - var col = cols[i]; - - return function () { - var desc = col.defaultDescSort; - - if (currentSort.index === i) { - desc = !currentSort.desc; - } - sortByIndex(i, desc); - removeSortIndicators(); - currentSort.index = i; - currentSort.desc = desc; - addSortIndicators(); - }; - }; - for (i =0 ; i < cols.length; i += 1) { - if (cols[i].sortable) { - el = getNthColumn(i).querySelector('.sorter'); - if (el.addEventListener) { - el.addEventListener('click', ithSorter(i)); - } else { - el.attachEvent('onclick', ithSorter(i)); - } - } - } - } - // adds sorting functionality to the UI - return function () { - if (!getTable()) { - return; - } - cols = loadColumns(); - loadData(cols); - addSortIndicators(); - enableUI(); - }; -})(); - -window.addEventListener('load', addSorting); diff --git a/output/coverage-reports/lcov.info b/output/coverage-reports/lcov.info deleted file mode 100644 index 18c45d7..0000000 --- a/output/coverage-reports/lcov.info +++ /dev/null @@ -1,195 +0,0 @@ -TN: -SF:/Users/leroux/gitter/node-gitter/lib/client.js -FN:15,getRequestLib -FN:28,Client -FN:43,(anonymous_3) -FN:53,(anonymous_4) -FN:60,(anonymous_5) -FN:72,spreadResponse -FN:76,noSpreadResponse -FN:98,(anonymous_8) -FN:146,(anonymous_9) -FNF:9 -FNH:9 -FNDA:10,getRequestLib -FNDA:10,Client -FNDA:10,(anonymous_3) -FNDA:29,(anonymous_4) -FNDA:29,(anonymous_5) -FNDA:2,spreadResponse -FNDA:27,noSpreadResponse -FNDA:29,(anonymous_8) -FNDA:29,(anonymous_9) -DA:3,1 -DA:4,1 -DA:5,1 -DA:6,1 -DA:7,1 -DA:8,1 -DA:9,1 -DA:10,1 -DA:11,1 -DA:12,1 -DA:15,1 -DA:16,10 -DA:18,10 -DA:19,1 -DA:25,9 -DA:28,1 -DA:29,10 -DA:30,10 -DA:31,10 -DA:32,10 -DA:33,10 -DA:39,10 -DA:42,1 -DA:45,10 -DA:46,30 -DA:54,29 -DA:56,29 -DA:58,29 -DA:60,29 -DA:61,29 -DA:68,29 -DA:70,29 -DA:72,1 -DA:73,2 -DA:76,1 -DA:77,27 -DA:80,29 -DA:84,29 -DA:86,29 -DA:98,29 -DA:99,29 -DA:100,0 -DA:101,0 -DA:104,29 -DA:106,0 -DA:107,0 -DA:111,0 -DA:112,0 -DA:116,29 -DA:117,0 -DA:120,29 -DA:121,29 -DA:123,29 -DA:124,0 -DA:125,0 -DA:126,0 -DA:134,29 -DA:137,0 -DA:147,29 -DA:150,21 -DA:151,21 -DA:152,21 -DA:154,21 -DA:155,21 -DA:160,0 -DA:165,1 -LF:66 -LH:54 -BRDA:16,1,0,10 -BRDA:16,1,1,6 -BRDA:18,2,0,1 -BRDA:18,2,1,9 -BRDA:29,3,0,0 -BRDA:29,3,1,10 -BRDA:58,4,0,29 -BRDA:58,4,1,29 -BRDA:70,5,0,2 -BRDA:70,5,1,27 -BRDA:80,6,0,2 -BRDA:80,6,1,27 -BRDA:93,7,0,29 -BRDA:93,7,1,0 -BRDA:99,8,0,0 -BRDA:99,8,1,29 -BRDA:104,9,0,0 -BRDA:104,9,1,29 -BRDA:106,10,0,0 -BRDA:106,10,1,0 -BRDA:111,11,0,0 -BRDA:111,11,1,0 -BRDA:116,12,0,0 -BRDA:116,12,1,29 -BRDA:116,13,0,29 -BRDA:116,13,1,0 -BRDA:123,14,0,0 -BRDA:123,14,1,29 -BRDA:124,15,0,0 -BRDA:124,15,1,0 -BRDA:125,16,0,0 -BRDA:125,16,1,0 -BRDA:130,17,0,0 -BRDA:130,17,1,0 -BRDA:147,18,0,8 -BRDA:147,18,1,21 -BRDA:151,19,0,21 -BRDA:151,19,1,0 -BRDA:154,20,0,21 -BRDA:154,20,1,0 -BRF:40 -BRH:21 -end_of_record -TN: -SF:/Users/leroux/gitter/node-gitter/lib/errors.js -FNF:0 -FNH:0 -DA:3,1 -DA:6,1 -DA:8,1 -DA:10,1 -LF:4 -LH:4 -BRF:0 -BRH:0 -end_of_record -TN: -SF:/Users/leroux/gitter/node-gitter/lib/resources/index.js -FNF:0 -FNH:0 -DA:3,1 -DA:5,1 -LF:2 -LH:2 -BRF:0 -BRH:0 -end_of_record -TN: -SF:/Users/leroux/gitter/node-gitter/lib/resources/messages.js -FN:25,(anonymous_1) -FNF:1 -FNH:0 -FNDA:0,(anonymous_1) -DA:3,1 -DA:4,1 -DA:6,1 -LF:3 -LH:3 -BRF:0 -BRH:0 -end_of_record -TN: -SF:/Users/leroux/gitter/node-gitter/lib/resources/rooms.js -FNF:0 -FNH:0 -DA:3,1 -DA:4,1 -DA:6,1 -LF:3 -LH:3 -BRF:0 -BRH:0 -end_of_record -TN: -SF:/Users/leroux/gitter/node-gitter/lib/resources/users.js -FNF:0 -FNH:0 -DA:3,1 -DA:4,1 -DA:6,1 -LF:3 -LH:3 -BRF:0 -BRH:0 -end_of_record From f8b0cc5d7b432d8872830a563013ad099b2e5a24 Mon Sep 17 00:00:00 2001 From: Le Roux Bodenstein Date: Mon, 8 Feb 2016 17:18:39 +0200 Subject: [PATCH 3/4] More tentacles-like. --- lib/resources/channels.js | 19 +++++ lib/resources/orgs.js | 12 ++++ lib/resources/repos.js | 12 ++++ lib/resources/rooms.js | 12 +--- lib/resources/unreads.js | 18 +++++ lib/resources/users.js | 36 +--------- test/resources/channels-test.js | 35 +++++++++ .../{messages.js => messages-test.js} | 22 +++--- test/resources/orgs-test.js | 28 ++++++++ test/resources/repos-test.js | 27 +++++++ test/resources/{rooms.js => rooms-test.js} | 35 ++++----- test/resources/unreads-test.js | 35 +++++++++ test/resources/users-test.js | 34 +++++++++ test/resources/users.js | 72 ------------------- test/utils.js | 16 +++++ 15 files changed, 265 insertions(+), 148 deletions(-) create mode 100644 lib/resources/channels.js create mode 100644 lib/resources/orgs.js create mode 100644 lib/resources/repos.js create mode 100644 lib/resources/unreads.js create mode 100644 test/resources/channels-test.js rename test/resources/{messages.js => messages-test.js} (76%) create mode 100644 test/resources/orgs-test.js create mode 100644 test/resources/repos-test.js rename test/resources/{rooms.js => rooms-test.js} (54%) create mode 100644 test/resources/unreads-test.js create mode 100644 test/resources/users-test.js delete mode 100644 test/resources/users.js create mode 100644 test/utils.js diff --git a/lib/resources/channels.js b/lib/resources/channels.js new file mode 100644 index 0000000..9d99a50 --- /dev/null +++ b/lib/resources/channels.js @@ -0,0 +1,19 @@ + +'use strict'; + +var Resource = require('tentacles/lib/Resource'); +var method = Resource.method; + +module.exports = Resource.extend({ + listForRoom: method({ + method: 'GET', + path: '/v1/rooms/:roomId/channels', + urlParams: ['roomId'] + }), + + listForUser: method({ + method: 'GET', + path: '/v1/user/:userId/channels', + urlParams: ['userId'] + }) +}); diff --git a/lib/resources/orgs.js b/lib/resources/orgs.js new file mode 100644 index 0000000..708c31d --- /dev/null +++ b/lib/resources/orgs.js @@ -0,0 +1,12 @@ +'use strict'; + +var Resource = require('tentacles/lib/Resource'); +var method = Resource.method; + +module.exports = Resource.extend({ + listForUser: method({ + method: 'GET', + path: '/v1/user/:userId/orgs', + urlParams: ['userId'] + }) +}); diff --git a/lib/resources/repos.js b/lib/resources/repos.js new file mode 100644 index 0000000..f6bbbc8 --- /dev/null +++ b/lib/resources/repos.js @@ -0,0 +1,12 @@ +'use strict'; + +var Resource = require('tentacles/lib/Resource'); +var method = Resource.method; + +module.exports = Resource.extend({ + listForUser: method({ + method: 'GET', + path: '/v1/user/:userId/repos', + urlParams: ['userId'] + }) +}); diff --git a/lib/resources/rooms.js b/lib/resources/rooms.js index 81de2ac..ebf34e9 100644 --- a/lib/resources/rooms.js +++ b/lib/resources/rooms.js @@ -9,16 +9,10 @@ module.exports = Resource.extend({ path: '/v1/rooms' }), - listUsers: method({ + listForUser: method({ method: 'GET', - path: '/v1/rooms/:roomId/users', - urlParams: ['roomId'] - }), - - listChannels: method({ - method: 'GET', - path: '/v1/rooms/:roomId/channels', - urlParams: ['roomId'] + path: '/v1/user/:userId/rooms', + urlParams: ['userId'] }), join: method({ diff --git a/lib/resources/unreads.js b/lib/resources/unreads.js new file mode 100644 index 0000000..256d563 --- /dev/null +++ b/lib/resources/unreads.js @@ -0,0 +1,18 @@ +'use strict'; + +var Resource = require('tentacles/lib/Resource'); +var method = Resource.method; + +module.exports = Resource.extend({ + listForUserAndRoom: method({ + method: 'GET', + path: '/v1/user/:userId/rooms/:roomId/unreadItems', + urlParams: ['userId', 'roomId'] + }), + + markForUserAndRoom: method({ + method: 'POST', + path: '/v1/user/:userId/rooms/:roomId/unreadItems', + urlParams: ['userId', 'roomId'] + }) +}); diff --git a/lib/resources/users.js b/lib/resources/users.js index 6637f4c..aa1ec94 100644 --- a/lib/resources/users.js +++ b/lib/resources/users.js @@ -9,39 +9,9 @@ module.exports = Resource.extend({ path: '/v1/user/me' }), - listRooms: method({ + listForRoom: method({ method: 'GET', - path: '/v1/user/:userId/rooms', - urlParams: ['userId'] - }), - - listOrgs: method({ - method: 'GET', - path: '/v1/user/:userId/orgs', - urlParams: ['userId'] - }), - - listRepos: method({ - method: 'GET', - path: '/v1/user/:userId/repos', - urlParams: ['userId'] - }), - - listChannels: method({ - method: 'GET', - path: '/v1/user/:userId/channels', - urlParams: ['userId'] - }), - - listUnreadsForRoom: method({ - method: 'GET', - path: '/v1/user/:userId/rooms/:roomId/unreadItems', - urlParams: ['userId', 'roomId'] - }), - - markUnreadsForRoom: method({ - method: 'POST', - path: '/v1/user/:userId/rooms/:roomId/unreadItems', - urlParams: ['userId', 'roomId'] + path: '/v1/rooms/:roomId/users', + urlParams: ['roomId'] }) }); diff --git a/test/resources/channels-test.js b/test/resources/channels-test.js new file mode 100644 index 0000000..b957fa4 --- /dev/null +++ b/test/resources/channels-test.js @@ -0,0 +1,35 @@ +'use strict'; + +var assert = require('assert'); +var testUtils = require('../utils'); + +describe('channels', function() { + var client; + var userId; + var roomId; + + before(function() { + assert(process.env.GITTER_ACCESS_TOKEN, 'Please set GITTER_ACCESS_TOKEN'); + return testUtils.setup() + .spread(function(_client, _userId, _roomId) { + client = _client + userId = _userId; + roomId = _roomId; + }); + }); + + it("it lists a user's channels", function() { + return client.channels.listForUser(userId) + .then(function(channels) { + assert(Array.isArray(channels)); + }); + }); + + it('it lists the channels in a room', function() { + return client.channels.listForRoom(roomId) + .then(function(channels) { + assert(Array.isArray(channels)); + }); + }); + +}); diff --git a/test/resources/messages.js b/test/resources/messages-test.js similarity index 76% rename from test/resources/messages.js rename to test/resources/messages-test.js index 6c0e335..4f6953a 100644 --- a/test/resources/messages.js +++ b/test/resources/messages-test.js @@ -1,26 +1,20 @@ -var Client = require('../..'); +'use strict'; + var assert = require('assert'); +var testUtils = require('../utils'); describe('messages', function() { var client; var userId; - var username; var roomId; before(function() { assert(process.env.GITTER_ACCESS_TOKEN, 'Please set GITTER_ACCESS_TOKEN'); - - client = new Client({ accessToken: process.env.GITTER_ACCESS_TOKEN }); - - return client.users.getAuthUser() - .then(function(user) { - userId = user.id; - username = user.username; - uri = username+'/test'; - return client.rooms.join({uri: uri}) - }) - .then(function(room) { - roomId = room.id; + return testUtils.setup() + .spread(function(_client, _userId, _roomId) { + client = _client; + userId = _userId; + roomId = _roomId; }); }); diff --git a/test/resources/orgs-test.js b/test/resources/orgs-test.js new file mode 100644 index 0000000..40c886c --- /dev/null +++ b/test/resources/orgs-test.js @@ -0,0 +1,28 @@ +'use strict'; + +var assert = require('assert'); +var testUtils = require('../utils'); + +describe('orgs', function() { + var client; + var userId; + var roomId; + + before(function() { + assert(process.env.GITTER_ACCESS_TOKEN, 'Please set GITTER_ACCESS_TOKEN'); + return testUtils.setup() + .spread(function(_client, _userId, _roomId) { + client = _client; + userId = _userId; + roomId = _roomId; + }); + }); + + it("should list a user's orgs", function() { + return client.orgs.listForUser(userId) + .then(function(orgs) { + assert(Array.isArray(orgs)); + }); + }); + +}); diff --git a/test/resources/repos-test.js b/test/resources/repos-test.js new file mode 100644 index 0000000..53a3c7e --- /dev/null +++ b/test/resources/repos-test.js @@ -0,0 +1,27 @@ +'use strict'; + +var assert = require('assert'); +var testUtils = require('../utils'); + +describe('repos', function() { + var client; + var userId; + var roomId; + + before(function() { + assert(process.env.GITTER_ACCESS_TOKEN, 'Please set GITTER_ACCESS_TOKEN'); + return testUtils.setup() + .spread(function(_client, _userId, _roomId) { + client = _client; + userId = _userId; + roomId = _roomId; + }); + }); + + it("should list a user's repos", function() { + return client.repos.listForUser(userId) + .then(function(repos) { + assert(Array.isArray(repos)); + }); + }); +}); diff --git a/test/resources/rooms.js b/test/resources/rooms-test.js similarity index 54% rename from test/resources/rooms.js rename to test/resources/rooms-test.js index b9601f3..58f68de 100644 --- a/test/resources/rooms.js +++ b/test/resources/rooms-test.js @@ -1,17 +1,20 @@ -var Client = require('../..'); +'use strict'; + var assert = require('assert'); +var testUtils = require('../utils'); describe('rooms', function() { var client; + var userId; var roomId; before(function() { assert(process.env.GITTER_ACCESS_TOKEN, 'Please set GITTER_ACCESS_TOKEN'); - - client = new Client({ accessToken: process.env.GITTER_ACCESS_TOKEN }); - return client.rooms.listForAuthUser() - .then(function(rooms) { - roomId = rooms[0].id; + return testUtils.setup() + .spread(function(_client, _userId, _roomId) { + client = _client; + userId = _userId; + roomId = _roomId; }); }); @@ -22,20 +25,6 @@ describe('rooms', function() { }) }); - it('should list the users in a room', function() { - return client.rooms.listUsers(roomId) - .then(function(users) { - assert(Array.isArray(users)); - }) - }); - - it('should list the channels in a room', function() { - return client.rooms.listChannels(roomId) - .then(function(channels) { - assert(Array.isArray(channels)); - }) - }); - it('should allow a user to join a room', function() { var uri = 'gitterHQ/gitter'; return client.rooms.join({uri: uri}) @@ -44,4 +33,10 @@ describe('rooms', function() { }); }); + it("should list a user's rooms", function() { + return client.rooms.listForUser(userId) + .then(function(rooms) { + assert(Array.isArray(rooms)); + }); + }); }); diff --git a/test/resources/unreads-test.js b/test/resources/unreads-test.js new file mode 100644 index 0000000..ac2a948 --- /dev/null +++ b/test/resources/unreads-test.js @@ -0,0 +1,35 @@ +'use strict'; + +var assert = require('assert'); +var testUtils = require('../utils'); + +describe('unreads', function() { + var client; + var userId; + var roomId; + + before(function() { + assert(process.env.GITTER_ACCESS_TOKEN, 'Please set GITTER_ACCESS_TOKEN'); + return testUtils.setup() + .spread(function(_client, _userId, _roomId) { + client = _client; + userId = _userId; + roomId = _roomId; + }); + }); + + it("should list a user's unreads for a room", function() { + return client.unreads.listForUserAndRoom(userId, roomId) + .then(function(result) { + assert(Array.isArray(result.chat)); + assert(Array.isArray(result.mention)); + }); + }); + + it("should mark a user's unreads for a room", function() { + return client.unreads.markForUserAndRoom(userId, roomId, {chat: ['foo']}) + .then(function(result) { + assert.equal(result.success, true); + }); + }); +}); diff --git a/test/resources/users-test.js b/test/resources/users-test.js new file mode 100644 index 0000000..756d136 --- /dev/null +++ b/test/resources/users-test.js @@ -0,0 +1,34 @@ +'use strict'; + +var assert = require('assert'); +var testUtils = require('../utils'); + +describe('users', function() { + var client; + var userId; + var roomId; + + before(function() { + assert(process.env.GITTER_ACCESS_TOKEN, 'Please set GITTER_ACCESS_TOKEN'); + return testUtils.setup() + .spread(function(_client, _userId, _roomId) { + client = _client; + userId = _userId; + roomId = _roomId; + }); + }); + + it('should get the authenticated user', function() { + return client.users.getAuthUser() + .then(function(user) { + assert(user.username); + }) + }); + + it('should list the users in a room', function() { + return client.users.listForRoom(roomId) + .then(function(users) { + assert(Array.isArray(users)); + }) + }); +}); diff --git a/test/resources/users.js b/test/resources/users.js deleted file mode 100644 index bcab74a..0000000 --- a/test/resources/users.js +++ /dev/null @@ -1,72 +0,0 @@ -var Client = require('../..'); -var assert = require('assert'); - -describe('users', function() { - var client; - var userId; - var roomId; - - before(function() { - assert(process.env.GITTER_ACCESS_TOKEN, 'Please set GITTER_ACCESS_TOKEN'); - - client = new Client({ accessToken: process.env.GITTER_ACCESS_TOKEN }); - return client.users.getAuthUser() - .then(function(user) { - userId = user.id; - return client.users.listRooms(userId); - }) - .then(function(rooms) { - roomId = rooms[0].id; - }); - }); - - it('should get the authenticated user', function() { - return client.users.getAuthUser() - .then(function(user) { - assert(user.username); - }) - }); - - it("should list a user's rooms", function() { - return client.users.listRooms(userId) - .then(function(rooms) { - assert(Array.isArray(rooms)); - }); - }); - - it("should list a user's orgs", function() { - return client.users.listOrgs(userId) - .then(function(orgs) { - assert(Array.isArray(orgs)); - }); - }); - - it("should list a user's repos", function() { - return client.users.listRepos(userId) - .then(function(repos) { - assert(Array.isArray(repos)); - }); - }); - - it("should list a user's channels", function() { - return client.users.listChannels(userId) - .then(function(channels) { - assert(Array.isArray(channels)); - }); - }); - - it("should list a user's unreads for a room", function() { - return client.users.listUnreadsForRoom(userId, roomId) - .then(function(result) { - assert(Array.isArray(result.chat)); - assert(Array.isArray(result.mention)); - }); - }); - - it("should mark a user's unreads for a room", function() { - return client.users.markUnreadsForRoom(userId, roomId, {chat: ['foo']}) - .then(function(result) { - assert.equal(result.success, true); - }); - }); -}); diff --git a/test/utils.js b/test/utils.js new file mode 100644 index 0000000..0ef8c2d --- /dev/null +++ b/test/utils.js @@ -0,0 +1,16 @@ +var Client = require('..'); + +function setup() { + client = new Client({ accessToken: process.env.GITTER_ACCESS_TOKEN }); + return client.users.getAuthUser() + .then(function(user) { + var userId = user.id; + return client.rooms.listForUser(userId) + .then(function(rooms) { + var roomId = rooms[0].id; + return [client, userId, roomId]; + }); + }); +} + +exports.setup = setup; From c999e55781b22711521eb70a1e6f265344d5d60e Mon Sep 17 00:00:00 2001 From: Le Roux Bodenstein Date: Tue, 9 Feb 2016 12:34:44 +0200 Subject: [PATCH 4/4] Use a test room for all tests. --- test/utils.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/test/utils.js b/test/utils.js index 0ef8c2d..a98d3bb 100644 --- a/test/utils.js +++ b/test/utils.js @@ -5,9 +5,10 @@ function setup() { return client.users.getAuthUser() .then(function(user) { var userId = user.id; - return client.rooms.listForUser(userId) - .then(function(rooms) { - var roomId = rooms[0].id; + var uri = user.username + '/test'; + return client.rooms.join({uri: uri}) + .then(function(room) { + var roomId = room.id; return [client, userId, roomId]; }); });