Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
describe.only('validate-biniding-behavior', function () {
class App {
public person: Person = new Person((void 0)!, (void 0)!);
public controller: ValidationController;
public controller2: ValidationController;
public controllerSpy: Spy;
public controller2Spy: Spy;
public trigger: ValidationTrigger = ValidationTrigger.change;
public constructor(
@IContainer container: IContainer,
) {
const factory = container.get(IValidationControllerFactory);
this.controllerSpy = new Spy();
this.controller2Spy = new Spy();
// mocks ValidationCOntrollerFactory#createForCurrentScope
const controller = this.controller = this.controllerSpy.getMock(factory.create()) as unknown as ValidationController;
Registration.instance(IValidationController, controller).register(container);
this.controller2 = this.controller2Spy.getMock(factory.create()) as unknown as ValidationController;
const validationRules = container.get(IValidationRules);
validationRules
const controller = app.controller;
const controllerSpy = app.controllerSpy;
const target: HTMLInputElement = (host as Element).querySelector("#target");
assertControllerBinding(controller, 'person.name', target);
assert.equal(controller.errors.length, 0, 'error1');
await controller.validate();
assert.equal(controller.errors.length, 1, 'error2');
target.value = 'foo';
await assertEventHandler(target, 'blur', 0, scheduler, controllerSpy);
await assertEventHandler(target, 'change', 1, scheduler, controllerSpy);
assert.equal(controller.errors.filter((e) => !e.valid && e.propertyName === 'name').length, 0, 'error3');
},
{ template: `<input type="text">`, customDefaultTrigger: ValidationTrigger.change }
);
$it('supports **changeOrBlur** validation trigger',
async function ({ app, host, container }: TestContext) {
const scheduler = container.get(IScheduler);
const controller = app.controller;
const controllerSpy = app.controllerSpy;
const target: HTMLInputElement = (host as Element).querySelector("#target");
assertControllerBinding(controller, 'person.name', target);
await assertEventHandler(target, 'blur', 1, scheduler, controllerSpy);
assert.equal(controller.errors.filter((e) => !e.valid && e.propertyName === 'name').length, 1, 'error3');
target.value = 'foo';
await assertEventHandler(target, 'change', 1, scheduler, controllerSpy);
async function ({ app, host, container }: TestContext) {
const scheduler = container.get(IScheduler);
const controller = app.controller;
const controllerSpy = app.controllerSpy;
const target: HTMLInputElement = (host as Element).querySelector("#target");
assertControllerBinding(controller, 'person.name', target);
assert.equal(app.trigger, ValidationTrigger.change);
target.value = 'foo';
await assertEventHandler(target, 'change', 1, scheduler, controllerSpy);
await assertEventHandler(target, 'blur', 0, scheduler, controllerSpy);
app.trigger = ValidationTrigger.blur;
await assertEventHandler(target, 'blur', 1, scheduler, controllerSpy);
target.value = 'bar';
await assertEventHandler(target, 'change', 0, scheduler, controllerSpy);
app.trigger = ValidationTrigger.changeOrBlur;
await assertEventHandler(target, 'blur', 1, scheduler, controllerSpy);
target.value = 'foo';
await assertEventHandler(target, 'change', 1, scheduler, controllerSpy);
app.trigger = ValidationTrigger.manual;
await assertEventHandler(target, 'blur', 0, scheduler, controllerSpy);