markdown_test.js 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246
  1. 'use strict';
  2. if (!module.parent) return require.cache[__filename] = 0, (new(require('mocha'))()).addFile(__filename).ui('exports').run(process.exit);
  3. Error.prototype.showDiff = true; // enable mocha diffs (explicitly for now)
  4. var assert = require('assert'),
  5. // aggregate = require('../../../../'),
  6. md = require('../../../../lib/extras/markdown');
  7. exports.markdown = {
  8. '.getMarkdown()': {
  9. 'document source': {
  10. 'is $match': {
  11. 'should get markdown for single equality': function() {
  12. var actual = md.getMarkdown([
  13. {$match: {
  14. a: 123,
  15. }},
  16. ]),
  17. expected = [
  18. '0. find docs matching:',
  19. ' 0. `a` == `123`',
  20. ].join('\n') + '\n';
  21. assert.equal(actual, expected);
  22. },
  23. 'should get markdown for multiple equality (implicit $and)`': function() {
  24. var actual = md.getMarkdown([
  25. {$match: {
  26. a: 'foo',
  27. b: 'bar',
  28. }},
  29. ]),
  30. expected = [
  31. '0. find docs matching:',
  32. ' 0. all of:',
  33. ' 0. `a` == `"foo"`',
  34. ' 1. `b` == `"bar"`',
  35. ].join('\n') + '\n';
  36. assert.equal(actual, expected);
  37. },
  38. 'should get markdown for multiple equality (explicit $and)`': function() {
  39. var actual = md.getMarkdown([
  40. {$match: {
  41. $and: [
  42. {a: 'foo'},
  43. {b: 'bar'},
  44. ],
  45. }},
  46. ]),
  47. expected = [
  48. '0. find docs matching:',
  49. ' 0. all of:',
  50. ' 0. `a` == `"foo"`',
  51. ' 1. `b` == `"bar"`',
  52. ].join('\n') + '\n';
  53. assert.equal(actual, expected);
  54. },
  55. 'should get markdown for $nin': function() {
  56. var actual = md.getMarkdown([
  57. {$match: {
  58. a: {$nin: ['foo', 'bar']},
  59. }},
  60. ]),
  61. expected = [
  62. '0. find docs matching:',
  63. ' 0. not all of:',
  64. ' 0. `a` in `["foo", "bar"]`',
  65. ].join('\n') + '\n';
  66. assert.equal(actual, expected);
  67. },
  68. },
  69. 'is $group': {
  70. 'should get markdown if _id is constant': function() {
  71. var actual = md.getMarkdown([
  72. {$group: {
  73. _id: null,
  74. }},
  75. ]),
  76. expected = [
  77. '0. group docs into buckets:',
  78. ' 0. by `_id` which is from the constant `null`',
  79. ].join('\n') + '\n';
  80. assert.equal(actual, expected);
  81. },
  82. 'should get markdown if _id is path': function() {
  83. var actual = md.getMarkdown([
  84. {$group: {
  85. _id: '$_id',
  86. }},
  87. ]),
  88. expected = [
  89. '0. group docs into buckets:',
  90. ' 0. by `_id` which is from `_id`',
  91. ].join('\n') + '\n';
  92. assert.equal(actual, expected);
  93. },
  94. 'should get markdown if _id is complex': function() {
  95. var actual = md.getMarkdown([
  96. {$group: {
  97. _id: {
  98. fb: '$foo.bar',
  99. },
  100. }},
  101. ]),
  102. expected = [
  103. '0. group docs into buckets:',
  104. ' 0. by `_id` which is from:',
  105. ' 0. `fb` from `foo.bar`',
  106. ].join('\n') + '\n';
  107. assert.equal(actual, expected);
  108. },
  109. },
  110. 'is $project': {
  111. 'should get markdown for explicit _id': function() {
  112. var actual = md.getMarkdown([
  113. {$project: {
  114. _id: 1,
  115. }}
  116. ]),
  117. expected = [
  118. '0. for each doc build object:',
  119. ' 0. `_id` from `_id` (unchanged)',
  120. ].join('\n') + '\n';
  121. assert.equal(actual, expected);
  122. },
  123. 'should get markdown for implicit _id': function() {
  124. var actual = md.getMarkdown([
  125. {$project: {
  126. //_id: 1, //implied
  127. }},
  128. ]),
  129. expected = [
  130. '0. for each doc build object:',
  131. ' 0. `_id` from `_id` (unchanged)',
  132. ].join('\n') + '\n';
  133. assert.equal(actual, expected);
  134. },
  135. 'should get markdown for implicit _id and other': function() {
  136. var actual = md.getMarkdown([
  137. {$project: {
  138. other: true,
  139. }},
  140. ]),
  141. expected = [
  142. '0. for each doc build object:',
  143. ' 0. `_id` from `_id` (unchanged)',
  144. ' 1. `other` from `other` (unchanged)',
  145. ].join('\n') + '\n';
  146. assert.equal(actual, expected);
  147. },
  148. 'should get markdown for excluded _id': function() {
  149. var actual = md.getMarkdown([
  150. {$project: {
  151. _id: 0,
  152. }},
  153. ]),
  154. expected = [
  155. '0. for each doc empty object',
  156. ].join('\n') + '\n';
  157. assert.equal(actual, expected);
  158. },
  159. 'should get markdown for excluded _id and other': function() {
  160. var actual = md.getMarkdown([
  161. {$project: {
  162. _id: 0,
  163. other: true,
  164. }},
  165. ]),
  166. expected = [
  167. '0. for each doc build object:',
  168. ' 0. `other` from `other` (unchanged)',
  169. ].join('\n') + '\n';
  170. assert.equal(actual, expected);
  171. },
  172. 'should get markdown for computed _id and path': function() {
  173. var actual = md.getMarkdown([
  174. {$project: {
  175. _id: {$ifNull: ['$a', 2]},
  176. other: {$add: [1, 2]},
  177. }},
  178. ]),
  179. expected = [
  180. '0. for each doc build object:',
  181. ' 0. `_id` from `a` if not null or fallback to the constant `2`',
  182. ' 1. `other` from ( the constant `1` + the constant `2` )',
  183. ].join('\n') + '\n';
  184. assert.equal(actual, expected);
  185. },
  186. },
  187. 'is $sort': {
  188. 'should get markdown for simple path in order': function() {
  189. var actual = md.getMarkdown([
  190. {$sort: {
  191. foo: 1,
  192. }}
  193. ]),
  194. expected = [
  195. '0. sort docs by:',
  196. ' 0. `foo`, in order',
  197. ].join('\n') + '\n';
  198. assert.equal(actual, expected);
  199. },
  200. 'should get markdown for complex path in reverse order': function() {
  201. var actual = md.getMarkdown([
  202. {$sort: {
  203. "foo.bar": -1,
  204. }}
  205. ]),
  206. expected = [
  207. '0. sort docs by:',
  208. ' 0. `foo.bar`, in reverse order',
  209. ].join('\n') + '\n';
  210. assert.equal(actual, expected);
  211. },
  212. },
  213. },
  214. },
  215. };