-/*!
- * Ext JS Library 3.2.2
- * Copyright(c) 2006-2010 Ext JS, Inc.
- * licensing@extjs.com
- * http://www.extjs.com/license
- */
-/**
- * Tests Ext.data.Store functionality
- * @author Ed Spencer
- */
-(function() {
- var suite = Ext.test.session.getSuite('Ext.data.GroupingStore'),
- assert = Y.Assert;
-
- //a shared setup function used by several of the suites
- var defaultSetup = function(config) {
- config = config || {};
-
- Ext.applyIf(config, {
- proxy : new Ext.data.MemoryProxy({}),
- reader: new Ext.data.ArrayReader({}, [
- {name: 'name', type: 'string'},
- {name: 'email', type: 'string'},
- {name: 'greatness', type: 'int'},
- {name: 'group', type: 'string'},
- {name: 'old', type: 'boolean'}
- ]),
- storeId: 'myStore',
- remoteSort : false,
- remoteGroup: false,
- groupField : 'group',
-
- sortInfo: {field: 'name', direction: 'ASC'}
- });
-
- var store = new Ext.data.GroupingStore(config);
-
- store.loadData([
- ['Ed Spencer', 'ed@extjs.com', 100, 'code', false],
- ['Abe Elias', 'abe@extjs.com', 70, 'admin', false],
- ['Aaron Conran', 'aaron@extjs.com', 5, 'admin', true],
- ['Tommy Maintz', 'tommy@extjs.com', -15, 'code', true]
- ]);
-
- return store;
- };
-
- suite.add(new Y.Test.Case({
- name: 'constructor',
-
- testAppliesGroupField: function() {
- var GroupingStore = Ext.data.GroupingStore,
- proto = GroupingStore.prototype,
- oldFunc = proto.applyGroupField,
- wasCalled = false;
-
- proto.applyGroupField = function() {
- wasCalled = true;
- };
-
- var store = new GroupingStore();
- assert.isTrue(wasCalled);
-
- proto.applyGroupField = oldFunc;
- }
- }));
-
- suite.add(new Y.Test.Case({
- name: 'clear grouping',
-
- testUnsetsGroupField: function() {
- var store = defaultSetup();
- store.groupField = 'abc';
-
- store.clearGrouping();
- assert.isFalse(store.groupField);
- },
-
- testLocalGroupingAppliesSort: function() {
- var GroupingStore = Ext.data.GroupingStore,
- proto = GroupingStore.prototype,
- oldFunc = proto.sort,
- wasCalled = false;
-
- proto.sort = function() {
- wasCalled = true;
- };
-
- var store = defaultSetup({remoteGroup: false});
- store.clearGrouping();
-
- assert.isTrue(wasCalled);
-
- proto.sort = oldFunc;
- },
-
- testLocalGroupingFiresEvent: function() {
- var store = defaultSetup({remoteGroup: false}),
- fired = false;
-
- store.on('datachanged', function() {
- fired = true;
- }, this);
-
- store.clearGrouping();
- assert.isTrue(fired);
- },
-
- testRemoteGroupingReloads: function() {
- var GroupingStore = Ext.data.GroupingStore,
- proto = GroupingStore.prototype,
- oldFunc = proto.reload,
- wasCalled = false;
-
- proto.reload = function() {
- wasCalled = true;
- };
-
- var store = defaultSetup({remoteGroup: true});
- store.clearGrouping();
-
- assert.isTrue(wasCalled);
-
- proto.reload = oldFunc;
- },
-
- testRemoteGroupingDeletesBaseParams: function() {
- var store = defaultSetup({remoteGroup: true});
-
- //these params should be deleted
- Ext.apply(store.baseParams, {
- groupBy : 'abc',
- groupDir: 'ASC'
- });
-
- store.clearGrouping();
-
- assert.isUndefined(store.baseParams.groupBy);
- assert.isUndefined(store.baseParams.groupDir);
- },
-
- testRemoteGroupingDeletesLastOptions: function() {
- var store = defaultSetup({remoteGroup: true});
-
- //these params should be deleted
- store.lastOptions = store.lastOptions || {};
- store.lastOptions.params = store.lastOptions.params || {};
-
- Ext.apply(store.lastOptions.params, {
- groupBy : 'abc',
- groupDir: 'ASC'
- });
-
- store.clearGrouping();
-
- assert.isUndefined(store.lastOptions.params.groupBy);
- assert.isUndefined(store.lastOptions.params.groupDir);
- }
- }));
-
- suite.add(new Y.Test.Case({
- name: 'group by',
-
- testForceRegroup: function() {
- var GroupingStore = Ext.data.GroupingStore,
- proto = GroupingStore.prototype,
- oldFunc = proto.applyGroupField,
- callCount = 0;
-
- proto.applyGroupField = function() {
- callCount++;
- };
-
- var store = defaultSetup({sortInfo: {field: 'name', direction: 'ASC'}});
- store.groupBy('name', 'DESC');
-
- var currentCallCount = callCount;
-
- //this should activate another group operation
- store.groupBy('name', 'DESC', true);
-
- //cleanup
- proto.applyGroupField = oldFunc;
-
- assert.areEqual(currentCallCount + 1, callCount);
- },
-
- //if we already group by this field and direction, it should not group again
- testNoForceRegroup: function() {
- var GroupingStore = Ext.data.GroupingStore,
- proto = GroupingStore.prototype,
- oldFunc = proto.applyGroupField,
- callCount = 0;
-
- proto.applyGroupField = function() {
- callCount++;
- };
-
- var store = defaultSetup({sortInfo: {field: 'name', direction: 'ASC'}});
- store.groupBy('name');
-
- var currentCallCount = callCount;
-
- //this should not activate another group operation
- store.groupBy('name');
-
- //cleanup
- proto.applyGroupField = oldFunc;
-
- assert.areEqual(currentCallCount, callCount);
- },
-
- testSetsGroupDir: function() {
- var store = defaultSetup({sortInfo: {field: 'name', direction: 'ASC'}});
- store.groupBy('name');
-
- assert.areEqual('name', store.groupField);
- },
-
- testSetsGroupField: function() {
- var store = defaultSetup({sortInfo: {field: 'name', direction: 'ASC'}});
- store.groupBy('name', false, 'DESC');
-
- assert.areEqual('DESC', store.groupDir);
- },
-
- testAppliesGroupField: function() {
- var GroupingStore = Ext.data.GroupingStore,
- proto = GroupingStore.prototype,
- oldFunc = proto.applyGroupField,
- wasCalled = false;
-
- proto.applyGroupField = function() {
- wasCalled = true;
- };
-
- var store = defaultSetup({sortInfo: {field: 'name', direction: 'ASC'}});
- store.groupBy('name');
-
- //cleanup
- proto.applyGroupField = oldFunc;
-
- assert.isTrue(wasCalled);
- },
-
- testReloadsIfRemote: function() {
- var fired = false;
- var store = defaultSetup({
- remoteGroup: true,
- sortInfo : {field: 'name', direction: 'ASC'}
- });
-
- //fake a remote load
- store.load = function() {
- fired = true;
- };
-
- store.groupBy('name');
-
- assert.isTrue(fired);
- },
-
- testFiresDatachangedIfLocal: function() {
- var fired = false,
- store = defaultSetup({remoteGroup: false, sortInfo: {field: 'name', direction: 'ASC'}});
-
- store.on('datachanged', function() {
- fired = true;
- }, this);
-
- store.groupBy('name');
-
- assert.isTrue(fired);
- },
-
- testFiresGroupchangeIfLocal: function() {
- var fired = false,
- store = defaultSetup({remoteGroup: false, sortInfo: {field: 'name', direction: 'ASC'}});
-
- store.on('groupchange', function() {
- fired = true;
- }, this);
-
- store.groupBy('name');
-
- assert.isTrue(fired);
- },
-
- testFiresGroupchangeIfRemote: function() {
- var fired = false;
- var store = defaultSetup({
- remoteGroup: true,
- sortInfo : {field: 'name', direction: 'ASC'}
- });
-
- //fake a remote load
- store.load = function() {
- store.fireEvent('load', store);
- };
-
- store.on('groupchange', function() {
- fired = true;
- }, this);
-
- store.groupBy('name');
-
- assert.isTrue(fired);
- },
-
- testGroupOnSort: function() {
-
- }
- }));
-
- suite.add(new Y.Test.Case({
- name: 'apply group field',
-
- setUp: function() {
- this.store = defaultSetup({
- remoteGroup: true
- });
-
- this.store.groupField = 'abc';
- this.store.groupDir = 'DESC';
- this.store.lastOptions = {params: {}};
- },
-
- testSetsBaseParams: function() {
- this.store.applyGroupField();
-
- assert.areEqual('abc', this.store.baseParams.groupBy);
- assert.areEqual('DESC', this.store.baseParams.groupDir);
- },
-
- testSetsLastOptionsGroupDir: function() {
- this.store.applyGroupField();
-
- assert.areEqual('DESC', this.store.lastOptions.params.groupDir);
- },
-
- testDeletesLastOptionsGroupBy: function() {
- this.store.applyGroupField();
-
- assert.isUndefined(this.store.lastOptions.params.groupBy);
- }
- }));
-
- suite.add(new Y.Test.Case({
- name: 'apply sort'
- }));
-
- suite.add(new Y.Test.Case({
- name: 'apply grouping'
- }));
-
- //not really sure what this function does or why it does it. These tests just ensure
- //that any refactoring does not break it
- suite.add(new Y.Test.Case({
- name: 'get group state',
-
- testReturnsGroupField: function() {
- var store = defaultSetup();
- store.groupField = 'abc';
-
- assert.areEqual('abc', store.getGroupState());
- },
-
- //if only sorting is on sortinfo
- testReturnsSortInfoField: function() {
- var store = defaultSetup({groupOnSort: true});
- store.groupField = 'abc';
- store.sortInfo = {field: 'def'};
-
- assert.areEqual('def', store.getGroupState());
- },
-
- //if no sorting is applied anywhere
- testReturnsUndefined: function() {
- var store = defaultSetup({groupOnSort: true});
- store.groupField = 'abc';
- store.sortInfo = {};
-
- assert.isUndefined(store.getGroupState());
- }
- }));
-})();