(function() {
if (typeof process === 'object') {
require('mocha-jsdom')();
}
var root = this;
var assert = (root.chai || require('chai')).assert;
describe('NProgress', function() {
var $, NProgress;
beforeEach(function() {
$ = root.jQuery || require('jquery');
NProgress = root.NProgress || require('../nprogress');
this.settings = $.extend({}, NProgress.settings);
});
afterEach(function() {
$("#nprogress").remove();
$('html').attr('class', '');
NProgress.status = null;
// Restore settings
$.extend(NProgress.settings, this.settings);
});
describe('.set()', function() {
it('.set(0) must render', function(done) {
NProgress.set(0);
assert.equal($("#nprogress").length, 1);
assert.equal($("#nprogress .bar").length, 1);
assert.equal($("#nprogress .peg").length, 1);
assert.equal($("#nprogress .spinner").length, 1);
done();
});
it('.set(1) should appear and disappear', function(done) {
NProgress.configure({ speed: 10 });
NProgress.set(0).set(1);
assert.equal($("#nprogress").length, 1);
setTimeout(function() {
assert.equal($("#nprogress").length, 0);
done();
}, 70);
});
it('must respect minimum', function() {
NProgress.set(0);
assert.equal(NProgress.status, NProgress.settings.minimum);
});
it('must clamp to minimum', function() {
NProgress.set(-100);
assert.equal(NProgress.status, NProgress.settings.minimum);
});
it('must clamp to maximum', function() {
NProgress.set(456);
assert.equal(NProgress.status, null);
});
});
// ----
describe('.start()', function() {
it('must render', function(done) {
NProgress.start();
assert.equal($("#nprogress").length, 1);
done();
});
it('must respect minimum', function() {
NProgress.start();
assert.equal(NProgress.status, NProgress.settings.minimum);
});
it('must be attached to specified parent', function() {
var test = $('
', {id: 'test'}).appendTo('body');
NProgress.configure({parent: '#test'});
NProgress.start();
assert.isTrue($("#nprogress").parent().is(test));
assert.isTrue($(NProgress.settings.parent).hasClass("nprogress-custom-parent"));
});
});
// ----
describe('.done()', function() {
it('must not render without start', function(done) {
NProgress.done();
assert.equal($("#nprogress").length, 0);
done();
});
it('.done(true) must render', function(done) {
NProgress.done(true);
assert.equal($("#nprogress").length, 1);
done();
});
});
// ----
describe('.remove()', function() {
it('should be removed from the parent', function() {
NProgress.set(1);
NProgress.remove();
var parent = $(NProgress.settings.parent);
assert.isFalse(parent.hasClass('nprogress-custom-parent'));
assert.equal(parent.find('#nprogress').length, 0);
});
});
// ----
describe('.inc()', function() {
it('should render', function() {
NProgress.inc();
assert.equal($("#nprogress").length, 1);
});
it('should start with minimum', function() {
NProgress.inc();
assert.equal(NProgress.status, NProgress.settings.minimum);
});
it('should increment', function() {
NProgress.start();
var start = NProgress.status;
NProgress.inc();
assert.operator(NProgress.status, '>', start);
});
it('should never reach 1.0', function() {
for (var i=0; i<100; ++i) { NProgress.inc(); }
assert.operator(NProgress.status, '<', 1.0);
});
});
// -----
describe('.configure()', function() {
it('should work', function() {
NProgress.configure({ minimum: 0.5 });
assert.equal(NProgress.settings.minimum, 0.5);
});
});
// ----
describe('.configure(showSpinner)', function() {
it('should render spinner by default', function() {
NProgress.start();
assert.equal($("#nprogress .spinner").length, 1);
});
it('should be true by default', function() {
assert.equal(NProgress.settings.showSpinner, true);
});
it('should hide (on false)', function() {
NProgress.configure({ showSpinner: false });
NProgress.start();
assert.equal($("#nprogress .spinner").length, 0);
});
});
});
})();