Skip to content

Commit

Permalink
After writing first blog post
Browse files Browse the repository at this point in the history
  • Loading branch information
marcusoftnet committed Apr 21, 2015
1 parent 2eddeee commit febba76
Show file tree
Hide file tree
Showing 8 changed files with 181 additions and 79 deletions.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
"main": "app.js",
"scripts": {
"start": "node --harmony app.js",
"test": "./node_modules/mocha/bin/mocha --harmony-generators test.js -u bdd -R spec"
"test": "./node_modules/mocha/bin/mocha --harmony-generators -u bdd -R spec"
},
"author": "Marcus Hammarberg",
"license": "BSD-2-Clause",
Expand Down
78 changes: 0 additions & 78 deletions test.js

This file was deleted.

16 changes: 16 additions & 0 deletions test/testHelpers.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
var co = require('co');

var app = require('../app.js');
module.exports.request = require('supertest').agent(app.listen());

var users = require('../userRoutes.js').users;
module.exports.users = users;

module.exports.removeAll = function(done){
co(function *(){
yield users.remove({});
// and other things we need to clean up
})(done);
};

module.exports.test_user = { name: 'Marcus', city : 'Bandung, Indonesia'};
31 changes: 31 additions & 0 deletions test/user.del.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
var co = require('co');
var helpers = require('./testHelpers.js');
var users = helpers.users;
var request = helpers.request;

describe('DEL to /user/:id', function(){

var test_user = {};

beforeEach(function (done) {
test_user = helpers.test_user;
helpers.removeAll(done);
});

afterEach(function (done) {
helpers.removeAll(done);
});

it('deletes an existing user', function(done){
co(function *() {
// Insert test user in database
var user = yield users.insert(test_user);
var userUrl = '/user/' + user._id;

// Delete the user
request
.del(userUrl)
.expect(200, done);
})();
});
});
35 changes: 35 additions & 0 deletions test/user.get.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
var co = require('co');
var helpers = require('./testHelpers.js');
var users = helpers.users;
var request = helpers.request;

describe('GET /user/:id ', function(){

var test_user = {};

beforeEach(function (done) {
test_user = helpers.test_user;
helpers.removeAll(done);
});

afterEach(function (done) {
helpers.removeAll(done);
});

it('returns JSON for existing user', function (done) {
co(function *() {
// Insert test user in database
var user = yield users.insert(test_user);
var userUrl = '/user/' + user._id;

// Get
request
.get(userUrl)
.set('Accept', 'application/json')
.expect('Content-Type', /json/)
.expect(/Marcus/)
.expect(/Bandung, Indonesia/)
.expect(200, done);
})();
});
});
46 changes: 46 additions & 0 deletions test/user.post.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
var helpers = require('./testHelpers.js');
var users = helpers.users;
var request = helpers.request;

describe('POST to /user', function(){

var test_user = {};

beforeEach(function (done) {
test_user = helpers.test_user;
helpers.removeAll(done);
});

afterEach(function (done) {
helpers.removeAll(done);
});

it('creates a new user for complete posted data', function(done){
// Post
request
.post('/user')
.send(test_user)
.expect('location', /^\/user\/[0-9a-fA-F]{24}$/) // Mongo Object Id /user/234234523562512512
.expect(200, done);
});

it('returns validation error if name is not present', function(done){
var u = { city : "A city without a user name"};

request
.post('/user')
.send(u)
.expect('ValidationError', "Name is required")
.expect(200, done);
});

it('returns validation error if city is not present', function(done){
var u = { name : "A name without a city"};

request
.post('/user')
.send(u)
.expect('ValidationError', "City is required")
.expect(200, done);
});
});
32 changes: 32 additions & 0 deletions test/user.update.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
var co = require('co');
var helpers = require('./testHelpers.js');
var users = helpers.users;
var request = helpers.request;

describe('PUT to /user', function(){

var test_user = {};

beforeEach(function (done) {
test_user = helpers.test_user;
helpers.removeAll(done);
});

afterEach(function (done) {
helpers.removeAll(done);
});

it('updates an existing user for complete put data', function(done){
co(function *() {
// Insert test user in database
var user = yield users.insert(test_user);
var userUrl = '/user/' + user._id;

request
.put(userUrl)
.send({name: 'Marcus v2', City: 'Bandung Updated'})
.expect('location', userUrl)
.expect(204, done);
})();
});
});
20 changes: 20 additions & 0 deletions userRoutes.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,18 @@ module.exports.users = users;
module.exports.add = function * () {
var postedUser = yield parse(this);

if(!exists(postedUser.name)){
this.set('ValidationError', 'Name is required');
this.status = 200;
return;
};

if(!exists(postedUser.city)){
this.set('ValidationError', 'City is required');
this.status = 200;
return;
};

var insertedUser = yield users.insert(postedUser);

this.set("location", "/user/" + insertedUser._id);
Expand All @@ -33,4 +45,12 @@ module.exports.update = function * (id) {
module.exports.remove = function * (id) {
yield users.remove({_id : id});
this.status = 200;
};

var exists = function (value) {
if(value === undefined)
return false;
if(value === null)
return false;
return true;
};

0 comments on commit febba76

Please sign in to comment.