Files
new-api/controller/task_log_view_test.go
T

138 lines
4.9 KiB
Go

package controller
import (
"testing"
"github.com/QuantumNous/new-api/common"
"github.com/QuantumNous/new-api/constant"
"github.com/QuantumNous/new-api/model"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestTaskLogDTOSeparatesUserAdminAndRootDetails(t *testing.T) {
task := &model.Task{
TaskID: "task_public",
Platform: "document-parser",
PrivateData: model.TaskPrivateData{
Key: "channel-secret-canary",
UpstreamTaskID: "upstream-private",
NodeName: "node-a",
Execution: &model.TaskExecutionSnapshot{
RequestID: "request-public",
RequestPath: "/v1/documents",
TaskPlugin: &model.TaskPluginSnapshot{
Key: "document-parser",
Name: "Document Parser",
Version: "1.2.3",
Author: &model.TaskPluginAuthorSnapshot{
Name: "Community Author",
URL: "https://plugins.example/author",
},
APIVersion: 1,
Generation: 42,
},
},
},
}
userView := tasksToDto([]*model.Task{task}, false, common.RoleCommonUser)[0]
assert.Nil(t, userView.AdminInfo)
assert.Nil(t, userView.RootInfo)
adminView := tasksToDto([]*model.Task{task}, false, common.RoleAdminUser)[0]
require.NotNil(t, adminView.AdminInfo)
require.NotNil(t, adminView.AdminInfo.TaskPlugin)
assert.Equal(t, "document-parser", adminView.AdminInfo.TaskPlugin.Key)
assert.Equal(t, "Document Parser", adminView.AdminInfo.TaskPlugin.Name)
assert.Equal(t, "1.2.3", adminView.AdminInfo.TaskPlugin.Version)
require.NotNil(t, adminView.AdminInfo.TaskPlugin.Author)
assert.Equal(t, "Community Author", adminView.AdminInfo.TaskPlugin.Author.Name)
assert.Equal(t, "https://plugins.example/author", adminView.AdminInfo.TaskPlugin.Author.URL)
assert.Equal(t, "request-public", adminView.AdminInfo.RequestID)
assert.Equal(t, "/v1/documents", adminView.AdminInfo.RequestPath)
assert.Nil(t, adminView.RootInfo)
rootView := tasksToDto([]*model.Task{task}, false, common.RoleRootUser)[0]
require.NotNil(t, rootView.AdminInfo)
require.NotNil(t, rootView.RootInfo)
require.NotNil(t, rootView.RootInfo.TaskPlugin)
assert.Equal(t, 1, rootView.RootInfo.TaskPlugin.APIVersion)
assert.Equal(t, uint64(42), rootView.RootInfo.TaskPlugin.Generation)
assert.Equal(t, "upstream-private", rootView.RootInfo.UpstreamTaskID)
assert.Equal(t, "node-a", rootView.RootInfo.NodeName)
adminJSON, err := common.Marshal(adminView)
require.NoError(t, err)
assert.NotContains(t, string(adminJSON), "channel-secret-canary")
assert.NotContains(t, string(adminJSON), "upstream-private")
rootJSON, err := common.Marshal(rootView)
require.NoError(t, err)
assert.NotContains(t, string(rootJSON), "channel-secret-canary")
assert.Contains(t, string(rootJSON), "upstream-private")
}
func TestTaskLogDTODoesNotInventHistoricalPluginProvenance(t *testing.T) {
task := &model.Task{
TaskID: "task_without_snapshot",
Platform: "document-parser",
}
adminView := tasksToDto([]*model.Task{task}, false, common.RoleAdminUser)[0]
assert.Nil(t, adminView.AdminInfo)
assert.Nil(t, adminView.RootInfo)
}
func TestTaskLogDTOReplacesLegacyVideoURLWithAvailabilityFlag(t *testing.T) {
task := &model.Task{
TaskID: "task_legacy_video",
Platform: "jimeng",
Action: constant.TaskActionTextToVideo,
Status: model.TaskStatusSuccess,
FailReason: "https://private-upstream.invalid/video.mp4?signature=secret",
}
view := tasksToDto([]*model.Task{task}, false, common.RoleCommonUser)[0]
assert.True(t, view.LegacyVideoAvailable)
assert.Empty(t, view.ResultURL)
assert.Empty(t, view.FailReason)
encoded, err := common.Marshal(view)
require.NoError(t, err)
assert.NotContains(t, string(encoded), "private-upstream.invalid")
assert.NotContains(t, string(encoded), "result_url")
assert.Contains(t, string(encoded), "legacy_video_available")
}
func TestTaskLogDTOKeepsFailureReasonAndDoesNotMarkPluginTaskLegacy(t *testing.T) {
failed := &model.Task{
TaskID: "task_failed",
Platform: "jimeng",
Action: constant.TaskActionTextToVideo,
Status: model.TaskStatusFailure,
FailReason: "provider rejected the request",
}
failedView := tasksToDto([]*model.Task{failed}, false, common.RoleCommonUser)[0]
assert.Equal(t, "provider rejected the request", failedView.FailReason)
assert.False(t, failedView.LegacyVideoAvailable)
pluginTask := &model.Task{
TaskID: "task_plugin_video",
Platform: "community-video",
Action: constant.TaskActionTextToVideo,
Status: model.TaskStatusSuccess,
FailReason: "https://stale-upstream.invalid/plugin-video.mp4",
PrivateData: model.TaskPrivateData{
ResultURL: "https://private-upstream.invalid/plugin-video.mp4",
Execution: &model.TaskExecutionSnapshot{
TaskPlugin: &model.TaskPluginSnapshot{Key: "community-video"},
},
},
}
pluginView := tasksToDto([]*model.Task{pluginTask}, false, common.RoleCommonUser)[0]
assert.False(t, pluginView.LegacyVideoAvailable)
assert.Empty(t, pluginView.ResultURL)
assert.Empty(t, pluginView.FailReason)
}