Fix import task summary showing "Unknown" source policy (#204)
The import task summary emits a hashid dst_policy_id that the frontend resolves via globalStateSlice.policyOptionCache — but the cache was never populated (setPolicyOptionCache dispatched with no payload), so every import task rendered "Unknown". Even populated, the cache only holds the *viewer's* allowed policies, so an admin reviewing another user's import task would still miss. Bake the policy name into ImportTaskState at creation (resolved best-effort via StoragePolicyClient) and emit dst_policy_name in the summary props; TaskSummaryTitle prefers it and falls back to the cache lookup for pre-existing tasks. The cache is also now populated from getAllowedPolicies() at session init (fire-and-forget so a slow request never blocks login) and retyped to StoragePolicyBrief[] to match. Fixes #198 (upstream cloudreve/cloudreve#3581). Authored By: TDvorak <info@tdvorak.dev> Generated with [Devin](https://devin.ai) Co-authored-by: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>pull/3587/head
parent
49f556dc57
commit
1b357a2856
@ -0,0 +1,60 @@
|
||||
package workflows
|
||||
|
||||
import (
|
||||
"context"
|
||||
"testing"
|
||||
|
||||
"github.com/cloudreve/Cloudreve/v4/ent"
|
||||
"github.com/cloudreve/Cloudreve/v4/pkg/hashid"
|
||||
"github.com/cloudreve/Cloudreve/v4/pkg/queue"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestImportTaskSummarizeIncludesPolicyName(t *testing.T) {
|
||||
hasher, err := hashid.New("test-salt")
|
||||
require.NoError(t, err)
|
||||
|
||||
owner := &ent.User{ID: 1}
|
||||
task, err := NewImportTask(context.Background(), owner, "/src/path", true, "cloudreve://my/dst", 7, "Local Storage")
|
||||
require.NoError(t, err)
|
||||
|
||||
summary := task.Summarize(hasher)
|
||||
require.NotNil(t, summary)
|
||||
require.Equal(t, "Local Storage", summary.Props[SummaryKeyDstPolicyName])
|
||||
require.Equal(t, hashid.EncodePolicyID(hasher, 7), summary.Props[SummaryKeySrcDstPolicyID])
|
||||
require.Equal(t, "/src/path", summary.Props[SummaryKeySrcStr])
|
||||
require.Equal(t, "cloudreve://my/dst", summary.Props[SummaryKeyDst])
|
||||
}
|
||||
|
||||
func TestImportTaskSummarizeLegacyState(t *testing.T) {
|
||||
hasher, err := hashid.New("test-salt")
|
||||
require.NoError(t, err)
|
||||
|
||||
// Tasks created before PolicyName existed have an empty name; the
|
||||
// summary must still carry the encoded policy id for client-side lookup.
|
||||
owner := &ent.User{ID: 1}
|
||||
task, err := NewImportTask(context.Background(), owner, "/src/path", false, "cloudreve://my/dst", 7, "")
|
||||
require.NoError(t, err)
|
||||
|
||||
summary := task.Summarize(hasher)
|
||||
require.NotNil(t, summary)
|
||||
require.Equal(t, "", summary.Props[SummaryKeyDstPolicyName])
|
||||
require.Equal(t, hashid.EncodePolicyID(hasher, 7), summary.Props[SummaryKeySrcDstPolicyID])
|
||||
}
|
||||
|
||||
func TestImportTaskFromModelSummarize(t *testing.T) {
|
||||
hasher, err := hashid.New("test-salt")
|
||||
require.NoError(t, err)
|
||||
|
||||
owner := &ent.User{ID: 1}
|
||||
created, err := NewImportTask(context.Background(), owner, "/src/path", true, "cloudreve://my/dst", 7, "S3 Backup")
|
||||
require.NoError(t, err)
|
||||
|
||||
// Round-trip through the persisted model state.
|
||||
restored := NewImportTaskFromModel(created.(*ImportTask).Task)
|
||||
require.Equal(t, queue.ImportTaskType, restored.Type())
|
||||
|
||||
summary := restored.Summarize(hasher)
|
||||
require.NotNil(t, summary)
|
||||
require.Equal(t, "S3 Backup", summary.Props[SummaryKeyDstPolicyName])
|
||||
}
|
||||
Loading…
Reference in new issue