99 "github.com/usetero/cli/internal/chat/chattest"
1010 "github.com/usetero/cli/internal/log/logtest"
1111 "github.com/usetero/cli/internal/powersync"
12- "github.com/usetero/cli/internal/sqlite/sqlitetest "
12+ "github.com/usetero/cli/internal/powersync/powersynctest "
1313)
1414
1515func TestMessageHandler_Handle (t * testing.T ) {
@@ -18,7 +18,7 @@ func TestMessageHandler_Handle(t *testing.T) {
1818 t .Run ("PUT user message uploads and streams response" , func (t * testing.T ) {
1919 t .Parallel ()
2020
21- db := sqlitetest . OpenTest (t )
21+ db := powersynctest . OpenTestDBWithSchema (t )
2222
2323 var calledWith struct {
2424 messageID string
@@ -65,10 +65,73 @@ func TestMessageHandler_Handle(t *testing.T) {
6565 }
6666 })
6767
68+ t .Run ("PUT user message creates assistant message and updates with deltas" , func (t * testing.T ) {
69+ t .Parallel ()
70+
71+ db := powersynctest .OpenTestDBWithSchema (t )
72+
73+ mock := & chattest.MockMessages {
74+ UploadUserMessageFunc : func (ctx context.Context , messageID , conversationID , content string , handler chat.StreamHandler ) error {
75+ // Simulate streaming: message_start, then multiple deltas, then done
76+ if err := handler (chat.StreamEvent {Type : "message_start" }); err != nil {
77+ return err
78+ }
79+ if err := handler (chat.StreamEvent {Type : "content_block_delta" , Text : & chat.TextDelta {Content : "Hello" }}); err != nil {
80+ return err
81+ }
82+ if err := handler (chat.StreamEvent {Type : "content_block_delta" , Text : & chat.TextDelta {Content : " world" }}); err != nil {
83+ return err
84+ }
85+ if err := handler (chat.StreamEvent {Type : "content_block_delta" , Text : & chat.TextDelta {Content : "!" }}); err != nil {
86+ return err
87+ }
88+ return handler (chat.StreamEvent {Done : true })
89+ },
90+ }
91+
92+ h := newMessageHandler (mock , db , logtest .New (t ))
93+
94+ entry := & powersync.CrudEntry {
95+ Op : powersync .OpPut ,
96+ RowID : "msg-1" ,
97+ Data : map [string ]any {
98+ "role" : "user" ,
99+ "conversation_id" : "conv-1" ,
100+ "account_id" : "acc-1" ,
101+ "content" : "Hi" ,
102+ },
103+ }
104+
105+ err := h .Handle (context .Background (), entry )
106+ if err != nil {
107+ t .Fatalf ("Handle() error = %v" , err )
108+ }
109+
110+ // Verify assistant message was created and updated in SQLite
111+ rows , err := db .Query (context .Background (), "SELECT content FROM messages WHERE role = 'assistant'" )
112+ if err != nil {
113+ t .Fatalf ("Query error = %v" , err )
114+ }
115+ defer rows .Close ()
116+
117+ if ! rows .Next () {
118+ t .Fatal ("expected assistant message in database" )
119+ }
120+
121+ var content string
122+ if err := rows .Scan (& content ); err != nil {
123+ t .Fatalf ("Scan error = %v" , err )
124+ }
125+
126+ if content != "Hello world!" {
127+ t .Errorf ("assistant message content = %q, want %q" , content , "Hello world!" )
128+ }
129+ })
130+
68131 t .Run ("PUT user message returns error on failure" , func (t * testing.T ) {
69132 t .Parallel ()
70133
71- db := sqlitetest . OpenTest (t )
134+ db := powersynctest . OpenTestDBWithSchema (t )
72135
73136 mock := & chattest.MockMessages {
74137 UploadUserMessageFunc : func (ctx context.Context , messageID , conversationID , content string , handler chat.StreamHandler ) error {
@@ -97,7 +160,7 @@ func TestMessageHandler_Handle(t *testing.T) {
97160 t .Run ("PUT assistant message uploads for durability" , func (t * testing.T ) {
98161 t .Parallel ()
99162
100- db := sqlitetest . OpenTest (t )
163+ db := powersynctest . OpenTestDBWithSchema (t )
101164
102165 var calledWith struct {
103166 messageID string
@@ -148,7 +211,7 @@ func TestMessageHandler_Handle(t *testing.T) {
148211 t .Run ("PATCH skips upload and returns nil" , func (t * testing.T ) {
149212 t .Parallel ()
150213
151- db := sqlitetest . OpenTest (t )
214+ db := powersynctest . OpenTestDBWithSchema (t )
152215 h := newMessageHandler (& chattest.MockMessages {}, db , logtest .New (t ))
153216
154217 entry := & powersync.CrudEntry {
@@ -166,7 +229,7 @@ func TestMessageHandler_Handle(t *testing.T) {
166229 t .Run ("DELETE skips upload and returns nil" , func (t * testing.T ) {
167230 t .Parallel ()
168231
169- db := sqlitetest . OpenTest (t )
232+ db := powersynctest . OpenTestDBWithSchema (t )
170233 h := newMessageHandler (& chattest.MockMessages {}, db , logtest .New (t ))
171234
172235 entry := & powersync.CrudEntry {
@@ -184,7 +247,7 @@ func TestMessageHandler_Handle(t *testing.T) {
184247 t .Run ("unknown role returns nil" , func (t * testing.T ) {
185248 t .Parallel ()
186249
187- db := sqlitetest . OpenTest (t )
250+ db := powersynctest . OpenTestDBWithSchema (t )
188251 h := newMessageHandler (& chattest.MockMessages {}, db , logtest .New (t ))
189252
190253 entry := & powersync.CrudEntry {
0 commit comments