Skip to content

Commit 82bf27e

Browse files
chore: test cases
1 parent d171f15 commit 82bf27e

File tree

1 file changed

+75
-0
lines changed

1 file changed

+75
-0
lines changed

test/messages.test.ts

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
import { beforeEach, describe, expect, test } from 'bun:test'
2+
import { MessageProvider, setCustomMessages, v } from '../src'
3+
4+
describe('Custom Messages', () => {
5+
beforeEach(() => {
6+
// Reset to default messages provider before each test
7+
setCustomMessages(new MessageProvider())
8+
})
9+
10+
test('should use global custom messages', () => {
11+
setCustomMessages(new MessageProvider({
12+
required: 'This field is required',
13+
min: 'Must be at least {min} characters',
14+
email: 'Please provide a valid email address',
15+
}))
16+
17+
const validator = v.string().min(3).email().required()
18+
const result = validator.validate('ab')
19+
20+
expect(result.valid).toBe(false)
21+
if (Array.isArray(result.errors)) {
22+
expect(result.errors[0].message).toBe('Must be at least 3 characters')
23+
}
24+
})
25+
26+
test('should use field-specific messages', () => {
27+
setCustomMessages(new MessageProvider({
28+
'username.required': 'Please choose a username',
29+
'username.min': 'Username must be at least {min} characters',
30+
'email.required': 'Email is required for your account',
31+
}))
32+
33+
const validator = v.object().shape({
34+
username: v.string().min(3).required(),
35+
email: v.string().email().required(),
36+
})
37+
38+
const result = validator.validate({
39+
username: 'ab',
40+
email: 'invalid-email',
41+
})
42+
43+
expect(result.valid).toBe(false)
44+
if (!Array.isArray(result.errors)) {
45+
expect(result.errors.username[0].message).toBe('Username must be at least 3 characters')
46+
}
47+
})
48+
49+
test('should format parameters correctly', () => {
50+
setCustomMessages(new MessageProvider({
51+
min: 'Minimum {min} characters required',
52+
max: 'Maximum {max} characters allowed',
53+
equals: 'Must be equal to {param}',
54+
}))
55+
56+
const validator = v.string().min(5).max(10).equals('test')
57+
const result = validator.validate('abc')
58+
59+
expect(result.valid).toBe(false)
60+
if (Array.isArray(result.errors)) {
61+
expect(result.errors[0].message).toBe('Minimum 5 characters required')
62+
}
63+
})
64+
65+
test('should fall back to default messages when custom message not found', () => {
66+
const validator = v.string().min(3).email().required()
67+
const result = validator.validate('ab')
68+
69+
expect(result.valid).toBe(false)
70+
// Should use default messages from the provider
71+
if (Array.isArray(result.errors)) {
72+
expect(result.errors[0].message).toContain('at least')
73+
}
74+
})
75+
})

0 commit comments

Comments
 (0)