Skip to content

Instantly share code, notes, and snippets.

@voitau
Last active August 29, 2015 14:07
Show Gist options
  • Save voitau/f03ea7564ee77ac5b6a5 to your computer and use it in GitHub Desktop.
Save voitau/f03ea7564ee77ac5b6a5 to your computer and use it in GitHub Desktop.
LoopBack: findOne() returns non-empty result if value of filter criteria is undefined
{
"name": "Car",
"plural": "Cars",
"base": "PersistedModel",
"properties": {
"number": {
"type": "string",
"required": true
}
},
"validations": [],
"relations": {},
"acls": [],
"methods": []
}
var app = require('../server/server');
var request = require('supertest');
var assert = require('assert');
describe('Create and query car', function() {
var newCar = { number: "1234" };
var Car = app.models.Car;
before(function() {
Car.create(newCar);
});
describe('REST API', function() {
it('should find by existing number', function (done) {
request(app)
.get('/api/cars/findOne?filter[where][number]=1234')
.set('Content-Type', 'application/json')
.expect(200)
.end(function (err, res) {
if (err) {
return done(err);
}
assert.equal(res.body.number, newCar.number);
done();
});
});
it('should find any if query number is not specified', function(done) {
request(app)
.get('/api/cars/findOne')
.set('Content-Type', 'application/json')
.expect(200)
.end(function (err, res) {
if (err) {
return done(err);
}
assert.equal(res.body.number, newCar.number);
done();
});
});
it('should not find if query number is empty', function(done) {
request(app)
.get('/api/cars/findOne?filter[where][number]=')
.set('Content-Type', 'application/json')
.expect(404)
.end(function (err, res) {
if (err) {
return done(err);
}
done();
});
});
});
describe('NODE API', function() {
it('should find by existing number', function (done) {
Car.findOne({ where: { number: "1234" }}, function(err, car) {
if (err) {
return done(err);
} else {
assert.equal(car.number, newCar.number);
done();
}
});
});
it('should find if query not specified', function(done) {
Car.findOne(function(err, car) {
if (err) {
return done(err);
} else {
assert.equal(car.number, newCar.number);
done();
}
});
});
it('should not find if query number is empty string', function(done) {
Car.findOne({ where: { number: "" }}, function(err, car) {
if (err) {
return done(err);
} else {
assert.ok(car == null);
done();
}
});
});
it('should not find if query number is "undefined"', function(done) {
Car.findOne({ where: { number: undefined }}, function(err, car) {
if (err) {
return done(err);
} else {
assert.ok(car == null, "Found car by incomplete query");
done();
}
});
});
});
});
$ mocha tests/*
Create and query car
REST API
✓ should find by existing number
✓ should find any if query number is not specified
✓ should not find if query number is empty
NODE API
✓ should find by existing number
✓ should find if query not specified
✓ should not find if query number is empty string
1) should not find if query number is "undefined"
6 passing (41ms)
1 failing
1) Create and query car NODE API should not find if query number is "undefined":
Uncaught AssertionError: Found car by incomplete query
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment