10
10
use WordPress \AiClient \Files \DTO \File ;
11
11
use WordPress \AiClient \Files \Enums \FileTypeEnum ;
12
12
use WordPress \AiClient \Messages \DTO \MessagePart ;
13
+ use WordPress \AiClient \Messages \Enums \MessagePartChannelEnum ;
13
14
use WordPress \AiClient \Messages \Enums \MessagePartTypeEnum ;
14
15
use WordPress \AiClient \Tools \DTO \FunctionCall ;
15
16
use WordPress \AiClient \Tools \DTO \FunctionResponse ;
@@ -31,6 +32,7 @@ public function testCreateWithTextContent(): void
31
32
32
33
$ this ->assertEquals (MessagePartTypeEnum::text (), $ part ->getType ());
33
34
$ this ->assertEquals ($ text , $ part ->getText ());
35
+ $ this ->assertEquals (MessagePartChannelEnum::content (), $ part ->getChannel ());
34
36
$ this ->assertNull ($ part ->getFile ());
35
37
$ this ->assertNull ($ part ->getFunctionCall ());
36
38
$ this ->assertNull ($ part ->getFunctionResponse ());
@@ -47,6 +49,7 @@ public function testCreateWithFileContent(): void
47
49
$ part = new MessagePart ($ file );
48
50
49
51
$ this ->assertEquals (MessagePartTypeEnum::file (), $ part ->getType ());
52
+ $ this ->assertEquals (MessagePartChannelEnum::content (), $ part ->getChannel ());
50
53
$ this ->assertNull ($ part ->getText ());
51
54
$ this ->assertSame ($ file , $ part ->getFile ());
52
55
$ this ->assertNull ($ part ->getFunctionCall ());
@@ -64,6 +67,7 @@ public function testCreateWithFunctionCallContent(): void
64
67
$ part = new MessagePart ($ functionCall );
65
68
66
69
$ this ->assertEquals (MessagePartTypeEnum::functionCall (), $ part ->getType ());
70
+ $ this ->assertEquals (MessagePartChannelEnum::content (), $ part ->getChannel ());
67
71
$ this ->assertNull ($ part ->getText ());
68
72
$ this ->assertNull ($ part ->getFile ());
69
73
$ this ->assertSame ($ functionCall , $ part ->getFunctionCall ());
@@ -81,6 +85,7 @@ public function testCreateWithFunctionResponseContent(): void
81
85
$ part = new MessagePart ($ functionResponse );
82
86
83
87
$ this ->assertEquals (MessagePartTypeEnum::functionResponse (), $ part ->getType ());
88
+ $ this ->assertEquals (MessagePartChannelEnum::content (), $ part ->getChannel ());
84
89
$ this ->assertNull ($ part ->getText ());
85
90
$ this ->assertNull ($ part ->getFile ());
86
91
$ this ->assertNull ($ part ->getFunctionCall ());
@@ -97,6 +102,7 @@ public function testCreateWithEmptyString(): void
97
102
$ part = new MessagePart ('' );
98
103
99
104
$ this ->assertEquals (MessagePartTypeEnum::text (), $ part ->getType ());
105
+ $ this ->assertEquals (MessagePartChannelEnum::content (), $ part ->getChannel ());
100
106
$ this ->assertEquals ('' , $ part ->getText ());
101
107
}
102
108
@@ -260,8 +266,10 @@ public function testToArrayWithText(): void
260
266
$ json = $ part ->toArray ();
261
267
262
268
$ this ->assertIsArray ($ json );
269
+ $ this ->assertArrayHasKey (MessagePart::KEY_CHANNEL , $ json );
263
270
$ this ->assertArrayHasKey (MessagePart::KEY_TYPE , $ json );
264
271
$ this ->assertArrayHasKey (MessagePart::KEY_TEXT , $ json );
272
+ $ this ->assertEquals (MessagePartChannelEnum::content ()->value , $ json [MessagePart::KEY_CHANNEL ]);
265
273
$ this ->assertEquals (MessagePartTypeEnum::text ()->value , $ json [MessagePart::KEY_TYPE ]);
266
274
$ this ->assertEquals ('Hello, world! ' , $ json [MessagePart::KEY_TEXT ]);
267
275
@@ -283,8 +291,10 @@ public function testToArrayWithFile(): void
283
291
$ json = $ part ->toArray ();
284
292
285
293
$ this ->assertIsArray ($ json );
294
+ $ this ->assertArrayHasKey (MessagePart::KEY_CHANNEL , $ json );
286
295
$ this ->assertArrayHasKey (MessagePart::KEY_TYPE , $ json );
287
296
$ this ->assertArrayHasKey (MessagePart::KEY_FILE , $ json );
297
+ $ this ->assertEquals (MessagePartChannelEnum::content ()->value , $ json [MessagePart::KEY_CHANNEL ]);
288
298
$ this ->assertEquals (MessagePartTypeEnum::file ()->value , $ json [MessagePart::KEY_TYPE ]);
289
299
$ this ->assertIsArray ($ json [MessagePart::KEY_FILE ]);
290
300
}
@@ -297,13 +307,15 @@ public function testToArrayWithFile(): void
297
307
public function testFromArrayWithText (): void
298
308
{
299
309
$ json = [
310
+ MessagePart::KEY_CHANNEL => MessagePartChannelEnum::thought ()->value ,
300
311
MessagePart::KEY_TYPE => MessagePartTypeEnum::text ()->value ,
301
312
MessagePart::KEY_TEXT => 'Test message '
302
313
];
303
314
304
315
$ part = MessagePart::fromArray ($ json );
305
316
306
317
$ this ->assertEquals (MessagePartTypeEnum::text (), $ part ->getType ());
318
+ $ this ->assertEquals (MessagePartChannelEnum::thought (), $ part ->getChannel ());
307
319
$ this ->assertEquals ('Test message ' , $ part ->getText ());
308
320
}
309
321
@@ -315,6 +327,7 @@ public function testFromArrayWithText(): void
315
327
public function testFromArrayWithFile (): void
316
328
{
317
329
$ json = [
330
+ MessagePart::KEY_CHANNEL => MessagePartChannelEnum::content ()->value ,
318
331
MessagePart::KEY_TYPE => MessagePartTypeEnum::file ()->value ,
319
332
MessagePart::KEY_FILE => [
320
333
File::KEY_FILE_TYPE => FileTypeEnum::remote ()->value ,
@@ -326,6 +339,7 @@ public function testFromArrayWithFile(): void
326
339
$ part = MessagePart::fromArray ($ json );
327
340
328
341
$ this ->assertEquals (MessagePartTypeEnum::file (), $ part ->getType ());
342
+ $ this ->assertEquals (MessagePartChannelEnum::content (), $ part ->getChannel ());
329
343
$ this ->assertInstanceOf (File::class, $ part ->getFile ());
330
344
$ this ->assertEquals ('https://example.com/image.jpg ' , $ part ->getFile ()->getUrl ());
331
345
}
@@ -338,10 +352,11 @@ public function testFromArrayWithFile(): void
338
352
public function testArrayRoundTrip (): void
339
353
{
340
354
// Test with text
341
- $ textPart = new MessagePart ('Test text ' );
355
+ $ textPart = new MessagePart ('Test text ' , MessagePartChannelEnum:: thought () );
342
356
$ textJson = $ textPart ->toArray ();
343
357
$ restoredText = MessagePart::fromArray ($ textJson );
344
358
$ this ->assertEquals ($ textPart ->getText (), $ restoredText ->getText ());
359
+ $ this ->assertEquals ($ textPart ->getChannel (), $ restoredText ->getChannel ());
345
360
346
361
// Test with file
347
362
$ file = new File ('https://example.com/doc.pdf ' , 'application/pdf ' );
@@ -350,15 +365,17 @@ public function testArrayRoundTrip(): void
350
365
$ restoredFile = MessagePart::fromArray ($ fileJson );
351
366
$ this ->assertEquals ($ file ->getUrl (), $ restoredFile ->getFile ()->getUrl ());
352
367
$ this ->assertEquals ($ file ->getMimeType (), $ restoredFile ->getFile ()->getMimeType ());
368
+ $ this ->assertEquals ($ filePart ->getChannel (), $ restoredFile ->getChannel ());
353
369
354
370
// Test with function call
355
371
$ functionCall = new FunctionCall ('id_123 ' , 'getData ' , ['key ' => 'value ' ]);
356
- $ funcPart = new MessagePart ($ functionCall );
372
+ $ funcPart = new MessagePart ($ functionCall, MessagePartChannelEnum:: thought () );
357
373
$ funcJson = $ funcPart ->toArray ();
358
374
$ restoredFunc = MessagePart::fromArray ($ funcJson );
359
375
$ this ->assertEquals ($ functionCall ->getId (), $ restoredFunc ->getFunctionCall ()->getId ());
360
376
$ this ->assertEquals ($ functionCall ->getName (), $ restoredFunc ->getFunctionCall ()->getName ());
361
377
$ this ->assertEquals ($ functionCall ->getArgs (), $ restoredFunc ->getFunctionCall ()->getArgs ());
378
+ $ this ->assertEquals ($ funcPart ->getChannel (), $ restoredFunc ->getChannel ());
362
379
}
363
380
364
381
/**
@@ -375,4 +392,51 @@ public function testImplementsWithArrayTransformationInterface(): void
375
392
$ part
376
393
);
377
394
}
395
+
396
+ /**
397
+ * Tests creating MessagePart with different channels.
398
+ *
399
+ * @return void
400
+ */
401
+ public function testCreateWithDifferentChannels (): void
402
+ {
403
+ // Default channel is CONTENT
404
+ $ part1 = new MessagePart ('Some content ' );
405
+ $ this ->assertEquals (MessagePartChannelEnum::content (), $ part1 ->getChannel ());
406
+ $ this ->assertTrue ($ part1 ->getChannel ()->isContent ());
407
+ $ this ->assertFalse ($ part1 ->getChannel ()->isThought ());
408
+
409
+ // Explicitly set CONTENT channel
410
+ $ part2 = new MessagePart ('Some content ' , MessagePartChannelEnum::content ());
411
+ $ this ->assertEquals (MessagePartChannelEnum::content (), $ part2 ->getChannel ());
412
+ $ this ->assertTrue ($ part2 ->getChannel ()->isContent ());
413
+ $ this ->assertFalse ($ part2 ->getChannel ()->isThought ());
414
+
415
+ // Explicitly set THOUGHT channel
416
+ $ part3 = new MessagePart ('Some thought ' , MessagePartChannelEnum::thought ());
417
+ $ this ->assertEquals (MessagePartChannelEnum::thought (), $ part3 ->getChannel ());
418
+ $ this ->assertFalse ($ part3 ->getChannel ()->isContent ());
419
+ $ this ->assertTrue ($ part3 ->getChannel ()->isThought ());
420
+ }
421
+
422
+ /**
423
+ * Tests fromArray with an invalid channel value.
424
+ *
425
+ * @return void
426
+ */
427
+ public function testFromArrayWithInvalidChannel (): void
428
+ {
429
+ $ this ->expectException (InvalidArgumentException::class);
430
+ $ this ->expectExceptionMessage (
431
+ 'invalid_channel is not a valid backing value for enum ' . MessagePartChannelEnum::class
432
+ );
433
+
434
+ $ json = [
435
+ MessagePart::KEY_CHANNEL => 'invalid_channel ' ,
436
+ MessagePart::KEY_TYPE => MessagePartTypeEnum::text ()->value ,
437
+ MessagePart::KEY_TEXT => 'Test message '
438
+ ];
439
+
440
+ MessagePart::fromArray ($ json );
441
+ }
378
442
}
0 commit comments