in lib/apiScenario/gen/ApiTestRuleBasedGenerator.ts [456:515]
async run(outputDir: string, platFormType: PlatFormType) {
const swaggerSpecs = await Promise.all(
this.swaggerFiles.map((f) => this.swaggerLoader.load(f))
);
const analyzer = new ArmResourceAnalyzer(swaggerSpecs, this.jsonLoader);
const trackedResources = analyzer.getTrackedResource();
const proxyResources = analyzer.getProxyResource();
const extensionResources = analyzer.getExtensionResource();
const generateForResources = async (
resources: ArmResourceManipulator[],
kind: ArmResourceKind
) => {
let base: RawScenario = { steps: [] };
let dependency = this.dependencyFile
? new ArmResourceDependencyGenerator(
this.swaggerFiles,
this.dependencyFile,
outputDir,
this.basicScenarioFile
)
: undefined;
for (const resource of resources) {
const definition: RawScenarioDefinition = {
scope: "ResourceGroup",
variables: undefined,
prepareSteps: undefined,
scenarios: [],
cleanUpSteps: undefined,
};
for (const rule of this.rules.filter(
(rule) => rule.resourceKinds?.includes(kind) && rule.appliesTo.includes(platFormType)
)) {
// what if no dependency ??
base = (await dependency?.generate(resource, rule.useExample)) || base;
if (base) {
const apiSenarios = rule.generator(resource, base);
if (apiSenarios) {
apiSenarios.description = "[This scenario is auto-generated]" + rule.description;
dependency?.updateExampleFile(resource, apiSenarios);
dependency?.generateResourceCleanup(resource, apiSenarios);
definition.scenarios.push({ scenario: rule.name, ...apiSenarios });
}
}
}
if (definition.scenarios.length > 0) {
const [prepare, cleanup] = dependency?.getPrepareAndCleanUp(resource) || [
undefined,
undefined,
];
definition.prepareSteps = prepare;
definition.cleanUpSteps = cleanup;
this.writeFile(resource.resourceType, definition, outputDir);
}
}
};
await generateForResources(trackedResources, "Tracked");
await generateForResources(proxyResources, "Proxy");
await generateForResources(extensionResources, "Extension");
}