Files
larksuite-cli/shortcuts/doc/helpers_test.go
2026-06-15 17:47:34 +08:00

140 lines
3.2 KiB
Go

// Copyright (c) 2026 Lark Technologies Pte. Ltd.
// SPDX-License-Identifier: MIT
package doc
import (
"reflect"
"strings"
"testing"
)
func TestParseDocumentRef(t *testing.T) {
t.Parallel()
tests := []struct {
name string
input string
wantKind string
wantToken string
wantErr string
}{
{
name: "docx url",
input: "https://example.larksuite.com/docx/xxxxxx?from=wiki",
wantKind: "docx",
wantToken: "xxxxxx",
},
{
name: "wiki url",
input: "https://example.larksuite.com/wiki/xxxxxx?from=wiki",
wantKind: "wiki",
wantToken: "xxxxxx",
},
{
name: "doc url",
input: "https://example.larksuite.com/doc/xxxxxx",
wantKind: "doc",
wantToken: "xxxxxx",
},
{
name: "raw token",
input: "xxxxxx",
wantKind: "docx",
wantToken: "xxxxxx",
},
{
name: "unsupported url",
input: "https://example.com/not-a-doc",
wantErr: "unsupported --doc input",
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
got, err := parseDocumentRef(tt.input)
if tt.wantErr != "" {
if err == nil {
t.Fatalf("expected error containing %q, got nil", tt.wantErr)
}
if !strings.Contains(err.Error(), tt.wantErr) {
t.Fatalf("expected error containing %q, got %q", tt.wantErr, err.Error())
}
return
}
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if got.Kind != tt.wantKind {
t.Fatalf("parseDocumentRef(%q) kind = %q, want %q", tt.input, got.Kind, tt.wantKind)
}
if got.Token != tt.wantToken {
t.Fatalf("parseDocumentRef(%q) token = %q, want %q", tt.input, got.Token, tt.wantToken)
}
})
}
}
func TestBuildDriveRouteExtraEscapesJSON(t *testing.T) {
t.Parallel()
got, err := buildDriveRouteExtra(`doc-"quoted"`)
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
want := `{"drive_route_token":"doc-\"quoted\""}`
if got != want {
t.Fatalf("buildDriveRouteExtra() = %q, want %q", got, want)
}
}
func TestAppendDocWarning(t *testing.T) {
t.Parallel()
appendDocWarning(nil, "ignored")
empty := map[string]interface{}{}
appendDocWarning(empty, " ")
if _, ok := empty["warnings"]; ok {
t.Fatalf("blank warning should be ignored: %#v", empty)
}
tests := []struct {
name string
data map[string]interface{}
want interface{}
}{
{
name: "missing warnings",
data: map[string]interface{}{},
want: []string{"new warning"},
},
{
name: "string slice warnings",
data: map[string]interface{}{"warnings": []string{"old warning"}},
want: []string{"old warning", "new warning"},
},
{
name: "interface slice warnings",
data: map[string]interface{}{"warnings": []interface{}{"old warning"}},
want: []interface{}{"old warning", "new warning"},
},
{
name: "scalar warning",
data: map[string]interface{}{"warnings": "old warning"},
want: []interface{}{"old warning", "new warning"},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
appendDocWarning(tt.data, "new warning")
if got := tt.data["warnings"]; !reflect.DeepEqual(got, tt.want) {
t.Fatalf("warnings = %#v, want %#v", got, tt.want)
}
})
}
}