import 'reflect-metadata'; import { ElementRef } from '@angular/core'; import { PositiveNumbersDirective, } from './positive-numbers.directive'; const initPositiveNumbersDirective = ( elementRef?: ElementRef, ) => { return new PositiveNumbersDirective(elementRef); }; describe('ngOnInit', () => { test('Adds the min attribute to the element ref', () => { const elementRef = { nativeElement: { setAttribute: jest.fn(), }, } as ElementRef; const positiveNumbersDirective = initPositiveNumbersDirective( elementRef, ); positiveNumbersDirective.minAttribute = 10; positiveNumbersDirective.ngOnInit(); expect(elementRef.nativeElement.setAttribute).toHaveBeenCalledWith( 'min', 10, ); }); }); describe('keydown', () => { const keydownTest = ( key: string, expectPreventDefault = false, startingValue = '', ) => { const elementRef = { nativeElement: { value: startingValue, }, } as ElementRef; const positiveNumbersDirective = initPositiveNumbersDirective( elementRef, ); const event = { key, } as KeyboardEvent; event.preventDefault = jest.fn(); positiveNumbersDirective.keydown(event); if (expectPreventDefault) { expect(event.preventDefault).toHaveBeenCalled(); } else { expect(event.preventDefault).not.toHaveBeenCalled(); } }; test('Does not prevent default if key is backspace', () => { keydownTest('Backspace'); }); test('Does not prevent default if key is Tab', () => { keydownTest('Tab'); }); test('Does not prevent default if key is End', () => { keydownTest('End'); }); test('Does not prevent default if key is Home', () => { keydownTest('Home'); }); test('Does not prevent default if key is ArrowRight', () => { keydownTest('ArrowRight'); }); test('Does not prevent default if key is ArrowLeft', () => { keydownTest('ArrowLeft'); }); test('Does not prevent default if key is ArrowUp', () => { keydownTest('ArrowUp'); }); test('Does not prevent default if key is ArrowDown', () => { keydownTest('ArrowDown'); }); test('Does not prevent default is just numbers', () => { keydownTest('1'); }); test('Does not prevent default if numbers added to numbers', () => { keydownTest('1', false, '1'); }); test('Prevents default if just text', () => { keydownTest('t', true); }); test('Prevents default if text added to numbers', () => { keydownTest('t', true, '1'); }); test('Prevents default if key is minus', () => { keydownTest('-', true); }); });