Skip to content

Commit

Permalink
Merge pull request #3 from FreeAllMedia/feature/addValidationFilters
Browse files Browse the repository at this point in the history
validation filters with tests
  • Loading branch information
dcrockwell committed Jul 28, 2015
2 parents b44fe70 + 7430e4c commit 153a972
Show file tree
Hide file tree
Showing 3 changed files with 95 additions and 70 deletions.
6 changes: 6 additions & 0 deletions es5/spec/app.index.spec.js
Expand Up @@ -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]"]]);
});
});
});
});
10 changes: 10 additions & 0 deletions es6/spec/app.index.spec.js
Expand Up @@ -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]"]
]);
});
});
});
});
149 changes: 79 additions & 70 deletions 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) {
Expand All @@ -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);
}
}
}

0 comments on commit 153a972

Please sign in to comment.