%PDF- %PDF-
| Direktori : /home/riacommer/public_html/admin/vendor/backbone.paginator/test/ |
| Current File : /home/riacommer/public_html/admin/vendor/backbone.paginator/test/server-pageable.js |
$(document).ready(function () {
"use strict";
// TODO: test invalid state
module("Backbone.PageableCollection - Server");
test("parse", function () {
var resp = [{"page": 1,
"per_page": 2,
"total_pages": 2,
"total_entries": 4,
"sort_by": "name",
"order": "desc"},
[{"name": "b"},
{"name": "c"},
{"name": "a"},
{"name": "a"}]];
var col = new Backbone.PageableCollection();
var models = col.parse(resp);
deepEqual(models, [{"name": "b"},
{"name": "c"},
{"name": "a"},
{"name": "a"}]);
strictEqual(col.state.currentPage, 1);
strictEqual(col.state.pageSize, 2);
strictEqual(col.state.totalPages, 2);
strictEqual(col.state.totalRecords, 4);
strictEqual(col.state.sortKey, "name");
strictEqual(col.state.order, 1);
resp = [{"name": "a"},
{"name": "a"},
{"name": "b"},
{"name": "c"}];
models = col.parse(resp);
deepEqual(models, [{"name": "a"},
{"name": "a"},
{"name": "b"},
{"name": "c"}]);
strictEqual(col.state.currentPage, 1);
strictEqual(col.state.pageSize, 2);
strictEqual(col.state.totalPages, 2);
strictEqual(col.state.totalRecords, 4);
strictEqual(col.state.sortKey, "name");
strictEqual(col.state.order, 1);
});
test("_checkState", function () {
var col = new Backbone.PageableCollection();
var state = _.clone(col.state);
state.totalRecords = "";
throws(function () {
col._checkState(state);
}, "`totalRecords` must be a number");
state.totalRecords = 0;
state.pageSize = "";
throws(function () {
col._checkState(state);
}, "`pageSize` must be a number");
state.totalPages = 0;
state.currentPage = "";
throws(function () {
col._checkState(state);
}, "`currentPage` must be a number");
state.currentPage = 0;
state.firstPage = "";
throws(function () {
col._checkState(state);
}, "`firstPage` must be a number");
state.firstPage = 0;
state.pageSize = -1;
throws(function () {
col._checkState(state);
}, "`pageSize` must be >= 1");
state.pageSize = 1;
col._checkState(state);
state.totalPages = null;
state.totalRecords = 2;
state.pageSize = 1;
col._checkState(state);
strictEqual(state.totalPages, 2);
state.totalPages = 100;
col._checkState(state);
strictEqual(state.totalPages, 2);
state.totalPages = 2;
state.firstPage = -1;
throws(function () {
col._checkState(state);
}, "`firstPage must be 0 or 1`");
state.firstPage = 0;
state.currentPage = -1;
throws(function () {
col._checkState(state);
}, "`currentPage` must be firstPage <= currentPage < totalPages if 0-based.");
state.currentPage = 2;
throws(function () {
col._checkState(state);
}, "`currentPage` must be firstPage <= currentPage < totalPages if 0-based.");
state.currentPage = 0;
col._checkState(state);
strictEqual(state.lastPage, 1);
state.firstPage = 1;
throws(function () {
col._checkState(state);
}, "`currentPage` must be firstPage <= currentPage <= totalPages if 1-based.");
state.currentPage = 3;
throws(function () {
col._checkState(state);
}, "`currentPage` must be firstPage <= currentPage <= totalPages if 1-based.");
state.currentPage = 1;
col._checkState(state);
strictEqual(state.lastPage, 2);
state.firstPage = 0;
state.currentPage = 0;
state.totalRecords = 0;
col._checkState(state);
strictEqual(state.lastPage, 0);
state.firstPage = 1;
state.currentPage = 1;
state.totalRecords = 0;
col._checkState(state);
strictEqual(state.lastPage, 1);
});
test("extend and constructor", function () {
// test extending state and query params merge with defaults in prototype too
var col = new (Backbone.PageableCollection.extend({
state: {
pageSize: 1
},
queryParams: {
sortKey: "order_by"
}
}))();
deepEqual(col.state, {
firstPage: 1,
lastPage: null,
currentPage: 1,
pageSize: 1,
totalPages: null,
totalRecords: null,
sortKey: null,
order: -1
});
deepEqual(col.queryParams, {
currentPage: "page",
pageSize: "per_page",
totalPages: "total_pages",
totalRecords: "total_entries",
sortKey: "order_by",
order: "order",
directions: {
"-1": "asc",
"1": "desc"
}
});
col = new Backbone.PageableCollection([
{"name": "a"},
{"name": "c"},
{"name": "b"}
], {
state: {
firstPage: 0,
currentPage: 0,
pageSize: 1,
totalPages: 3,
totalRecords: 3,
sortKey: "name",
order: 1
},
queryParams: {
currentPage: "current_page",
pageSize: "page_size",
totalPages: "total_pages",
totalRecords: "total_records",
sortKey: "sort_key",
order: "direction",
directions: {"-1": -1, "1": 1}
}
});
strictEqual(col.state.firstPage, 0);
strictEqual(col.state.currentPage, 0);
strictEqual(col.state.pageSize, 1);
strictEqual(col.state.lastPage, 2);
strictEqual(col.state.totalPages, 3);
strictEqual(col.state.totalRecords, 3);
strictEqual(col.state.sortKey, "name");
strictEqual(col.state.order, 1);
strictEqual(col.comparator, undefined);
strictEqual(col.queryParams.currentPage, "current_page");
strictEqual(col.queryParams.pageSize, "page_size");
strictEqual(col.queryParams.totalPages, "total_pages");
strictEqual(col.queryParams.totalRecords, "total_records");
strictEqual(col.queryParams.sortKey, "sort_key");
strictEqual(col.queryParams.order, "direction");
deepEqual(col.queryParams.directions, {"-1": -1, "1": 1});
strictEqual(col.at(0).get("name"), "a");
strictEqual(col.at(1).get("name"), "c");
strictEqual(col.at(2).get("name"), "b");
var comparator = function (model) {
return model.get("name");
};
col = new Backbone.PageableCollection([
{"name": "a"},
{"name": "c"},
{"name": "b"}
], {
state: {
firstPage: 0,
currentPage: 0,
pageSize: 1,
totalPages: 3,
totalRecords: 3,
sortKey: "name",
order: 1
},
comparator: comparator
});
strictEqual(col.at(0).get("name"), "a");
strictEqual(col.at(1).get("name"), "b");
strictEqual(col.at(2).get("name"), "c");
strictEqual(col.comparator, comparator);
});
test("fetch", 14, function () {
var col = new (Backbone.PageableCollection.extend({
url: function () { return "test-fetch"; }
}))();
col.fetch();
strictEqual(this.ajaxSettings.url, "test-fetch");
deepEqual(this.ajaxSettings.data, {
page: 1,
"per_page": 25
});
col.state.sortKey = "name",
col.state.totalRecords = 50;
col.state.totalPages = 1;
col.state.order = null;
col.state.currentPage = 0;
col.state.pageSize = 50;
col.state.firstPage = 0;
col.queryParams.access_token = function () { return this.state.currentPage + 1; };
col.queryParams.query = null;
col.fetch({url: function () { return "test-fetch-2"; }, add: true, silent: true});
strictEqual(this.ajaxSettings.url, "test-fetch-2");
strictEqual(this.ajaxSettings.add, true);
strictEqual(this.ajaxSettings.silent, true);
deepEqual(this.ajaxSettings.data, {
page: 0,
"per_page": 50,
"sort_by": "name",
"total_entries": 50,
"total_pages": 1,
"access_token": 1
});
this.ajaxSettings.success([{"total_entries": 0}, []]);
strictEqual(col.state.sortKey, "name");
strictEqual(col.state.firstPage, 0);
strictEqual(col.state.order, null);
strictEqual(col.state.currentPage, 0);
strictEqual(col.state.pageSize, 50);
strictEqual(col.state.totalRecords, 0);
strictEqual(col.state.lastPage, 0);
strictEqual(col.state.totalPages, 0);
});
test("getPage", function () {
var col = new Backbone.PageableCollection(null, {
state: {
totalRecords: 100
}
});
throws(function () {
col.getPage('0');
}, "`index` must be a finite integer");
throws(function () {
col.getPage(0);
}, "`index` must be firstPage <= index <= lastPage");
throws(function () {
col.getPage(5);
}, "`index` must be firstPage <= index <= lastPage");
sinon.stub(col, "fetch");
col.getPage(2, {add: true, silent: true});
strictEqual(col.state.currentPage, 2);
deepEqual(col.fetch.args[0][0], {add: true, silent: true, from: 1, to: 2});
col.fetch.restore();
});
test("getFirstPage", function () {
var col = new Backbone.PageableCollection(null, {
state: {
totalRecords: 100,
currentPage: 2
}
});
sinon.stub(col, "fetch");
col.getFirstPage();
strictEqual(col.state.currentPage, 1);
ok(col.fetch.calledOnce);
col.fetch.restore();
});
test("getPreviousPage", function () {
var col = new Backbone.PageableCollection(null, {
state: {
totalRecords: 100,
currentPage: 2
}
});
sinon.stub(col, "fetch");
col.getPreviousPage();
strictEqual(col.state.currentPage, 1);
ok(col.fetch.calledOnce);
col.fetch.reset();
throws(function () {
col.getPreviousPage();
}, "`index` must be firstPage <= index <= lastPage");
col.fetch.restore();
});
test("getNextPage", function () {
var col = new Backbone.PageableCollection(null, {
state: {
totalRecords: 100,
currentPage: 3
}
});
sinon.stub(col, "fetch");
col.getNextPage();
strictEqual(col.state.currentPage, 4);
ok(col.fetch.calledOnce);
col.fetch.reset();
throws(function () {
col.getNextPage();
}, "`index` must be firstPage <= index <= lastPage");
col.fetch.restore();
});
test("getLastPage", function () {
var col = new Backbone.PageableCollection(null, {
state: {
totalRecords: 100,
currentPage: 2
}
});
sinon.stub(col, "fetch");
col.getLastPage();
strictEqual(col.state.currentPage, 4);
ok(col.fetch.calledOnce);
col.fetch.restore();
});
test("setPageSize", function () {
var col = new Backbone.PageableCollection(null, {
state: {
totalRecords: 100,
currentPage: 4
}
});
col.url = "test";
col.setPageSize(50);
strictEqual(col.state.pageSize, 50);
strictEqual(col.state.totalPages, 2);
strictEqual(col.state.currentPage, 2);
strictEqual(col.state.lastPage, 2);
col.setPageSize(50, {first: true});
strictEqual(col.state.pageSize, 50);
strictEqual(col.state.totalPages, 2);
strictEqual(col.state.currentPage, 1);
strictEqual(col.state.lastPage, 2);
throws(function() {
col.setPageSize(Infinity);
}, "`pageSize` must be a finite integer");
strictEqual(col.state.pageSize, 50);
throws(function() {
col.setPageSize("foo");
}, "`pageSize` must be a finite integer");
strictEqual(col.state.pageSize, 50);
col.setPageSize(25, {add: true, silent: true});
strictEqual(col.state.pageSize, 25);
strictEqual(col.state.totalPages, 4);
strictEqual(col.state.lastPage, 4);
});
});