GeoNearDocumentSource.js 2.6 KB

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