import { makeAllSchemaStubs } from '~/data/tests/stubs/make-all-schema-stub'; import { CustomValidatorAdapter } from '~/data/use-cases/validation-builder-adapter/custom-cases-adapters/helper'; import { ValidationSchemas } from '~/domain'; type Adapter = { new (...args: ConstructorParameters): { build(rules: any): unknown; }; }; export const getMakeSut = (adapter: A) => { return () => { const stubs = { makeSchema: makeAllSchemaStubs(), }; const sut = new adapter(stubs.makeSchema); return { sut, stubs }; }; }; export const commonCustomCasesAdapterTests = ( type: T, format: ValidationSchemas.Format, adapter: A ) => { const makeSut = getMakeSut(adapter); const TARGET_SCHEMA = type; const TARGET_FORMAT = format; test(`Should call makeSchema with correct parameters`, () => { const { sut, stubs } = makeSut(); const makeSchema = stubs.makeSchema[TARGET_SCHEMA] as any; const makeSchemaSpy = jest.spyOn(makeSchema, 'make'); const rules = { required: true }; sut.build(rules); expect(makeSchemaSpy).toHaveBeenCalledWith({ format: TARGET_FORMAT, ...rules, }); }); };