mirror of
https://github.com/larksuite/cli.git
synced 2026-07-03 14:02:43 +08:00
* feat(auth): add response logging and centralize path constants * refactor(auth): improve response logging and error handling * fix(auth): ensure log cleanup runs only once per process Add flag to track if cleanup has run and prevent duplicate executions Add test to verify cleanup only runs once * refactor(auth): simplify log writer and cleanup logic * docs(auth): add comments to auth paths and logging functions * style(auth): fix indentation in path constants * docs(auth): add missing function comments across auth package * docs(tests): add descriptive comments to auth test functions * test(auth): rename test case and cleanup unused params * fix(auth): handle file close error in auth response logging * fix(auth): ensure log cleanup runs only once * refactor(auth): replace custom log writer with standard logger * feat(auth): add structured logging for keychain errors * fix(auth): remove goroutine from auth log cleanup to prevent race condition * fix(auth): remove goroutine from auth log cleanup to prevent race condition * refactor(auth): move auth logging logic to keychain package
81 lines
1.6 KiB
Go
81 lines
1.6 KiB
Go
// Copyright (c) 2026 Lark Technologies Pte. Ltd.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package auth
|
|
|
|
import (
|
|
"testing"
|
|
)
|
|
|
|
// TestMissingScopes tests the calculation of missing scopes.
|
|
func TestMissingScopes(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
storedScope string
|
|
required []string
|
|
expected []string
|
|
}{
|
|
{
|
|
name: "all matched",
|
|
storedScope: "a b c",
|
|
required: []string{"a", "b"},
|
|
expected: nil,
|
|
},
|
|
{
|
|
name: "partial missing",
|
|
storedScope: "a b",
|
|
required: []string{"a", "c"},
|
|
expected: []string{"c"},
|
|
},
|
|
{
|
|
name: "all missing",
|
|
storedScope: "a b",
|
|
required: []string{"x", "y"},
|
|
expected: []string{"x", "y"},
|
|
},
|
|
{
|
|
name: "empty storedScope",
|
|
storedScope: "",
|
|
required: []string{"a"},
|
|
expected: []string{"a"},
|
|
},
|
|
{
|
|
name: "empty required",
|
|
storedScope: "a b",
|
|
required: []string{},
|
|
expected: nil,
|
|
},
|
|
{
|
|
name: "extra whitespace in storedScope",
|
|
storedScope: " a b c ",
|
|
required: []string{"b"},
|
|
expected: nil,
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
got := MissingScopes(tt.storedScope, tt.required)
|
|
if !sliceEqual(got, tt.expected) {
|
|
t.Errorf("MissingScopes(%q, %v) = %v, want %v", tt.storedScope, tt.required, got, tt.expected)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
// sliceEqual compares two string slices for equality.
|
|
func sliceEqual(a, b []string) bool {
|
|
if len(a) == 0 && len(b) == 0 {
|
|
return true
|
|
}
|
|
if len(a) != len(b) {
|
|
return false
|
|
}
|
|
for i := range a {
|
|
if a[i] != b[i] {
|
|
return false
|
|
}
|
|
}
|
|
return true
|
|
}
|