Files
vue-cli/packages/@vue/cli-plugin-eslint/__tests__/ui.spec.js

165 lines
5.1 KiB
JavaScript

const configDescriptor = require('../ui/configDescriptor')
const { getEslintConfigName, getDefaultValue, getEslintPrompts } = configDescriptor
describe('getEslintConfigName', () => {
describe('for "extend" of string type', () => {
it('returns null if it doesn\'t extend vue plugin config', () => {
expect(getEslintConfigName({
extends: 'eslint:recommended'
})).toBe(null)
})
it('returns vue config used', () => {
expect(getEslintConfigName({
extends: 'plugin:vue/recommended'
})).toBe('plugin:vue/recommended')
})
})
describe('for "extend" of array type', () => {
it('returns null if it doesn\'t extend vue plugin config', () => {
expect(getEslintConfigName({
extends: ['eslint:recommended', 'standard']
})).toBe(null)
})
it('returns vue config used', () => {
expect(getEslintConfigName({
extends: ['eslint:recommended', 'plugin:vue/recommended']
})).toBe('plugin:vue/recommended')
})
})
})
describe('getDefaultValue', () => {
const getResult = (config, ruleCategory) => {
const rule = {
meta: {
docs: {
category: ruleCategory
}
}
}
const data = {
eslint: {
extends: config
}
}
return getDefaultValue(rule, data)
}
it('returns "ERROR" value if the rule belongs to the selected configuration', () => {
expect(getResult('plugin:vue/base', 'base')).toBe('error')
expect(getResult('plugin:vue/essential', 'base')).toBe('error')
expect(getResult('plugin:vue/essential', 'essential')).toBe('error')
expect(getResult('plugin:vue/strongly-recommended', 'base')).toBe('error')
expect(getResult('plugin:vue/strongly-recommended', 'essential')).toBe('error')
expect(getResult('plugin:vue/strongly-recommended', 'strongly-recommended')).toBe('error')
expect(getResult('plugin:vue/recommended', 'base')).toBe('error')
expect(getResult('plugin:vue/recommended', 'essential')).toBe('error')
expect(getResult('plugin:vue/recommended', 'strongly-recommended')).toBe('error')
expect(getResult('plugin:vue/recommended', 'recommended')).toBe('error')
})
it('returns "OFF" value if the rule doesn\'t belong to the selected configuration', () => {
expect(getResult('plugin:vue/base', 'essential')).toBe('off')
expect(getResult('plugin:vue/base', 'strongly-recommended')).toBe('off')
expect(getResult('plugin:vue/base', 'recommended')).toBe('off')
expect(getResult('plugin:vue/essential', 'strongly-recommended')).toBe('off')
expect(getResult('plugin:vue/essential', 'recommended')).toBe('off')
expect(getResult('plugin:vue/strongly-recommended', 'recommended')).toBe('off')
expect(getResult('plugin:vue/base', undefined)).toBe('off')
expect(getResult('plugin:vue/essential', undefined)).toBe('off')
expect(getResult('plugin:vue/strongly-recommended', undefined)).toBe('off')
expect(getResult('plugin:vue/recommended', undefined)).toBe('off')
})
})
describe('getEslintPrompts', () => {
// project configuration
const data = {
eslint: {
extends: 'plugin:vue/recommended',
rules: {
'vue/lorem': ['error', ['asd']], // custom setting
'vue/ipsum': 'warning'
}
}
}
// all rules
const rules = {
'lorem': {
meta: {
docs: {
category: undefined,
description: 'Lorem description',
url: 'http://test.com/lorem'
}
}
},
'ipsum': {
meta: {
docs: {
category: 'recommended',
description: 'Ipsum description',
url: 'http://test.com/ipsum'
}
}
},
'dolor': {
meta: {
docs: {
category: 'strongly-recommended',
description: 'Dolor description',
url: 'http://test.com/dolor'
}
}
},
'sit': {
meta: {
docs: {
category: 'base',
description: 'Sit description',
url: 'http://test.com/sit'
}
}
}
}
const prompts = getEslintPrompts(data, rules)
it('creates an array with 3 settings, leaving out category "base"', () => {
expect(prompts).toHaveLength(3)
})
it('creates an array which order matches eslint categories', () => {
expect(prompts[0].name).toBe('vue/dolor')
expect(prompts[1].name).toBe('vue/ipsum')
expect(prompts[2].name).toBe('vue/lorem')
})
it('doesn\'t set value on prompt item, if the rule wasn\'t set in project\'s eslint config', () => {
expect(prompts[0].value).toBe(undefined)
})
it('sets value on prompt item, if the rule was set in project\'s eslint config', () => {
expect(prompts[1].value).toBe('"warning"')
expect(prompts[2].value).toBe('["error",["asd"]]')
})
it('generates an extra choice for rules that have a custom setting', () => {
expect(prompts[0].choices).toHaveLength(3)
expect(prompts[1].choices).toHaveLength(3)
expect(prompts[2].choices).toHaveLength(4)
})
it('sets a default value to "ERROR" for rule that belong to the chosen config', () => {
expect(prompts[0].default).toBe('"error"')
expect(prompts[1].default).toBe('"error"')
expect(prompts[2].default).toBe('"off"')
})
})