@amiceli/vitest-cucumber
Version:
vitest tools to use Gherkin feature in unit tests
53 lines (52 loc) • 2.11 kB
JavaScript
import { MissingScenarioOutlineVariableValueError, ScenarioOulineWithoutExamplesError, ScenarioOutlineVariableNotCalledInStepsError, ScenarioOutlineVariablesDeclaredWithoutExamplesError, } from '../../errors/errors';
import { ScenarioOutline } from '../../parser/models/scenario';
export class ScenarioStateDetector {
scenario;
constructor(scenario) {
this.scenario = scenario;
}
static forScenario(scenario) {
return new ScenarioStateDetector(scenario);
}
checkIfScenarioHasNoExample() {
const { examples } = this.scenario;
if (examples.length === 0) {
throw new ScenarioOulineWithoutExamplesError(this.scenario);
}
}
detectMissingVariableInSteps() {
const { examples } = this.scenario;
const examplesKeys = Object.keys(examples[0]);
const missingVariable = examplesKeys.find((v) => {
return (this.scenario.steps
.map((s) => s.details)
.join(``)
.includes(`<${v}>`) === false);
});
if (missingVariable) {
throw new ScenarioOutlineVariableNotCalledInStepsError(this.scenario, missingVariable);
}
}
detectMissingVariableValue() {
const { examples } = this.scenario;
const examplesKeys = Object.keys(examples[0]);
const missingVariable = examplesKeys.find((v) => {
return (examples.filter((values) => {
return values[v] === undefined || values[v] === null;
}).length > 0);
});
if (missingVariable) {
throw new MissingScenarioOutlineVariableValueError(this.scenario, missingVariable);
}
}
checkExemples() {
if (this.scenario instanceof ScenarioOutline) {
if (this.scenario.missingExamplesKeyword) {
throw new ScenarioOutlineVariablesDeclaredWithoutExamplesError(this.scenario);
}
this.checkIfScenarioHasNoExample();
this.detectMissingVariableInSteps();
this.detectMissingVariableValue();
}
}
}