From 7430e4cc86427466cde42c14e68b8d8fdd969640 Mon Sep 17 00:00:00 2001 From: nicosommi Date: Tue, 28 Jul 2015 14:26:55 -0300 Subject: [PATCH] validation filters with tests --- es5/spec/app.index.spec.js | 6 + es6/spec/app.index.spec.js | 10 ++ .../app/controllers/_modelController.js | 149 ++++++++++-------- 3 files changed, 95 insertions(+), 70 deletions(-) diff --git a/es5/spec/app.index.spec.js b/es5/spec/app.index.spec.js index 1786775..e39fc3c 100644 --- a/es5/spec/app.index.spec.js +++ b/es5/spec/app.index.spec.js @@ -31,5 +31,11 @@ describe("forbin-scudl", function () { it("should have some this.querySpy = on it", function () { assert.fileContent([["features/steps/" + name + "/" + name + ".show.steps.js", "this.querySpy ="]]); }); + + describe("(controller content)", function () { + it("should have filters for validation", function () { + assert.fileContent([["app/controllers/" + name + "Controller.js", "filters()"], ["app/controllers/" + name + "Controller.js", "[validateId]"], ["app/controllers/" + name + "Controller.js", "[validateData]"]]); + }); + }); }); }); \ No newline at end of file diff --git a/es6/spec/app.index.spec.js b/es6/spec/app.index.spec.js index e2d790e..be85e7a 100644 --- a/es6/spec/app.index.spec.js +++ b/es6/spec/app.index.spec.js @@ -44,5 +44,15 @@ describe("forbin-scudl", () => { it("should have some this.querySpy = on it", () => { assert.fileContent([[`features/steps/${name}/${name}.show.steps.js`, "this.querySpy ="]]); }); + + describe("(controller content)", () => { + it("should have filters for validation", () => { + assert.fileContent([ + [`app/controllers/${name}Controller.js`, "filters()"], + [`app/controllers/${name}Controller.js`, "[validateId]"], + [`app/controllers/${name}Controller.js`, "[validateData]"] + ]); + }); + }); }); }); diff --git a/generators/app/templates/app/controllers/_modelController.js b/generators/app/templates/app/controllers/_modelController.js index 8d9b5d6..471b6bf 100644 --- a/generators/app/templates/app/controllers/_modelController.js +++ b/generators/app/templates/app/controllers/_modelController.js @@ -1,92 +1,81 @@ import ApplicationController from "./applicationController.js"; import <%= Name %> from "../models/<%= name %>.js"; import MultiError from "blunder"; -import {isAssigned, isNumber} from "proven"; +import {isAssigned} from "proven"; import {BadRequestError} from "../errors.js"; +const validateId = Symbol("validateId"), + validateData = Symbol("validateData"); + export default class <%= Name %>Controller extends ApplicationController { + filters() { + this.before([this.show, this.delete, this.update], this[validateId]); + this.before([this.create, this.update], this[validateData]); + } show(request, response) { - if(!(isNumber.call(request.params, "id").result)) { - response.badRequest(new BadRequestError()); - } else { - let <%= name %> = new <%= Name %>({id: request.params.id}); - <%= name %>.fetch((fetchError) => { - if(fetchError) { - response.notFound(fetchError); - } else { - response.ok(<%= name %>.toJSON()); - } - }); - } + let <%= name %> = new <%= Name %>({id: request.params.id}); + <%= name %>.fetch((fetchError) => { + if(fetchError) { + response.notFound(fetchError); + } else { + response.ok(<%= name %>.toJSON()); + } + }); } create(request, response) { - if(!(isAssigned.call(request.body, "data").result)) { - response.badRequest(new BadRequestError()); - } else { - let new<%= Name %> = new <%= Name %>({ - contentPackageId: request.body.data.contentPackageId, - name: request.body.data.name - }); + let new<%= Name %> = new <%= Name %>({ + contentPackageId: request.body.data.contentPackageId, + name: request.body.data.name + }); - new<%= Name %>.save((saveError) => { - if(saveError) { - response.conflict(saveError); - } else { - response.created(new<%= Name %>.toJSON()); - } - }); - } + new<%= Name %>.save((saveError) => { + if(saveError) { + response.conflict(saveError); + } else { + response.created(new<%= Name %>.toJSON()); + } + }); } update(request, response) { - if(!(isNumber.call(request.params, "id").result)) { - response.badRequest(new BadRequestError()); - } else if(!(isAssigned.call(request.body, "data").result)) { - response.badRequest(new BadRequestError()); - } else { - let <%= name %> = new <%= Name %>(); - <%= name %>.id = request.params.id; - <%= name %> - .fetch((fetchError) => { - if(fetchError) { - response.notFound(fetchError); - } else { - <%= name %>.contentPackageId = request.body.data.contentPackageId; - <%= name %>.name = request.body.data.name; + let <%= name %> = new <%= Name %>(); + <%= name %>.id = request.params.id; + <%= name %> + .fetch((fetchError) => { + if(fetchError) { + response.notFound(fetchError); + } else { + <%= name %>.contentPackageId = request.body.data.contentPackageId; + <%= name %>.name = request.body.data.name; - <%= name %>.save((saveError) => { - if(saveError) { - response.conflict(saveError); - } else { - response.ok(<%= name %>.toJSON()); - } - }); - } - }); - } + <%= name %>.save((saveError) => { + if(saveError) { + response.conflict(saveError); + } else { + response.ok(<%= name %>.toJSON()); + } + }); + } + }); } delete(request, response) { - if(!(isNumber.call(request.params, "id").result)) { - response.badRequest(new BadRequestError()); - } else { - let <%= name %> = new <%= Name %>({id: request.params.id}); - <%= name %>.fetch((fetchError) => { - if(fetchError) { - response.notFound(fetchError); - } else { - <%= name %>.delete((deleteError) => { - if(deleteError) { - response.internalServerError(deleteError); - } else { - response.noContent(); - } - }); - } - }); - } + let <%= name %> = new <%= Name %>({id: request.params.id}); + <%= name %>.fetch((fetchError) => { + if(fetchError) { + response.notFound(fetchError); + } else { + <%= name %>.delete((deleteError) => { + if(deleteError) { + response.internalServerError(deleteError); + } else { + response.noContent(); + } + }); + } + }); } list(request, response) { @@ -105,4 +94,24 @@ export default class <%= Name %>Controller extends ApplicationController { } }); } + + [validateId](request, response, next) { + if(request.params.id > 0) { + next(); + } else { + let error = new BadRequestError(); + response.badRequest(error); + next(error); + } + } + + [validateData](request, response, next) { + if(isAssigned.call(request.body, "data").result) { + next(); + } else { + let error = new BadRequestError(); + response.badRequest(error); + next(error); + } + } }