-
Notifications
You must be signed in to change notification settings - Fork 365
/
iterate-keys.suite.js
54 lines (48 loc) · 1.66 KB
/
iterate-keys.suite.js
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
52
53
54
'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(setupCacheItem);
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);
});
});
function setupCacheItem() {
return helpers.givenCacheItem(dataSourceFactory)
.then(ModelCtor => CacheItem = ModelCtor);
};
});
};