private getVariables()

in lib/apiScenario/gen/restlerApiScenarioGenerator.ts [229:312]


  private getVariables(scenario: RawScenario) {
    const variables: { [name: string]: string | Variable } = {};
    if (!this.parameters) {
      const map = new Map();
      for (const swagger of this.swaggers) {
        traverseSwagger(swagger, {
          onOperation: (operation) => {
            for (let parameter of operation.parameters ?? []) {
              parameter = this.jsonLoader.resolveRefObj(parameter);
              if (
                !parameter.required ||
                envVariables.includes(parameter.name) ||
                (parameter.in === "path" && parameter[xmsSkipUrlEncoding])
              ) {
                continue;
              }

              let key: any = parameter.name;

              if (parameter.in === "body") {
                key = this.jsonLoader.resolveRefObj(parameter.schema!);
              }

              const value = map.get(key);

              if (value) {
                value.count++;
                value.operationIds.add(operation.operationId);
              } else {
                map.set(key, {
                  operationIds: new Set<string>([operation.operationId!]),
                  name: parameter.name,
                  count: 1,
                  value: this.generateVariable(parameter),
                });
              }
            }
          },
        });
      }
      this.parameters = map;
    }

    [...this.parameters.values()]
      .sort((a, b) => b.count - a.count)
      .forEach((v) => {
        const operation = this.operations.get([...v.operationIds.values()][0]);
        if (this.opts.useExample) {
          let p = operation?.parameters?.find((p) => {
            p = this.jsonLoader.resolveRefObj(p);
            return p.name === v.name;
          });
          if (p) {
            p = this.jsonLoader.resolveRefObj(p);
          }
          // for body,query parameter
          if (
            p?.in !== "path" &&
            operation?.[xmsExamples] &&
            Object.keys(operation?.[xmsExamples] ?? {}).length
          ) {
            return;
          }
        }
        const step = scenario.steps.find(
          (s) =>
            (s as RawStepOperation).operationId &&
            v.operationIds.has((s as RawStepOperation).operationId)
        );
        if (!step) {
          return;
        }
        if (!variables[v.name] && v.count > 1) {
          variables[v.name] = v.value;
          return;
        }
        if (!step?.variables) {
          step.variables = {};
        }
        step.variables[v.name] = v.value;
      });

    return variables;
  }