Merge pull request #2032 from strongloop/safer-tests-step1-2.x

Safer tests - step1 [back-port to 2.x]
This commit is contained in:
Miroslav Bajtoš 2016-02-04 16:25:39 +01:00
commit 870e1010a8
5 changed files with 73 additions and 8 deletions

View File

@ -217,7 +217,10 @@ module.exports = function(grunt) {
grunt.registerTask('e2e-server', function() { grunt.registerTask('e2e-server', function() {
var done = this.async(); var done = this.async();
var app = require('./test/fixtures/e2e/app'); var app = require('./test/fixtures/e2e/app');
app.listen(3000, done); app.listen(0, function() {
process.env.PORT = this.address().port;
done();
});
}); });
grunt.registerTask('e2e', ['e2e-server', 'karma:e2e']); grunt.registerTask('e2e', ['e2e-server', 'karma:e2e']);

View File

@ -11,6 +11,12 @@ var CURRENT_USER = {email: 'current@test.test', password: 'test'};
var debug = require('debug')('loopback:test:access-control.integration'); var debug = require('debug')('loopback:test:access-control.integration');
describe('access control - integration', function() { describe('access control - integration', function() {
before(function(done) {
if (app.booting) {
return app.once('booted', done);
}
done();
});
lt.beforeEach.withApp(app); lt.beforeEach.withApp(app);

View File

@ -11,6 +11,12 @@ var debug = require('debug')('loopback:test:relations.integration');
var async = require('async'); var async = require('async');
describe('relations - integration', function() { describe('relations - integration', function() {
before(function(done) {
if (app.booting) {
return app.once('booted', done);
}
done();
});
lt.beforeEach.withApp(app); lt.beforeEach.withApp(app);
@ -91,6 +97,7 @@ describe('relations - integration', function() {
this.get(url) this.get(url)
.query({'filter': {'include' : 'pictures'}}) .query({'filter': {'include' : 'pictures'}})
.expect(200, function(err, res) { .expect(200, function(err, res) {
if (err) return done(err);
// console.log(res.body); // console.log(res.body);
expect(res.body.name).to.be.equal('Reader 1'); expect(res.body.name).to.be.equal('Reader 1');
expect(res.body.pictures).to.be.eql([ expect(res.body.pictures).to.be.eql([
@ -106,6 +113,7 @@ describe('relations - integration', function() {
this.get(url) this.get(url)
.query({'filter': {'include' : 'imageable'}}) .query({'filter': {'include' : 'imageable'}})
.expect(200, function(err, res) { .expect(200, function(err, res) {
if (err) return done(err);
// console.log(res.body); // console.log(res.body);
expect(res.body[0].name).to.be.equal('Picture 1'); expect(res.body[0].name).to.be.equal('Picture 1');
expect(res.body[1].name).to.be.equal('Picture 2'); expect(res.body[1].name).to.be.equal('Picture 2');
@ -119,6 +127,7 @@ describe('relations - integration', function() {
this.get(url) this.get(url)
.query({'filter': {'include' : {'relation': 'imageable', 'scope': { 'include' : 'team'}}}}) .query({'filter': {'include' : {'relation': 'imageable', 'scope': { 'include' : 'team'}}}})
.expect(200, function(err, res) { .expect(200, function(err, res) {
if (err) return done(err);
expect(res.body[0].name).to.be.equal('Picture 1'); expect(res.body[0].name).to.be.equal('Picture 1');
expect(res.body[1].name).to.be.equal('Picture 2'); expect(res.body[1].name).to.be.equal('Picture 2');
expect(res.body[0].imageable.name).to.be.eql('Reader 1'); expect(res.body[0].imageable.name).to.be.eql('Reader 1');
@ -133,6 +142,7 @@ describe('relations - integration', function() {
it('should invoke scoped methods remotely', function(done) { it('should invoke scoped methods remotely', function(done) {
this.get('/api/stores/superStores') this.get('/api/stores/superStores')
.expect(200, function(err, res) { .expect(200, function(err, res) {
if (err) return done(err);
expect(res.body).to.be.array; expect(res.body).to.be.array;
done(); done();
}); });
@ -369,7 +379,7 @@ describe('relations - integration', function() {
self.url = root.relUrl; self.url = root.relUrl;
self.patient = root.patient; self.patient = root.patient;
self.physician = root.physician; self.physician = root.physician;
done(); done(err);
}); });
}); });
@ -408,7 +418,7 @@ describe('relations - integration', function() {
self.url = root.relUrl; self.url = root.relUrl;
self.patient = root.patient; self.patient = root.patient;
self.physician = root.physician; self.physician = root.physician;
done(); done(err);
}); });
}); });
@ -453,7 +463,7 @@ describe('relations - integration', function() {
self.url = root.relUrl; self.url = root.relUrl;
self.patient = root.patient; self.patient = root.patient;
self.physician = root.physician; self.physician = root.physician;
done(); done(err);
}); });
}); });
@ -473,7 +483,7 @@ describe('relations - integration', function() {
'/patients/rel/' + '999'; '/patients/rel/' + '999';
self.patient = root.patient; self.patient = root.patient;
self.physician = root.physician; self.physician = root.physician;
done(); done(err);
}); });
}); });
@ -492,7 +502,7 @@ describe('relations - integration', function() {
self.url = root.relUrl; self.url = root.relUrl;
self.patient = root.patient; self.patient = root.patient;
self.physician = root.physician; self.physician = root.physician;
done(); done(err);
}); });
}); });
@ -547,7 +557,7 @@ describe('relations - integration', function() {
'/patients/' + root.patient.id; '/patients/' + root.patient.id;
self.patient = root.patient; self.patient = root.patient;
self.physician = root.physician; self.physician = root.physician;
done(); done(err);
}); });
}); });
@ -568,7 +578,7 @@ describe('relations - integration', function() {
'/patients/' + root.patient.id; '/patients/' + root.patient.id;
self.patient = root.patient; self.patient = root.patient;
self.physician = root.physician; self.physician = root.physician;
done(); done(err);
}); });
}); });
@ -684,6 +694,7 @@ describe('relations - integration', function() {
this.get(url) this.get(url)
.expect(200, function(err, res) { .expect(200, function(err, res) {
if (err) return done(err);
expect(res.body).to.have.property('products'); expect(res.body).to.have.property('products');
expect(res.body.products).to.eql([ expect(res.body.products).to.eql([
{ {
@ -703,6 +714,7 @@ describe('relations - integration', function() {
this.get(url) this.get(url)
.expect(200, function(err, res) { .expect(200, function(err, res) {
if (err) return done(err);
expect(res.body).to.have.property('products'); expect(res.body).to.have.property('products');
expect(res.body.products).to.eql([ expect(res.body.products).to.eql([
{ {
@ -764,6 +776,7 @@ describe('relations - integration', function() {
this.get(url) this.get(url)
.expect(200, function(err, res) { .expect(200, function(err, res) {
if (err) return done(err);
expect(res.body.name).to.be.equal('Group 1'); expect(res.body.name).to.be.equal('Group 1');
expect(res.body.poster).to.be.eql( expect(res.body.poster).to.be.eql(
{ url: 'http://image.url' } { url: 'http://image.url' }
@ -777,6 +790,7 @@ describe('relations - integration', function() {
this.get(url) this.get(url)
.expect(200, function(err, res) { .expect(200, function(err, res) {
if (err) return done(err);
expect(res.body).to.be.eql( expect(res.body).to.be.eql(
{ url: 'http://image.url' } { url: 'http://image.url' }
); );
@ -800,6 +814,7 @@ describe('relations - integration', function() {
this.get(url) this.get(url)
.expect(200, function(err, res) { .expect(200, function(err, res) {
if (err) return done(err);
expect(res.body).to.be.eql( expect(res.body).to.be.eql(
{ url: 'http://changed.url' } { url: 'http://changed.url' }
); );
@ -857,6 +872,7 @@ describe('relations - integration', function() {
this.get(url) this.get(url)
.expect(200, function(err, res) { .expect(200, function(err, res) {
if (err) return done(err);
expect(res.body.name).to.be.equal('List A'); expect(res.body.name).to.be.equal('List A');
expect(res.body.todoItems).to.be.eql([ expect(res.body.todoItems).to.be.eql([
{ content: 'Todo 1', id: 1 }, { content: 'Todo 1', id: 1 },
@ -871,6 +887,7 @@ describe('relations - integration', function() {
this.get(url) this.get(url)
.expect(200, function(err, res) { .expect(200, function(err, res) {
if (err) return done(err);
expect(res.body).to.be.eql([ expect(res.body).to.be.eql([
{ content: 'Todo 1', id: 1 }, { content: 'Todo 1', id: 1 },
{ content: 'Todo 2', id: 2 } { content: 'Todo 2', id: 2 }
@ -885,6 +902,7 @@ describe('relations - integration', function() {
this.get(url) this.get(url)
.expect(200, function(err, res) { .expect(200, function(err, res) {
if (err) return done(err);
expect(res.body).to.be.eql([ expect(res.body).to.be.eql([
{ content: 'Todo 2', id: 2 } { content: 'Todo 2', id: 2 }
]); ]);
@ -910,6 +928,7 @@ describe('relations - integration', function() {
this.get(url) this.get(url)
.expect(200, function(err, res) { .expect(200, function(err, res) {
if (err) return done(err);
expect(res.body).to.be.eql([ expect(res.body).to.be.eql([
{ content: 'Todo 1', id: 1 }, { content: 'Todo 1', id: 1 },
{ content: 'Todo 2', id: 2 }, { content: 'Todo 2', id: 2 },
@ -924,6 +943,7 @@ describe('relations - integration', function() {
this.get(url) this.get(url)
.expect(200, function(err, res) { .expect(200, function(err, res) {
if (err) return done(err);
expect(res.body).to.be.eql( expect(res.body).to.be.eql(
{ content: 'Todo 3', id: 3 } { content: 'Todo 3', id: 3 }
); );
@ -946,6 +966,7 @@ describe('relations - integration', function() {
this.get(url) this.get(url)
.expect(200, function(err, res) { .expect(200, function(err, res) {
if (err) return done(err);
expect(res.body).to.be.eql([ expect(res.body).to.be.eql([
{ content: 'Todo 1', id: 1 }, { content: 'Todo 1', id: 1 },
{ content: 'Todo 3', id: 3 } { content: 'Todo 3', id: 3 }
@ -957,6 +978,7 @@ describe('relations - integration', function() {
it('returns a 404 response when embedded model is not found', function(done) { it('returns a 404 response when embedded model is not found', function(done) {
var url = '/api/todo-lists/' + this.todoList.id + '/items/2'; var url = '/api/todo-lists/' + this.todoList.id + '/items/2';
this.get(url).expect(404, function(err, res) { this.get(url).expect(404, function(err, res) {
if (err) return done(err);
expect(res.body.error.status).to.be.equal(404); expect(res.body.error.status).to.be.equal(404);
expect(res.body.error.message).to.be.equal('Unknown "todoItem" id "2".'); expect(res.body.error.message).to.be.equal('Unknown "todoItem" id "2".');
expect(res.body.error.code).to.be.equal('MODEL_NOT_FOUND'); expect(res.body.error.code).to.be.equal('MODEL_NOT_FOUND');
@ -1044,6 +1066,7 @@ describe('relations - integration', function() {
this.get(url) this.get(url)
.expect(200, function(err, res) { .expect(200, function(err, res) {
if (err) return done(err);
expect(res.body.ingredientIds).to.eql([test.ingredient1]); expect(res.body.ingredientIds).to.eql([test.ingredient1]);
expect(res.body).to.not.have.property('ingredients'); expect(res.body).to.not.have.property('ingredients');
done(); done();
@ -1069,6 +1092,7 @@ describe('relations - integration', function() {
this.get(url) this.get(url)
.expect(200, function(err, res) { .expect(200, function(err, res) {
if (err) return done(err);
expect(res.body).to.be.eql([ expect(res.body).to.be.eql([
{ name: 'Chocolate', id: test.ingredient1 }, { name: 'Chocolate', id: test.ingredient1 },
{ name: 'Sugar', id: test.ingredient2 }, { name: 'Sugar', id: test.ingredient2 },
@ -1084,6 +1108,7 @@ describe('relations - integration', function() {
this.get(url) this.get(url)
.expect(200, function(err, res) { .expect(200, function(err, res) {
if (err) return done(err);
expect(res.body).to.be.eql([ expect(res.body).to.be.eql([
{ name: 'Chocolate', id: test.ingredient1 }, { name: 'Chocolate', id: test.ingredient1 },
{ name: 'Butter', id: test.ingredient3 } { name: 'Butter', id: test.ingredient3 }
@ -1099,6 +1124,7 @@ describe('relations - integration', function() {
this.get(url) this.get(url)
.expect(200, function(err, res) { .expect(200, function(err, res) {
if (err) return done(err);
expect(res.body).to.be.eql([ expect(res.body).to.be.eql([
{ name: 'Butter', id: test.ingredient3 } { name: 'Butter', id: test.ingredient3 }
]); ]);
@ -1113,6 +1139,7 @@ describe('relations - integration', function() {
this.get(url) this.get(url)
.expect(200, function(err, res) { .expect(200, function(err, res) {
if (err) return done(err);
expect(res.body.ingredientIds).to.eql([ expect(res.body.ingredientIds).to.eql([
test.ingredient1, test.ingredient3 test.ingredient1, test.ingredient3
]); ]);
@ -1131,6 +1158,7 @@ describe('relations - integration', function() {
this.get(url) this.get(url)
.expect(200, function(err, res) { .expect(200, function(err, res) {
if (err) return done(err);
expect(res.body).to.be.eql( expect(res.body).to.be.eql(
{ name: 'Butter', id: test.ingredient3 } { name: 'Butter', id: test.ingredient3 }
); );
@ -1146,6 +1174,7 @@ describe('relations - integration', function() {
this.get(url) this.get(url)
.expect(200, function(err, res) { .expect(200, function(err, res) {
if (err) return done(err);
expect(res.body.ingredientIds).to.eql(expected); expect(res.body.ingredientIds).to.eql(expected);
expect(res.body).to.not.have.property('ingredients'); expect(res.body).to.not.have.property('ingredients');
done(); done();
@ -1169,6 +1198,7 @@ describe('relations - integration', function() {
this.get(url) this.get(url)
.expect(200, function(err, res) { .expect(200, function(err, res) {
if (err) return done(err);
expect(res.body).to.be.eql([ expect(res.body).to.be.eql([
{ name: 'Chocolate', id: test.ingredient1 }, { name: 'Chocolate', id: test.ingredient1 },
{ name: 'Sugar', id: test.ingredient2 } { name: 'Sugar', id: test.ingredient2 }
@ -1183,6 +1213,7 @@ describe('relations - integration', function() {
this.get(url) this.get(url)
.expect(200, function(err, res) { .expect(200, function(err, res) {
if (err) return done(err);
expect(res.body).to.be.eql([ expect(res.body).to.be.eql([
{ name: 'Chocolate', id: test.ingredient1 } { name: 'Chocolate', id: test.ingredient1 }
]); ]);
@ -1210,6 +1241,7 @@ describe('relations - integration', function() {
this.get(url) this.get(url)
.expect(200, function(err, res) { .expect(200, function(err, res) {
if (err) return done(err);
expect(res.body).to.be.eql([ expect(res.body).to.be.eql([
{ name: 'Chocolate', id: test.ingredient1 }, { name: 'Chocolate', id: test.ingredient1 },
{ name: 'Sugar', id: test.ingredient2 } { name: 'Sugar', id: test.ingredient2 }
@ -1235,6 +1267,7 @@ describe('relations - integration', function() {
this.get(url) this.get(url)
.expect(200, function(err, res) { .expect(200, function(err, res) {
if (err) return done(err);
expect(res.body).to.be.eql([ expect(res.body).to.be.eql([
{ name: 'Sugar', id: test.ingredient2 } { name: 'Sugar', id: test.ingredient2 }
]); ]);
@ -1248,6 +1281,7 @@ describe('relations - integration', function() {
this.get(url) this.get(url)
.expect(200, function(err, res) { .expect(200, function(err, res) {
if (err) return done(err);
expect(res.body).to.be.eql([ expect(res.body).to.be.eql([
{ name: 'Chocolate', id: test.ingredient1 }, { name: 'Chocolate', id: test.ingredient1 },
{ name: 'Sugar', id: test.ingredient2 } { name: 'Sugar', id: test.ingredient2 }
@ -1261,6 +1295,7 @@ describe('relations - integration', function() {
this.get(url) this.get(url)
.expect(200, function(err, res) { .expect(200, function(err, res) {
if (err) return done(err);
expect(err).to.not.exist; expect(err).to.not.exist;
expect(res.body.name).to.equal('Photo 1'); expect(res.body.name).to.equal('Photo 1');
done(); done();
@ -1395,6 +1430,7 @@ describe('relations - integration', function() {
var test = this; var test = this;
this.get('/api/books/' + test.book.id + '/pages') this.get('/api/books/' + test.book.id + '/pages')
.expect(200, function(err, res) { .expect(200, function(err, res) {
if (err) return done(err);
expect(res.body).to.be.an.array; expect(res.body).to.be.an.array;
expect(res.body).to.have.length(1); expect(res.body).to.have.length(1);
expect(res.body[0].name).to.equal('Page 1'); expect(res.body[0].name).to.equal('Page 1');
@ -1406,6 +1442,7 @@ describe('relations - integration', function() {
var test = this; var test = this;
this.get('/api/pages/' + test.page.id + '/notes/' + test.note.id) this.get('/api/pages/' + test.page.id + '/notes/' + test.note.id)
.expect(200, function(err, res) { .expect(200, function(err, res) {
if (err) return done(err);
expect(res.headers['x-before']).to.equal('before'); expect(res.headers['x-before']).to.equal('before');
expect(res.headers['x-after']).to.equal('after'); expect(res.headers['x-after']).to.equal('after');
expect(res.body).to.be.an.object; expect(res.body).to.be.an.object;
@ -1418,6 +1455,7 @@ describe('relations - integration', function() {
var test = this; var test = this;
this.get('/api/books/unknown/pages/' + test.page.id + '/notes') this.get('/api/books/unknown/pages/' + test.page.id + '/notes')
.expect(404, function(err, res) { .expect(404, function(err, res) {
if (err) return done(err);
expect(res.body.error).to.be.an.object; expect(res.body.error).to.be.an.object;
var expected = 'could not find a model with id unknown'; var expected = 'could not find a model with id unknown';
expect(res.body.error.message).to.equal(expected); expect(res.body.error.message).to.equal(expected);
@ -1430,6 +1468,7 @@ describe('relations - integration', function() {
var test = this; var test = this;
this.get('/api/images/' + test.image.id + '/book/pages') this.get('/api/images/' + test.image.id + '/book/pages')
.end(function(err, res) { .end(function(err, res) {
if (err) return done(err);
expect(res.body).to.be.an.array; expect(res.body).to.be.an.array;
expect(res.body).to.have.length(1); expect(res.body).to.have.length(1);
expect(res.body[0].name).to.equal('Page 1'); expect(res.body[0].name).to.equal('Page 1');
@ -1441,6 +1480,7 @@ describe('relations - integration', function() {
var test = this; var test = this;
this.get('/api/images/' + test.image.id + '/book/pages/' + test.page.id) this.get('/api/images/' + test.image.id + '/book/pages/' + test.page.id)
.end(function(err, res) { .end(function(err, res) {
if (err) return done(err);
expect(res.body).to.be.an.object; expect(res.body).to.be.an.object;
expect(res.body.name).to.equal('Page 1'); expect(res.body.name).to.equal('Page 1');
done(); done();
@ -1451,6 +1491,7 @@ describe('relations - integration', function() {
var test = this; var test = this;
this.get('/api/books/' + test.book.id + '/pages/' + test.page.id + '/notes') this.get('/api/books/' + test.book.id + '/pages/' + test.page.id + '/notes')
.expect(200, function(err, res) { .expect(200, function(err, res) {
if (err) return done(err);
expect(res.body).to.be.an.array; expect(res.body).to.be.an.array;
expect(res.body).to.have.length(1); expect(res.body).to.have.length(1);
expect(res.body[0].text).to.equal('Page Note 1'); expect(res.body[0].text).to.equal('Page Note 1');
@ -1462,6 +1503,7 @@ describe('relations - integration', function() {
var test = this; var test = this;
this.get('/api/books/' + test.book.id + '/pages/' + test.page.id + '/notes/' + test.note.id) this.get('/api/books/' + test.book.id + '/pages/' + test.page.id + '/notes/' + test.note.id)
.expect(200, function(err, res) { .expect(200, function(err, res) {
if (err) return done(err);
expect(res.headers['x-before']).to.equal('before'); expect(res.headers['x-before']).to.equal('before');
expect(res.headers['x-after']).to.equal('after'); expect(res.headers['x-after']).to.equal('after');
expect(res.body).to.be.an.object; expect(res.body).to.be.an.object;
@ -1474,6 +1516,7 @@ describe('relations - integration', function() {
var test = this; var test = this;
this.get('/api/books/' + test.book.id + '/chapters/' + test.chapter.id + '/notes/' + test.cnote.id) this.get('/api/books/' + test.book.id + '/chapters/' + test.chapter.id + '/notes/' + test.cnote.id)
.expect(200, function(err, res) { .expect(200, function(err, res) {
if (err) return done(err);
expect(res.headers['x-before']).to.empty; expect(res.headers['x-before']).to.empty;
expect(res.headers['x-after']).to.empty; expect(res.headers['x-after']).to.empty;
done(); done();
@ -1497,6 +1540,7 @@ describe('relations - integration', function() {
var test = this; var test = this;
this.get('/api/books/' + test.book.id + '/pages/' + this.page.id + '/throws') this.get('/api/books/' + test.book.id + '/pages/' + this.page.id + '/throws')
.end(function(err, res) { .end(function(err, res) {
if (err) return done(err);
expect(res.body).to.be.an('object'); expect(res.body).to.be.an('object');
expect(res.body.error).to.be.an('object'); expect(res.body.error).to.be.an('object');
expect(res.body.error.name).to.equal('Error'); expect(res.body.error.name).to.equal('Error');

View File

@ -6,6 +6,12 @@ var app = require(path.join(SIMPLE_APP, 'server/server.js'));
var assert = require('assert'); var assert = require('assert');
describe('remoting - integration', function() { describe('remoting - integration', function() {
before(function(done) {
if (app.booting) {
return app.once('booted', done);
}
done();
});
lt.beforeEach.withApp(app); lt.beforeEach.withApp(app);
lt.beforeEach.givenModel('store'); lt.beforeEach.givenModel('store');

View File

@ -7,6 +7,12 @@ var app = require(path.join(SIMPLE_APP, 'server/server.js'));
var expect = require('chai').expect; var expect = require('chai').expect;
describe('users - integration', function() { describe('users - integration', function() {
before(function(done) {
if (app.booting) {
return app.once('booted', done);
}
done();
});
lt.beforeEach.withApp(app); lt.beforeEach.withApp(app);