File size: 3,484 Bytes
6bc074c | 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 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 | package sseparser
import (
"testing"
chatgpt_types "aurora/typings/chatgpt"
)
func TestDataPayloads_SingleDataLine(t *testing.T) {
line := "data: {\"key\":\"value\"}\n\n"
payloads := DataPayloads(line)
if len(payloads) != 1 {
t.Fatalf("expected 1 payload, got %d", len(payloads))
}
if payloads[0] != `{"key":"value"}` {
t.Errorf("unexpected payload: %s", payloads[0])
}
}
func TestDataPayloads_MultipleDataLines(t *testing.T) {
line := "data: {\"a\":1}\ndata: {\"b\":2}\n\n"
payloads := DataPayloads(line)
if len(payloads) != 2 {
t.Fatalf("expected 2 payloads, got %d", len(payloads))
}
}
func TestDataPayloads_DoneMarker(t *testing.T) {
line := "data: [DONE]\n\n"
payloads := DataPayloads(line)
if len(payloads) != 1 || payloads[0] != "[DONE]" {
t.Fatalf("expected [DONE], got %v", payloads)
}
}
func TestDataPayloads_EmptyLine(t *testing.T) {
payloads := DataPayloads("")
if len(payloads) != 0 {
t.Fatalf("expected 0 payloads, got %d", len(payloads))
}
}
func TestSplitDataPayloads_JSON(t *testing.T) {
payloads := SplitDataPayloads(`{"key":"value"}`)
if len(payloads) != 1 || payloads[0] != `{"key":"value"}` {
t.Fatalf("unexpected: %v", payloads)
}
}
func TestSplitDataPayloads_Done(t *testing.T) {
payloads := SplitDataPayloads("[DONE]")
if len(payloads) != 1 || payloads[0] != "[DONE]" {
t.Fatalf("unexpected: %v", payloads)
}
}
func TestEventName_Present(t *testing.T) {
line := "event: response.created\ndata: {}\n\n"
name, ok := EventName(line)
if !ok || name != "response.created" {
t.Fatalf("expected response.created, got %q (ok=%v)", name, ok)
}
}
func TestEventName_Absent(t *testing.T) {
line := "data: {}\n\n"
name, ok := EventName(line)
if ok {
t.Fatalf("expected no event, got %q", name)
}
}
func TestNumberToInt64_Float64(t *testing.T) {
v, ok := NumberToInt64(float64(42.5))
if !ok || v != 42 {
t.Fatalf("expected 42, got %d (ok=%v)", v, ok)
}
}
func TestNumberToInt64_Int(t *testing.T) {
v, ok := NumberToInt64(int(100))
if !ok || v != 100 {
t.Fatalf("expected 100, got %d (ok=%v)", v, ok)
}
}
func TestNumberToInt64_String(t *testing.T) {
_, ok := NumberToInt64("not a number")
if ok {
t.Fatal("expected false for string input")
}
}
func TestChannelFromValue_Nested(t *testing.T) {
value := map[string]interface{}{
"delta": map[string]interface{}{
"channel": "test-channel",
},
}
ch := ChannelFromValue(value)
if ch != "test-channel" {
t.Fatalf("expected test-channel, got %q", ch)
}
}
func TestChannelFromValue_Empty(t *testing.T) {
ch := ChannelFromValue(map[string]interface{}{})
if ch != "" {
t.Fatalf("expected empty, got %q", ch)
}
}
func TestFirstStringPart(t *testing.T) {
parts := []interface{}{"hello", "world"}
if s := FirstStringPart(parts); s != "hello" {
t.Fatalf("expected hello, got %q", s)
}
if s := FirstStringPart(nil); s != "" {
t.Fatalf("expected empty, got %q", s)
}
}
func TestNormalizeContentDelta(t *testing.T) {
if d := NormalizeContentDelta("", "hello"); d != "hello" {
t.Fatalf("expected hello, got %q", d)
}
if d := NormalizeContentDelta("hel", "hello"); d != "lo" {
t.Fatalf("expected lo, got %q", d)
}
if d := NormalizeContentDelta("hello", ""); d != "" {
t.Fatalf("expected empty, got %q", d)
}
}
func TestIsUsableConversationResponse(t *testing.T) {
// Empty response is not usable
if IsUsableConversationResponse(chatgpt_types.ChatGPTResponse{}) {
t.Fatal("empty response should not be usable")
}
}
|