Blame view

node_modules/loopback-datasource-juggler/test/kvao/iterate-keys.suite.js 1.59 KB
f7563de62   Palak Handa   first commit
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
  'use strict';
  
  var asyncIterators = require('async-iterators');
  var bdd = require('../helpers/bdd-if');
  var helpers = require('./_helpers');
  var Promise = require('bluebird');
  var should = require('should');
  var toArray = Promise.promisify(asyncIterators.toArray);
  
  module.exports = function(dataSourceFactory, connectorCapabilities) {
    var canIterateKeys = connectorCapabilities.canIterateKeys !== false;
  
    bdd.describeIf(canIterateKeys, 'iterateKeys', function() {
      var CacheItem;
      beforeEach(function unpackContext() {
        CacheItem = helpers.givenCacheItem(dataSourceFactory);
      });
  
      it('returns AsyncIterator covering all keys', function() {
        return helpers.givenKeys(CacheItem, ['key1', 'key2'])
          .then(function() {
            var it = CacheItem.iterateKeys();
            should(it).have.property('next');
            return toArray(it);
          })
          .then(function(keys) {
            keys.sort();
            should(keys).eql(['key1', 'key2']);
          });
      });
  
      it('returns AsyncIterator supporting Promises', function() {
        var iterator;
        return helpers.givenKeys(CacheItem, ['key'])
          .then(function() {
            iterator = CacheItem.iterateKeys();
            return iterator.next();
          })
          .then(function(key) {
            should(key).equal('key');
            return iterator.next();
          })
          .then(function(key) {
            // Note: AsyncIterator contract requires `undefined` to signal
            // the end of the sequence. Other false-y values like `null`
            // don't work.
            should(key).equal(undefined);
          });
      });
    });
  };