Skip to content

Commit

Permalink
promisifyAll Model and unit test
Browse files Browse the repository at this point in the history
  • Loading branch information
wbruno committed Mar 31, 2015
1 parent 5cfacb0 commit d8b6065
Show file tree
Hide file tree
Showing 4 changed files with 128 additions and 19 deletions.
3 changes: 2 additions & 1 deletion crud-nodejs/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ app.use(methodOverride('_method'));
app.use('/', routes);



var server = app.listen(3000, function () {

var host = server.address().address;
Expand All @@ -25,3 +24,5 @@ var server = app.listen(3000, function () {
console.log('Example app listening at http://%s:%s', host, port);

});

module.exports = app;
55 changes: 38 additions & 17 deletions crud-nodejs/controller/ProductsController.js
Original file line number Diff line number Diff line change
@@ -1,50 +1,71 @@
var ProductsModel = require('../model/ProductsModel');
var Promise = require('bluebird');


function ProductsController(Model) {
this.Model = Model;
this.Model = Promise.promisifyAll(Model);
}

ProductsController.prototype.create = function(req, res) {
var data = req.body;

this.Model.create(data, function(err, result) {
res.json(result);
});
this.Model.createAsync(data)
.then(function(result) {
res.json(result);
})
.catch(function(err) {
console.log(err)
});
};

ProductsController.prototype.findOne = function(req, res) {
var _id = req.params._id;

this.Model.findOne(_id, function(err, result) {
res.json(result);
})

this.Model.findOneAsync(_id)
.then(function(result) {
res.json(result);
})
.catch(function(err) {
console.log(err)
});
};

ProductsController.prototype.findAll = function(req, res) {
var data = req.body;

this.Model.findAll(function(err, result) {
res.json(result);
});
this.Model.findAllAsync()
.then(function(result) {
res.json(result);
})
.catch(function(err) {
console.log(err)
});
};

ProductsController.prototype.update = function(req, res) {
var data = req.body,
_id = req.params.id;

this.Model.update(data, _id, function(err, result) {
res.json(result);
});
this.Model.updateAsync(data, _id)
.then(function(result) {
res.json(result);
})
.catch(function(err) {
console.log(err)
});
};


ProductsController.prototype.delete = function(req, res) {
var _id = req.params.id;

this.Model.delete(_id, function(err, result) {
res.json(result);
});
this.Model.deleteAsync(_id)
.then(function(result) {
res.json(result);
})
.catch(function(err) {
console.log(err)
});
};

module.exports = new ProductsController(ProductsModel);
7 changes: 6 additions & 1 deletion crud-nodejs/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
"main": "app.js",
"scripts": {
"start": "nodemon app.js",
"test": "echo \"Error: no test specified\" && exit 1"
"test": "node_modules/mocha/bin/mocha tests/*"
},
"repository": {
"type": "git",
Expand All @@ -18,9 +18,14 @@
},
"homepage": "https://github.com/wbruno/boas-praticas-js",
"dependencies": {
"bluebird": "^2.9.21",
"body-parser": "^1.12.2",
"express": "^4.12.3",
"method-override": "^2.3.2",
"mongojs": "^0.18.2"
},
"devDependencies": {
"mocha": "^2.2.1",
"supertest": "^0.15.0"
}
}
82 changes: 82 additions & 0 deletions crud-nodejs/tests/products.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
var request = require('supertest'),
assert = require('assert'),
app = require('../app'),
db = require('../Db/mongo'),
_id;


describe('Product Endpoints', function(){
beforeEach(function(done) {
db.collection('products').remove({}, done);
});

it.only('GET /products', function(done){
db.collection('products').insert({ 'name': 'Walter White' }, function(){
db.collection('products').insert({ 'name': 'Goku' }, function(){

request(app)
.get('/products')
.expect(200)
.end(function(err, res){
var data = res.body;

assert.equal(data[0].name, 'Walter White');
assert.equal(data[1].name, 'Goku');
assert.equal(data.length, 2);
done();
});
});
});
});

it('GET /products/:id', function(done){
request(app)
.get('/products/' + _id)
.expect(200)
.end(function(err, res){
var data = res.body;

assert.equal(data.length, 4);
done();
});
});

it('POST /products', function(done){
request(app)
.post('/products')
.send({ 'name': 'Other name', 'price': 19.90 })
.expect(200)
.end(function(err, res){
var data = res.body;

assert.equal(data.length, 4);
done();
});
});

it('PUT /products/:id', function(done){
request(app)
.put('/products/' + _id)
.send({ 'name': 'Other name' })
.expect(200)
.end(function(err, res){
var data = res.body;

assert.equal(data.length, 4);
done();
});
});

it('DELETE /products/:id', function(done){
request(app)
.delete('/products/' + _id)
.expect(200)
.end(function(err, res){
var data = res.body;

assert.equal(data.length, 4);
done();
});
});
});

0 comments on commit d8b6065

Please sign in to comment.