import { CB, Maybe } from 'vest-utils'; import { TIsolate, Isolate, IsolateKey } from 'vestjs-runtime'; import { TestSeverity } from '../../../suiteResult/Severity'; import { TFieldName } from '../../../suiteResult/SuiteResultTypes'; import { IsolateTestStateMachine, TestStatus, } from '../../StateMachines/IsolateTestStateMachine'; import { AsyncTest, TestFn } from '../../test/TestTypes'; import { VestIsolateType } from '../VestIsolateType'; export type TIsolateTest = TIsolate< CommonTestFields & IsolateTestPayload >; export function IsolateTest( callback: CB, input: CommonTestFields, key?: IsolateKey, ): TIsolateTest { const payload: IsolateTestPayload = { ...IsolateTestBase(), fieldName: input.fieldName, testFn: input.testFn, }; if (input.message) { payload.message = input.message; } const isolate = Isolate.create( VestIsolateType.Test, callback, payload, key ?? null, ); return isolate as TIsolateTest; } export function IsolateTestBase() { return { severity: TestSeverity.Error, testStatus: IsolateTestStateMachine.initial(), }; } export type IsolateTestPayload = CommonTestFields & { severity: TestSeverity; testStatus: TestStatus; asyncTest?: AsyncTest; }; type CommonTestFields = { message?: Maybe; fieldName: F; testFn: TestFn; };