@@ -27,6 +27,55 @@ describe('validateUIMessages', () => {
2727 [AI_InvalidArgumentError: Invalid argument for parameter messages: messages parameter must be provided]
2828 ` ) ;
2929 } ) ;
30+
31+ it ( 'should throw TypeValidationError when messages array is empty' , async ( ) => {
32+ await expect (
33+ validateUIMessages ( {
34+ messages : [ ] ,
35+ } ) ,
36+ ) . rejects . toThrowErrorMatchingInlineSnapshot ( `
37+ [AI_TypeValidationError: Type validation failed: Value: [].
38+ Error message: [
39+ {
40+ "origin": "array",
41+ "code": "too_small",
42+ "minimum": 1,
43+ "inclusive": true,
44+ "path": [],
45+ "message": "Messages array must not be empty"
46+ }
47+ ]]
48+ ` ) ;
49+ } ) ;
50+
51+ it ( 'should throw TypeValidationError when message has empty parts array' , async ( ) => {
52+ await expect (
53+ validateUIMessages ( {
54+ messages : [
55+ {
56+ id : '1' ,
57+ role : 'user' ,
58+ parts : [ ] ,
59+ } ,
60+ ] ,
61+ } ) ,
62+ ) . rejects . toThrowErrorMatchingInlineSnapshot ( `
63+ [AI_TypeValidationError: Type validation failed: Value: [{"id":"1","role":"user","parts":[]}].
64+ Error message: [
65+ {
66+ "origin": "array",
67+ "code": "too_small",
68+ "minimum": 1,
69+ "inclusive": true,
70+ "path": [
71+ 0,
72+ "parts"
73+ ],
74+ "message": "Message must contain at least one part"
75+ }
76+ ]]
77+ ` ) ;
78+ } ) ;
3079 } ) ;
3180
3281 describe ( 'metadata' , ( ) => {
@@ -1158,6 +1207,33 @@ describe('safeValidateUIMessages', () => {
11581207 ) ;
11591208 } ) ;
11601209
1210+ it ( 'should return failure result when messages array is empty' , async ( ) => {
1211+ const result = await safeValidateUIMessages ( {
1212+ messages : [ ] ,
1213+ } ) ;
1214+
1215+ expectToBe ( result . success , false ) ;
1216+ expect ( result . error . name ) . toBe ( 'AI_TypeValidationError' ) ;
1217+ expect ( result . error . message ) . toContain ( 'Type validation failed' ) ;
1218+ expect ( result . error . message ) . toContain ( 'Messages array must not be empty' ) ;
1219+ } ) ;
1220+
1221+ it ( 'should return failure result when message has empty parts array' , async ( ) => {
1222+ const result = await safeValidateUIMessages ( {
1223+ messages : [
1224+ {
1225+ id : '1' ,
1226+ role : 'user' ,
1227+ parts : [ ] ,
1228+ } ,
1229+ ] ,
1230+ } ) ;
1231+
1232+ expectToBe ( result . success , false ) ;
1233+ expect ( result . error . name ) . toBe ( 'AI_TypeValidationError' ) ;
1234+ expect ( result . error . message ) . toContain ( 'Type validation failed' ) ;
1235+ } ) ;
1236+
11611237 it ( 'should return failure result when metadata validation fails' , async ( ) => {
11621238 const result = await safeValidateUIMessages < UIMessage < { foo : string } > > ( {
11631239 messages : [
0 commit comments