GeoNearDocumentSource_test.js 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. "use strict";
  2. if (!module.parent) return require.cache[__filename] = 0, (new(require("mocha"))()).addFile(__filename).ui("exports").run(process.exit);
  3. var assert = require("assert"),
  4. GeoNearDocumentSource = require("../../../../lib/pipeline/documentSources/GeoNearDocumentSource"),
  5. CursorDocumentSource = require("../../../../lib/pipeline/documentSources/CursorDocumentSource"),
  6. ArrayRunner = require("../../../../lib/query/ArrayRunner"),
  7. FieldPath = require("../../../../lib/pipeline/FieldPath");
  8. function createGeoNear(ctx) {
  9. var ds = new GeoNearDocumentSource(ctx);
  10. return ds;
  11. }
  12. function addSource(ds, data) {
  13. var cds = new CursorDocumentSource(null, new ArrayRunner(data), null);
  14. ds.setSource(cds);
  15. }
  16. module.exports = {
  17. "GeoNearDocumentSource": {
  18. "constructor()":{
  19. "should not throw when constructing without args":function() {
  20. assert.doesNotThrow(function(){
  21. createGeoNear();
  22. });
  23. },
  24. "check defaults":function() {
  25. var gnds = createGeoNear();
  26. assert.equal(gnds.coordsIsArray, false);
  27. assert.equal(gnds.limit, 100);
  28. assert.equal(gnds.maxDistance, -1.0);
  29. assert.equal(gnds.spherical, false);
  30. assert.equal(gnds.distanceMultiplier, 1.0);
  31. assert.equal(gnds.uniqueDocs, true);
  32. }
  33. },
  34. "#getSourceName()":{
  35. "should return the correct source name; $geoNear": function() {
  36. var gnds = createGeoNear();
  37. assert.strictEqual(gnds.getSourceName(), "$geoNear");
  38. }
  39. },
  40. "#getNext()":{
  41. "callback is required":function() {
  42. var gnds = createGeoNear();
  43. assert.throws(gnds.getNext.bind(gnds));
  44. }
  45. },
  46. "#setSource()":{
  47. "check that setting source of GeoNearDocumentSource throws error":function() {
  48. var input = [{}];
  49. var gnds = createGeoNear();
  50. assert.throws(function(){
  51. addSource(gnds, input);
  52. });
  53. }
  54. },
  55. "#createFromJson()":{
  56. "method creates GeoNearDocumentSource with appropriate options":function() {
  57. var opts = {
  58. // example options
  59. near:[40.724, -73.997],
  60. limit:25,
  61. query:{type:"public"},
  62. distanceField: "dist.calculated",
  63. maxDistance:0.8,
  64. uniqueDocs:true,
  65. includeLocs:"dist.location"
  66. },
  67. gnds = GeoNearDocumentSource.createFromJson(opts);
  68. assert.equal(gnds.source, null);
  69. assert.equal(gnds.limit, opts.limit);
  70. assert.deepEqual(gnds.query, opts.query);
  71. assert.ok(gnds.distanceField instanceof FieldPath);
  72. assert.equal(gnds.maxDistance, opts.maxDistance);
  73. assert.equal(gnds.uniqueDocs, opts.uniqueDocs);
  74. assert.ok(gnds.includeLocs instanceof FieldPath);
  75. }
  76. }
  77. }
  78. };