57 lines
1.6 KiB
Go
57 lines
1.6 KiB
Go
package model
|
|
|
|
import "testing"
|
|
|
|
func TestTextMessage(t *testing.T) {
|
|
t.Parallel()
|
|
msg := TextMessage(RoleUser, "hi")
|
|
if msg.Role != RoleUser {
|
|
t.Fatalf("role = %q, want %q", msg.Role, RoleUser)
|
|
}
|
|
if len(msg.Content) != 1 || msg.Content[0].Type != ContentTypeText || msg.Content[0].Text != "hi" {
|
|
t.Fatalf("content = %+v, want a single text part", msg.Content)
|
|
}
|
|
}
|
|
|
|
func TestImageMessage(t *testing.T) {
|
|
t.Parallel()
|
|
msg := ImageMessage(RoleUser, "look", "data:image/png;base64,abc")
|
|
if len(msg.Content) != 2 {
|
|
t.Fatalf("content len = %d, want 2 (text + image)", len(msg.Content))
|
|
}
|
|
if msg.Content[1].Type != ContentTypeImage || msg.Content[1].ImageURL != "data:image/png;base64,abc" {
|
|
t.Fatalf("image part = %+v", msg.Content[1])
|
|
}
|
|
}
|
|
|
|
func TestImageMessage_NoText(t *testing.T) {
|
|
t.Parallel()
|
|
msg := ImageMessage(RoleUser, "", "data:image/png;base64,abc")
|
|
if len(msg.Content) != 1 || msg.Content[0].Type != ContentTypeImage {
|
|
t.Fatalf("content = %+v, want a single image part", msg.Content)
|
|
}
|
|
}
|
|
|
|
func TestHasImage(t *testing.T) {
|
|
t.Parallel()
|
|
cases := []struct {
|
|
name string
|
|
msgs []Message
|
|
want bool
|
|
}{
|
|
{"empty", nil, false},
|
|
{"text only", []Message{TextMessage(RoleUser, "hi")}, false},
|
|
{"image", []Message{ImageMessage(RoleUser, "", "data:image/png;base64,x")}, true},
|
|
{"text and image", []Message{ImageMessage(RoleUser, "desc", "data:image/png;base64,x")}, true},
|
|
}
|
|
for _, c := range cases {
|
|
c := c
|
|
t.Run(c.name, func(t *testing.T) {
|
|
t.Parallel()
|
|
if got := HasImage(c.msgs); got != c.want {
|
|
t.Fatalf("HasImage = %v, want %v", got, c.want)
|
|
}
|
|
})
|
|
}
|
|
}
|