leetcode-cli
Version:
A cli tool to enjoy leetcode!
99 lines (79 loc) • 2.48 kB
JavaScript
const assert = require('chai').assert;
const rewire = require('rewire');
const log = require('../../lib/log');
const config = rewire('../../lib/config');
const session = rewire('../../lib/session');
const plugin = rewire('../../lib/plugins/retry');
describe('plugin:retry', function() {
const USER = {};
const NEXT = {};
const PROBLEMS = [{id: 0, name: 'name0'}];
before(function() {
log.init();
config.init();
plugin.init();
session.getUser = () => USER;
plugin.__set__('config', config);
plugin.__set__('session', session);
plugin.setNext(NEXT);
});
it('should fail if auto login disabled', function(done) {
config.autologin.enable = false;
NEXT.getProblems = cb => cb(session.errors.EXPIRED);
plugin.getProblems(function(e, problems) {
assert.equal(e, session.errors.EXPIRED);
done();
});
});
it('should retry ok if finally ok', function(done) {
config.autologin.enable = true;
config.autologin.retry = 3;
let n = 0;
NEXT.getProblems = function(cb) {
return ++n <= 3 ? cb(session.errors.EXPIRED) : cb(null, PROBLEMS);
};
NEXT.login = (user, cb) => cb(null, user);
plugin.getProblems(function(e, problems) {
assert.notExists(e);
assert.equal(problems, PROBLEMS);
done();
});
});
it('should retry fail if always failed', function(done) {
config.autologin.enable = true;
config.autologin.retry = 2;
let n = 0;
NEXT.getProblems = function(cb) {
return ++n <= 3 ? cb(session.errors.EXPIRED) : cb(null, PROBLEMS);
};
NEXT.login = (user, cb) => {
return n == 1 ? cb(null, user) : cb('login failed');
}
plugin.getProblems(function(e) {
assert.deepEqual(e, session.errors.EXPIRED);
done();
});
});
it('should fail if user expired locally', function(done) {
config.autologin.enable = true;
let n = 0;
NEXT.getProblems = function(cb) {
return ++n === 1 ? cb(session.errors.EXPIRED) : cb(null, PROBLEMS);
};
session.getUser = () => null;
plugin.getProblems(function(e, problems) {
assert.notExists(e);
assert.equal(problems, PROBLEMS);
done();
});
});
it('should fail if other errors', function(done) {
config.autologin.enable = true;
NEXT.getProblems = cb => cb('unknown error');
plugin.getProblems(function(e, problems) {
assert.equal(e, 'unknown error');
done();
});
});
});
;