GeoNearDocumentSource.js 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  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. ArrayRunner = require("../../../../lib/query/ArrayRunner"),
  7. FieldPath = require("../../../../lib/pipeline/FieldPath");
  8. var createGeoNear = function(ctx) {
  9. var ds = new GeoNearDocumentSource(ctx);
  10. return ds;
  11. };
  12. var addSource = 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. var gnds = 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. };
  79. if (!module.parent)(new(require("mocha"))()).ui("exports").reporter("spec").addFile(__filename).grep(process.env.MOCHA_GREP || '').run(process.exit);