bf9395e022
CI / license-header (push) Has been skipped
CI / e2e-dry-run (push) Has been skipped
CI / fast-gate (push) Failing after 0s
Test PR Label Logic / test-pr-labels (push) Failing after 1s
Skill Format Check / check-format (push) Failing after 2s
CI / security (push) Failing after 5s
CI / unit-test (push) Has been skipped
CI / lint (push) Has been skipped
CI / script-test (push) Has been skipped
CI / deterministic-gate (push) Has been skipped
CI / coverage (push) Has been skipped
CI / results (push) Has been cancelled
CI / deadcode (push) Has been cancelled
CI / e2e-live (push) Has been cancelled
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
|
|
}
|