import { mount } from 'enzyme'; import React from 'react'; import { ApplicationsPickerInput } from './ApplicationsPickerInput'; import { ApplicationReader } from '../application'; import type { IValidator } from '../presentation'; describe('ApplicationsPickerInput', () => { function listApplicationsSpy() { return spyOn(ApplicationReader, 'listApplications').and.callFake(() => { return Promise.resolve([{ name: 'app1' }, { name: 'app2' }]); }); } function asyncTick() { return new Promise((resolve) => setTimeout(resolve)); } it('lists applications on mount', () => { const spy = listApplicationsSpy(); mount(); expect(spy).toHaveBeenCalledTimes(1); }); it('registers a validator that validates the selected application exists', async () => { listApplicationsSpy(); const validationSpy = jasmine.createSpyObj(['addValidator', 'removeValidator', 'revalidate']); mount(); await asyncTick(); // let the listApplications promise resolve expect(validationSpy.addValidator).toHaveBeenCalledTimes(1); const validator: IValidator = validationSpy.addValidator.calls.mostRecent().args[0]; expect(validator('app1')).toBeFalsy(); expect(validator('notexists')).toContain('notexists does not exist'); }); });