public static calculateOperationCoverage()

in lib/apiScenario/coverageCalculator.ts [18:64]


  public static calculateOperationCoverage(
    testDef: ScenarioDefinition,
    swaggerSpecs: SwaggerSpec[]
  ): OperationCoverageResult {
    const ret: OperationCoverageResult = {
      coveredOperationNumber: 0,
      totalOperationNumber: 0,
      coverage: 0,
      coveredOperationIds: [],
      uncoveredOperationIds: [],
    };

    const allOperationIds = new Set<string>();
    for (const swaggerSpec of swaggerSpecs) {
      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);
      }
    }
    ret.coverage =
      allOperationIds.size === 0 ? 0 : coverageOperationIds.size / allOperationIds.size;
    ret.coveredOperationNumber = coverageOperationIds.size;
    ret.totalOperationNumber = allOperationIds.size;
    ret.coveredOperationIds = [...coverageOperationIds];
    const difference = [...allOperationIds].filter((x) => !coverageOperationIds.has(x));
    ret.uncoveredOperationIds = difference;
    return ret;
  }