mirror of
https://github.com/QuantumNous/new-api.git
synced 2026-09-05 00:55:56 +00:00
138 lines
4.9 KiB
Go
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)
|
|
}
|