Files
larksuite-cli/internal/auth/scope_test.go
JackZhao10086 b5b23fe82a feat: implement authentication response logging (#235)
* 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
2026-04-03 15:40:30 +08:00

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
}