UNPKG

@coon-js/extjs-lib-comp

Version:

NPM package providing component library for ExtJS projects

1,138 lines (778 loc) 39 kB
/** * coon.js * extjs-lib-comp * Copyright (C) 2017-2021 Thorsten Suckow-Homberg https://github.com/coon-js/extjs-lib-comp * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without restriction, * including without limitation the rights to use, copy, modify, merge, * publish, distribute, sublicense, and/or sell copies of the Software, * and to permit persons to whom the Software is furnished to do so, * subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE * USE OR OTHER DEALINGS IN THE SOFTWARE. */ StartTest((t) => { Ext.define("MockModel", { extend: "Ext.data.Model", fields: [{ name: "testProp", type: "int" }] }); var createStore = function (cfg) { cfg = cfg || {}; return Ext.create("Ext.data.BufferedStore", { model: "MockModel", type: "buffered", fields: ["id", "testProp"], pageSize: 100, autoLoad: cfg.autoLoad ? cfg.autoLoad : undefined, sorters: cfg.sorters ? cfg.sorters : undefined, proxy: { type: "rest", url: "cn_comp/fixtures/Livegrid", extraParams: cfg.extraParams || {}, reader: { type: "json", rootProperty: "data" } } }); }, getGrid = function (cfg) { cfg = cfg || {}; var featureCfg = { ftype: "cn_comp-gridfeature-livegrid", id: "livegrid" }; return Ext.create("Ext.grid.Panel", { renderTo: document.body, width: 510, height: 550, features: [featureCfg], multiColumnSort: cfg.multiColumnSort ? cfg.multiColumnSort : false, store: createStore(cfg), columns: [{ text: "id", dataIndex: "id", flex: 1 }, { text: "subject", dataIndex: "subject", flex: 1 }, { text: "date", dataIndex: "date", flex: 1 }, { text: "from", dataIndex: "from", flex: 1 }, { text: "testProp", dataIndex: "testProp", flex: 1 }] }); }, createLivegrid = function () { return Ext.create("coon.comp.grid.feature.Livegrid"); }; // +---------------------------------------------------------------------------- // | =~. Tests .~= // +---------------------------------------------------------------------------- t.requireOk("coon.comp.grid.feature.Livegrid", function () { t.requireOk("coon.comp.fixtures.sim.ItemSim", function (){ t.it("Livegrid will not work with multiColumnSort", (t) => { var exc; try { getGrid({autoLoad: false, multiColumnSort: true}); } catch(e) { exc = e; } t.expect(exc).toBeDefined(); t.expect(exc.msg).toContain("does not work with"); }); t.it("setup()", (t) => { var store = Ext.create("Ext.data.Store"), SIGNAL = 0, BEFOREPREFETCH = 0, CACHEMISS = 0, PAGEADD = 0, PAGEREMOVE = 0, PAGEREMOVEVETO = 0, exc, oldPageMapFeeder; store.isEmptyStore = true; let feature = createLivegrid(); t.expect(feature.isConfigured()).toBe(false); t.expect(feature.configure(store)).toBe(false); // exceptions feature = createLivegrid(); try {feature.configure(Ext.create("Ext.data.Store"));}catch(e){exc=e;} t.expect(exc).toBeDefined(); t.expect(exc.msg.toLowerCase()).toContain("must be an instance of"); exc = undefined; try {feature.configure();}catch(e){exc=e;} t.expect(exc).toBeDefined(); t.expect(exc.msg.toLowerCase()).toContain("must be an instance of"); // pageMapFeeder setting feature = createLivegrid(); t.expect(feature.pageMapFeeder).toBeFalsy(); oldPageMapFeeder = Ext.create("coon.core.data.pageMap.PageMapFeeder", { pageMap: createStore().getData() }); feature.pageMapFeeder = oldPageMapFeeder; t.isCalledNTimes("destroy", feature.pageMapFeeder, 1); t.expect(feature.pageMapFeeder).toBe(oldPageMapFeeder); t.expect(feature.configure(Ext.create("Ext.data.BufferedStore"))).toBe(true); t.expect(feature.isConfigured()).toBe(true); t.expect(feature.pageMapFeeder instanceof coon.core.data.pageMap.PageMapFeeder).toBe(true); t.expect(feature.pageMapFeeder).not.toBe(oldPageMapFeeder); store = createStore(); store.load(); t.waitForMs(t.parent.TIMEOUT, () => { // onStoreUpdate installed feature = createLivegrid(); feature.onCacheMiss = function () { CACHEMISS++; }; feature.onBeforePrefetch = function () { BEFOREPREFETCH++; }; feature.onPageAdd = function () { PAGEADD++; }; feature.onStoreUpdate = function () { SIGNAL++; }; feature.onPageRemove = function () { PAGEREMOVE++; }; feature.onPageRemoveVeto = function () { PAGEREMOVEVETO++; }; t.expect(SIGNAL).toBe(0); t.expect(store.isLoaded()).toBe(true); t.expect(feature.configure(store)).toBe(true); store.getAt(0).set("testProp", "t"); store.getAt(0).commit(); t.expect(SIGNAL).toBe(1); store.fireEvent("cachemiss"); store.fireEvent("beforeprefetch"); store.fireEvent("pageadd"); store.fireEvent("pageremove"); feature.pageMapFeeder.fireEvent("cn_core-pagemapfeeder-pageremoveveto"); t.expect(BEFOREPREFETCH).toBe(1); t.expect(CACHEMISS).toBe(1); t.expect(PAGEADD).toBe(1); t.expect(PAGEREMOVE).toBe(1); t.expect(PAGEREMOVEVETO).toBe(1); store.getAt(0).set("testProp", "u"); store.getAt(0).commit(); t.expect(SIGNAL).toBe(2); store.fireEvent("cachemiss"); store.fireEvent("beforeprefetch"); store.fireEvent("pageadd"); t.expect(BEFOREPREFETCH).toBe(2); t.expect(CACHEMISS).toBe(2); t.expect(PAGEADD).toBe(2); CACHEMISS = 0; BEFOREPREFETCH = 0; PAGEADD = 0; SIGNAL = 0; t.expect(feature.configure(store)).toBe(true); t.expect(feature.configure(store)).toBe(true); store.getAt(1).set("testProp", "fjfjjfu"); store.getAt(1).commit(); t.expect(SIGNAL).toBe(1); store.fireEvent("cachemiss"); store.fireEvent("beforeprefetch"); store.fireEvent("pageadd"); t.expect(BEFOREPREFETCH).toBe(1); t.expect(CACHEMISS).toBe(1); t.expect(PAGEADD).toBe(1); store.destroy(); store = null; }); }); t.it("scroller registered", (t) => { let grid, feature; t.isCalled("onScroll", coon.comp.grid.feature.Livegrid.prototype); grid = getGrid({autoLoad: true}); feature = grid.view.getFeature("livegrid"); t.waitForMs(t.parent.TIMEOUT, () => { feature.grid.view.getScrollable().scrollTo(0, 4200); t.waitForMs(t.parent.TIMEOUT, () => { grid.destroy(); grid = null; }); }); }); t.it("onGridReconfigure() - callback", (t) => { var grid, store; t.isCalledNTimes( "onGridReconfigure", coon.comp.grid.feature.Livegrid.prototype, 1 ); grid = getGrid({autoLoad: true}); store = createStore(); grid.reconfigure(store); grid.destroy(); grid = null; }); t.it("onGridReconfigure() - argument behavior", (t) => { var grid, feature, store, store2; grid = getGrid({autoLoad: true}); feature = grid.view.getFeature("livegrid"); store = createStore(), store2 = createStore(); t.isCalledNTimes("configure", feature, 3); feature.onGridReconfigure(grid, store, null, null); feature.onGridReconfigure(grid, store2, null, store); feature.onGridReconfigure(grid, store, null, store2); // shouldnt trigger associate setup feature.onGridReconfigure(grid, store, null, store); feature.onGridReconfigure(grid); grid.destroy(); grid = null; }); t.it("getPageMap()", (t) => { var grid, feature; grid = getGrid({autoLoad: true}); feature = grid.view.getFeature("livegrid"); t.expect(feature.getPageMap()).toBe(grid.getStore().getData()); t.expect(feature.pageMapFeeder.getPageMap()).toBe(feature.getPageMap() ); grid.destroy(); grid = null; }); t.it("getCurrentViewRange()", (t) => { var grid = getGrid({autoLoad: true}), feature = grid.view.getFeature("livegrid"), PageMapUtil = coon.core.data.pageMap.PageMapUtil; t.expect(feature.getCurrentViewRange()).toBe(null); t.waitForMs(t.parent.TIMEOUT, () => { t.expect( feature.getCurrentViewRange() instanceof coon.core.data.pageMap.IndexRange).toBe(true); t.expect( feature.getCurrentViewRange().getStart().equalTo( PageMapUtil.storeIndexToPosition(grid.view.all.startIndex, feature.getPageMap()) )).toBe(true); t.expect( feature.getCurrentViewRange().getEnd().equalTo( PageMapUtil.storeIndexToPosition(grid.view.all.endIndex, feature.getPageMap()) )).toBe(true); grid.destroy(); grid = null; }); }); t.it("refreshView()", (t) => { var grid = getGrid({autoLoad: true}), feature = grid.view.getFeature("livegrid"), RecordPosition = coon.core.data.pageMap.RecordPosition, viewRange, SIGNAL = 0; t.waitForMs(t.parent.TIMEOUT, () => { grid.view.on("refresh", function (){SIGNAL++;}); t.expect(feature.refreshView( [RecordPosition.create(1, 0), RecordPosition.create(2,4)] )).toBe(true); t.expect(SIGNAL).toBe(1); viewRange = feature.getCurrentViewRange(); t.expect(feature.refreshView( [RecordPosition.create(viewRange.getEnd().getPage() + 1, 0), RecordPosition.create(viewRange.getEnd().getPage() + 1, 4)] )).toBe(false); t.expect(SIGNAL).toBe(1); grid.destroy(); grid = null; }); }); t.it("onStoreUpdate() - is called", (t) => { t.isCalledNTimes( "onStoreUpdate", coon.comp.grid.feature.Livegrid.prototype, 1 ); var grid = getGrid({autoLoad: true}); t.waitForMs(t.parent.TIMEOUT, () => { grid.getStore().getData().map[1].value[0].set("testProp", 800); grid.getStore().getData().map[1].value[0].commit(); grid.destroy(); grid = null; }); }); t.it("onStoreUpdate()", (t) => { var grid = getGrid({autoLoad: true}), store = grid.getStore(), feature = grid.view.getFeature("livegrid"), pageMap = feature.getPageMap(), RecordPosition = coon.core.data.pageMap.RecordPosition, PageMapUtil = coon.core.data.pageMap.PageMapUtil, rec; t.waitForMs(t.parent.TIMEOUT, () => { rec = PageMapUtil.getRecordAt(RecordPosition.create(1, 0), pageMap); // no sorters t.expect(grid.getStore().getSorters().length).toBe(0); t.expect(feature.onStoreUpdate(store, rec)).toBe(false); // wrong sorter store.setSorters({property: "subject", dir: "ASC"}); t.waitForMs(t.parent.TIMEOUT, () => { t.expect(grid.getStore().getSorters().length).toBe(1); t.expect(grid.getStore().getSorters().getAt(0).getProperty()).toBe("subject"); // trigger commit and check regarding previousValues rec.commit(); t.expect(feature.onStoreUpdate(store, rec)).toBe(false); rec.set("testProp", 1); rec.commit(); t.expect(feature.onStoreUpdate(store, rec)).toBe(false); // proper sorter store.getSorters().clear(); store.setSorters({property: "testProp", dir: "ASC"}); t.waitForMs(t.parent.TIMEOUT, () => { t.expect(grid.getStore().getSorters().length).toBe(1); t.expect(grid.getStore().getSorters().getAt(0).getProperty()).toBe("testProp"); rec = PageMapUtil.getRecordAt(RecordPosition.create(1, 0), pageMap); rec.set("testProp", 2); rec.commit(); t.expect(feature.onStoreUpdate(store, rec)).toBe(true); // no insert index can be found rec.set("testProp", 322552252); rec.commit(); t.expect(feature.onStoreUpdate(store, rec)).toBe(false); grid.destroy(); grid = null; }); }); }); }); t.it("saveFocusState()", (t) => { let grid = getGrid({autoLoad: true}), feature = grid.view.getFeature("livegrid"), res; t.waitForMs(t.parent.TIMEOUT, () => { t.isCalledNTimes("saveFocusState", Ext.view.Table.prototype, 1); res = feature.saveFocusState.apply(grid.view); t.expect(res).toBeTruthy(); t.expect(Ext.isFunction(res)); grid.destroy(); grid = null; }); }); t.it("swapSaveFocusState()", (t) => { let grid = getGrid({autoLoad: true}), feature = grid.view.getFeature("livegrid"); t.isCalledNTimes("saveFocusState", coon.comp.grid.feature.Livegrid.prototype, 1); t.waitForMs(t.parent.TIMEOUT, () => { t.expect(feature.swapSaveFocusState()).toBe(true); t.expect(grid.view.saveFocusState).toBe( coon.comp.grid.feature.Livegrid.prototype.saveFocusState ); t.expect(Ext.isFunction(grid.view.saveFocusState())).toBe(true); grid.destroy(); grid = null; }); }); t.it("onBeforePrefetch()", (t) => { let grid = getGrid({autoLoad: true}), store = grid.getStore(), feature = grid.view.getFeature("livegrid"), PAGE, operation = { getPage: function () { return PAGE; } }; t.waitForMs(t.parent.TIMEOUT, () => { feature.pageMapFeeder.swapMapToFeed(2, 1); t.expect(feature.pageMapFeeder.getFeedAt(2)).toBeTruthy(); PAGE = 2; t.expect(feature.onBeforePrefetch(store, operation)).toBe(false); PAGE = 10000; t.expect(feature.onBeforePrefetch(store, operation)).toBe(true); grid.destroy(); grid = null; }); }); t.it("onPageAdd()", (t) => { let grid = getGrid({autoLoad: true}), feature = grid.view.getFeature("livegrid"), pageMap = feature.getPageMap(); t.waitForMs(t.parent.TIMEOUT, () => { feature.onPageAdd(pageMap, 1); feature.pageMapFeeder.swapMapToFeed(3, 2); t.expect(feature.pageMapFeeder.getFeedAt(3)).toBeTruthy(); feature.onPageAdd(pageMap, 3); t.expect(feature.pageMapFeeder.getFeedAt(3)).toBe(null); grid.destroy(); grid = null; }); }); t.it("onCacheMiss()", (t) => { let grid = getGrid({autoLoad: true}), store = grid.getStore(), feature = grid.view.getFeature("livegrid"), pageMap = feature.getPageMap(); t.waitForMs(t.parent.TIMEOUT, () => { feature.pageMapFeeder.swapMapToFeed(3, 2); t.expect(feature.pageMapFeeder.getFeedAt(3)).toBeTruthy(); feature.onCacheMiss(store, 301, 310); feature.onPageAdd(pageMap, 3); t.expect(feature.pageMapFeeder.getFeedAt(3)).toBe(null); grid.destroy(); grid = null; }); }); t.it("getCurrentViewRange()", (t) => { let grid = getGrid({autoLoad: true}), view = grid.view, feature = grid.view.getFeature("livegrid"), pageMap = feature.getPageMap(), PageMapUtil = coon.core.data.pageMap.PageMapUtil; t.waitForMs(t.parent.TIMEOUT, () => { let oldEnd = view.all.endIndex; view.all.endIndex = -1; t.expect(feature.getCurrentViewRange()).toBe(null); view.all.endIndex = oldEnd; let range = feature.getCurrentViewRange(); t.expect(range instanceof coon.core.data.pageMap.IndexRange); t.expect(PageMapUtil.positionToStoreIndex(range.getStart(), pageMap)).toBe(view.all.startIndex); t.expect(PageMapUtil.positionToStoreIndex(range.getEnd(), pageMap)).toBe(view.all.endIndex); grid.destroy(); grid = null; }); }); t.it("refreshView()", (t) => { let grid = getGrid({autoLoad: true}), feature = grid.view.getFeature("livegrid"), RecordPosition = coon.core.data.pageMap.RecordPosition; t.waitForMs(t.parent.TIMEOUT, () => { let positions = [ RecordPosition.create(3, 23) ]; t.expect(feature.refreshView(positions)).toBe(false); t.isCalledNTimes("ensureVisible", grid, 0); positions = [ RecordPosition.create(1, 4), RecordPosition.create(3, 23) ]; t.expect(feature.refreshView(positions)).toBe(true); grid.destroy(); grid = null; }); }); t.it("refreshView() - ensureVisible with selection", (t) => { let grid = getGrid({autoLoad: true}), feature = grid.view.getFeature("livegrid"), pageMap = feature.getPageMap(), RecordPosition = coon.core.data.pageMap.RecordPosition, positions; t.waitForMs(t.parent.TIMEOUT, () => { t.isCalledNTimes("ensureVisible", grid, 1); grid.getSelectionModel().select(pageMap.map[1].value[4]); positions = [ RecordPosition.create(1, 4), RecordPosition.create(3, 23) ]; t.expect(feature.refreshView(positions)).toBe(true); grid.destroy(); grid = null; }); }); t.it("refreshView() - ensureVisible (=false) with selection", (t) => { let grid = getGrid({autoLoad: true}), feature = grid.view.getFeature("livegrid"), pageMap = feature.getPageMap(), RecordPosition = coon.core.data.pageMap.RecordPosition, positions; t.waitForMs(t.parent.TIMEOUT, () => { t.isCalledNTimes("ensureVisible", grid, 0); grid.getSelectionModel().select(pageMap.map[1].value[4]); positions = [ RecordPosition.create(1, 4), RecordPosition.create(3, 23) ]; t.expect(feature.refreshView(positions, false)).toBe(true); grid.destroy(); grid = null; }); }); t.it("remove()", (t) => { let grid = getGrid({autoLoad: true}), feature = grid.view.getFeature("livegrid"), pageMap = feature.getPageMap(); t.waitForMs(t.parent.TIMEOUT, () => { let rec = pageMap.map[1].value[4], rec2 = pageMap.map[3].value[4]; t.isCalledNTimes("remove", feature.pageMapFeeder, 2); grid.getSelectionModel().select(rec); t.expect(grid.getSelection()[0]).toBe(rec); t.expect(feature.remove(rec)).toBe(true); t.expect(grid.getSelection().length).toBe(0); grid.getSelectionModel().select(rec2); t.expect(grid.getSelection()[0]).toBe(rec2); t.expect(feature.remove(rec2)).toBe(false); t.expect(grid.getSelection().length).toBe(0); grid.destroy(); grid = null; }); }); t.it("refreshView() - indexes properly passed to view's refreshView", (t) => { let grid = getGrid({autoLoad: true}), view = grid.view, feature = grid.view.getFeature("livegrid"), feeder = feature.pageMapFeeder, pageMap = feature.getPageMap(), map = pageMap.map, PageMapUtil = coon.core.data.pageMap.PageMapUtil; t.waitForMs(t.parent.TIMEOUT, () => { let scrollable = view.getScrollable(), rowHeight = view.bufferedRenderer.rowHeight; scrollable.scrollTo(0, 300 * rowHeight); t.waitForMs(t.parent.TIMEOUT, () => { let rec = map[4].value[5], pos = PageMapUtil.findRecord(rec, feeder), checkRec = map[4].value[1]; t.expect(feature.getCurrentViewRange().contains(pos)).toBe(true); grid.getSelectionModel().select(rec); feature.remove(rec); t.expect(feature.getCurrentViewRange().contains( PageMapUtil.findRecord(checkRec, feeder)) ).toBe(true); grid.destroy(); grid = null; }); }); }); t.it("add()", (t) => { let grid = getGrid({sorters: {property: "testProp", dir: "ASC"}, autoLoad: true}), view = grid.view, feature = grid.view.getFeature("livegrid"), feeder = feature.pageMapFeeder, PageMapUtil = coon.core.data.pageMap.PageMapUtil; t.waitForMs(t.parent.TIMEOUT, () => { let scrollable = view.getScrollable(), rowHeight = view.bufferedRenderer.rowHeight; scrollable.scrollTo(0, 300 * rowHeight); t.waitForMs(t.parent.TIMEOUT, () => { let rec = Ext.create("MockModel", { testProp: 306.5, subject: "+++ NEW +++" }); feature.add(rec); t.expect(feature.getCurrentViewRange().contains( PageMapUtil.findRecord(rec, feeder)) ).toBe(true); grid.destroy(); grid = null; }); }); }); t.it("add() - start of view", (t) => { let grid = getGrid({sorters: {property: "testProp", dir: "ASC"}, autoLoad: true}), feature = grid.view.getFeature("livegrid"), feeder = feature.pageMapFeeder, PageMapUtil = coon.core.data.pageMap.PageMapUtil; t.waitForMs(t.parent.TIMEOUT, () => { t.waitForMs(t.parent.TIMEOUT, () => { for (var i = 0; i < 78; i++) { let rec = Ext.create("MockModel", { testProp: 0 - i, subject: "+++ NEW (" + i + ") +++" }); feature.add(rec); t.expect(feature.getCurrentViewRange().contains( PageMapUtil.findRecord(rec, feeder)) ).toBe(true); } grid.destroy(); grid = null; }); }); }); t.it("onPageAdd()", (t) => { let grid = getGrid({ sorters: {property: "testProp", dir: "ASC"}, autoLoad: true }), feature = grid.view.getFeature("livegrid"); t.waitForMs(t.parent.TIMEOUT, () => { t.isCalledNTimes("cleanFeedsAndVetoed", feature, 1); feature.onPageAdd(feature.getPageMap(), 3); grid.destroy(); grid = null; }); }); t.it("onPageRemove()", (t) => { let grid = getGrid({ sorters: {property: "testProp", dir: "ASC"}, autoLoad: true }), feature = grid.view.getFeature("livegrid"); t.waitForMs(t.parent.TIMEOUT, () => { t.isCalledNTimes("cleanFeedsAndVetoed", feature, 1); feature.onPageRemove(feature.getPageMap(), 3); grid.destroy(); grid = null; }); }); t.it("onPageRemoveVeto()", (t) => { let grid = getGrid({ sorters: {property: "testProp", dir: "ASC"}, autoLoad: true }), feature = grid.view.getFeature("livegrid"); t.waitForMs(t.parent.TIMEOUT, () => { t.expect(feature.vetoedPages).toEqual([]); feature.onPageRemoveVeto(feature.pageMapFeeder, 3); feature.onPageRemoveVeto(feature.pageMapFeeder, 2); t.expect(feature.vetoedPages).toEqual([3, 2]); feature.onPageRemoveVeto(feature.pageMapFeeder, 2); feature.onPageRemoveVeto(feature.pageMapFeeder, 1); t.expect(feature.vetoedPages).toEqual([3, 2, 1]); grid.destroy(); grid = null; }); }); t.it("onScroll()", (t) => { let grid = getGrid({ sorters: {property: "testProp", dir: "ASC"}, autoLoad: true }), feature = grid.view.getFeature("livegrid"), PageMapUtil = coon.core.data.pageMap.PageMapUtil, RecordPosition = coon.core.data.pageMap.RecordPosition; t.waitForMs(t.parent.TIMEOUT, () => { let rowHeight = feature.grid.view.bufferedRenderer.rowHeight, posToY = function (pos) { return PageMapUtil.positionToStoreIndex(pos, feature.getPageMap()) * rowHeight; }; feature.vetoedPages = [1, 3]; t.expect(feature.getPageMap().map[1]).toBeDefined(); t.expect(feature.getPageMap().map[3]).toBeDefined(); feature.onScroll(null, 0, posToY(RecordPosition.create(1, 2))); t.expect(feature.vetoedPages).toEqual([1]); t.expect(feature.getPageMap().map[1]).toBeDefined(); t.expect(feature.getPageMap().map[3]).toBeUndefined(); feature.onScroll(null, 0, posToY(RecordPosition.create(2, 13))); t.expect(feature.vetoedPages).toEqual([]); t.expect(feature.getPageMap().map[1]).toBeUndefined(); grid.destroy(); grid = null; }); }); t.it("cleanFeedsAndVetoed()", (t) => { let grid = getGrid({ sorters: {property: "testProp", dir: "ASC"}, autoLoad: true }), feature = grid.view.getFeature("livegrid"); t.waitForMs(t.parent.TIMEOUT, () => { feature.pageMapFeeder.swapMapToFeed(3, 2); feature.vetoedPages = [3]; t.expect(feature.pageMapFeeder.getFeedAt(3)).toBeTruthy(); t.expect(feature.vetoedPages).toEqual([3]); feature.cleanFeedsAndVetoed(3); t.expect(feature.pageMapFeeder.getFeedAt(3)).toBeFalsy(); t.expect(feature.vetoedPages).toEqual([]); grid.destroy(); grid = null; }); }); t.it("add() - start of view, last page vetoed", (t) => { let grid = getGrid({sorters: {property: "testProp", dir: "ASC"}, autoLoad: true}), view = grid.view, feature = grid.view.getFeature("livegrid"), pageMap = feature.getPageMap(), PageMapUtil = coon.core.data.pageMap.PageMapUtil; t.waitForMs(t.parent.TIMEOUT, () => { let scrollable = view.getScrollable(), rowHeight = view.bufferedRenderer.rowHeight, lastPage = PageMapUtil.getLastPossiblePageNumber(pageMap); t.expect(lastPage).toBe(100); scrollable.scrollTo(0, 100000 * rowHeight); t.waitForMs(t.parent.TIMEOUT, () => { for (var i = 0; i < 1; i++) { let rec = Ext.create("MockModel", { testProp: 0 - i, subject: "+++ NEW (" + i + ") +++" }); feature.add(rec); coon.comp.fixtures.sim.ItemTable.items.splice(0, 0, rec.data); t.expect(feature.vetoedPages.indexOf(lastPage)).not.toBe(-1); } scrollable.scrollTo(0, 0); t.waitForMs(t.parent.TIMEOUT, () => { t.expect(feature.vetoedPages.indexOf(lastPage)).toBe(-1); t.expect(pageMap.map[lastPage]).toBeUndefined(); grid.destroy(); grid = null; }); }); }); }); t.it("getRecordById()", (t) => { let grid = getGrid({sorters: {property: "testProp", dir: "ASC"}, autoLoad: true}), feature = grid.view.getFeature("livegrid"), PageMapUtil = coon.core.data.pageMap.PageMapUtil; t.waitForMs(t.parent.TIMEOUT, () => { t.isCalledOnce("getRecordById", PageMapUtil); feature.getRecordById("foo"); t.waitForMs(t.parent.TIMEOUT, () => { grid.destroy(); grid = null; }); }); }); t.it("extjs-lib-comp#4", (t) => { var grid = getGrid({autoLoad: true, sorters: {property: "testProp", dir: "ASC"}}), store = grid.getStore(), selModel = grid.getSelectionModel(); t.isntCalled("ensureVisible" ,grid); t.waitForMs(t.parent.TIMEOUT, () => { let rogueRec = Ext.create("Ext.data.Model", {text: "foo"}), rec = store.getAt(0); selModel.select(rogueRec); t.expect(selModel.isSelected(rec)).toBe(false); t.expect(selModel.isSelected(rogueRec)).toBe(true); rec.set("subject", "foo"); rec.set("testProp", 2); rec.commit(); grid.destroy(); grid = null; }); }); t.it("extjs-lib-comp#5", (t) => { let grid = getGrid({ sorters: {property: "testProp", dir: "ASC"}, autoLoad: true, extraParams: {isEmpty: true} }), feature = grid.view.getFeature("livegrid"), feeder = feature.pageMapFeeder, PageMapUtil = coon.core.data.pageMap.PageMapUtil; t.waitForMs(t.parent.TIMEOUT, () => { for (var i = 0; i < 78; i++) { let rec = Ext.create("MockModel", { testProp: 0 - i, subject: "+++ NEW (" + i + ") +++" }); feature.add(rec); t.expect(feature.getCurrentViewRange().contains( PageMapUtil.findRecord(rec, feeder)) ).toBe(true); } grid.destroy(); grid = null; }); }); });});});