feat(captain): align task payload persistence

This commit is contained in:
2026-06-05 13:38:55 +08:00
parent 3263ed9284
commit 13cb750a2a
11 changed files with 822 additions and 89 deletions
@@ -53,6 +53,47 @@ func TestCopilotMessageRepo_Create(t *testing.T) {
assert.Equal(t, model.CopilotMessageTypeUser, msg.MessageType)
}
func TestCopilotMessageRepo_Create_AllowsChatwootMessageKeys(t *testing.T) {
db := setupTestDB(t, &model.CopilotThread{}, &model.CopilotMessage{})
repo := NewCopilotMessageRepo(db)
thread := createTestCopilotThread(t, db, 1, 1, "Tool Thread")
message, _ := json.Marshal(map[string]interface{}{
"content": "Looking up docs",
"reasoning": "Need product data",
"function_name": "search_documentation",
"reply_suggestion": "Try this reply",
})
err := repo.Create(context.Background(), &model.CopilotMessage{
AccountID: 1,
CopilotThreadID: thread.ID,
MessageType: model.CopilotMessageTypeAssistant,
Message: message,
})
require.NoError(t, err)
}
func TestCopilotMessageRepo_Create_RejectsUnknownMessageKeys(t *testing.T) {
db := setupTestDB(t, &model.CopilotThread{}, &model.CopilotMessage{})
repo := NewCopilotMessageRepo(db)
thread := createTestCopilotThread(t, db, 1, 1, "Bad Tool Thread")
message, _ := json.Marshal(map[string]interface{}{
"content": "hello",
"unknown": "bad",
})
err := repo.Create(context.Background(), &model.CopilotMessage{
AccountID: 1,
CopilotThreadID: thread.ID,
MessageType: model.CopilotMessageTypeAssistant,
Message: message,
})
require.Error(t, err)
assert.Contains(t, err.Error(), "invalid attribute: unknown")
}
// --- 2. GetByID ---
func TestCopilotMessageRepo_GetByID(t *testing.T) {
db := setupTestDB(t, &model.CopilotThread{}, &model.CopilotMessage{})
@@ -181,4 +222,4 @@ func TestCopilotMessageRepo_DeleteByThread(t *testing.T) {
require.NoError(t, errAfter)
assert.Equal(t, int64(0), countAfter)
assert.Len(t, msgsAfter, 0)
}
}