Skip to content

Commit a42388d

Browse files
author
Burcu Dogan
committed
Merge pull request #132 from stephenplusplus/query-test
Query test
2 parents 00553cc + eee9198 commit a42388d

File tree

2 files changed

+75
-80
lines changed

2 files changed

+75
-80
lines changed

lib/datastore/query.js

+5
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,11 @@ var util = require('../common/util.js');
4242
* ```
4343
*/
4444
function Query(namespace, kinds) {
45+
if (!kinds) {
46+
kinds = namespace;
47+
namespace = null;
48+
}
49+
4550
this.namespace = namespace || null;
4651
this.kinds = kinds;
4752

test/datastore/query.js

+70-80
Original file line numberDiff line numberDiff line change
@@ -21,127 +21,117 @@
2121
var assert = require('assert');
2222
var datastore = require('../../lib/datastore');
2323
var entity = require('../../lib/datastore/entity.js');
24+
var Query = require('../../lib/datastore/query.js');
2425
var queryProto = require('../testdata/proto_query.json');
2526

2627
describe('Query', function() {
27-
var ds = new datastore.Dataset({ projectId: 'my-project-id' });
28-
var dsWithNs = new datastore.Dataset({
29-
projectId: 'my-project-id',
30-
namespace: 'ns'
31-
});
32-
33-
it('should use undefined for all falsy namespace values', function() {
28+
it('should use null for all falsy namespace values', function() {
3429
[
35-
ds.createQuery('', 'Kind'),
36-
ds.createQuery(null, 'Kind'),
37-
ds.createQuery(undefined, 'Kind'),
38-
ds.createQuery(0, 'Kind')
30+
new Query('', 'Kind'),
31+
new Query(null, 'Kind'),
32+
new Query(undefined, 'Kind'),
33+
new Query(0, 'Kind'),
34+
new Query('Kind')
3935
].forEach(function(query) {
4036
assert.strictEqual(query.namespace, null);
37+
assert.equal(query.kinds, 'Kind');
4138
});
4239
});
4340

44-
it('should use default namespace if none is specified', function(done) {
45-
var q = ds.createQuery(['kind1']);
46-
assert.strictEqual(q.namespace, null);
47-
done();
48-
});
49-
50-
it('should use support custom namespaces', function(done) {
51-
var q = dsWithNs.createQuery(['kind1']);
52-
assert.equal(q.namespace, 'ns');
53-
done();
41+
it('should support custom namespaces', function() {
42+
var query = new Query('ns', ['kind1']);
43+
assert.equal(query.namespace, 'ns');
5444
});
5545

56-
it('should support querying multiple kinds', function(done) {
57-
var q = ds.createQuery(['kind1', 'kind2']);
58-
var qNS = dsWithNs.createQuery(['kind1', 'kind2']);
46+
it('should support querying multiple kinds', function() {
47+
var query = new Query(['kind1', 'kind2']);
48+
var queryWithNamespace = new Query('ns', ['kind1', 'kind2']);
5949

60-
assert.strictEqual(q.namespace, null);
61-
assert.equal(q.kinds[0], 'kind1');
62-
assert.equal(q.kinds[1], 'kind2');
50+
assert.strictEqual(query.namespace, null);
51+
assert.equal(query.kinds[0], 'kind1');
52+
assert.equal(query.kinds[1], 'kind2');
6353

64-
assert.equal(qNS.namespace, 'ns');
65-
assert.equal(qNS.kinds[0], 'kind1');
66-
assert.equal(qNS.kinds[1], 'kind2');
67-
done();
54+
assert.equal(queryWithNamespace.namespace, 'ns');
55+
assert.equal(queryWithNamespace.kinds[0], 'kind1');
56+
assert.equal(queryWithNamespace.kinds[1], 'kind2');
6857
});
6958

70-
it('should support field selection by field name', function(done) {
71-
var q = ds.createQuery(['kind1']).select(['name', 'title']);
72-
assert.equal(q.selectVal[0], 'name');
73-
assert.equal(q.selectVal[1], 'title');
74-
done();
59+
it('should support field selection by field name', function() {
60+
var query = new Query(['kind1'])
61+
.select(['name', 'title']);
62+
assert.equal(query.selectVal[0], 'name');
63+
assert.equal(query.selectVal[1], 'title');
7564
});
7665

77-
it('should support ancestor filtering', function(done) {
78-
var q = ds.createQuery(['kind1']).hasAncestor(['kind2', 123]);
79-
assert.equal(q.filters[0].name, '__key__');
80-
assert.equal(q.filters[0].op, 'HAS_ANCESTOR');
81-
assert.deepEqual(q.filters[0].val, ['kind2', 123]);
82-
done();
66+
it('should support ancestor filtering', function() {
67+
var query = new Query(['kind1'])
68+
.hasAncestor(['kind2', 123]);
69+
assert.equal(query.filters[0].name, '__key__');
70+
assert.equal(query.filters[0].op, 'HAS_ANCESTOR');
71+
assert.deepEqual(query.filters[0].val, ['kind2', 123]);
8372
});
8473

85-
it('should support multiple filters', function(done) {
74+
it('should support multiple filters', function() {
8675
var now = new Date();
87-
var q = ds.createQuery(['kind1'])
76+
var query = new Query(['kind1'])
8877
.filter('date <=', now)
8978
.filter('name =', 'Title')
9079
.filter('count >', 20);
91-
assert.equal(q.filters[0].name, 'date');
92-
assert.equal(q.filters[0].op, '<=');
93-
assert.strictEqual(q.filters[0].val, now);
94-
95-
assert.equal(q.filters[1].name, 'name');
96-
assert.equal(q.filters[1].op, '=');
97-
assert.strictEqual(q.filters[1].val, 'Title');
98-
99-
assert.equal(q.filters[2].name, 'count');
100-
assert.equal(q.filters[2].op, '>');
101-
assert.strictEqual(q.filters[2].val, 20);
102-
done();
80+
81+
assert.equal(query.filters[0].name, 'date');
82+
assert.equal(query.filters[0].op, '<=');
83+
assert.strictEqual(query.filters[0].val, now);
84+
85+
assert.equal(query.filters[1].name, 'name');
86+
assert.equal(query.filters[1].op, '=');
87+
assert.equal(query.filters[1].val, 'Title');
88+
89+
assert.equal(query.filters[2].name, 'count');
90+
assert.equal(query.filters[2].op, '>');
91+
assert.strictEqual(query.filters[2].val, 20);
10392
});
10493

105-
it('should support ordering asc and desc', function(done) {
106-
var q = ds.createQuery(['kind1']).order('+name').order('-count');
107-
assert.equal(q.orders[0].name, 'name');
108-
assert.equal(q.orders[0].sign, '+');
109-
assert.equal(q.orders[1].name, 'count');
110-
assert.equal(q.orders[1].sign, '-');
111-
done();
94+
it('should support ordering asc and desc', function() {
95+
var query = new Query(['kind1'])
96+
.order('+name')
97+
.order('-count');
98+
assert.equal(query.orders[0].name, 'name');
99+
assert.equal(query.orders[0].sign, '+');
100+
assert.equal(query.orders[1].name, 'count');
101+
assert.equal(query.orders[1].sign, '-');
112102
});
113103

114-
it('should throw error is invalid sort sign is provided', function(done) {
104+
it('should throw error is invalid sort sign is provided', function() {
115105
assert.throws(function() {
116-
ds.createQuery(['kind1']).order('*name');
106+
new Query(['kind1']).order('*name');
117107
}, /Invalid order pattern/);
118-
done();
119108
});
120109

121-
it('should provide pagination with offset and limit', function(done) {
122-
var q = ds.createQuery(['kind1']).offset(20).limit(100);
123-
assert.strictEqual(q.offsetVal, 20);
124-
assert.strictEqual(q.limitVal, 100);
125-
done();
110+
it('should provide pagination with offset and limit', function() {
111+
var query = new Query(['kind1'])
112+
.offset(20)
113+
.limit(100);
114+
assert.strictEqual(query.offsetVal, 20);
115+
assert.strictEqual(query.limitVal, 100);
126116
});
127117

128-
it('should allow page start and end tokens', function(done) {
129-
var q = ds.createQuery(['kind1']).start('abc123').end('def987');
130-
assert.strictEqual(q.startVal, 'abc123');
131-
assert.strictEqual(q.endVal, 'def987');
132-
done();
118+
it('should allow page start and end tokens', function() {
119+
var query = new Query(['kind1'])
120+
.start('abc123')
121+
.end('def987');
122+
assert.equal(query.startVal, 'abc123');
123+
assert.equal(query.endVal, 'def987');
133124
});
134125

135-
it('should be converted to a query proto successfully', function(done) {
136-
var q = ds.createQuery(['Kind'])
126+
it('should be converted to a query proto successfully', function() {
127+
var query = new Query(['Kind'])
137128
.select(['name', 'count'])
138129
.filter('count >=', datastore.int(5))
139130
.filter('name =', 'Burcu')
140131
.order('-count')
141132
.groupBy(['count'])
142133
.offset(5)
143134
.limit(10);
144-
assert.deepEqual(entity.queryToQueryProto(q), queryProto);
145-
done();
135+
assert.deepEqual(entity.queryToQueryProto(query), queryProto);
146136
});
147137
});

0 commit comments

Comments
 (0)