@qaflag/core
Version:
Base requirements for the QA Flag library
37 lines (34 loc) • 1.18 kB
text/typescript
import { ScenarioDecoratorOpts, ScenarioInitOpts } from './scenario.options';
import { ScenarioDefinitions } from '../suite/suite.mixin';
import { ScenarioInterface } from './scenario.interface';
export function Scenario(opts?: ScenarioDecoratorOpts) {
return function (
target: any,
methodName: string | symbol,
descriptor: PropertyDescriptor,
) {
const originalMethod = descriptor.value;
const scenario: ScenarioInitOpts = {
...opts,
uri: opts?.uri || 'GET /',
key: methodName,
description: opts?.description || '',
step: opts?.step || 1,
next: async (scenario: ScenarioInterface) => {
return originalMethod.apply(scenario.suite, [scenario.context]);
},
};
descriptor.value = () => {
return scenario;
};
target[ScenarioDefinitions] = target[ScenarioDefinitions] || {};
target[ScenarioDefinitions][methodName] = scenario;
return descriptor;
};
}
export function Template(initialOptions: ScenarioDecoratorOpts) {
return (overrideOptions?: Partial<ScenarioDecoratorOpts>) => {
const opts = { ...initialOptions, ...overrideOptions };
return Scenario(opts);
};
}