import { InputTypings } from '../src/parser/types_parser'; import { ExampleZoneFile, ExampleDomain } from '../example/example_types'; import { getErrorText, importZoneAdapter, clientServiceApi, createRecordValidator, } from '../example/example_consumer'; import { Validator } from '../src'; import { Parser } from '../src/parser/parser'; export const parse = (text: string, $originName?: string) => new Parser($originName).setText(text).parse(); export const validate = (parser: Parser) => new Validator({ getErrorText }).validate(parser); export const mergeMultipleSpaces = (x: string): string => x.replace(/\s+/, ' '); export const spyOnCreateApi = () => jest.spyOn(clientServiceApi, 'createRecords'); export type MockSupportedRecordType = | InputTypings.SupportedRecordType | 'GENERAL' | 'SOA'; export const hz = { name: 'igloo.com.', }; export const fromApiRecordToClientRecord = ( record: ExampleDomain.ApiRecord ): ExampleDomain.ClientRecord => ({ name: record.recordName, endpoints: record.routeTrafficToEndpoints, type: record.recordType, ttl: ['string', 'number'].includes(typeof record.ttl) ? +record.ttl : 0, }); export const testParseAdaptAndValidate = ( txt: string, hz: ExampleDomain.HostedZone ) => { const parser = parse(txt, hz?.name); const { records, warnings } = importZoneAdapter(parser, hz); const { errors } = new Validator({ getErrorText, postValidators: [createRecordValidator(records)], }).validate(parser); return { errors, warnings, records, parser }; }; export const testImportZoneFile = ( txt: string ): ExampleZoneFile.ParsedAndValidated => { const { parser, records, warnings, errors } = testParseAdaptAndValidate( txt, hz ); return { records: records.map(fromApiRecordToClientRecord), error: errors[0], warnings, parser, }; }; export const testImportZoneFileAndCallApi = (txt: string) => { const { records } = testParseAdaptAndValidate(txt, hz); return clientServiceApi.createRecords(hz, records); };