コード例 #1
0
test('In memory', function() {
  var collection = new PostCollection(null, {processInMemory: true});

  this.ajaxResponse = {results: ExampleData.POSTS};
  var eventLog = new EventLog(collection);
  collection.load();
  equal(collection.size(), 3);
  equal(this.ajaxCount, 1, 'should load both parent and remote children');
  equal(eventLog.counts.load, 1, 'should fire load on inital load');


  collection.load();
  equal(this.ajaxCount, 1, 'should not load again if processInMemory');
  equal(eventLog.counts.load, 2, 'should fire load on in memory load');

  equal(collection.size(), 3);

  collection.set({query: '2'});
  collection.load();
  equal(collection.size(), 1, 'should query in memory');
  equal(collection.at(0).get('id'), 2);

  collection.set({
    query: undefined,
    filter: {id: 1}
  });
  collection.addFilter(new Filter({key: 'id', value: 1, comparison: 'equals'}));
  collection.load();
  equal(collection.size(), 1, 'should filter in memory');
  equal(collection.at(0).get('id'), 1);
});
コード例 #2
0
test('View state', function(){
  var collection = new PostCollection();

  this.ajaxResponse = {results: ExampleData.POSTS, meta: {sortField: 'subject', sortDir: 1, page: 0, pageSize: 200}};
  collection.load();

  var queryParams = collection.getQueryParams();
  equal(queryParams.sortField, 'subject', 'query params should include view state');
  equal(queryParams.sortDir, 1, 'query params should include view state');

  var eventLog = new EventLog(collection);
  collection.set({sortField: 'body'});
  equal(eventLog.counts['change:sortField'], 1, 'should fire change event');
  collection.set({sortField: 'body'});
  equal(eventLog.counts['change:sortField'], 1, 'should not fire change when value is the same');
});
コード例 #3
0
test('Can set attributes and models', function() {
  var collection = new PostCollection();

  collection.set({
    href: '/foo',
    models: ExampleData.POSTS
  });

  equal(collection.get('href'), '/foo', 'should set attributes');
  equal(collection.size(), ExampleData.POSTS.length, 'should set models');
});
コード例 #4
0
test('should discard load if query has changed before returning', function(){
  var collection = new PostCollection();

  this.ajaxResponse = {results: ExampleData.POSTS, meta: {query: 'foo', filter: {body: 'foo'}}};

  collection.set({query: 'foo', filter: {body: 'foo'}});
  collection.load({success: function() {
    ok(true, 'should complete load since query is the same');
  }.bind(this)});

  collection.set('query', 'bar');
  collection.load({success: function() {
    ok(false, 'should not complete load since query changed');
  }});

  collection.set({query: 'foo', filter: {body: 'bar'}});
  collection.load({success: function() {
    ok(false, 'should not complete load since filter changed');
  }});
});
コード例 #5
0
test('changing model then filtering in memory keeps changes', function() {
  var collection = new PostCollection(null, {processInMemory: true});

  this.ajaxResponse = {results: ExampleData.POSTS};
  var eventLog = new EventLog(collection);
  collection.load();
  equal(collection.at(0).get('active'), undefined);

  collection.at(0).set('active', true);
  collection.set('filter', {id: ExampleData.POSTS[0].id});
  collection.load();
  equal(collection.at(0).get('active'), true, 'should keep values after filtering');
});
コード例 #6
0
test('loaded models have fetched set', function() {
  this.ajaxResponse = {results: ExampleData.POSTS, meta: {total: 6}};
  var collection = new PostCollection(null);
  collection.set('pageSize', 3);

  var buffered = new BufferedCollection(collection);
  var eventLog = new EventLog(buffered);

  buffered.ensureData(0,3);
  equal(buffered.at(0).fetched, true, 'should set fetched');
  buffered.ensureData(3,6);
  equal(buffered.at(5).fetched, true, 'should set fetched');
});
コード例 #7
0
test('Can ensureData across pages', function() {
  this.ajaxResponse = {results: ExampleData.POSTS, meta: {total: 6}};
  var collection = new PostCollection(null);
  collection.set('pageSize', 3);

  var buffered = new BufferedCollection(collection);
  var eventLog = new EventLog(buffered);

  buffered.ensureData(1,5);

  equal(buffered.buffer.length, 6, 'should load 2 pages');
  equal(eventLog.counts.pageLoad, 2, 'should 2 pages pageLoad');
});
コード例 #8
0
test('Can instantiate', function() {
  var collection = new PostCollection();
  collection.reset(ExampleData.POSTS);

  equal(collection.size(), 3);
  equal(collection.at(1).get('body'), 'my body2');

  ok(collection.getRelated('filters') !== undefined, 'filter should exist');

  collection.setFilter('foo', 'bar');
  collection.set('foo', 'bar');

  var collection2 = new PostCollection();
  equal(collection2.get('foo'), undefined, 'should not share meta');
  ok(collection2.getFilters('foo').length === 0, 'should not share filter');
});
コード例 #9
0
test('Do load again while already loading if params have changed', function(assert){
  var collection = new PostCollection();
  var done = assert.async();

  this.ajaxResponse = {results: ExampleData.POSTS};
  this.ajaxAsync = true;

  collection.load();

  collection.set('pageSize', 7);

  collection.load({success: function() {
    equal(this.ajaxCount, 2, 'should load again after param change');
    done();
  }.bind(this)});

  this.ajaxAsync = false;
});
コード例 #10
0
test('Can ensureData', function() {
  this.ajaxResponse = {results: ExampleData.POSTS, meta: {total: 6}};
  var collection = new PostCollection(null);
  collection.set('pageSize', 3);

  var buffered = new BufferedCollection(collection);

  var eventLog = new EventLog(buffered);

  buffered.ensureData(0,1);

  equal(eventLog.counts.beginLoad, 1, 'should emit beginPageLoad');
  equal(eventLog.counts.pageLoad, 1, 'should emit pageLoad');

  equal(buffered.size(), 6, 'should get total from response meta');
  equal(buffered.buffer.length, 3, 'should have only actually loaded one page');

  buffered.ensureData(2,3);
  equal(this.ajaxCount, 2, 'should request 2nd page');
  equal(buffered.buffer.length, 6, 'should have loaded 2nd page');
});