%PDF- %PDF-
Direktori : /home/riacommer/public_html/admin/vendor/backbone.paginator/test/ |
Current File : /home/riacommer/public_html/admin/vendor/backbone.paginator/test/client-pageable.js |
$(document).ready(function () { "use strict"; var a, c, b, models, comparator; module("Backbone.PageableCollection - Client", { setup: function () { a = new Backbone.Model({"name": "a"}); c = new Backbone.Model({"name": "c"}); b = new Backbone.Model({"name": "b"}); models = [ {"name": "a"}, {"name": "c"}, {"name": "b"} ]; comparator = function (model) { return model.get("name"); }; } }); test("_makeFullCollection", function () { var sync = function () {}; var col = new (Backbone.PageableCollection.extend({ url: "test/makeFullCollection", model: Backbone.Model }))(); col.sync = sync; var fullCol = col._makeFullCollection(models, {comparator: comparator}); ok(!_.isUndefined(fullCol)); ok(_.isUndefined(fullCol.constructor.prototype.comparator)); strictEqual(fullCol.comparator, comparator); strictEqual(fullCol.sync, sync); strictEqual(fullCol.constructor.prototype.model, Backbone.Model); strictEqual(fullCol.model, Backbone.Model); strictEqual(fullCol.constructor.prototype.url, "test/makeFullCollection"); strictEqual(fullCol.url, "test/makeFullCollection"); strictEqual(fullCol.at(0).get("name"), "a"); strictEqual(fullCol.at(1).get("name"), "b"); strictEqual(fullCol.at(2).get("name"), "c"); a.collection = col; c.collection = col; b.collection = col; fullCol = col._makeFullCollection([ a, c, b ]); strictEqual(fullCol.at(0).get("name"), "a"); strictEqual(fullCol.at(1).get("name"), "c"); strictEqual(fullCol.at(2).get("name"), "b"); strictEqual(fullCol.at(0).collection, col); strictEqual(fullCol.at(1).collection, col); strictEqual(fullCol.at(2).collection, col); }); test("constructor", 28, function () { // TODO: test options.full attaches comparator to fullcollection only var col = new Backbone.PageableCollection(null, { mode: "client" }); ok(col); ok(col.fullCollection); var mods = models.slice(); col = new Backbone.PageableCollection(mods[0], { mode: "client" }); strictEqual(col.state.totalRecords, 1); strictEqual(col.fullCollection.size(), 1); strictEqual(col.fullCollection.at(0).get("name"), "a"); col = new Backbone.PageableCollection(mods, { comparator: comparator, state: { pageSize: 2 }, mode: "client" }); strictEqual(col.state.totalRecords, 3); strictEqual(col.comparator, comparator); strictEqual(col.size(), 2); strictEqual(col.at(0).get("name"), "a"); strictEqual(col.at(1).get("name"), "b"); strictEqual(col.fullCollection.size(), 3); strictEqual(col.at(0), col.fullCollection.at(0)); strictEqual(col.fullCollection.at(0).get("name"), "a"); strictEqual(col.fullCollection.at(1).get("name"), "b"); strictEqual(col.fullCollection.at(2).get("name"), "c"); mods = models.slice(); col = new Backbone.PageableCollection(mods, { state: { pageSize: 2, sortKey: "name" }, full: true, mode: "client" }); strictEqual(col.state.totalRecords, 3); ok(col.fullCollection.comparator); ok(!col.comparator); strictEqual(col.size(), 2); strictEqual(col.at(0).get("name"), "a"); strictEqual(col.at(1).get("name"), "b"); strictEqual(col.fullCollection.size(), 3); strictEqual(col.fullCollection.at(0).get("name"), "a"); strictEqual(col.fullCollection.at(1).get("name"), "b"); strictEqual(col.fullCollection.at(2).get("name"), "c"); // make sure the given models are copied col = new Backbone.PageableCollection(mods, { state: { pageSize: 2 }, mode: "client" }); notStrictEqual(mods.length, col.models.length); notDeepEqual(mods, col.models); strictEqual(mods.length, col.fullCollection.length); }); test("add", 49, function () { var col = new Backbone.PageableCollection(models, { state: { pageSize: 2 }, mode: "client" }); var lastTotalRecords = col.state.totalRecords; var onAdd = function () { strictEqual(col.state.totalRecords, lastTotalRecords + 1); }; col.fullCollection.on("add", onAdd); col.on("add", onAdd); var d = new Backbone.Model({name: "d"}); col.add(d); strictEqual(col.state.totalRecords, 4); strictEqual(col.state.totalPages, 2); strictEqual(col.fullCollection.size(), 4); strictEqual(col.size(), 2); strictEqual(col.at(0).get("name"), "a"); strictEqual(col.at(1).get("name"), "c"); strictEqual(col.fullCollection.at(0).get("name"), "a"); strictEqual(col.fullCollection.at(1).get("name"), "c"); strictEqual(col.fullCollection.at(2).get("name"), "d"); strictEqual(col.fullCollection.at(3).get("name"), "b"); lastTotalRecords = col.state.totalRecords; var e = new Backbone.Model({name: "e"}); col.fullCollection.push(e); strictEqual(col.state.totalRecords, 5); strictEqual(col.state.totalPages, 3); strictEqual(col.fullCollection.size(), 5); strictEqual(col.size(), 2); strictEqual(col.at(0).get("name"), "a"); strictEqual(col.at(1).get("name"), "c"); strictEqual(col.fullCollection.at(4).get("name"), "e"); strictEqual(col.indexOf(e.cid), -1); lastTotalRecords = col.state.totalRecords; var f = new Backbone.Model({name: "f"}); col.fullCollection.unshift(f); strictEqual(col.state.totalRecords, 6); strictEqual(col.state.totalPages, 3); strictEqual(col.fullCollection.size(), 6); strictEqual(col.size(), 2); strictEqual(col.at(0).get("name"), "f"); strictEqual(col.at(1).get("name"), "a"); // test add at page col on page 2 col.getPage(2); lastTotalRecords = col.state.totalRecords; var g = new Backbone.Model({name: "g"}); col.add(g, {at: 1}); strictEqual(col.size(), 2); strictEqual(col.fullCollection.size(), 7); strictEqual(col.state.totalRecords, 7); strictEqual(col.state.totalPages, 4); strictEqual(col.state.lastPage, 4); strictEqual(col.state.currentPage, 2); strictEqual(col.last().get("name"), "g"); strictEqual(col.fullCollection.at(3).get("name"), "g"); // test ability to add to empty collection col.fullCollection.reset(); lastTotalRecords = col.state.totalRecords; col.add(new Backbone.Model({name: "a"})); // test ability to add an array of models col.off("add", onAdd); col.fullCollection.off("add", onAdd); col.fullCollection.reset(); col.add([{name: "a"}, {name: "c"}, {name: "b"}]); strictEqual(col.size(), 2); strictEqual(col.fullCollection.size(), 3); deepEqual(col.toJSON(), [{name: "a"}, {name: "c"}]); deepEqual(col.fullCollection.toJSON(), [{name: "a"}, {name: "c"}, {name: "b"}]); col.fullCollection.reset(); col.fullCollection.add([{name: "a"}, {name: "c"}, {name: "b"}]); strictEqual(col.size(), 2); strictEqual(col.fullCollection.size(), 3); deepEqual(col.toJSON(), [{name: "a"}, {name: "c"}]); deepEqual(col.fullCollection.toJSON(), [{name: "a"}, {name: "c"}, {name: "b"}]); }); test("remove", 84, function () { var col = new Backbone.PageableCollection([ {"name": "a"}, {"name": "c"}, {"name": "b"}, {"name": "d"} ], { state: { pageSize: 2 }, mode: "client" }); var lastTotalRecords = col.state.totalRecords; var lastTotalPages = col.state.totalPages; var onRemove = function () { ok(true); strictEqual(col.state.totalRecords, lastTotalRecords - 1); strictEqual(col.state.totalPages, Math.ceil(col.state.totalRecords / col.state.pageSize)); }; col.on("remove", onRemove); col.fullCollection.on("remove", onRemove); col.fullCollection.remove(col.fullCollection.last()); strictEqual(col.state.totalRecords, 3); strictEqual(col.state.totalPages, 2); strictEqual(col.size(), 2); strictEqual(col.at(0).get("name"), "a"); strictEqual(col.at(1).get("name"), "c"); strictEqual(col.fullCollection.size(), 3); strictEqual(col.fullCollection.at(0).get("name"), "a"); strictEqual(col.fullCollection.at(1).get("name"), "c"); strictEqual(col.fullCollection.at(2).get("name"), "b"); lastTotalRecords = col.state.totalRecords; lastTotalPages = col.state.totalPages; col.fullCollection.remove(col.fullCollection.first()); strictEqual(col.state.totalRecords, 2); strictEqual(col.state.totalPages, 1); strictEqual(col.size(), 2); strictEqual(col.at(0).get("name"), "c"); strictEqual(col.at(1).get("name"), "b"); strictEqual(col.fullCollection.size(), 2); strictEqual(col.fullCollection.at(0).get("name"), "c"); strictEqual(col.fullCollection.at(1).get("name"), "b"); lastTotalRecords = col.state.totalRecords; lastTotalPages = col.state.totalPages; col.remove(col.first()); strictEqual(col.state.totalRecords, 1); strictEqual(col.state.totalPages, 1); strictEqual(col.size(), 1); strictEqual(col.at(0).get("name"), "b"); strictEqual(col.fullCollection.size(), 1); strictEqual(col.fullCollection.at(0).get("name"), "b"); col.off("remove", onRemove); col.fullCollection.off("remove", onRemove); onRemove = function () { ok(true); strictEqual(col.state.totalRecords, null); strictEqual(col.state.totalPages, null); }; col.on("remove", onRemove); col.fullCollection.on("remove", onRemove); col.remove(col.fullCollection.first()); strictEqual(col.state.totalRecords, null); strictEqual(col.state.totalPages, null); strictEqual(col.size(), 0); strictEqual(col.fullCollection.size(), 0); col = new Backbone.PageableCollection([ {"name": "a"}, {"name": "c"}, {"name": "b"}, {"name": "d"}, {"name": "f"}, ], { state: { pageSize: 2 }, mode: "client" }); // tests for insertion into current page by removing from fullCollection col.fullCollection.remove(col.fullCollection.at(0)); strictEqual(col.at(0).get("name"), "c"); strictEqual(col.at(1).get("name"), "b"); col.fullCollection.remove(col.fullCollection.at(2)); strictEqual(col.at(0).get("name"), "c"); strictEqual(col.at(1).get("name"), "b"); col.fullCollection.remove(col.fullCollection.at(1)); strictEqual(col.at(0).get("name"), "c"); strictEqual(col.at(1).get("name"), "f"); col.fullCollection.remove(col.fullCollection.at(0)); strictEqual(col.at(0).get("name"), "f"); col.fullCollection.remove(col.fullCollection.at(0)); strictEqual(col.length, 0); // issue 129 and 132, insertion into current page by removing from the current page col = new Backbone.PageableCollection([ {"name": "a"}, {"name": "c"}, {"name": "b"}, {"name": "e"}, {"name": "f"}, {"name": "d"}, {"name": "g"} ], { state: { pageSize: 3 }, mode: "client" }); col.remove(col.first()); strictEqual(col.state.totalRecords, 6); strictEqual(col.size(), 3); strictEqual(col.fullCollection.size(), 6); deepEqual(col.toJSON(), [ {"name": "c"}, {"name": "b"}, {"name": "e"} ]); col.remove(col.at(1)); strictEqual(col.state.totalRecords, 5); strictEqual(col.size(), 3); strictEqual(col.fullCollection.size(), 5); deepEqual(col.toJSON(), [ {"name": "c"}, {"name": "e"}, {"name": "f"} ]); col.remove(col.last()); strictEqual(col.state.totalRecords, 4); strictEqual(col.size(), 3); strictEqual(col.fullCollection.size(), 4); deepEqual(col.toJSON(), [ {"name": "c"}, {"name": "e"}, {"name": "d"} ]); col.remove(col.first()); strictEqual(col.state.totalRecords, 3); strictEqual(col.size(), 3); strictEqual(col.fullCollection.size(), 3); deepEqual(col.toJSON(), [ {"name": "e"}, {"name": "d"}, {"name": "g"} ]); col.remove(col.at(1)); strictEqual(col.state.totalRecords, 2); strictEqual(col.size(), 2); strictEqual(col.fullCollection.size(), 2); deepEqual(col.toJSON(), [ {"name": "e"}, {"name": "g"} ]); col.remove(col.last()); strictEqual(col.state.totalRecords, 1); strictEqual(col.size(), 1); strictEqual(col.fullCollection.size(), 1); deepEqual(col.toJSON(), [ {"name": "e"} ]); col.remove(col.first()); strictEqual(col.state.totalRecords, null); strictEqual(col.size(), 0); strictEqual(col.fullCollection.size(), 0); deepEqual(col.toJSON(), []); }); test("add handlers on pageCol are run before remove handlers", 2, function () { var col = new Backbone.PageableCollection(models, { state: { pageSize: 1 }, mode: "client" }); var queue = []; col.on("add", function () { queue.push("add"); }); col.on("remove", function () { queue.push("remove"); }); col.unshift(new Backbone.Model({name: "d"})); deepEqual(queue, ["add", "remove"]); queue = []; col.fullCollection.unshift(new Backbone.Model({name: "e"})); deepEqual(queue, ["add", "remove"]); }); test("remove handlers on pageCol are run before add handlers", 2, function () { var col = new Backbone.PageableCollection(models, { state: { pageSize: 1 }, mode: "client" }); var queue = []; col.on("add", function () { queue.push("add"); }); col.on("remove", function () { queue.push("remove"); }); col.remove(col.at(0)); deepEqual(queue, ["remove", "add"]); queue = []; col.fullCollection.remove(col.at(0)); deepEqual(queue, ["remove", "add"]); }); test("change", 6, function () { var col = new Backbone.PageableCollection(models, { state: { pageSize: 1 }, mode: "client" }); var onChange = function () { ok(true); }; col.on("change", onChange); col.fullCollection.on("change", onChange); col.at(0).set("name", "e"); strictEqual(col.fullCollection.at(0).get("name"), "e"); col.fullCollection.at(1).set("name", "f"); col.fullCollection.at(0).set("name", "g"); }); test("sync", 5, function () { var col = new (Backbone.PageableCollection.extend({ url: "test-client-sync" }))(models, { state: { pageSize: 1 }, mode: "client" }); var onSync = function () { ok(true); }; col.on("sync", onSync); col.fullCollection.on("sync", onSync); col.at(0).save(); this.ajaxSettings.success(); col.fullCollection.at(0).save(); this.ajaxSettings.success(); col.fullCollection.at(1).save(); this.ajaxSettings.success(); }); test("reset and sort", 76, function () { var mods = models.slice(); var col = new Backbone.PageableCollection(mods, { state: { pageSize: 2 }, mode: "client" }); var onReset = function () { ok(true); strictEqual(col.state.totalRecords, 4); strictEqual(col.state.totalPages, 2); strictEqual(col.state.lastPage, 2); }; col.on("reset", onReset); col.fullCollection.on("reset", onReset); col.fullCollection.reset([ {name: "e"}, {name: "f"}, {name: "d"}, {name: "g"} ]); strictEqual(col.size(), 2); strictEqual(col.fullCollection.size(), 4); strictEqual(col.at(0).get("name"), "e"); strictEqual(col.at(1).get("name"), "f"); strictEqual(col.fullCollection.at(0).get("name"), "e"); strictEqual(col.fullCollection.at(1).get("name"), "f"); strictEqual(col.fullCollection.at(2).get("name"), "d"); strictEqual(col.fullCollection.at(3).get("name"), "g"); col.fullCollection.comparator = comparator; col.fullCollection.sort(); strictEqual(col.size(), 2); strictEqual(col.at(0).get("name"), "d"); strictEqual(col.at(1).get("name"), "e"); mods = models.slice(); col = new Backbone.PageableCollection(mods, { state: { pageSize: 2 }, mode: "client" }); onReset = function () { ok(true); strictEqual(col.state.totalRecords, 3); strictEqual(col.state.totalPages, 2); strictEqual(col.state.lastPage, 2); }; col.on("reset", onReset); col.fullCollection.on("reset", onReset); col.comparator = comparator; col.sort(); strictEqual(col.at(0).get("name"), "a"); strictEqual(col.at(1).get("name"), "c"); strictEqual(col.fullCollection.at(0).get("name"), "a"); strictEqual(col.fullCollection.at(1).get("name"), "c"); strictEqual(col.fullCollection.at(2).get("name"), "b"); col.comparator = null; col.off("reset", onReset); col.fullCollection.off("reset", onReset); onReset = function () { ok(true); strictEqual(col.state.totalRecords, 3); strictEqual(col.state.totalPages, 2); strictEqual(col.state.lastPage, 2); }; col.on("reset", onReset); col.fullCollection.on("reset", onReset); mods = [new Backbone.Model({name: "g"}), col.at(0)]; col.reset(mods); strictEqual(col.size(), 2); strictEqual(col.fullCollection.size(), 3); strictEqual(col.at(0).get("name"), "g"); strictEqual(col.at(1).get("name"), "a"); strictEqual(col.fullCollection.at(0).get("name"), "g"); strictEqual(col.fullCollection.at(1).get("name"), "a"); strictEqual(col.fullCollection.at(2).get("name"), "b"); col.off("reset", onReset); col.fullCollection.off("reset", onReset); onReset = function () { ok(true); strictEqual(col.state.totalRecords, 4); strictEqual(col.state.totalPages, 2); strictEqual(col.state.lastPage, 2); }; col.on("reset", onReset); col.fullCollection.on("reset", onReset); col.fullCollection.reset([ {name: "j"}, {name: "h"}, {name: "i"}, {name: "k"} ]); strictEqual(col.size(), 2); strictEqual(col.fullCollection.size(), 4); strictEqual(col.at(0).get("name"), "j"); strictEqual(col.at(1).get("name"), "h"); strictEqual(col.fullCollection.at(0).get("name"), "j"); strictEqual(col.fullCollection.at(1).get("name"), "h"); strictEqual(col.fullCollection.at(2).get("name"), "i"); strictEqual(col.fullCollection.at(3).get("name"), "k"); strictEqual(col.state.totalRecords, 4); strictEqual(col.state.lastPage, 2); strictEqual(col.state.totalPages, 2); col.off("reset", onReset); col.fullCollection.off("reset", onReset); onReset = function () { ok(true); ok(col.state.totalRecords === null); ok(col.state.totalPages === null); ok(col.state.lastPage === col.state.firstPage); ok(col.state.currentPage === col.state.firstPage); ok(col.length === 0); ok(col.fullCollection.length === 0); }; col.on("reset", onReset); col.fullCollection.on("reset", onReset); col.fullCollection.reset(); }); test("fetch", 14, function () { var col = new (Backbone.PageableCollection.extend({ url: "test-client-fetch" }))(models, { state: { pageSize: 2, sortKey: "name", order: 1 }, mode: "client" }); var resetCount = 0; var onReset = function () { resetCount++; ok(true); }; var fullResetCount = 0; var onFullReset = function () { fullResetCount++; ok(true); }; col.on("reset", onReset); col.fullCollection.on("reset", onFullReset); var parseCount = 0; var oldParse = col.parse; col.parse = function () { parseCount++; ok(true); return oldParse.apply(this, arguments); }; col.fetch(); strictEqual(this.ajaxSettings.url, "test-client-fetch"); deepEqual(this.ajaxSettings.data, { "sort_by": "name", "order": "desc" }); this.ajaxSettings.success([ {name: "a"}, {name: "c"}, {name: "d"}, {name: "b"} ]); col.parse = oldParse; equal(resetCount, 1); equal(fullResetCount, 1); equal(parseCount, 1); strictEqual(col.at(0).get("name"), "d"); strictEqual(col.at(1).get("name"), "c"); strictEqual(col.fullCollection.at(0).get("name"), "d"); strictEqual(col.fullCollection.at(1).get("name"), "c"); strictEqual(col.fullCollection.at(2).get("name"), "b"); strictEqual(col.fullCollection.at(3).get("name"), "a"); }); test("getPageByOffset - firstPage is 0", function () { var manyModels = [ {"name": "a1"}, {"name": "a2"}, {"name": "b1"}, {"name": "b2"}, {"name": "c1"}, {"name": "c2"} ]; var col = new Backbone.PageableCollection(manyModels, { state: { pageSize: 2, firstPage: 0, currentPage: 0, }, mode: "client" }); strictEqual(col.state.currentPage, 0); col.getPageByOffset(2); strictEqual(1, col.state.currentPage); strictEqual("b1", col.at(0).get("name")); col.getPageByOffset(1); strictEqual(0, col.state.currentPage); strictEqual("a1", col.at(0).get("name")); col.getPageByOffset(col.state.totalRecords - 1); strictEqual(2, col.state.currentPage); strictEqual("c1", col.at(0).get("name")); sinon.stub(col, "getPage"); col.getPageByOffset(0); ok(col.getPage.calledOnce); }); test("getPageByOffset - firstPage is 1", function () { var manyModels = [ {"name": "a1"}, {"name": "a2"}, {"name": "b1"}, {"name": "b2"}, {"name": "c1"}, {"name": "c2"} ]; var col = new Backbone.PageableCollection(manyModels, { state: { pageSize: 2, firstPage: 1, currentPage: 1 }, mode: "client" }); strictEqual(1, col.state.currentPage); col.getPageByOffset(2); strictEqual(2, col.state.currentPage); strictEqual("b1", col.at(0).get("name")); col.getPageByOffset(1); strictEqual(1, col.state.currentPage); strictEqual("a1", col.at(0).get("name")); col.getPageByOffset(col.state.totalRecords - 1); strictEqual(3, col.state.currentPage); strictEqual("c1", col.at(0).get("name")); sinon.stub(col, "getPage"); col.getPageByOffset(0); ok(col.getPage.calledOnce); }); test("getPage", function () { var col = new Backbone.PageableCollection(models, { state: { pageSize: 2 }, mode: "client" }); col.getPage(2); strictEqual(col.size(), 1); strictEqual(col.at(0).get("name"), "b"); sinon.stub(col, "fetch"); col.getPage(1, {fetch: true}); ok(col.fetch.calledOnce); }); test("getFirstPage", function () { var col = new Backbone.PageableCollection(models, { state: { pageSize: 2 }, mode: "client" }); col.getFirstPage(); strictEqual(col.size(), 2); strictEqual(col.at(0).get("name"), "a"); strictEqual(col.at(1).get("name"), "c"); sinon.stub(col, "fetch"); col.getFirstPage({fetch: true}); ok(col.fetch.calledOnce); }); test("getPreviousPage", function () { var col = new Backbone.PageableCollection(models, { state: { pageSize: 2 }, mode: "client" }); col.getNextPage(); col.getPreviousPage(); strictEqual(col.size(), 2); strictEqual(col.at(0).get("name"), "a"); strictEqual(col.at(1).get("name"), "c"); sinon.stub(col, "fetch"); col.getNextPage(); col.getPreviousPage({fetch: true}); ok(col.fetch.calledOnce); }); test("getNextPage", function () { var col = new Backbone.PageableCollection(models, { state: { pageSize: 2 }, mode: "client" }); col.getNextPage(); strictEqual(col.size(), 1); strictEqual(col.at(0).get("name"), "b"); sinon.stub(col, "fetch"); col.getPreviousPage(); col.getNextPage({fetch: true}); ok(col.fetch.calledOnce); }); test("getLastPage", function () { var col = new Backbone.PageableCollection(models, { state: { pageSize: 2 }, mode: "client" }); col.getLastPage(); strictEqual(col.size(), 1); strictEqual(col.at(0).get("name"), "b"); sinon.stub(col, "fetch"); col.getLastPage({fetch: true}); ok(col.fetch.calledOnce); }); test("setPageSize", function () { var col = new Backbone.PageableCollection(models, { state: { pageSize: 2 }, mode: "client" }); // decrease page size col.setPageSize(1); strictEqual(col.state.pageSize, 1); strictEqual(col.state.totalPages, 3); strictEqual(col.state.lastPage, 3); strictEqual(col.state.currentPage, 1); strictEqual(col.length, 1); strictEqual(col.fullCollection.length, 3); // increase page size col.setPageSize(3); strictEqual(col.state.pageSize, 3); strictEqual(col.state.totalPages, 1); strictEqual(col.state.lastPage, 1); strictEqual(col.state.currentPage, 1); strictEqual(col.length, 3); strictEqual(col.fullCollection.length, 3); col = new Backbone.PageableCollection(null, { state: { pageSize: 2 }, mode: "client" }); col.setPageSize(1); strictEqual(col.state.pageSize, 1); strictEqual(col.state.totalPages, 0); strictEqual(col.state.lastPage, null); strictEqual(col.state.currentPage, 1); col.setPageSize(3); strictEqual(col.state.pageSize, 3); strictEqual(col.state.totalPages, 0); strictEqual(col.state.lastPage, null); strictEqual(col.state.currentPage, 1); // test again for 0-base page indices col = new Backbone.PageableCollection(models, { state: { firstPage: 0, pageSize: 2 }, mode: "client" }); col.setPageSize(3); strictEqual(col.state.pageSize, 3); strictEqual(col.state.totalPages, 1); strictEqual(col.state.lastPage, 0); strictEqual(col.state.currentPage, 0); strictEqual(col.length, 3); strictEqual(col.fullCollection.length, 3); col.setPageSize(1); strictEqual(col.state.pageSize, 1); strictEqual(col.state.totalPages, 3); strictEqual(col.state.lastPage, 2); strictEqual(col.state.currentPage, 0); strictEqual(col.length, 1); strictEqual(col.fullCollection.length, 3); }); test("issue #15", function () { var col = new Backbone.PageableCollection(models, { state: { pageSize: 2, currentPage: 2 }, mode: "client" }); col.fullCollection.remove(col.fullCollection.last()); strictEqual(col.state.currentPage, 1); strictEqual(col.state.totalRecords, 2); strictEqual(col.state.lastPage, 1); strictEqual(col.state.totalPages, 1); }); test("hasNextPage and hasPreviousPage", function () { var col = new Backbone.PageableCollection(models, { state: { pageSize: 1 }, mode: "client" }); strictEqual(col.hasPreviousPage(), false); strictEqual(col.hasNextPage(), true); col.getNextPage(); strictEqual(col.hasPreviousPage(), true); strictEqual(col.hasNextPage(), true); col.getLastPage(); strictEqual(col.hasPreviousPage(), true); strictEqual(col.hasNextPage(), false); }); test("parsing from constructor #112", function () { var Model = Backbone.Model.extend({ parse: function (raw) { return { value: raw }; } }); var MyCollection = Backbone.PageableCollection.extend({ model: Model, mode: 'client', state: { firstPage: 0, pageSize: 2 } }); var col = new MyCollection([1, 2, 3], {parse: true}); deepEqual(col.toJSON(), [{"value": 1}, {"value": 2}]); deepEqual(col.fullCollection.toJSON(), [{"value": 1}, {"value": 2}, {"value": 3}]); }); });