253 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			253 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			Go
		
	
	
	
/*
 | 
						|
 * Copyright 2025 coze-dev Authors
 | 
						|
 *
 | 
						|
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
						|
 * you may not use this file except in compliance with the License.
 | 
						|
 * You may obtain a copy of the License at
 | 
						|
 *
 | 
						|
 *     http://www.apache.org/licenses/LICENSE-2.0
 | 
						|
 *
 | 
						|
 * Unless required by applicable law or agreed to in writing, software
 | 
						|
 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
						|
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
						|
 * See the License for the specific language governing permissions and
 | 
						|
 * limitations under the License.
 | 
						|
 */
 | 
						|
 | 
						|
package message
 | 
						|
 | 
						|
import (
 | 
						|
	"context"
 | 
						|
	"testing"
 | 
						|
	"time"
 | 
						|
 | 
						|
	"github.com/cloudwego/eino/schema"
 | 
						|
	"github.com/stretchr/testify/assert"
 | 
						|
	"go.uber.org/mock/gomock"
 | 
						|
 | 
						|
	"github.com/coze-dev/coze-studio/backend/api/model/crossdomain/message"
 | 
						|
	"github.com/coze-dev/coze-studio/backend/domain/conversation/message/entity"
 | 
						|
	"github.com/coze-dev/coze-studio/backend/domain/conversation/message/internal/dal/model"
 | 
						|
	"github.com/coze-dev/coze-studio/backend/domain/conversation/message/repository"
 | 
						|
	mock "github.com/coze-dev/coze-studio/backend/internal/mock/infra/contract/idgen"
 | 
						|
	"github.com/coze-dev/coze-studio/backend/internal/mock/infra/contract/orm"
 | 
						|
)
 | 
						|
 | 
						|
// Test_NewListMessage tests the NewListMessage function
 | 
						|
func TestListMessage(t *testing.T) {
 | 
						|
	ctx := context.Background()
 | 
						|
 | 
						|
	mockDBGen := orm.NewMockDB()
 | 
						|
 | 
						|
	mockDBGen.AddTable(&model.Message{}).
 | 
						|
		AddRows(
 | 
						|
			&model.Message{
 | 
						|
				ID:             1,
 | 
						|
				ConversationID: 1,
 | 
						|
				UserID:         "1",
 | 
						|
			},
 | 
						|
			&model.Message{
 | 
						|
				ID:             2,
 | 
						|
				ConversationID: 1,
 | 
						|
				UserID:         "1",
 | 
						|
			},
 | 
						|
		)
 | 
						|
 | 
						|
	mockDB, err := mockDBGen.DB()
 | 
						|
	assert.NoError(t, err)
 | 
						|
 | 
						|
	components := &Components{
 | 
						|
		MessageRepo: repository.NewMessageRepo(mockDB, nil),
 | 
						|
	}
 | 
						|
 | 
						|
	resp, err := NewService(components).List(ctx, &entity.ListMeta{
 | 
						|
		ConversationID: 1,
 | 
						|
		Limit:          1,
 | 
						|
		UserID:         "1",
 | 
						|
	})
 | 
						|
	assert.NoError(t, err)
 | 
						|
	assert.Len(t, resp.Messages, 0)
 | 
						|
}
 | 
						|
 | 
						|
// Test_NewListMessage tests the NewListMessage function
 | 
						|
func TestCreateMessage(t *testing.T) {
 | 
						|
	ctx := context.Background()
 | 
						|
 | 
						|
	ctrl := gomock.NewController(t)
 | 
						|
	idGen := mock.NewMockIDGenerator(ctrl)
 | 
						|
	idGen.EXPECT().GenID(gomock.Any()).DoAndReturn(func(_ context.Context) (int64, error) {
 | 
						|
		newID := time.Now().UnixNano()
 | 
						|
		return newID, nil
 | 
						|
	}).AnyTimes()
 | 
						|
	mockDBGen := orm.NewMockDB()
 | 
						|
	mockDBGen.AddTable(&model.Message{})
 | 
						|
	mockDB, err := mockDBGen.DB()
 | 
						|
 | 
						|
	// redisCli := redis.New()
 | 
						|
	// idGen, _ := idgen.New(redisCli)
 | 
						|
	// mockDB, err := mysql.New()
 | 
						|
 | 
						|
	assert.NoError(t, err)
 | 
						|
 | 
						|
	components := &Components{
 | 
						|
		MessageRepo: repository.NewMessageRepo(mockDB, idGen),
 | 
						|
	}
 | 
						|
	imageInput := &message.FileData{
 | 
						|
		Url:  "https://xxxxx.xxxx/image",
 | 
						|
		Name: "test_img",
 | 
						|
		URI:  "",
 | 
						|
	}
 | 
						|
	fileInput := &message.FileData{
 | 
						|
		Url:  "https://xxxxx.xxxx/file",
 | 
						|
		Name: "test_file",
 | 
						|
		URI:  "",
 | 
						|
	}
 | 
						|
	content := []*message.InputMetaData{
 | 
						|
		{
 | 
						|
			Type: message.InputTypeText,
 | 
						|
			Text: "解析图片中的内容",
 | 
						|
		},
 | 
						|
		{
 | 
						|
			Type: message.InputTypeImage,
 | 
						|
			FileData: []*message.FileData{
 | 
						|
				imageInput,
 | 
						|
			},
 | 
						|
		},
 | 
						|
		{
 | 
						|
			Type: message.InputTypeFile,
 | 
						|
			FileData: []*message.FileData{
 | 
						|
				fileInput,
 | 
						|
			},
 | 
						|
		},
 | 
						|
	}
 | 
						|
	service := NewService(components)
 | 
						|
	insert := &entity.Message{
 | 
						|
		ID:             7498710126354759680,
 | 
						|
		ConversationID: 7496795464885338112,
 | 
						|
		AgentID:        7366055842027922437,
 | 
						|
		UserID:         "6666666",
 | 
						|
		RunID:          7498710102375923712,
 | 
						|
		Content:        "你是谁?",
 | 
						|
		MultiContent:   content,
 | 
						|
		Role:           schema.Assistant,
 | 
						|
		MessageType:    message.MessageTypeFunctionCall,
 | 
						|
		SectionID:      7496795464897921024,
 | 
						|
		ModelContent:   "{\"role\":\"tool\",\"content\":\"tool call\"}",
 | 
						|
		ContentType:    message.ContentTypeMix,
 | 
						|
	}
 | 
						|
	resp, err := service.Create(ctx, insert)
 | 
						|
	assert.NoError(t, err)
 | 
						|
 | 
						|
	assert.Equal(t, int64(7366055842027922437), resp.AgentID)
 | 
						|
	assert.Equal(t, "你是谁?", resp.Content)
 | 
						|
}
 | 
						|
 | 
						|
func TestEditMessage(t *testing.T) {
 | 
						|
	ctx := context.Background()
 | 
						|
	mockDBGen := orm.NewMockDB()
 | 
						|
 | 
						|
	mockDBGen.AddTable(&model.Message{}).
 | 
						|
		AddRows(
 | 
						|
			&model.Message{
 | 
						|
				ID:             1,
 | 
						|
				ConversationID: 1,
 | 
						|
				UserID:         "1",
 | 
						|
				RunID:          123,
 | 
						|
			},
 | 
						|
			&model.Message{
 | 
						|
				ID:             2,
 | 
						|
				ConversationID: 1,
 | 
						|
				UserID:         "1",
 | 
						|
				RunID:          124,
 | 
						|
			},
 | 
						|
		)
 | 
						|
 | 
						|
	mockDB, err := mockDBGen.DB()
 | 
						|
	assert.NoError(t, err)
 | 
						|
 | 
						|
	components := &Components{
 | 
						|
		MessageRepo: repository.NewMessageRepo(mockDB, nil),
 | 
						|
	}
 | 
						|
 | 
						|
	imageInput := &message.FileData{
 | 
						|
		Url:  "https://xxxxx.xxxx/image",
 | 
						|
		Name: "test_img",
 | 
						|
	}
 | 
						|
	fileInput := &message.FileData{
 | 
						|
		Url:  "https://xxxxx.xxxx/file",
 | 
						|
		Name: "test_file",
 | 
						|
	}
 | 
						|
	content := []*message.InputMetaData{
 | 
						|
		{
 | 
						|
			Type: message.InputTypeText,
 | 
						|
			Text: "解析图片中的内容",
 | 
						|
		},
 | 
						|
		{
 | 
						|
			Type: message.InputTypeImage,
 | 
						|
			FileData: []*message.FileData{
 | 
						|
				imageInput,
 | 
						|
			},
 | 
						|
		},
 | 
						|
		{
 | 
						|
			Type: message.InputTypeFile,
 | 
						|
			FileData: []*message.FileData{
 | 
						|
				fileInput,
 | 
						|
			},
 | 
						|
		},
 | 
						|
	}
 | 
						|
 | 
						|
	resp, err := NewService(components).Edit(ctx, &entity.Message{
 | 
						|
		ID:           2,
 | 
						|
		Content:      "test edit message",
 | 
						|
		MultiContent: content,
 | 
						|
	})
 | 
						|
	_ = resp
 | 
						|
 | 
						|
	msOne, err := NewService(components).GetByRunIDs(ctx, 1, []int64{124})
 | 
						|
	assert.NoError(t, err)
 | 
						|
 | 
						|
	assert.Equal(t, int64(124), msOne[0].RunID)
 | 
						|
}
 | 
						|
 | 
						|
func TestGetByRunIDs(t *testing.T) {
 | 
						|
	ctx := context.Background()
 | 
						|
 | 
						|
	mockDBGen := orm.NewMockDB()
 | 
						|
 | 
						|
	mockDBGen.AddTable(&model.Message{}).
 | 
						|
		AddRows(
 | 
						|
			&model.Message{
 | 
						|
				ID:             1,
 | 
						|
				ConversationID: 1,
 | 
						|
				UserID:         "1",
 | 
						|
				RunID:          123,
 | 
						|
				Content:        "test content123",
 | 
						|
			},
 | 
						|
			&model.Message{
 | 
						|
				ID:             2,
 | 
						|
				ConversationID: 1,
 | 
						|
				UserID:         "1",
 | 
						|
				Content:        "test content124",
 | 
						|
				RunID:          124,
 | 
						|
			},
 | 
						|
			&model.Message{
 | 
						|
				ID:             3,
 | 
						|
				ConversationID: 1,
 | 
						|
				UserID:         "1",
 | 
						|
				Content:        "test content124",
 | 
						|
				RunID:          124,
 | 
						|
			},
 | 
						|
		)
 | 
						|
	mockDB, err := mockDBGen.DB()
 | 
						|
	assert.NoError(t, err)
 | 
						|
	components := &Components{
 | 
						|
		MessageRepo: repository.NewMessageRepo(mockDB, nil),
 | 
						|
	}
 | 
						|
 | 
						|
	resp, err := NewService(components).GetByRunIDs(ctx, 1, []int64{124})
 | 
						|
 | 
						|
	assert.NoError(t, err)
 | 
						|
 | 
						|
	assert.Len(t, resp, 2)
 | 
						|
}
 |