UNPKG

@opentext/sdp-sdm-tests-to-run-conversion

Version:

JavaScript-based tool that converts the testsToRun parameter for running automated tests from OpenText Core Software Delivery Platform and OpenText Software Delivery Management.

127 lines (112 loc) 4.54 kB
/* * Copyright 2016-2025 Open Text. * * The only warranties for products and services of Open Text and * its affiliates and licensors (“Open Text”) are as may be set forth * in the express warranty statements accompanying such products and services. * Nothing herein should be construed as constituting an additional warranty. * Open Text shall not be liable for technical or editorial errors or * omissions contained herein. The information contained herein is subject * to change without notice. * * Except as specifically indicated otherwise, this document contains * confidential information and a valid license is required for possession, * use or copying. If this work is provided to the U.S. Government, * consistent with FAR 12.211 and 12.212, Commercial Computer Software, * Computer Software Documentation, and Technical Data for Commercial Items are * licensed to the U.S. Government under vendor's standard commercial license. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * http://www.apache.org/licenses/LICENSE-2.0 * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import CustomFramework from "./dto/CustomFramework"; import Replacement from "./dto/Replacement"; /** * Parses a JSON string for custom test framework configuration, extracting settings for * test formatting, delimiters, optional prefixes/suffixes, and transformation rules. * * @param configString - JSON string representing framework configuration. * @returns `CustomFrameworkConfig` - Parsed configuration object. * @throws `Error` - If JSON parsing fails or required fields are missing. */ const parseCustomFramework = (configString: string): CustomFramework => { let parsedConfig; try { parsedConfig = JSON.parse(configString); } catch (error) { throw new Error( "Invalid JSON format: Unable to parse custom framework configuration string.", ); } const customFrameworkConfig: CustomFramework = { testPattern: parseRequiredField(parsedConfig, "testPattern"), testDelimiter: parseRequiredField(parsedConfig, "testDelimiter"), ...parseOptionalFields(parsedConfig), replacements: parseReplacements(parsedConfig.replacements), }; return customFrameworkConfig; }; const parseReplacements = (replacements: any): Replacement[] | undefined => { if (!Array.isArray(replacements)) return undefined; return replacements.map(parseReplacement); }; const parseReplacement = (replacement: any): Replacement => { if ( typeof replacement.type !== "string" || typeof replacement.target !== "string" ) { throw new Error( "Invalid replacement object in custom framework configuration.", ); } const parsedReplacement: Replacement = { type: replacement.type, target: replacement.target, }; if ( replacement.type === "replaceString" || replacement.type === "replaceRegex" || replacement.type === "replaceRegexFirst" ) { if (typeof replacement.string === "string") parsedReplacement.string = replacement.string; if (typeof replacement.replacement === "string") parsedReplacement.replacement = replacement.replacement; if ( replacement.type !== "replaceString" && typeof replacement.regex === "string" ) { parsedReplacement.regex = replacement.regex; } } if (replacement.type === "joinString") { if (typeof replacement.suffix === "string") parsedReplacement.suffix = replacement.suffix; if (typeof replacement.prefix === "string") parsedReplacement.prefix = replacement.prefix; } return parsedReplacement; }; const parseRequiredField = (config: any, fieldName: string): string => { if (typeof config[fieldName] !== "string" || !config[fieldName]) { throw new Error( `Invalid or missing '${fieldName}' in custom framework configuration.`, ); } return config[fieldName]; }; const parseOptionalFields = (config: any): Partial<CustomFramework> => { return { prefix: config.prefix || "", suffix: config.suffix || "", allowDuplication: config.allowDuplication !== false, }; }; export default parseCustomFramework;