in lib/apiScenario/coverageCalculator.ts [66:116]
public static calculateOperationCoverageBySpec(
testDef: ScenarioDefinition,
swaggerSpecs: SwaggerSpec[]
): Map<string, OperationCoverageResult> {
const ret: Map<string, OperationCoverageResult> = new Map();
for (const swaggerSpec of swaggerSpecs) {
const result: OperationCoverageResult = {
coveredOperationNumber: 0,
totalOperationNumber: 0,
coverage: 0,
coveredOperationIds: [],
uncoveredOperationIds: [],
};
const allOperationIds = new Set<string>();
traverseSwagger(swaggerSpec, {
onOperation: (operation: Operation, _path: Path, _method: LowerHttpMethods) => {
allOperationIds.add(operation.operationId!);
},
});
const coverageOperationIds = new Set<string>();
for (const step of testDef.prepareSteps) {
if (step.type === "restCall" && allOperationIds.has(step.operationId)) {
coverageOperationIds.add(step.operationId);
}
}
for (const testScenario of testDef.scenarios) {
for (const step of testScenario.steps) {
if (step.type === "restCall" && allOperationIds.has(step.operationId)) {
coverageOperationIds.add(step.operationId);
}
}
}
for (const step of testDef.cleanUpSteps) {
if (step.type === "restCall" && allOperationIds.has(step.operationId)) {
coverageOperationIds.add(step.operationId);
}
}
result.coverage =
allOperationIds.size === 0 ? 0 : coverageOperationIds.size / allOperationIds.size;
result.coveredOperationNumber = coverageOperationIds.size;
result.totalOperationNumber = allOperationIds.size;
result.coveredOperationIds = [...coverageOperationIds];
const difference = [...allOperationIds].filter((x) => !coverageOperationIds.has(x));
result.uncoveredOperationIds = difference;
ret.set(swaggerSpec._filePath, result);
}
return ret;
}