UNPKG

ares-ide

Version:

A browser-based code editor and UI designer for Enyo 2 projects

208 lines (177 loc) 7.67 kB
/* * Module dependencies. */ var client = require('../lib/client'), request = require('request'); /* * Specification for phonegap-build-api client. */ describe('phonegap-build-api', function() { describe('auth(options, callback)', function() { var options; it('should be a function', function() { expect(client.auth).toEqual(jasmine.any(Function)); }); describe('using username and password', function() { beforeEach(function() { options = { username: 'zelda', password: 'tr1force' }; }); it('should require options.username', function() { expect(function() { options.username = undefined; client.auth(options, function(e, api) {}); }).toThrow(); }); it('should require options.password', function() { expect(function() { options.password = undefined; client.auth(options, function(e, api) {}); }).toThrow(); }); it('should require callback', function() { expect(function() { client.auth(options, null); }).toThrow(); }); it('should try to authenticate with server', function() { spyOn(request, 'post'); client.auth(options, function(e, api) {}); expect(request.post).toHaveBeenCalledWith( 'https://build.phonegap.com:443/token', jasmine.any(Object), jasmine.any(Function) ); }); describe('successful authentication', function() { beforeEach(function() { spyOn(request, 'post').andCallFake(function(uri, opts, callback) { callback(null, { statusCode: 200 }, '{ "token": "abc123" }'); }); }); it('should trigger callback without an error', function(done) { client.auth(options, function(e, api) { expect(e).toBeNull(); done(); }); }); it('should trigger callback with an API object', function(done) { client.auth(options, function(e, api) { expect(api).toBeDefined(); done(); }); }); }); describe('failed authentication request', function() { beforeEach(function() { spyOn(request, 'post').andCallFake(function(uri, opts, callback) { callback(new Error('request timeout'), {}, ''); }); }); it('should trigger callback with an error', function(done) { client.auth(options, function(e, api) { expect(e).toEqual(jasmine.any(Error)); done(); }); }); it('should trigger callback without an API object', function(done) { client.auth(options, function(e, api) { expect(api).not.toBeDefined(); done(); }); }); }); describe('failed authentication response', function() { beforeEach(function() { spyOn(request, 'post').andCallFake(function(uri, opts, callback) { callback(null, { statusCode: 404 }, 'page not found'); }); }); it('should trigger callback with an error', function(done) { client.auth(options, function(e, api) { expect(e).toEqual(jasmine.any(Error)); expect(e.message).toEqual('page not found'); done(); }); }); it('should trigger callback without an API object', function(done) { client.auth(options, function(e, api) { expect(api).not.toBeDefined(); done(); }); }); describe('when no error body provided', function() { beforeEach(function() { request.post.andCallFake(function(uri, opts, callback) { callback(null, { statusCode: 501 }, ''); }); }); it('should provide default error message', function(done) { client.auth(options, function(e, api) { expect(e).toEqual(jasmine.any(Error)); expect(e.message).toMatch('server returned'); done(); }); }); }); }); describe('failed authentication credentials', function() { beforeEach(function() { spyOn(request, 'post').andCallFake(function(uri, opts, callback) { callback(null, { statusCode: 200 }, ' { "error": "incorrect password" }'); }); }); it('should trigger callback with an error', function(done) { client.auth(options, function(e, api) { expect(e).toEqual(jasmine.any(Error)); done(); }); }); it('should trigger callback without an API object', function(done) { client.auth(options, function(e, api) { expect(api).not.toBeDefined(); done(); }); }); }); }); describe('using token', function() { beforeEach(function() { options = { token: 'abc123' }; }); it('should require options.token', function() { expect(function() { options.token = undefined; client.auth(options, function(e, api) {}); }).toThrow(); }); it('should require callback', function() { expect(function() { client.auth(options, null); }).toThrow(); }); it('should trigger callback without an error', function(done) { client.auth(options, function(e, api) { expect(e).toBeNull(); done(); }); }); it('should trigger callback with an API object', function(done) { client.auth(options, function(e, api) { expect(api).toBeDefined(); done(); }); }); }); describe('passing request options', function() { beforeEach(function() { options = { username: 'zelda', password: 'tr1f0rce' }; }); it('should pass options.proxy to request', function() { options.proxy = 'http://myproxy.com'; spyOn(request, 'post'); client.auth(options, function(e, api) {}); expect(request.post.mostRecentCall.args[1].proxy).toEqual('http://myproxy.com'); }); }); }); });