Skip to content

Commit

Permalink
Adding tests
Browse files Browse the repository at this point in the history
  • Loading branch information
AndrewKeig committed Mar 3, 2020
1 parent 6a5dfbd commit 9217490
Show file tree
Hide file tree
Showing 28 changed files with 161 additions and 380 deletions.
3 changes: 0 additions & 3 deletions .editorconfig
@@ -1,6 +1,3 @@
# EditorConfig is awesome: http://EditorConfig.org

# top-most EditorConfig file
root = true

[*]
Expand Down
2 changes: 1 addition & 1 deletion .eslintignore
@@ -1,2 +1,2 @@
node_modules
.nyc_output
coverage
8 changes: 0 additions & 8 deletions .eslintrc
@@ -1,18 +1,10 @@
{
"env": {
"commonjs": true,
"es6": true,
"node": true,
"jest": true
},
"extends": ["airbnb-base"],
"globals": {
"Atomics": "readonly",
"SharedArrayBuffer": "readonly"
},
"parserOptions": {
"ecmaVersion": 2018
},
"rules": {
"arrow-parens": 0,
"eslint-disable-next": 0
Expand Down
16 changes: 3 additions & 13 deletions .gitignore
@@ -1,15 +1,5 @@
lib-cov
*.seed
*.log
*.csv
*.dat
*.out
*.pid
*.gz

pids
logs
results

.DS_Store
npm-debug.log
node_modules
.vscode
coverage/**
1 change: 1 addition & 0 deletions README.md
Expand Up @@ -355,3 +355,4 @@ https://github.com/AndrewKeig/express-validation/blob/master/LICENSE
* Robert Barbey https://github.com/rbarbey
* Stefan Lapers https://github.com/slapers
* Alex Mazzeo https://github.com/amazzeo
* Fabian Gutierrez <https://github.com/fega
15 changes: 10 additions & 5 deletions lib/ev-options.js
Expand Up @@ -3,19 +3,24 @@ const Joi = require('@hapi/joi');

const evOptions = {
context: null,
status: 400,
statusCode: 400,
statusText: http.STATUS_CODES[400],
};

// validate status..
const evSchema = Joi.object({
context: Joi.boolean(),
status: Joi.number(),
status: Joi.number().custom((statusCode) => {
if (!http.STATUS_CODES[statusCode]) {
throw new Error(`Error: Http status code ${statusCode} not supported`);
}

return statusCode;
}),
});

const mergeEvOptions = (options) => {
const status = options.status || evOptions.status;
return { ...evOptions, options, statusText: http.STATUS_CODES[status] };
const statusCode = options.statusCode || evOptions.statusCode;
return { ...evOptions, options, statusText: http.STATUS_CODES[statusCode] };
};

exports.mergeEvOptions = mergeEvOptions;
Expand Down
33 changes: 17 additions & 16 deletions lib/index.d.ts
Expand Up @@ -5,6 +5,13 @@
/// <reference types="node" />
import { RequestHandler } from "express";
import * as Joi from "joi";
import {
Root as joi,
ValidationOptions,
ValidationError,
ValidationResult,
} from '@hapi/joi';


interface ValidatorField {
[key: string]: any;
Expand All @@ -16,28 +23,22 @@ interface Validator {
query?: ValidatorField;
headers?: ValidatorField;
cookies?: ValidatorField;
options?: {
allowUnknownBody?: boolean;
allowUnknownHeaders?: boolean;
allowUnknownQuery?: boolean;
allowUnknownParams?: boolean;
allowUnknownCookies?: boolean
};
signedCookies?: ValidatorField;
}

interface EvOptions {
context?: boolean;
}

declare function validate(validator: Validator): RequestHandler;
declare function validate(validator: Validator, options?: EvOptions, joiOptions?: ValidationOptions): RequestHandler;

declare namespace validate {
export class ValidationError {
errors: Messages[];
status: number;
statusText: string;
name: string;
message: "validation error";

}
interface Messages {
message: string;
types: string;
errors: ValidationError[];
statusCode: number;
statusText: string;
}
}

Expand Down
8 changes: 4 additions & 4 deletions lib/index.js
Expand Up @@ -24,13 +24,13 @@ exports.validate = (schema = {}, options = {}, joi = {}) => {

const results = await Promise.all(promises);


const errors = results
.filter(item => item)
.reduce((a, b) => a.concat(b), []);
.reduce((a, b) => a.concat(b), [])
.reduce((acc, curr) => ({ ...acc, ...curr }), null);

if (errors && errors.length > 0) {
return next(new ExpressValidationError(errors[0], evOptions));
if (errors) {
return next(new ExpressValidationError(errors, evOptions));
}

return next();
Expand Down
3 changes: 0 additions & 3 deletions lib/joi.js
Expand Up @@ -18,6 +18,3 @@ const mergeJoiOptions = (joi, ctx, request) => {
exports.validateJoiSchema = validateJoiSchema;
exports.joiSchema = joiSchema;
exports.mergeJoiOptions = mergeJoiOptions;

// Joi.object({ context: Joi.boolean() });
// exports.sourceSchema = Joi.string().valid(...parameters);
21 changes: 17 additions & 4 deletions lib/validation-error.js
@@ -1,11 +1,12 @@
// const { ValidationError } = require('@hapi/joi');

function ExpressValidationError(errors, options) {
// console.log(errors)
Error.captureStackTrace(this, ExpressValidationError); // ??
this.name = 'ExpressValidationError';
this.message = 'Express validation error';
this.errors = errors;
this.status = options.status;
this.statusCode = options.statusCode;
this.statusText = options.statusText;
Error.captureStackTrace(this, ExpressValidationError);
}

ExpressValidationError.prototype = Object.create(Error.prototype);
Expand All @@ -16,10 +17,22 @@ ExpressValidationError.prototype.toString = function toString() {

ExpressValidationError.prototype.toJSON = function toJSON() {
return {
status: this.status,
statusCode: this.status,
statusText: this.statusText,
errors: this.errors,
};
};

module.exports = ExpressValidationError;


// function ExpressValidationError (a, b, c) {
// Error.captureStackTrace(this, ExpressValidationError);
// this.name = `ExpressValidationError [${code}]`;
// this.code = code;
// this.message = `${this.code}: ${this.message}`;
// this.statusCode = statusCode || undefined;
// }

// ExpressValidationError.prototype[Symbol.toStringTag] = 'Error';
// inherits(ExpressValidationError, ValidationError);
103 changes: 0 additions & 103 deletions old-test/options.js

This file was deleted.

79 changes: 0 additions & 79 deletions old-test/parsing.js

This file was deleted.

0 comments on commit 9217490

Please sign in to comment.