Files
dingtalk-workspace-cli/internal/helpers/drive_remote_folder_id_test.go

78 lines
2.5 KiB
Go

package helpers
import (
"context"
"io"
"os"
"strings"
"testing"
"github.com/DingTalk-Real-AI/dingtalk-workspace-cli/internal/testseam"
)
func TestCrossPlatformCoverageDriveRemoteTree_folderIDFallbacks(t *testing.T) {
for _, key := range []string{"fileId", "dentryUuid", "dentryId", "id", "nodeId"} {
t.Run(key, func(t *testing.T) {
caller := &driveScriptCaller{reply: func(_ string, args map[string]any, _ int) (string, error) {
if args["parentId"] == "ROOT" {
return `{"result":{"items":[{"name":"sub","type":"folder","` + key + `":"SUB"}],"nextToken":""}}`, nil
}
if args["parentId"] != "SUB" {
t.Fatalf("nested parentId = %v, want SUB", args["parentId"])
}
return `{"result":{"items":[],"nextToken":""}}`, nil
}}
testseam.Swap(t, &deps, &Deps{Caller: caller, Out: &Formatter{w: io.Discard}})
testseam.Swap(t, &os.Args, []string{"dws", "drive"})
if _, err := fetchRemoteDriveTree(context.Background(), "", "ROOT", true); err != nil {
t.Fatalf("fetch with %s: %v", key, err)
}
if got := len(caller.callsFor("list_files")); got != 2 {
t.Fatalf("list_files calls = %d, want root + nested", got)
}
})
}
}
func TestCrossPlatformCoverageDriveRemoteTree_missingFolderIDFailsClosed(t *testing.T) {
for _, fetcher := range []struct {
name string
fetch func(context.Context) error
}{
{
name: "status and pull tree",
fetch: func(ctx context.Context) error {
_, err := fetchRemoteDriveTree(ctx, "", "ROOT", true)
return err
},
},
{
name: "push and sync tree",
fetch: func(ctx context.Context) error {
_, _, err := fetchRemoteTreeForPush(ctx, "", "ROOT")
return err
},
},
} {
t.Run(fetcher.name, func(t *testing.T) {
caller := &driveScriptCaller{reply: func(_ string, args map[string]any, nth int) (string, error) {
if nth > 0 || args["parentId"] != "ROOT" {
t.Fatalf("missing folder ID must not trigger another list_files call: nth=%d args=%v", nth, args)
}
return `{"result":{"items":[{"name":"sub","type":"folder"}],"nextToken":""}}`, nil
}}
testseam.Swap(t, &deps, &Deps{Caller: caller, Out: &Formatter{w: io.Discard}})
testseam.Swap(t, &os.Args, []string{"dws", "drive"})
err := fetcher.fetch(context.Background())
if err == nil || !strings.Contains(err.Error(), "目录 ID") || !strings.Contains(err.Error(), "sub") {
t.Fatalf("error = %v, want missing folder ID for sub", err)
}
if got := len(caller.callsFor("list_files")); got != 1 {
t.Fatalf("list_files calls = %d, want only root query", got)
}
})
}
}