VisionFTF / express-admin / node_modules / sr-pagination / test / tests.js
tests.js
Raw
var should = chai.should();
mocha.setup({
	ui: 'bdd',
	globals: ['']
});

window.addEventListener('load', function (e) {
	mocha.run();
});


describe('pagination', function () {
	var html = '';
	before(function (done) {
		file.load('pagination.html', function (err, str) {
			html = str;
			done();
		});
	});

	it('should hide the pagination on single page', function (done) {
		var result = pagination({page:1, links: 5, rows: 5, total: 5});
		should.equal(result, null);
		done();
	});
	it('should hide first and prev buttons on first page', function (done) {
		var result = pagination({page:1, links: 5, rows: 5, total: 15});
		should.not.exist(result[0].first);
		should.not.exist(result[0].prev);
		done();
	});
	it('should hide last and next buttons on last page', function (done) {
		var result = pagination({page:3, links: 5, rows: 5, total: 15});
		should.not.exist(result[result.length-1].last);
		should.not.exist(result[result.length-1].next);
		done();
	});
	it('should add +1 to even links count', function (done) {
		var result = pagination({page:1, links: 4, rows: 5, total: 50});
		count(result).should.equal(5);
		done();
	});
	it('should not show more links than the total page count', function (done) {
		var result = pagination({page:1, links: 20, rows: 5, total: 50});
		count(result).should.equal(10);
		done();
	});
	it('should maintain the page links count', function (done) {
		var result;
		for (var i=1; i < 10; i++) {
			result = pagination({page: i, links: 5, rows: 5, total: 50});
			count(result).should.equal(5);
		}
		done();
	});
	it('should center the active page', function (done) {
		var result;
		for (var i=1; i < 10; i++) {
			result = pagination({page: i, links: 5, rows: 5, total: 50});
			var pos = position(result);
			switch (i) {
				case 1:
					pos.left.should.equal(0);
					pos.right.should.equal(4);
					break;
				case 2:
					pos.left.should.equal(1);
					pos.right.should.equal(3);
					break;
				case 9:
					pos.left.should.equal(3);
					pos.right.should.equal(1);
					break;
				case 10:
					pos.left.should.equal(4);
					pos.right.should.equal(0);
					break;
				default:
					pos.left.should.equal(2);
					pos.right.should.equal(2);
				break;
			}
		}
		done();
	});
});

function count (result) {
	var count = 0;
	for (var i=0; i < result.length; i++) {
		if (result[i].page || result[i].active) {
			count++;
		}
	}
	return count;
}

function position (result) {
	var active;
	for (var i=0; i < result.length; i++) {
		if (result[i].active) {
			active = i;
			break;
		}
	}
	var pos = {left: 0, right: 0};
	for (var i=0; i < result.length; i++) {
		if (result[i].page)
			(i < active) ? pos.left++ : pos.right++;
	}
	return pos;
}