| 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);
 
- 				},
 
- 			},
 
- 		},
 
- 	},
 
- };
 
 
  |