| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246 |
- 'use strict';
- if (!module.parent) return require.cache[__filename] = 0, (new(require('mocha'))()).addFile(__filename).ui('exports').run(process.exit);
- Error.prototype.showDiff = true; // enable mocha diffs (explicitly for now)
- var assert = require('assert'),
- // aggregate = require('../../../../'),
- md = require('../../../../lib/extras/markdown');
- exports.markdown = {
- '.getMarkdown()': {
- 'document source': {
- 'is $match': {
- 'should get markdown for single equality': function() {
- var actual = md.getMarkdown([
- {$match: {
- a: 123,
- }},
- ]),
- expected = [
- '0. find docs matching:',
- ' 0. `a` == `123`',
- ].join('\n') + '\n';
- assert.equal(actual, expected);
- },
- 'should get markdown for multiple equality (implicit $and)`': function() {
- var actual = md.getMarkdown([
- {$match: {
- a: 'foo',
- b: 'bar',
- }},
- ]),
- expected = [
- '0. find docs matching:',
- ' 0. all of:',
- ' 0. `a` == `"foo"`',
- ' 1. `b` == `"bar"`',
- ].join('\n') + '\n';
- assert.equal(actual, expected);
- },
- 'should get markdown for multiple equality (explicit $and)`': function() {
- var actual = md.getMarkdown([
- {$match: {
- $and: [
- {a: 'foo'},
- {b: 'bar'},
- ],
- }},
- ]),
- expected = [
- '0. find docs matching:',
- ' 0. all of:',
- ' 0. `a` == `"foo"`',
- ' 1. `b` == `"bar"`',
- ].join('\n') + '\n';
- assert.equal(actual, expected);
- },
- 'should get markdown for $nin': function() {
- var actual = md.getMarkdown([
- {$match: {
- a: {$nin: ['foo', 'bar']},
- }},
- ]),
- expected = [
- '0. find docs matching:',
- ' 0. not all of:',
- ' 0. `a` in `["foo", "bar"]`',
- ].join('\n') + '\n';
- assert.equal(actual, expected);
- },
- },
- 'is $group': {
- 'should get markdown if _id is constant': function() {
- var actual = md.getMarkdown([
- {$group: {
- _id: null,
- }},
- ]),
- expected = [
- '0. group docs into buckets:',
- ' 0. by `_id` which is from the constant `null`',
- ].join('\n') + '\n';
- assert.equal(actual, expected);
- },
- 'should get markdown if _id is path': function() {
- var actual = md.getMarkdown([
- {$group: {
- _id: '$_id',
- }},
- ]),
- expected = [
- '0. group docs into buckets:',
- ' 0. by `_id` which is from `_id`',
- ].join('\n') + '\n';
- assert.equal(actual, expected);
- },
- 'should get markdown if _id is complex': function() {
- var actual = md.getMarkdown([
- {$group: {
- _id: {
- fb: '$foo.bar',
- },
- }},
- ]),
- expected = [
- '0. group docs into buckets:',
- ' 0. by `_id` which is from:',
- ' 0. `fb` from `foo.bar`',
- ].join('\n') + '\n';
- assert.equal(actual, expected);
- },
- },
- 'is $project': {
- 'should get markdown for explicit _id': function() {
- var actual = md.getMarkdown([
- {$project: {
- _id: 1,
- }}
- ]),
- expected = [
- '0. for each doc build object:',
- ' 0. `_id` from `_id` (unchanged)',
- ].join('\n') + '\n';
- assert.equal(actual, expected);
- },
- 'should get markdown for implicit _id': function() {
- var actual = md.getMarkdown([
- {$project: {
- //_id: 1, //implied
- }},
- ]),
- expected = [
- '0. for each doc build object:',
- ' 0. `_id` from `_id` (unchanged)',
- ].join('\n') + '\n';
- assert.equal(actual, expected);
- },
- 'should get markdown for implicit _id and other': function() {
- var actual = md.getMarkdown([
- {$project: {
- other: true,
- }},
- ]),
- expected = [
- '0. for each doc build object:',
- ' 0. `_id` from `_id` (unchanged)',
- ' 1. `other` from `other` (unchanged)',
- ].join('\n') + '\n';
- assert.equal(actual, expected);
- },
- 'should get markdown for excluded _id': function() {
- var actual = md.getMarkdown([
- {$project: {
- _id: 0,
- }},
- ]),
- expected = [
- '0. for each doc empty object',
- ].join('\n') + '\n';
- assert.equal(actual, expected);
- },
- 'should get markdown for excluded _id and other': function() {
- var actual = md.getMarkdown([
- {$project: {
- _id: 0,
- other: true,
- }},
- ]),
- expected = [
- '0. for each doc build object:',
- ' 0. `other` from `other` (unchanged)',
- ].join('\n') + '\n';
- assert.equal(actual, expected);
- },
- 'should get markdown for computed _id and path': function() {
- var actual = md.getMarkdown([
- {$project: {
- _id: {$ifNull: ['$a', 2]},
- other: {$add: [1, 2]},
- }},
- ]),
- expected = [
- '0. for each doc build object:',
- ' 0. `_id` from `a` if not null or fallback to the constant `2`',
- ' 1. `other` from ( the constant `1` + the constant `2` )',
- ].join('\n') + '\n';
- assert.equal(actual, expected);
- },
- },
- 'is $sort': {
- 'should get markdown for simple path in order': function() {
- var actual = md.getMarkdown([
- {$sort: {
- foo: 1,
- }}
- ]),
- expected = [
- '0. sort docs by:',
- ' 0. `foo`, in order',
- ].join('\n') + '\n';
- assert.equal(actual, expected);
- },
- 'should get markdown for complex path in reverse order': function() {
- var actual = md.getMarkdown([
- {$sort: {
- 'foo.bar': -1,
- }}
- ]),
- expected = [
- '0. sort docs by:',
- ' 0. `foo.bar`, in reverse order',
- ].join('\n') + '\n';
- assert.equal(actual, expected);
- },
- },
- },
- },
- };
|