ionic
Version:
A tool for creating and developing Ionic Framework mobile apps.
164 lines (150 loc) • 4.97 kB
JavaScript
;
var Q = require('q');
var rewire = require('rewire');
var templateUtils = rewire('../../lib/utils/templates');
var IonicAppLib = require('ionic-app-lib');
var log = IonicAppLib.logging.logger;
var EOL = require('os').EOL;
describe('listTemplates method', function() {
it('should should call fetchStarterTemplates pull out templates/sort and send to list', function(done) {
var fetchStarterTemplatesRevert = templateUtils.__set__('fetchStarterTemplates', function() {
return Q({
items: [
{
name: 'A Template',
description: 'A Description'
},
{
name: 'C Template',
description: 'C Description'
},
{
name: 'B Template',
description: 'B Description'
}
]
});
});
var listRevert = templateUtils.__set__('list', function(list) {
return list;
});
templateUtils.listTemplates().then(function(list) {
expect(list).toEqual([
{
name: 'A Template',
description: 'A Description'
},
{
name: 'B Template',
description: 'B Description'
},
{
name: 'C Template',
description: 'C Description'
}
]);
fetchStarterTemplatesRevert();
listRevert();
done();
});
});
it('should call fail fetchStarterTemplate throws', function(done) {
var error = 'Something failed';
var fetchStarterTemplatesRevert = templateUtils.__set__('fetchStarterTemplates', function() {
return Q.reject(error);
});
templateUtils.listTemplates().catch(function(err) {
expect(err).toEqual(error);
fetchStarterTemplatesRevert();
done();
});
});
});
describe('fetchStarterTemplates function', function() {
beforeEach(function() {
spyOn(log, 'info');
});
it('use request to gather templates and return a promise', function(done) {
var templatesJson = {
items: [
{
name: 'A Template',
description: 'A Description'
},
{
name: 'C Template',
description: 'C Description'
},
{
name: 'B Template',
description: 'B Description'
}
]
};
var templatesString = JSON.stringify(templatesJson);
var revertRequest = templateUtils.__set__('request', function(options, callback) {
callback(null, { statusCode: '200' }, templatesString);
});
var fetchStarterTemplates = templateUtils.__get__('fetchStarterTemplates');
fetchStarterTemplates().then(function(templatesReturned) {
expect(templatesReturned).toEqual(templatesJson);
revertRequest();
done();
});
});
it('use request to gather templates and fail on invalid json', function(done) {
var revertRequest = templateUtils.__set__('request', function(options, callback) {
callback(null, { statusCode: '200' }, '{');
});
spyOn(log, 'error');
var fetchStarterTemplates = templateUtils.__get__('fetchStarterTemplates');
fetchStarterTemplates().catch(function() {
expect(log.error).toHaveBeenCalled();
revertRequest();
done();
});
});
it('use request to gather templates and fail on an response not equal to 200', function(done) {
var revertRequest = templateUtils.__set__('request', function(options, callback) {
callback(null, { statusCode: '400' }, null);
});
spyOn(log, 'error');
var fetchStarterTemplates = templateUtils.__get__('fetchStarterTemplates');
fetchStarterTemplates().catch(function() {
expect(log.error).toHaveBeenCalled();
revertRequest();
done();
});
});
});
describe('list function', function() {
it('on an response not equal to 200', function() {
var templates = [
{
name: 'ionic-starter-a-template',
description: 'A Description'
},
{
name: 'ionic-starter-b-template',
description: 'B Description'
},
{
name: 'c-template',
description: 'C Description'
}
];
spyOn(log, 'info');
var list = templateUtils.__get__('list');
list(templates);
expect(log.info.calls[0].args).toEqual([EOL]);
expect(log.info.calls[1].args[0]).toMatch('a-template'); // Use match because of colors
expect(log.info.calls[1].args[1]).toEqual('...........');
expect(log.info.calls[1].args[2]).toEqual(templates[0].description);
expect(log.info.calls[2].args[0]).toMatch('b-template'); // Use match because of colors
expect(log.info.calls[2].args[1]).toEqual('...........');
expect(log.info.calls[2].args[2]).toEqual(templates[1].description);
expect(log.info.calls[3].args[0]).toMatch('c-template'); // Use match because of colors
expect(log.info.calls[3].args[1]).toEqual('...........');
expect(log.info.calls[3].args[2]).toEqual(templates[2].description);
});
});