%PDF- %PDF-
Direktori : /home/riacommer/public_html/admin/vendor/backbone.paginator/test/ |
Current File : /home/riacommer/public_html/admin/vendor/backbone.paginator/test/infinite-pageable.js |
$(document).ready(function () { "use strict"; var col; module("Backbone.PageableCollection - Infinite", { setup: function () { col = new (Backbone.PageableCollection.extend({ url: "url" }))([ {id: 1}, {id: 3}, {id: 2}, {id: 4} ], { state: { pageSize: 2, currentPage: 2 }, mode: "infinite" }); } }); test("constructor", function () { ok(col.fullCollection instanceof Backbone.Collection); strictEqual(col.url, "url"); strictEqual(col.mode, "infinite"); strictEqual(col.state.totalRecords, 4); deepEqual(col.links, { "1": "url", "2": "url" }); deepEqual(col.toJSON(), [{id: 2}, {id: 4}]); deepEqual(col.fullCollection.toJSON(), [{id: 1}, {id: 3}, {id: 2}, {id: 4}]); col = new (Backbone.PageableCollection.extend({ url: "url" }))(null, { state: { firstPage: 0 }, mode: "infinite" }); ok(col.links[0] === "url"); }); test("parseLinks", function () { var xhr = { getResponseHeader: function (header) { if (header.toLowerCase() == "link") { return '<https://api.github.com/user/repos?page=3&per_page=2>; rel="next", <https://api.github.com/user/repos?page=50&per_page=2>; rel="last"'; } return null; } }; var links = col.parseLinks({}, {xhr: xhr}); deepEqual(links, { next: "https://api.github.com/user/repos?page=3&per_page=2" }); xhr.getResponseHeader = function () { return null; }; links = col.parseLinks({}, {xhr: xhr}); deepEqual(links, {}); }); test("fetch", 3, function () { var oldParse = col.parse; col.parse = function () { ok(true); return oldParse.apply(this, arguments); }; col.parseLinks = function () { return {first: "url-1", next: "url-2"}; }; // makes sure collection events on the current page are not suppressed when // refetching the same page col.on("all", function (event) { if (!_.contains(["request", "sync", "reset"], event)) { ok(false); } }); col.fetch(); strictEqual(this.ajaxSettings.url, "url"); deepEqual(this.ajaxSettings.data, { page: 2, "per_page": 2, "total_entries": 4, "total_pages": 2 }); this.ajaxSettings.success([ {id: 1}, {id: 3} ]); col.parse = oldParse; }); test("get*Page", 53, function () { var col = new (Backbone.PageableCollection.extend({ url: "url" }))(null, { state: { pageSize: 2 }, mode: "infinite" }); throws(function () { col.getPage("nosuchpage"); }); sinon.spy(col, "parse"); sinon.stub(col, "parseLinks").returns({next: "url2", last: "lastUrl"}); var currentPageResetEventCount = 0; col.on("reset", function () { currentPageResetEventCount++; }); var fullCollectionAddEventCount = 0; col.fullCollection.on("add", function () { fullCollectionAddEventCount++; }); var fullCollectionRemoveEventCount = 0; col.fullCollection.on("remove", function () { fullCollectionRemoveEventCount++; }); var fullCollectionResetEventCount = 0; col.fullCollection.on("reset", function () { fullCollectionResetEventCount++; }); // test paging in the first page gets a page full of models and a link for // the next page col.getFirstPage({success: function () { strictEqual(col.state.currentPage, col.state.firstPage); strictEqual(col.state.totalRecords, 2); strictEqual(col.state.totalPages, 1); strictEqual(col.state.lastPage, 1); strictEqual(col.fullCollection.length, 2); deepEqual(col.links, { "1": "url", "2": "url2" }); deepEqual(col.toJSON(), [{id: 2}, {id: 1}]); deepEqual(col.fullCollection.toJSON(), [{id: 2}, {id: 1}]); }}); this.ajaxSettings.success([ {id: 2}, {id: 1} ]); equal(currentPageResetEventCount, 1); equal(fullCollectionAddEventCount, 2); equal(fullCollectionRemoveEventCount, 0); equal(fullCollectionResetEventCount, 0); equal(col.parse.callCount, 1); currentPageResetEventCount = 0; fullCollectionAddEventCount = 0; fullCollectionRemoveEventCount = 0; fullCollectionResetEventCount = 0; col.parse.reset(); col.parseLinks.reset(); // test paging for a page that has a link but no models results in a fetch col.parseLinks.returns({next: "url3"}); col.getNextPage({success: function () { strictEqual(col.state.currentPage, 2); strictEqual(col.state.totalRecords, 4); strictEqual(col.state.totalPages, 2); strictEqual(col.state.lastPage, 2); strictEqual(col.fullCollection.length, 4); deepEqual(col.links, { "1": "url", "2": "url2", "3": "url3" }); deepEqual(col.toJSON(), [{id: 3}, {id: 4}]); deepEqual(col.fullCollection.toJSON(), [{id: 2}, {id: 1}, {id: 3}, {id: 4}]); }}); this.ajaxSettings.success([ {id: 3}, {id: 4} ]); equal(currentPageResetEventCount, 1); equal(fullCollectionAddEventCount, 2); equal(fullCollectionRemoveEventCount, 0); equal(fullCollectionResetEventCount, 0); equal(col.parse.callCount, 1); currentPageResetEventCount = 0; fullCollectionAddEventCount = 0; fullCollectionRemoveEventCount = 0; fullCollectionResetEventCount = 0; col.parse.reset(); col.parseLinks.reset(); // test paging backward use cache col.getPreviousPage(); strictEqual(col.parseLinks.called, false); strictEqual(col.state.currentPage, 1); strictEqual(col.state.totalRecords, 4); strictEqual(col.state.totalPages, 2); strictEqual(col.state.lastPage, 2); strictEqual(col.fullCollection.length, 4); deepEqual(col.links, { "1": "url", "2": "url2", "3": "url3" }); deepEqual(col.toJSON(), [{id: 2}, {id: 1}]); deepEqual(col.fullCollection.toJSON(), [{id: 2}, {id: 1}, {id: 3}, {id: 4}]); equal(currentPageResetEventCount, 1); equal(fullCollectionAddEventCount, 0); equal(fullCollectionRemoveEventCount, 0); equal(fullCollectionResetEventCount, 0); currentPageResetEventCount = 0; // test paging to last page col.getLastPage(); strictEqual(col.parseLinks.called, false); strictEqual(col.state.currentPage, 2); strictEqual(col.state.totalRecords, 4); strictEqual(col.state.totalPages, 2); strictEqual(col.state.lastPage, 2); strictEqual(col.fullCollection.length, 4); deepEqual(col.links, { "1": "url", "2": "url2", "3": "url3" }); deepEqual(col.toJSON(), [{id: 3}, {id: 4}]); deepEqual(col.fullCollection.toJSON(), [{id: 2}, {id: 1}, {id: 3}, {id: 4}]); equal(currentPageResetEventCount, 1); equal(fullCollectionAddEventCount, 0); equal(fullCollectionRemoveEventCount, 0); equal(fullCollectionResetEventCount, 0); col.parseLinks.restore(); }); test("hasNextPage and hasPreviousPage", function () { var col = new (Backbone.PageableCollection.extend({ url: "url" }))([ {id: 1}, {id: 2}, {id: 3} ], { state: { pageSize: 1 }, mode: "infinite" }); 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); }); });