add tests to insight storage + remove used code

This commit is contained in:
Matias Alejo Garcia 2014-12-03 08:23:53 -03:00
parent d511103081
commit bd698257f9
6 changed files with 124 additions and 93 deletions

View File

@ -46,6 +46,8 @@ angular.module('copayApp.controllers').controller('HomeController', function($sc
$scope.error = 'Invalid email or password';
} else if ((err.toString() || '').match('Connection')) {
$scope.error = 'Could not connect to Insight Server';
} else if ((err.toString() || '').match('Unable')) {
$scope.error = 'Unable to read data from the Insight Server';
} else {
$scope.error = 'Unknown error';
}

View File

@ -298,32 +298,4 @@ GoogleDrive.prototype._checkHomeDir = function(cb) {
});
};
GoogleDrive.prototype.allKeys = function(cb) {
var self = this;
this._checkHomeDir(function(homeId) {
preconditions.checkState(homeId);
var request = gapi.client.request({
'path': '/drive/v2/files',
'method': 'GET',
'params': {
'q': "'" + homeId + "' in parents and trashed = false",
'fields': 'items(id,title)'
},
});
request.execute(function(res) {
// console.log('[googleDrive.js.152:res:]', res); //TODO
if (res.error)
throw new Error(res.error.message);
var ret = [];
for (var ii in res.items) {
ret.push(res.items[ii].title);
}
return cb(ret);
});
});
};
module.exports = GoogleDrive;

View File

@ -118,7 +118,7 @@ InsightStorage.prototype._makeGetRequest = function(passphrase, key, callback) {
return callback('PNOTFOUND: Profile not found');
}
if (response.statusCode !== 200) {
return callback('Connection error');
return callback('Unable to read item from insight');
}
return callback(null, body, InsightStorage.parseResponseHeaders(response.getAllResponseHeaders()));
}
@ -217,7 +217,7 @@ InsightStorage.prototype.removeItem = function(key, callback) {
'Authorization': authHeader
}
};
log.debug('erase ' + name);
log.debug('Erasing: ' + key);
this.request.get(getParams, function(err, response, body) {
if (err) {
return callback('Connection error');
@ -236,14 +236,4 @@ InsightStorage.prototype.clear = function(callback) {
callback();
};
InsightStorage.prototype.allKeys = function(callback) {
// TODO: compatibility with localStorage
return callback(null);
};
InsightStorage.prototype.getFirst = function(prefix, opts, callback) {
// TODO: compatibility with localStorage
return callback(null, true, true);
};
module.exports = InsightStorage;

View File

@ -46,38 +46,4 @@ LocalStorage.prototype.clear = function(cb) {
return cb();
};
LocalStorage.prototype.allKeys = function(cb) {
var l = localStorage.length;
var ret = [];
for(var i=0; i<l; i++)
ret.push(localStorage.key(i));
return cb(null, ret);
};
LocalStorage.prototype.getFirst = function(prefix, opts, cb) {
opts = opts || {};
var that = this;
this.allKeys(function(err, allKeys) {
var keys = _.filter(allKeys, function(k) {
if ((k === prefix) || k.indexOf(prefix) === 0) return true;
});
if (keys.length === 0)
return cb(new Error('not found'));
if (opts.onlyKey)
return cb(null, null, keys[0]);
that.getItem(keys[0], function(err, data) {
if (err) {
return cb(err);
}
return cb(null, data, keys[0]);
});
});
};
module.exports = LocalStorage;

View File

@ -46,41 +46,96 @@ describe('insight storage plugin', function() {
});
});
var setupForRetrieval = function() {
var setupForRetrieval = function(code) {
requestMock.get.onFirstCall().callsArgWith(1, null, {
statusCode: 200,
statusCode: code || 200,
getAllResponseHeaders: sinon.stub().returns(headers),
}, data);
};
it('should be able to retrieve data in a namespace', function(done) {
describe('#getItem', function() {
it('should be able to retrieve data in a namespace', function(done) {
setupForRetrieval();
setupForRetrieval();
storage.getItem(namespace, function(err, retrieved) {
assert(!err);
assert(retrieved === data);
var url = requestMock.get.getCall(0).args[0].url;
url.should.contain('?key=' + querystring.encode(namespace));
return done();
});
});
storage.getItem(namespace, function(err, retrieved) {
assert(!err);
assert(retrieved === data);
return done();
it('should be able to retrieve headers', function(done) {
setupForRetrieval();
storage.getItem(namespace, function(err, retrieved, headers) {
assert(!err);
headers['X-test'].should.equal('12');
headers['X-testb'].should.equal('32');
return done();
});
});
it('should be able handle 403', function(done) {
setupForRetrieval(403);
// old profile query
requestMock.get.onSecondCall().callsArgWith(1, null, {
statusCode: 403,
getAllResponseHeaders: sinon.stub().returns(headers),
}, data);
storage.getItem(namespace, function(err) {
err.should.contain('PNOTFOUND');
return done();
});
});
it('should be able handle other error', function(done) {
setupForRetrieval(510);
storage.getItem(namespace, function(err) {
err.should.contain('Unable');
return done();
});
});
});
it('should be able to retrieve headers', function(done) {
describe('#removeItem', function() {
setupForRetrieval();
it('should be able to delete Items', function(done) {
setupForRetrieval();
storage.removeItem(namespace, function(err) {
should.not.exist(err);
var url = requestMock.get.getCall(0).args[0].url;
url.should.contain('?key=' + querystring.encode(namespace));
storage.getItem(namespace, function(err, retrieved, headers) {
assert(!err);
headers['X-test'].should.equal('12');
headers['X-testb'].should.equal('32');
return done();
return done();
});
});
it('should be able handle 406', function(done) {
setupForRetrieval(409);
storage.removeItem(namespace, function(err) {
err.should.contain('BADCREDENTIALS');
return done();
});
});
it('should be able handle other error', function(done) {
setupForRetrieval(510);
storage.removeItem(namespace, function(err) {
err.should.contain('Unable');
return done();
});
});
});
var setupForSave = function() {
var setupForSave = function(code) {
requestMock.post.onFirstCall().callsArgWith(1, null, {
statusCode: 200
statusCode: code || 200
});
};
@ -94,6 +149,33 @@ describe('insight storage plugin', function() {
});
});
it('should handle 406 (quota)', function(done) {
setupForSave(406);
storage.setItem(namespace, data, function(err) {
err.should.contain('OVERQUOTA');
return done();
});
});
it('should handle other error ', function(done) {
setupForSave(505);
storage.setItem(namespace, data, function(err) {
err.should.contain('Unable');
return done();
});
});
it('should handle 409 (unauthorized)', function(done) {
setupForSave(409);
storage.setItem(namespace, data, function(err) {
err.should.contain('BADCREDENTIALS');
return done();
});
});
it('won\'t make an unnecessary request if old password can\'t work', function(done) {
storage.setCredentials(email, '!');
setupForRetrieval();
@ -152,7 +234,7 @@ describe('insight storage plugin', function() {
var url = requestMock.post.firstCall.args[0].url;
var args = querystring.decode(receivedArgs);
url.indexOf('change_passphrase').should.not.be.equal(-1);
requestMock.post.firstCall.args[0].headers.Authorization.should.be.equal( new Buffer(email + ':' + oldSecret).toString('base64'));
requestMock.post.firstCall.args[0].headers.Authorization.should.be.equal(new Buffer(email + ':' + oldSecret).toString('base64'));
args.newPassphrase.should.be.equal(newSecret);
done();
});

View File

@ -11,7 +11,7 @@ describe('log utils', function() {
log.setLevel('info');
});
it('should log fatal', function() {
it('should log .warn', function() {
if (console.warn.restore)
console.warn.restore();
@ -26,6 +26,23 @@ describe('log utils', function() {
console.warn.restore();
});
it('should log .fatal', function() {
if (console.log.restore)
console.log.restore();
sinon.stub(console,'log');
log.setLevel('debug');
log.fatal('hola',"que",'tal');
var arg = console.log.getCall(0).args[0];
//arg.should.contain('util.log.js'); /* Firefox does not include the stack track */
arg.should.contain('que');
console.log.restore();
});
it('should not log debug', function() {
sinon.stub(console,'log');
log.setLevel('info');
@ -38,4 +55,6 @@ describe('log utils', function() {
log.getLevels().debug.should.equal(0);
log.getLevels().fatal.should.equal(5);
});
});