Jelajahi Sumber

refs #5133: add test cases to geoNearDocSource

Patrick Rigney 12 tahun lalu
induk
melakukan
4ffceddb4c

+ 4 - 4
lib/pipeline/documentSources/GeoNearDocumentSource.js

@@ -86,18 +86,18 @@ proto.serialize = function(explain) {
 
 klass.createFromJson = function(jsonElement, ctx) {
 	var out = new GeoNearDocumentSource(ctx);
-	out.parseOptions(jsonElement);
+	out.parseOptions(JSON.parse(jsonElement));
 	return out;
 };
 
 proto.parseOptions = function(options) {
+	
 	// near and distanceField are required
-
-	if (!options.near || options.near instanceof Array) 
+	if (!options.near || !Array.isArray(options.near))
 		throw new Error('code 16605; $geoNear requires a \'near\' option as an Array');
 	this.coordsIsArray = options.near instanceof Array; // TODO: array? object?
 
-	if (typeof options.distanceField === 'string')
+	if (typeof options.distanceField !== 'string')
 		throw new Error('code 16606: $geoNear  a \'distanceNear\' option as a String');
 	this.distanceField = new FieldPath(options.distanceField);
 

+ 28 - 2
test/lib/pipeline/documentSources/GeoNearDocumentSource.js

@@ -3,7 +3,8 @@ var assert = require("assert"),
 	DocumentSource = require("../../../../lib/pipeline/documentSources/DocumentSource"),
 	GeoNearDocumentSource = require("../../../../lib/pipeline/documentSources/GeoNearDocumentSource"),
 	CursorDocumentSource = require("../../../../lib/pipeline/documentSources/CursorDocumentSource"),
-	Cursor = require("../../../../lib/Cursor");
+	Cursor = require("../../../../lib/Cursor"),
+	FieldPath = require("../../../../lib/pipeline/FieldPath");
 
 var createGeoNear = function(ctx) {
 	var ds = new GeoNearDocumentSource(ctx);
@@ -65,8 +66,33 @@ module.exports = {
 				});
 			}
 
-		}
+		},
 
+		"#createFromJson()":{
+
+			"method creates GeoNearDocumentSource with appropriate options":function() {
+				var optsObj = {
+						// example options
+						near:[40.724, -73.997],
+						limit:25,
+						query:{type:'public'},
+						distanceField: "dist.calculated",
+						maxDistance:0.8,
+						uniqueDocs:true,
+						includeLocs:"dist.location"
+					},
+					optsStr = JSON.stringify(optsObj),
+					gnds = GeoNearDocumentSource.createFromJson(optsStr);
+
+				assert.equal(gnds.source, null);
+				assert.equal(gnds.limit, optsObj.limit);
+				assert.deepEqual(gnds.query, optsObj.query);
+				assert.ok(gnds.distanceField instanceof FieldPath);
+				assert.equal(gnds.maxDistance, optsObj.maxDistance);
+				assert.equal(gnds.uniqueDocs, optsObj.uniqueDocs);
+				assert.ok(gnds.includeLocs instanceof FieldPath);
+			}
+		}
 	}
 };