From 33bb8fc4b61e4d7efedfaadd704ac66d08c43e9e Mon Sep 17 00:00:00 2001 From: Douglas Christopher Wilson Date: Mon, 8 Sep 2014 20:51:32 -0400 Subject: [PATCH] examples: fix up route-separation code closes #2341 --- examples/route-separation/index.js | 12 +++- examples/route-separation/user.js | 6 +- test/acceptance/route-separation.js | 97 +++++++++++++++++++++++++++++ 3 files changed, 111 insertions(+), 4 deletions(-) create mode 100644 test/acceptance/route-separation.js diff --git a/examples/route-separation/index.js b/examples/route-separation/index.js index 2559f788..bac61ea8 100644 --- a/examples/route-separation/index.js +++ b/examples/route-separation/index.js @@ -7,15 +7,23 @@ var app = express(); var logger = require('morgan'); var cookieParser = require('cookie-parser'); var bodyParser = require('body-parser'); +var methodOverride = require('method-override'); var site = require('./site'); var post = require('./post'); var user = require('./user'); +module.exports = app; + // Config app.set('view engine', 'jade'); app.set('views', __dirname + '/views'); -app.use(logger('dev')); + +/* istanbul ignore next */ +if (!module.parent) { + app.use(express.logger('dev')); +} + app.use(methodOverride('_method')); app.use(cookieParser()); app.use(bodyParser.urlencoded({ extended: true })); @@ -27,7 +35,7 @@ app.get('/', site.index); // User -app.all('/users', user.list); +app.get('/users', user.list); app.all('/user/:id/:op?', user.load); app.get('/user/:id', user.view); app.get('/user/:id/view', user.view); diff --git a/examples/route-separation/user.js b/examples/route-separation/user.js index a5c20410..ef79b343 100644 --- a/examples/route-separation/user.js +++ b/examples/route-separation/user.js @@ -15,7 +15,9 @@ exports.load = function(req, res, next){ if (req.user) { next(); } else { - next(new Error('cannot find user ' + id)); + var err = new Error('cannot find user ' + id); + err.status = 404; + next(err); } }; @@ -40,4 +42,4 @@ exports.update = function(req, res){ req.user.name = user.name; req.user.email = user.email; res.redirect('back'); -}; \ No newline at end of file +}; diff --git a/test/acceptance/route-separation.js b/test/acceptance/route-separation.js new file mode 100644 index 00000000..867fd295 --- /dev/null +++ b/test/acceptance/route-separation.js @@ -0,0 +1,97 @@ + +var app = require('../../examples/route-separation') +var request = require('supertest') + +describe('route-separation', function () { + describe('GET /', function () { + it('should respond with index', function (done) { + request(app) + .get('/') + .expect(200, /Route Separation Example/, done) + }) + }) + + describe('GET /users', function () { + it('should list users', function (done) { + request(app) + .get('/users') + .expect(/TJ/) + .expect(/Tobi/) + .expect(200, done) + }) + }) + + describe('GET /user/:id', function () { + it('should get a user', function (done) { + request(app) + .get('/user/0') + .expect(200, /Viewing user TJ/, done) + }) + + it('should 404 on missing user', function (done) { + request(app) + .get('/user/10') + .expect(404, done) + }) + }) + + describe('GET /user/:id/view', function () { + it('should get a user', function (done) { + request(app) + .get('/user/0/view') + .expect(200, /Viewing user TJ/, done) + }) + + it('should 404 on missing user', function (done) { + request(app) + .get('/user/10/view') + .expect(404, done) + }) + }) + + describe('GET /user/:id/edit', function () { + it('should get a user to edit', function (done) { + request(app) + .get('/user/0/edit') + .expect(200, /Editing user TJ/, done) + }) + }) + + describe('PUT /user/:id/edit', function () { + it('should edit a user', function (done) { + request(app) + .put('/user/0/edit') + .set('Content-Type', 'application/x-www-form-urlencoded') + .send({ user: { name: 'TJ', email: 'tj-invalid@vision-media.ca' } }) + .expect(302, function (err) { + if (err) return done(err) + request(app) + .get('/user/0') + .expect(200, /tj-invalid@vision-media\.ca/, done) + }) + }) + }) + + describe('POST /user/:id/edit?_method=PUT', function () { + it('should edit a user', function (done) { + request(app) + .post('/user/1/edit?_method=PUT') + .set('Content-Type', 'application/x-www-form-urlencoded') + .send({ user: { name: 'Tobi', email: 'tobi-invalid@vision-media.ca' } }) + .expect(302, function (err) { + if (err) return done(err) + request(app) + .get('/user/1') + .expect(200, /tobi-invalid@vision-media\.ca/, done) + }) + }) + }) + + describe('GET /posts', function () { + it('should get a list of posts', function (done) { + request(app) + .get('/posts') + .expect(200, /Posts/, done) + }) + }) +})