UNPKG

gherkin-lint

Version:

A Gherkin linter/validator written in javascript

52 lines (40 loc) 1.4 kB
"use strict"; const _ = require('lodash'); const gherkinUtils = require('./utils/gherkin.js'); const rule = 'required-tags'; const availableConfigs = { tags: [], ignoreUntagged: true }; function checkTagExists(requiredTag, ignoreUntagged, scenarioTags, scenarioType, scenarioLine) { const result = ignoreUntagged && scenarioTags.length == 0 || scenarioTags.some(tagObj => RegExp(requiredTag).test(tagObj.name)); if (!result) { return { message: `No tag found matching ${requiredTag} for ${scenarioType}`, rule, line: scenarioLine }; } return result; } function run(feature, unused, config) { if (!feature) { return []; } const mergedConfig = _.merge({}, availableConfigs, config); let errors = []; feature.children.forEach(child => { if (child.scenario) { const type = gherkinUtils.getNodeType(child.scenario, feature.language); const line = child.scenario.location.line; // Check each Scenario for the required tags const requiredTagErrors = mergedConfig.tags.map(requiredTag => checkTagExists(requiredTag, mergedConfig.ignoreUntagged, child.scenario.tags || [], type, line)).filter(item => typeof item === 'object' && item.message); // Update errors errors = errors.concat(requiredTagErrors); } }); return errors; } module.exports = { name: rule, run: run, availableConfigs: availableConfigs };