Merge branch 'dev' of https://git.verdnatura.es/salix into dev
This commit is contained in:
commit
492902e637
|
@ -0,0 +1,186 @@
|
||||||
|
describe('Directive validation', () => {
|
||||||
|
let scope;
|
||||||
|
let element;
|
||||||
|
let compile;
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
angular.mock.module('client');
|
||||||
|
});
|
||||||
|
|
||||||
|
compile = (_element, validations, value) => {
|
||||||
|
inject(($compile, $rootScope, aclService, _$timeout_, $window) => {
|
||||||
|
$window.validations = validations;
|
||||||
|
scope = $rootScope.$new();
|
||||||
|
scope.user = {name: value};
|
||||||
|
element = angular.element(_element);
|
||||||
|
$compile(element)(scope);
|
||||||
|
scope.$digest();
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
it(`should throw an error if the vnValidation doesn't have the right syntax`, () => {
|
||||||
|
let html = `<input type="name" ng-model="user.name" vn-validation="user"/>`;
|
||||||
|
|
||||||
|
expect(() => {
|
||||||
|
compile(html, {});
|
||||||
|
}).toThrow(new Error(`vnValidation: Attribute must have this syntax: [entity].[field]`));
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should throw an error if the window.validations aint defined', () => {
|
||||||
|
let html = `<input type="name" ng-model="user.name" vn-validation="user.name"/>`;
|
||||||
|
|
||||||
|
expect(() => {
|
||||||
|
compile(html, {});
|
||||||
|
}).toThrow(new Error(`vnValidation: Entity 'User' doesn't exist`));
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('Validator presence()', () => {
|
||||||
|
it('should not validate the user name as it is an empty string', () => {
|
||||||
|
let html = `<form><input type="name" ng-model="user.name" vn-validation="user.name"/></form>`;
|
||||||
|
let validations = {User: {validations: {name: [{validation: 'presence'}]}}};
|
||||||
|
compile(html, validations, 'Spiderman');
|
||||||
|
scope.user.name = '';
|
||||||
|
scope.$digest();
|
||||||
|
|
||||||
|
expect(element[0].classList).toContain('ng-invalid');
|
||||||
|
expect(element[0].classList).not.toContain('ng-valid');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('Validator absence()', () => {
|
||||||
|
it('should not validate the entity as it should be an empty string', () => {
|
||||||
|
let html = `<form><input type="name" ng-model="user.name" vn-validation="user.name"/></form>`;
|
||||||
|
let validations = {User: {validations: {name: [{validation: 'absence'}]}}};
|
||||||
|
compile(html, validations, 'Spiderman');
|
||||||
|
scope.$digest();
|
||||||
|
|
||||||
|
expect(element[0].classList).toContain('ng-invalid');
|
||||||
|
expect(element[0].classList).not.toContain('ng-valid');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should validate the entity as it is an empty string', () => {
|
||||||
|
let html = `<form><input type="name" ng-model="user.name" vn-validation="user.name"/></form>`;
|
||||||
|
let validations = {User: {validations: {name: [{validation: 'absence'}]}}};
|
||||||
|
compile(html, validations, '');
|
||||||
|
scope.$digest();
|
||||||
|
|
||||||
|
expect(element[0].classList).toContain('ng-valid');
|
||||||
|
expect(element[0].classList).not.toContain('ng-invalid');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('Validator length()', () => {
|
||||||
|
it('should not validate the user name as it should have min length of 15', () => {
|
||||||
|
let html = `<form><input type="name" ng-model="user.name" vn-validation="user.name"/></form>`;
|
||||||
|
let validations = {User: {validations: {name: [{validation: 'length', min: 10, max: 50, is: 15}]}}};
|
||||||
|
compile(html, validations, 'fifteen!');
|
||||||
|
scope.$digest();
|
||||||
|
|
||||||
|
expect(element[0].classList).toContain('ng-invalid');
|
||||||
|
expect(element[0].classList).not.toContain('ng-valid');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should validate the user name as it has length of 15', () => {
|
||||||
|
let html = `<form><input type="name" ng-model="user.name" vn-validation="user.name"/></form>`;
|
||||||
|
let validations = {User: {validations: {name: [{validation: 'length', min: 10, max: 50, is: 15}]}}};
|
||||||
|
compile(html, validations, 'fifteen length!');
|
||||||
|
scope.$digest();
|
||||||
|
|
||||||
|
expect(element[0].classList).toContain('ng-valid');
|
||||||
|
expect(element[0].classList).not.toContain('ng-invalid');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should not validate the user name as it should have min length of 10', () => {
|
||||||
|
let html = `<form><input type="name" ng-model="user.name" vn-validation="user.name"/></form>`;
|
||||||
|
let validations = {User: {validations: {name: [{validation: 'length', min: 10}]}}};
|
||||||
|
compile(html, validations, 'shortname');
|
||||||
|
scope.$digest();
|
||||||
|
|
||||||
|
expect(element[0].classList).toContain('ng-invalid');
|
||||||
|
expect(element[0].classList).not.toContain('ng-valid');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should validate the user name as its length is greater then the minimum', () => {
|
||||||
|
let html = `<form><input type="name" ng-model="user.name" vn-validation="user.name"/></form>`;
|
||||||
|
let validations = {User: {validations: {name: [{validation: 'length', min: 10}]}}};
|
||||||
|
compile(html, validations, 'verylongname');
|
||||||
|
scope.$digest();
|
||||||
|
|
||||||
|
expect(element[0].classList).toContain('ng-valid');
|
||||||
|
expect(element[0].classList).not.toContain('ng-invalid');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should not validate the user name as its length is greater then the maximum', () => {
|
||||||
|
let html = `<form><input type="name" ng-model="user.name" vn-validation="user.name"/></form>`;
|
||||||
|
let validations = {User: {validations: {name: [{validation: 'length', max: 10}]}}};
|
||||||
|
compile(html, validations, 'toolongname');
|
||||||
|
scope.$digest();
|
||||||
|
|
||||||
|
expect(element[0].classList).toContain('ng-invalid');
|
||||||
|
expect(element[0].classList).not.toContain('ng-valid');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('Validator numericality()', () => {
|
||||||
|
it('should not validate the phone number as it should a integer', () => {
|
||||||
|
let html = `<form><input type="text" ng-model="user.phone" vn-validation="user.phone"/></form>`;
|
||||||
|
let validations = {User: {validations: {phone: [{validation: 'numericality', is: 'what is this?'}]}}};
|
||||||
|
compile(html, validations, 'spiderman');
|
||||||
|
scope.user.phone = 'this is not a phone number!';
|
||||||
|
scope.$digest();
|
||||||
|
|
||||||
|
expect(element[0].classList).toContain('ng-invalid');
|
||||||
|
expect(element[0].classList).not.toContain('ng-valid');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should validate the phone number as it an integer', () => {
|
||||||
|
let html = `<form><input type="text" ng-model="user.phone" vn-validation="user.phone"/></form>`;
|
||||||
|
let validations = {User: {validations: {phone: [{validation: 'numericality', is: 'what is this?'}]}}};
|
||||||
|
compile(html, validations, 'spiderman');
|
||||||
|
scope.user.phone = '555555555';
|
||||||
|
scope.$digest();
|
||||||
|
|
||||||
|
expect(element[0].classList).toContain('ng-valid');
|
||||||
|
expect(element[0].classList).not.toContain('ng-invalid');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('Validator inclusion()', () => {
|
||||||
|
it('should not validate the phone number as it is not an integer', () => {
|
||||||
|
let html = `<form><input type="text" ng-model="user.phone" vn-validation="user.phone"/></form>`;
|
||||||
|
let validations = {User: {validations: {phone: [{validation: 'inclusion'}]}}};
|
||||||
|
compile(html, validations, 'spiderman');
|
||||||
|
scope.user.phone = 'this is not a phone number!';
|
||||||
|
scope.$digest();
|
||||||
|
|
||||||
|
expect(element[0].classList).toContain('ng-invalid');
|
||||||
|
expect(element[0].classList).not.toContain('ng-valid');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('Validator exclusion()', () => {
|
||||||
|
it('should validate the phone number as it is an integer', () => {
|
||||||
|
let html = `<form><input type="text" ng-model="user.phone" vn-validation="user.phone"/></form>`;
|
||||||
|
let validations = {User: {validations: {phone: [{validation: 'exclusion'}]}}};
|
||||||
|
compile(html, validations, 'spiderman');
|
||||||
|
scope.user.phone = '555555555';
|
||||||
|
scope.$digest();
|
||||||
|
|
||||||
|
expect(element[0].classList).toContain('ng-valid');
|
||||||
|
expect(element[0].classList).not.toContain('ng-invalid');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('Validator format()', () => {
|
||||||
|
it('should not validate the email number as it doesnt contain @', () => {
|
||||||
|
let html = `<form><input type="text" ng-model="user.email" vn-validation="user.email"/></form>`;
|
||||||
|
let validations = {User: {validations: {email: [{validation: 'format', with: '@'}]}}};
|
||||||
|
compile(html, validations, 'spiderman');
|
||||||
|
scope.user.email = 'userverdnatura.es';
|
||||||
|
scope.$digest();
|
||||||
|
|
||||||
|
expect(element[0].classList).toContain('ng-invalid');
|
||||||
|
expect(element[0].classList).not.toContain('ng-valid');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
|
@ -40,7 +40,7 @@ export function directive(interpolate, compile, $window) {
|
||||||
let errorShown = false;
|
let errorShown = false;
|
||||||
|
|
||||||
input.$options.$$options.allowInvalid = true;
|
input.$options.$$options.allowInvalid = true;
|
||||||
input.$validators.entity = function(value) {
|
input.$validators.entity = value => {
|
||||||
try {
|
try {
|
||||||
validateAll(value, validations);
|
validateAll(value, validations);
|
||||||
return true;
|
return true;
|
||||||
|
@ -51,9 +51,9 @@ export function directive(interpolate, compile, $window) {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
scope.$watch(function() {
|
scope.$watch(() => {
|
||||||
return (form.$submitted || input.$dirty) && input.$invalid;
|
return (form.$submitted || input.$dirty) && input.$invalid;
|
||||||
}, function(value) {
|
}, value => {
|
||||||
let parent = element.parent();
|
let parent = element.parent();
|
||||||
|
|
||||||
if (value) {
|
if (value) {
|
||||||
|
|
|
@ -12,7 +12,7 @@ export default class App {
|
||||||
this.$rootScope = $rootScope;
|
this.$rootScope = $rootScope;
|
||||||
}
|
}
|
||||||
show(message) {
|
show(message) {
|
||||||
if (this.snackbar) this.snackbar.show({message: message, timeout: 400});
|
if (this.snackbar) this.snackbar.show({message: message});
|
||||||
}
|
}
|
||||||
showMessage(message) {
|
showMessage(message) {
|
||||||
this.show(message);
|
this.show(message);
|
||||||
|
|
|
@ -1,19 +1,20 @@
|
||||||
import {validator} from 'vendor';
|
import {validator} from 'vendor';
|
||||||
|
|
||||||
export const validators = {
|
export const validators = {
|
||||||
presence: function(value, conf) {
|
presence: value => {
|
||||||
if (validator.isEmpty(value))
|
if (validator.isEmpty(value))
|
||||||
throw new Error(`Value can't be empty`);
|
throw new Error(`Value can't be empty`);
|
||||||
},
|
},
|
||||||
absence: function(value, conf) {
|
absence: value => {
|
||||||
if (!validator.isEmpty(value))
|
if (!validator.isEmpty(value))
|
||||||
throw new Error(`Value should be empty`);
|
throw new Error(`Value should be empty`);
|
||||||
},
|
},
|
||||||
length: function(value, conf) {
|
length: (value, conf) => {
|
||||||
let options = {
|
let options = {
|
||||||
min: conf.min || conf.is,
|
min: conf.min || conf.is,
|
||||||
max: conf.max || conf.is
|
max: conf.max || conf.is
|
||||||
};
|
};
|
||||||
|
|
||||||
if (!validator.isLength(value, options)) {
|
if (!validator.isLength(value, options)) {
|
||||||
if (conf.is) {
|
if (conf.is) {
|
||||||
throw new Error(`Value should be ${conf.is} characters long`);
|
throw new Error(`Value should be ${conf.is} characters long`);
|
||||||
|
@ -26,26 +27,26 @@ export const validators = {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
numericality: function(value, conf) {
|
numericality: (value, conf) => {
|
||||||
if (conf.int) {
|
if (conf.int) {
|
||||||
if (!validator.isInt(value))
|
if (!validator.isInt(value))
|
||||||
throw new Error(`Value should be integer`);
|
throw new Error(`Value should be integer`);
|
||||||
} else if (!validator.isNumeric(value))
|
} else if (!validator.isNumeric(value))
|
||||||
throw new Error(`Value should be a number`);
|
throw new Error(`Value should be a number`);
|
||||||
},
|
},
|
||||||
inclusion: function(value, conf) {
|
inclusion: (value, conf) => {
|
||||||
if (!validator.isIn(value, conf.in))
|
if (!validator.isIn(value, conf.in))
|
||||||
throw new Error(`Invalid value`);
|
throw new Error(`Invalid value`);
|
||||||
},
|
},
|
||||||
exclusion: function(value, conf) {
|
exclusion: (value, conf) => {
|
||||||
if (validator.isIn(value, conf.in))
|
if (validator.isIn(value, conf.in))
|
||||||
throw new Error(`Invalid value`);
|
throw new Error(`Invalid value`);
|
||||||
},
|
},
|
||||||
format: function(value, conf) {
|
format: (value, conf) => {
|
||||||
if (!validator.matches(value, conf.with))
|
if (!validator.matches(value, conf.with))
|
||||||
throw new Error(`Invalid value`);
|
throw new Error(`Invalid value`);
|
||||||
},
|
},
|
||||||
custom: function(value, conf) {
|
custom: (value, conf) => {
|
||||||
if (!conf.bindedFunction(value))
|
if (!conf.bindedFunction(value))
|
||||||
throw new Error(`Invalid value`);
|
throw new Error(`Invalid value`);
|
||||||
}
|
}
|
||||||
|
|
|
@ -47,8 +47,7 @@ module.exports = {
|
||||||
this.request.user = {
|
this.request.user = {
|
||||||
id: token.userId,
|
id: token.userId,
|
||||||
token: this.getToken()
|
token: this.getToken()
|
||||||
}
|
};
|
||||||
|
|
||||||
this.next();
|
this.next();
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
|
@ -1,18 +1,23 @@
|
||||||
var path = require('path');
|
var path = require('path');
|
||||||
var fs = require('fs');
|
let defaultFile = 'datasources.json';
|
||||||
var config = {};
|
|
||||||
|
|
||||||
let devConfigPath = path.join(__dirname, '/config/datasources.development.json');
|
function getFile(fileName) {
|
||||||
let configPath = path.join(__dirname, '/config/datasources.json');
|
return require(path.join(__dirname, `/config/${fileName}`));
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
config = Object.assign(require(configPath), require(devConfigPath));
|
let envFile = 'datasources.development.json';
|
||||||
|
|
||||||
|
if (process.env.NODE_ENV === 'test')
|
||||||
|
envFile = 'datasources.test.json';
|
||||||
|
|
||||||
|
config = getFile(envFile);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
if (e.code == 'MODULE_NOT_FOUND')
|
if (e.code == 'MODULE_NOT_FOUND')
|
||||||
config = require(configPath);
|
config = getFile(defaultFile);
|
||||||
}
|
}
|
||||||
|
|
||||||
config.proxy = require('../../nginx/config.json');
|
config.proxy = require('../../nginx/config.json');
|
||||||
config.package = require('../package.json');
|
config.package = require('../package.json');
|
||||||
|
|
||||||
module.exports = config;
|
module.exports = config;
|
||||||
|
|
|
@ -4,14 +4,14 @@
|
||||||
"debug": false,
|
"debug": false,
|
||||||
"defaultLanguage": "es",
|
"defaultLanguage": "es",
|
||||||
"senderMail": "noreply@localhost",
|
"senderMail": "noreply@localhost",
|
||||||
"senderName": ""
|
"senderName": "VerdNatura"
|
||||||
},
|
},
|
||||||
"mysql": {
|
"mysql": {
|
||||||
"host": "localhost",
|
"host": "localhost",
|
||||||
"port": 3306,
|
"port": 3306,
|
||||||
"user": "reports",
|
"user": "root",
|
||||||
"password": "",
|
"password": "",
|
||||||
"database": ""
|
"database": "vn"
|
||||||
},
|
},
|
||||||
"smtp": {
|
"smtp": {
|
||||||
"host": "localhost",
|
"host": "localhost",
|
||||||
|
|
|
@ -12,15 +12,17 @@ module.exports = {
|
||||||
* Load mail config.
|
* Load mail config.
|
||||||
*/
|
*/
|
||||||
init: function() {
|
init: function() {
|
||||||
|
|
||||||
this.transporter = nodemailer.createTransport(config.smtp);
|
this.transporter = nodemailer.createTransport(config.smtp);
|
||||||
|
|
||||||
this.transporter.verify(function(error, success) {
|
this.transporter.verify(function(error, success) {
|
||||||
if (error) {
|
if (error) {
|
||||||
throw new Error(error);
|
console.error(error);
|
||||||
} else if (config.app.debug) {
|
} else if (config.app.debug) {
|
||||||
console.log('SMTP connection stablished');
|
console.log('SMTP connection stablished');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -1,15 +1,20 @@
|
||||||
var path = require('path');
|
var path = require('path');
|
||||||
var fs = require('fs');
|
let defaultFile = 'datasources.json';
|
||||||
var config = {};
|
|
||||||
|
|
||||||
let devConfigPath = path.join(__dirname, '/config/datasources.development.json');
|
function getFile(fileName) {
|
||||||
let configPath = path.join(__dirname, '/config/datasources.json');
|
return require(path.join(__dirname, `/config/${fileName}`));
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
config = Object.assign(require(configPath), require(devConfigPath));
|
let envFile = 'datasources.development.json';
|
||||||
|
|
||||||
|
if (process.env.NODE_ENV === 'test')
|
||||||
|
envFile = 'datasources.test.json';
|
||||||
|
|
||||||
|
config = getFile(envFile);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
if (e.code == 'MODULE_NOT_FOUND')
|
if (e.code == 'MODULE_NOT_FOUND')
|
||||||
config = require(configPath);
|
config = getFile(defaultFile);
|
||||||
}
|
}
|
||||||
|
|
||||||
config.proxy = require('../../nginx/config.json');
|
config.proxy = require('../../nginx/config.json');
|
||||||
|
|
|
@ -7,9 +7,9 @@
|
||||||
"mysql": {
|
"mysql": {
|
||||||
"host": "localhost",
|
"host": "localhost",
|
||||||
"port": 3306,
|
"port": 3306,
|
||||||
"user": "reports",
|
"user": "root",
|
||||||
"password": "",
|
"password": "",
|
||||||
"database": ""
|
"database": "vn"
|
||||||
},
|
},
|
||||||
"pdf": {
|
"pdf": {
|
||||||
"footer": {
|
"footer": {
|
||||||
|
|
Loading…
Reference in New Issue