mirror of
https://github.com/larksuite/cli.git
synced 2026-07-08 18:13:01 +08:00
80 lines
2.4 KiB
Go
80 lines
2.4 KiB
Go
// Copyright (c) 2026 Lark Technologies Pte. Ltd.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package drive
|
|
|
|
import (
|
|
"context"
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
"time"
|
|
|
|
clie2e "github.com/larksuite/cli/tests/cli_e2e"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func createDriveFolder(t *testing.T, parentT *testing.T, ctx context.Context, name string, parentFolderToken string) string {
|
|
t.Helper()
|
|
folderToken := CreateDriveFolder(t, parentT, ctx, name, "bot", parentFolderToken)
|
|
require.NotEmpty(t, folderToken)
|
|
return folderToken
|
|
}
|
|
|
|
func TestDeleteDriveResourceAndVerify(t *testing.T) {
|
|
t.Run("successful delete with stale meta returns cleanup warning", func(t *testing.T) {
|
|
fake := mustWriteDriveCleanupFakeCLI(t)
|
|
t.Setenv(clie2e.EnvBinaryPath, fake)
|
|
|
|
result, err := deleteDriveResourceAndVerify(context.Background(), "fld_stale", "folder", "bot", clie2e.WaitOptions{
|
|
Timeout: 10 * time.Millisecond,
|
|
Interval: time.Millisecond,
|
|
})
|
|
require.NotNil(t, result)
|
|
assert.Equal(t, 0, result.ExitCode)
|
|
require.Error(t, err)
|
|
assert.True(t, clie2e.IsCleanupWarning(err), "err: %v", err)
|
|
})
|
|
|
|
t.Run("failed delete with existing meta remains fatal", func(t *testing.T) {
|
|
fake := mustWriteDriveCleanupFakeCLI(t)
|
|
t.Setenv(clie2e.EnvBinaryPath, fake)
|
|
t.Setenv("FAKE_DRIVE_DELETE_EXIT", "1")
|
|
|
|
result, err := DeleteDriveResourceAndVerify(context.Background(), "fld_existing", "folder", "bot")
|
|
require.NotNil(t, result)
|
|
assert.Equal(t, 1, result.ExitCode)
|
|
require.Error(t, err)
|
|
assert.False(t, clie2e.IsCleanupWarning(err), "err: %v", err)
|
|
assert.Contains(t, err.Error(), "still exists after delete failed")
|
|
})
|
|
}
|
|
|
|
func mustWriteDriveCleanupFakeCLI(t *testing.T) string {
|
|
t.Helper()
|
|
|
|
script := `#!/bin/sh
|
|
if [ "$1" = "drive" ] && [ "$2" = "+delete" ]; then
|
|
if [ "${FAKE_DRIVE_DELETE_EXIT:-0}" != "0" ]; then
|
|
echo '{"ok":false,"error":{"type":"api","message":"delete failed"}}' >&2
|
|
exit "$FAKE_DRIVE_DELETE_EXIT"
|
|
fi
|
|
echo '{"ok":true}'
|
|
exit 0
|
|
fi
|
|
|
|
if [ "$1" = "api" ] && [ "$2" = "post" ] && [ "$3" = "/open-apis/drive/v1/metas/batch_query" ]; then
|
|
echo '{"ok":true,"data":{"metas":[{"url":"https://example.com/still-visible"}]}}'
|
|
exit 0
|
|
fi
|
|
|
|
echo "unexpected fake CLI args: $*" >&2
|
|
exit 2
|
|
`
|
|
|
|
binaryPath := filepath.Join(t.TempDir(), "fake-lark-cli")
|
|
require.NoError(t, os.WriteFile(binaryPath, []byte(script), 0o755))
|
|
return binaryPath
|
|
}
|