Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,4 @@ typings/
lib/README.md
lib/ReadmeResources/
lib/coverage/
lib/yarn.lock
yarn.lock
1 change: 0 additions & 1 deletion lib/lcformvalidation.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@
}

export interface IValidationEngine {
initialize(formNameToFieldNameMappings : Array<FormNameToFieldNameMapping>): void;
isFormDirty(): boolean;
isFormPristine(): boolean;
validateFullForm(vm: any): Promise<FormValidationResult>;
Expand Down
3 changes: 2 additions & 1 deletion lib/package.json
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
{
"name": "lc-form-validation",
"version": "0.1.7",
"version": "0.9.0",
"description": "lcFormValidation is form library validation: heavily based on javascript (no html attributes / annotations), async by default. lcFormValidation is third party / framework agnostic, it can be easily integrated with frameworks like React.",
"main": "dist/lc-form-validation.js",
"scripts": {
"test": "karma start --browsers PhantomJS --single-run",
"test:watch": "karma start --browsers PhantomJS",
"clean": "rimraf dist ReadmeResources",
"build:prod": "cross-env NODE_ENV=production webpack --output-filename dist/lc-form-validation.min.js",
"build:dev": "cross-env NODE_ENV=development webpack --output-filename dist/lc-form-validation.js",
Expand Down
17 changes: 0 additions & 17 deletions lib/src/spec/validationEngine.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,6 @@ describe('lcFormValidation', () => {
// Arrange
const formValidationBase: ValidationEngine = new ValidationEngine();

// Act
formValidationBase.initialize([]);

// Assert
expect(formValidationBase.isFormPristine()).to.be.true;
});
Expand All @@ -22,9 +19,6 @@ describe('lcFormValidation', () => {
const formValidationBase: ValidationEngine = new ValidationEngine();
const viewModel = [{ formFieldName: 'nameId', vmFieldName: 'name' }];

// Act
formValidationBase.initialize(viewModel);

formValidationBase
.triggerFieldValidation(viewModel, 'nameId', 'newContent')
.then((errors) => {
Expand All @@ -39,9 +33,6 @@ describe('lcFormValidation', () => {
// Arrange
const formValidationBase: ValidationEngine = new ValidationEngine();

// Act
formValidationBase.initialize([]);

// Assert
expect(formValidationBase.isFormDirty()).to.be.false;
});
Expand All @@ -51,9 +42,6 @@ describe('lcFormValidation', () => {
const formValidationBase: ValidationEngine = new ValidationEngine();
const viewModel = [{ formFieldName: 'nameId', vmFieldName: 'name' }];

// Act
formValidationBase.initialize(viewModel);

formValidationBase
.triggerFieldValidation(viewModel, 'nameId', 'newContent')
.then((errors) => {
Expand All @@ -67,9 +55,6 @@ describe('lcFormValidation', () => {
// Arrange
const formValidationBase: ValidationEngine = new ValidationEngine();

// Act
formValidationBase.initialize([]);

// Assert
expect(formValidationBase.isValidationInProgress()).to.be.false;
});
Expand All @@ -80,8 +65,6 @@ describe('lcFormValidation', () => {
const viewModel = [{ formFieldName: 'nameId', vmFieldName: 'name' }];

// Act
formValidationBase.initialize([]);

formValidationBase
.triggerFieldValidation(viewModel, 'nameId', 'newContent')
.then((errors) => {
Expand Down
215 changes: 69 additions & 146 deletions lib/src/spec/validationEngineValidateForm.spec.ts

Large diffs are not rendered by default.

8 changes: 0 additions & 8 deletions lib/src/spec/validationEngineValidateSingleField.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,6 @@ describe('lcFormValidation simple form', () => {
const viewModel = { id: '1', fullname: 'john' };

// Act
formValidationBase.initialize([{ formFieldName: 'nameId', vmFieldName: 'fullname' }]);

formValidationBase.addFieldValidationAsync('nameId',
(vm, value): Promise<FieldValidationResult> => {
// Required field
Expand Down Expand Up @@ -56,8 +54,6 @@ describe('lcFormValidation simple form', () => {
const viewModel = { id: '1', fullname: 'john' };

// Act
formValidationBase.initialize([{ formFieldName: 'nameId', vmFieldName: 'fullname' }]);

formValidationBase.addFieldValidationAsync('nameId',
(vm, value): Promise<FieldValidationResult> => {
// Required field
Expand Down Expand Up @@ -95,8 +91,6 @@ describe('lcFormValidation simple form', () => {
const viewModel = { id: '1', fullname: 'john' };

// Act
formValidationBase.initialize([{ formFieldName: 'nameId', vmFieldName: 'fullname' }]);

formValidationBase.addFieldValidationAsync('nameId',
(vm, value): Promise<FieldValidationResult> => {
// Required field
Expand Down Expand Up @@ -134,8 +128,6 @@ describe('lcFormValidation simple form', () => {
const viewModel = { id: '1', fullname: 'john' };

// Act
formValidationBase.initialize([{ formFieldName: 'nameId', vmFieldName: 'fullname' }]);

formValidationBase.addFieldValidationAsync('nameId',
(vm, value): Promise<FieldValidationResult> => {
let error = true;
Expand Down
148 changes: 21 additions & 127 deletions lib/src/spec/validationsDispatcher.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -526,187 +526,81 @@ describe('ValidationsDispatcher', () => {

describe('Group #2 => When calling fireAllFieldsValidations', () => {
it('Spec #1 => should return empty array' +
'When passing vm equals undefined, formFieldToViewModelKeyValues equals undefined and validationFn equals undefined', () => {
//Arrange
'When passing vm equals undefined and validationFn equals undefined', () => {
// Arrange
let vm = undefined;
let formFieldToViewModelKeyValues = undefined;
let validationFn = undefined;

//Act
let fieldValidationResultPromises = validationsDispatcher.fireAllFieldsValidations(vm, formFieldToViewModelKeyValues, validationFn);
// Act
let fieldValidationResultPromises = validationsDispatcher.fireAllFieldsValidations(vm, validationFn);

//Assert
// Assert
expect(fieldValidationResultPromises).to.have.length(0);
});

it('Spec #2 => should return empty array' +
'When passing vm equals undefined, formFieldToViewModelKeyValues equals null and validationFn equals undefined', () => {
//Arrange
let vm = undefined;
let formFieldToViewModelKeyValues = null;
let validationFn = undefined;

//Act
let fieldValidationResultPromises = validationsDispatcher.fireAllFieldsValidations(vm, formFieldToViewModelKeyValues, validationFn);

//Assert
expect(fieldValidationResultPromises).to.have.length(0);
});

it('Spec #3 => should return empty array' +
'When passing vm equals undefined, formFieldToViewModelKeyValues equals [] and validationFn equals undefined', () => {
//Arrange
let vm = undefined;
let formFieldToViewModelKeyValues = [];
let validationFn = undefined;

//Act
let fieldValidationResultPromises = validationsDispatcher.fireAllFieldsValidations(vm, formFieldToViewModelKeyValues, validationFn);

//Assert
expect(fieldValidationResultPromises).to.have.length(0);
});

it('Spec #4 => should return empty array' +
'When passing vm equals undefined, formFieldToViewModelKeyValues equals [{id: "testFormId", value: "testVmProperty"}] and validationFn equals undefined', () => {
//Arrange
let vm = undefined;

let keyValue = new FormNameToFieldNameMapping();
keyValue.formFieldName = 'testFormId';
keyValue.vmFieldName = 'testVmProperty';

let formFieldToViewModelKeyValues = [keyValue];
let validationFn = undefined;

//Act
let fieldValidationResultPromises = validationsDispatcher.fireAllFieldsValidations(vm, formFieldToViewModelKeyValues, validationFn);

//Assert
expect(fieldValidationResultPromises).to.have.length(0);
});

it('Spec #5 => should return empty array' +
'When passing vm equals null, formFieldToViewModelKeyValues equals [{id: "testFormId", value: "testVmProperty"}] and validationFn equals undefined', () => {
'When passing vm equals null and validationFn equals undefined', () => {
//Arrange
let vm = null;

let keyValue = new FormNameToFieldNameMapping();
keyValue.formFieldName = 'testFormId';
keyValue.vmFieldName = 'testVmProperty';

let formFieldToViewModelKeyValues = [keyValue];
let validationFn = undefined;

//Act
let fieldValidationResultPromises = validationsDispatcher.fireAllFieldsValidations(vm, formFieldToViewModelKeyValues, validationFn);
let fieldValidationResultPromises = validationsDispatcher.fireAllFieldsValidations(vm, validationFn);

//Assert
expect(fieldValidationResultPromises).to.have.length(0);
});

it('Spec #6 => should return empty array' +
'When passing vm equals "", formFieldToViewModelKeyValues equals [{id: "testFormId", value: "testVmProperty"}] and validationFn equals undefined', () => {
it('Spec #3 => should return empty array' +
'When passing vm equals "" and validationFn equals undefined', () => {
//Arrange
let vm = "";

let keyValue = new FormNameToFieldNameMapping();
keyValue.formFieldName = 'testFormId';
keyValue.vmFieldName = 'testVmProperty';

let formFieldToViewModelKeyValues = [keyValue];
let validationFn = undefined;

//Act
let fieldValidationResultPromises = validationsDispatcher.fireAllFieldsValidations(vm, formFieldToViewModelKeyValues, validationFn);
let fieldValidationResultPromises = validationsDispatcher.fireAllFieldsValidations(vm, validationFn);

//Assert
expect(fieldValidationResultPromises).to.have.length(0);
});

it('Spec #7 => should return empty array' +
'When passing vm equals { }, formFieldToViewModelKeyValues equals [{id: "testFormId", value: "testVmProperty"}] ' +
'and validationFn equals undefined', () => {
it('Spec #4 => should return empty array' +
'When passing vm equals { } and validationFn equals undefined', () => {
//Arrange
let vm = {
};

let keyValue = new FormNameToFieldNameMapping();
keyValue.formFieldName = 'testFormId';
keyValue.vmFieldName = 'testVmProperty';

let formFieldToViewModelKeyValues = [keyValue];
let vm = {};
let validationFn = undefined;

//Act
let fieldValidationResultPromises = validationsDispatcher.fireAllFieldsValidations(vm, formFieldToViewModelKeyValues, validationFn);

//Assert
expect(fieldValidationResultPromises).to.have.length(0);
});

it('Spec #8 => should return empty array and it does not call to validationFn' +
'When passing vm equals { }, formFieldToViewModelKeyValues equals [{id: "testFormId", value: "testVmProperty"}] ' +
'and validationFn equals function', () => {
//Arrange
let vm = {
};

let keyValue = new FormNameToFieldNameMapping();
keyValue.formFieldName = 'testFormId';
keyValue.vmFieldName = 'testVmProperty';

let formFieldToViewModelKeyValues = [keyValue];
let validationFnSpy = sinon.spy();

//Act
let fieldValidationResultPromises = validationsDispatcher.fireAllFieldsValidations(vm, formFieldToViewModelKeyValues, validationFnSpy);
let fieldValidationResultPromises = validationsDispatcher.fireAllFieldsValidations(vm, validationFn);

//Assert
expect(fieldValidationResultPromises).to.have.length(0);
expect(validationFnSpy.called).to.be.false;
});

it('Spec #9 => should return empty array and it does not call to validationFn' +
'When passing vm equals { property: "test" }, formFieldToViewModelKeyValues equals [{id: "testFormId", value: "testVmProperty"}] ' +
'and validationFn equals function', () => {
it('Spec #5 => should return empty array and it does not call to validationFn' +
'When passing vm equals { } and validationFn equals function', () => {
//Arrange
let vm = {
property: 'test'
};

let keyValue = new FormNameToFieldNameMapping();
keyValue.formFieldName = 'testFormId';
keyValue.vmFieldName = 'testVmProperty';

let formFieldToViewModelKeyValues = [keyValue];
let vm = {};
let validationFnSpy = sinon.spy();

//Act
let fieldValidationResultPromises = validationsDispatcher.fireAllFieldsValidations(vm, formFieldToViewModelKeyValues, validationFnSpy);
let fieldValidationResultPromises = validationsDispatcher.fireAllFieldsValidations(vm, validationFnSpy);

//Assert
expect(fieldValidationResultPromises).to.have.length(0);
expect(validationFnSpy.called).to.be.false;
});

it('Spec #10 => should return array with one item and it calls to validationFn' +
'When passing vm equals { testVmProperty: "test" }, formFieldToViewModelKeyValues equals [{id: "testFormId", value: "testVmProperty"}] ' +
'and validationFn equals function', () => {
it('Spec #6 => should return array with one item and it calls to validationFn' +
'When passing vm equals { testVmProperty: "test" } and validationFn equals function', () => {
//Arrange
let vm = {
testVmProperty: 'test'
};

let keyValue = new FormNameToFieldNameMapping();
keyValue.formFieldName = 'testFormId';
keyValue.vmFieldName = 'testVmProperty';

let formFieldToViewModelKeyValues = [keyValue];
let validationFnSpy = sinon.spy();

//Act
let fieldValidationResultPromises = validationsDispatcher.fireAllFieldsValidations(vm, formFieldToViewModelKeyValues, validationFnSpy);
let fieldValidationResultPromises = validationsDispatcher.fireAllFieldsValidations(vm, validationFnSpy);

//Assert
expect(fieldValidationResultPromises).to.have.length(1);
Expand Down
11 changes: 4 additions & 7 deletions lib/src/validationEngine.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import { fieldValidationEventFilter } from './fieldValidationEventFilter';
import { entitiesMapper } from './entitiesMapper';

export interface IValidationEngine {
initialize(formNameToFieldNameMappings: Array<FormNameToFieldNameMapping>): void;
isFormDirty(): boolean;
isFormPristine(): boolean;
validateFullForm(vm: any): Promise<FormValidationResult>;
Expand All @@ -34,11 +33,7 @@ export class ValidationEngine implements IValidationEngine {
this._validationsPerField = [];
this._formNameToFieldNameMappings = new Array<FormNameToFieldNameMapping>();
this._validationsGlobalForm = [];
}

initialize(formNameToFieldNameMappings: Array<FormNameToFieldNameMapping>): void {
this._isFormPristine = true;
this._formNameToFieldNameMappings = [...formNameToFieldNameMappings];
}

isFormDirty(): boolean {
Expand All @@ -53,8 +48,10 @@ export class ValidationEngine implements IValidationEngine {

const fullFormValidatedPromise = new Promise((resolve, reject) => {
// Let's add fileValidationResults
let fieldValidationResultsPromises = validationsDispatcher.fireAllFieldsValidations(viewModel, this._formNameToFieldNameMappings,
this.validateSingleField.bind(this));
let fieldValidationResultsPromises = validationsDispatcher.fireAllFieldsValidations(
viewModel,
this.validateSingleField.bind(this)
);

// Let's add GlobalFormValidations
if (this._validationsGlobalForm.length > 0) {
Expand Down
Loading