Skip to content

Commit 1a22ffa

Browse files
committed
1 parent 241af33 commit 1a22ffa

File tree

2 files changed

+70
-0
lines changed

2 files changed

+70
-0
lines changed

src/firestore-document.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,24 @@ MockFirestoreDocument.prototype.delete = function (callback) {
165165
});
166166
};
167167

168+
/**
169+
* Fetches the subcollections that are direct children of the document.
170+
* @see https://cloud.google.com/nodejs/docs/reference/firestore/0.15.x/DocumentReference#getCollections
171+
*/
172+
MockFirestoreDocument.prototype.getCollections = function () {
173+
var err = this._nextErr('getCollections');
174+
var self = this;
175+
return new Promise(function (resolve, reject) {
176+
self._defer('getCollections', _.toArray(arguments), function () {
177+
if (err === null) {
178+
resolve(_.toArray(this.children));
179+
} else {
180+
reject(err);
181+
}
182+
});
183+
});
184+
};
185+
168186
MockFirestoreDocument.prototype._hasChild = function (key) {
169187
return _.isObject(this.data) && _.has(this.data, key);
170188
};

test/unit/firestore-document.js

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -349,4 +349,56 @@ describe('MockFirestoreDocument', function () {
349349
expect(result).to.eventually.equal(null);
350350
});
351351
});
352+
353+
describe('#getCollections', function () {
354+
beforeEach(function () {
355+
db.doc('doc/subcol/subcol-doc').set({ foo: 'bar' });
356+
db.doc('doc/subcol2/subcol-doc').set({ foo: 'bar' });
357+
db.doc('doc/subcol/subcol-doc/deep-col/deep-doc').set({ foo: 'bar' });
358+
db.doc('doc/subcol/subcol-doc/deep-col2/deep-doc').set({ foo: 'bar' });
359+
db.flush();
360+
});
361+
afterEach(function () {
362+
db.doc('doc/subcol/subcol-doc').delete();
363+
db.doc('doc/subcol2/subcol-doc').delete();
364+
db.doc('doc/subcol/subcol-doc/deep-col/deep-doc').delete();
365+
db.doc('doc/subcol/subcol-doc/deep-col2/deep-doc').delete();
366+
db.flush();
367+
});
368+
369+
context('when present', function () {
370+
it('returns collections of document', function (done) {
371+
db.doc('doc').getCollections().then(function (colRefs) {
372+
expect(colRefs).to.be.an('array');
373+
expect(colRefs).to.have.length(2);
374+
expect(colRefs[0].path).to.equal('doc/subcol');
375+
expect(colRefs[1].path).to.equal('doc/subcol2');
376+
done();
377+
});
378+
db.flush();
379+
});
380+
381+
it('returns deeply nested collections of document', function (done) {
382+
db.doc('doc/subcol/subcol-doc').getCollections().then(function (colRefs) {
383+
expect(colRefs).to.be.an('array');
384+
expect(colRefs).to.have.length(2);
385+
expect(colRefs[0].path).to.equal('doc/subcol/subcol-doc/deep-col');
386+
expect(colRefs[1].path).to.equal('doc/subcol/subcol-doc/deep-col2');
387+
done();
388+
});
389+
db.flush();
390+
});
391+
});
392+
393+
context('when not present', function () {
394+
it('returns deeply nested collections of document', function (done) {
395+
db.doc('not-existing').getCollections().then(function (colRefs) {
396+
expect(colRefs).to.be.an('array');
397+
expect(colRefs).to.have.length(0);
398+
done();
399+
});
400+
db.flush();
401+
});
402+
});
403+
});
352404
});

0 commit comments

Comments
 (0)