@sketch-hq/sketch-assistant-utils
Version:
Utility functions and types for Sketch Assistants.
141 lines (140 loc) • 4.52 kB
JavaScript
import { getRuleConfig, isRuleConfigured, getRuleOption, isRuleActive, getRuleSeverity, isRuleConfigValid, } from '..';
import { createAssistantConfig, createRule } from '../../test-helpers';
import { ViolationSeverity } from '@sketch-hq/sketch-assistant-types';
describe('getRuleConfig', () => {
test('can retrieve rule configuration', () => {
expect(getRuleConfig(createAssistantConfig({
rules: {
foo: { active: true },
},
}), 'foo')).toMatchInlineSnapshot(`
Object {
"active": true,
}
`);
});
});
describe('isRuleConfigured', () => {
test('returns true for a configured rule', () => {
expect(isRuleConfigured(createAssistantConfig({
rules: {
foo: { active: true },
},
}), 'foo')).toBe(true);
});
test('returns false for an un-configured rule', () => {
expect(isRuleConfigured(createAssistantConfig(), 'foo')).toBe(false);
});
});
describe('getRuleOption', () => {
test('returns option value', () => {
expect(getRuleOption(createAssistantConfig({
rules: {
foo: {
active: true,
option: 1,
},
},
}), 'foo', 'option')).toBe(1);
});
test('returns null for missing option', () => {
expect(getRuleOption(createAssistantConfig({
rules: {
foo: {
active: true,
option: 1,
},
},
}), 'foo', 'missing')).toBe(null);
});
});
describe('isRuleActive', () => {
test('returns true for activated rule', () => {
expect(isRuleActive(createAssistantConfig({
rules: {
foo: { active: true },
},
}), 'foo')).toBe(true);
});
test('returns false for de-activated rule', () => {
expect(isRuleActive(createAssistantConfig({
rules: {
foo: { active: false },
},
}), 'foo')).toBe(false);
});
test('returns false for un-configured rule', () => {
expect(isRuleActive(createAssistantConfig(), 'foo')).toBe(false);
});
});
describe('getRuleSeverity', () => {
test('returns `error` severity level when not specified anywhere', () => {
expect(getRuleSeverity(createAssistantConfig({
rules: {
foo: { active: true },
},
}), 'foo')).toBe(ViolationSeverity.error);
});
test('falls back to configs defaultSeverity if not set in rule', () => {
expect(getRuleSeverity(createAssistantConfig({
defaultSeverity: ViolationSeverity.warn,
rules: {
foo: { active: true },
},
}), 'foo')).toBe(ViolationSeverity.warn);
});
test('can be set in rule', () => {
expect(getRuleSeverity(createAssistantConfig({
defaultSeverity: ViolationSeverity.warn,
rules: {
foo: { active: true, severity: ViolationSeverity.info },
},
}), 'foo')).toBe(ViolationSeverity.info);
});
});
describe('isRuleConfigValid', () => {
test('returns true for a valid config', () => {
expect(isRuleConfigValid(createAssistantConfig({
rules: {
foo: { active: true, option: 'bar' },
},
}), createRule({
name: 'foo',
getOptions: (helpers) => [
helpers.stringOption({
name: 'option',
title: '',
description: '',
}),
],
}))).toBe(true);
});
test('returns an error for an invalid config', () => {
expect(isRuleConfigValid(createAssistantConfig({
rules: {
foo: { active: true, option: 1 },
},
}), createRule({
name: 'foo',
getOptions: (helpers) => [
helpers.stringOption({
name: 'option',
title: '',
description: '',
}),
],
}))).toMatchInlineSnapshot(`
Array [
Object {
"instancePath": "/option",
"keyword": "type",
"message": "must be string",
"params": Object {
"type": "string",
},
"schemaPath": "#/properties/option/type",
},
]
`);
});
});