-
Notifications
You must be signed in to change notification settings - Fork 15
Expand file tree
/
Copy pathschemas.unit.test.ts
More file actions
89 lines (77 loc) · 2.39 KB
/
schemas.unit.test.ts
File metadata and controls
89 lines (77 loc) · 2.39 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
import { describe, expect, it } from 'vitest';
import {
type TableCellValue,
docsUrlSchema,
globPathSchema,
tableCellValueSchema,
weightSchema,
} from './schemas.js';
describe('primitiveValueSchema', () => {
it('should accept a valid union', () => {
const value: TableCellValue = 'test';
expect(() => tableCellValueSchema.parse(value)).not.toThrow();
});
it('should throw for a invalid union', () => {
const value = new Date();
expect(() => tableCellValueSchema.parse(value)).toThrow('invalid_union');
});
});
describe('weightSchema', () => {
it('should accept an integer', () => {
expect(() => weightSchema.parse(1)).not.toThrow();
});
it('should accept a float', () => {
expect(() => weightSchema.parse(0.5)).not.toThrow();
});
it('should accept zero', () => {
expect(() => weightSchema.parse(0)).not.toThrow();
});
it('should throw for negative number', () => {
expect(() => weightSchema.parse(-1)).toThrow('too_small');
});
});
describe('docsUrlSchema', () => {
it('should accept a valid URL', () => {
expect(() =>
docsUrlSchema.parse(
'https://eslint.org/docs/latest/rules/no-unused-vars',
),
).not.toThrow();
});
it('should accept an empty string', () => {
expect(() => docsUrlSchema.parse('')).not.toThrow();
});
it('should tolerate invalid URL - treat as missing and log warning', () => {
expect(
docsUrlSchema.parse(
'/home/user/project/tools/eslint-rules/rules/my-custom-rule.ts',
),
).toBe('');
expect(console.warn).toHaveBeenCalledWith(
'Ignoring invalid docsUrl: /home/user/project/tools/eslint-rules/rules/my-custom-rule.ts',
);
});
it('should throw if not a string', () => {
expect(() => docsUrlSchema.parse(false)).toThrow(
'Invalid input: expected string, received boolean',
);
});
});
describe('globPathSchema', () => {
it.each([
'**/*.ts',
'src/components/*.jsx',
'{src,lib,test}/**/*.js',
'!node_modules/**',
])('should accept a valid glob pattern: %s', pattern => {
expect(() => globPathSchema.parse(pattern)).not.toThrow();
});
it.each(['path<file.js', 'path>file.js', 'path"file.js', 'path|file.js'])(
'should throw for invalid path with forbidden character: %s',
pattern => {
expect(() => globPathSchema.parse(pattern)).toThrow(
'valid file path or glob pattern',
);
},
);
});