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
97 lines
2.8 KiB
Go
97 lines
2.8 KiB
Go
// Copyright (c) 2026 Lark Technologies Pte. Ltd.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package auth
|
|
|
|
import (
|
|
"encoding/json"
|
|
"net/http"
|
|
"testing"
|
|
|
|
"github.com/larksuite/cli/internal/cmdutil"
|
|
"github.com/larksuite/cli/internal/core"
|
|
"github.com/larksuite/cli/internal/httpmock"
|
|
)
|
|
|
|
func TestAuthStatusRun_SplitsBotAndUserIdentity(t *testing.T) {
|
|
f, stdout, _, _ := cmdutil.TestFactory(t, &core.CliConfig{
|
|
AppID: "test-app", AppSecret: "secret", Brand: core.BrandFeishu,
|
|
})
|
|
|
|
if err := authStatusRun(&StatusOptions{Factory: f}); err != nil {
|
|
t.Fatalf("authStatusRun() error = %v", err)
|
|
}
|
|
|
|
var got statusOutput
|
|
if err := json.Unmarshal(stdout.Bytes(), &got); err != nil {
|
|
t.Fatalf("json.Unmarshal() error = %v", err)
|
|
}
|
|
if got.Identity != "bot" {
|
|
t.Fatalf("identity = %q, want bot", got.Identity)
|
|
}
|
|
if got.Identities.Bot.Status != "ready" || !got.Identities.Bot.Available {
|
|
t.Fatalf("bot = %#v, want ready and available", got.Identities.Bot)
|
|
}
|
|
if got.Identities.User.Status != "missing" || got.Identities.User.Available {
|
|
t.Fatalf("user = %#v, want missing and unavailable", got.Identities.User)
|
|
}
|
|
}
|
|
|
|
func TestAuthStatusRun_VerifyReportsBotIdentity(t *testing.T) {
|
|
f, stdout, _, reg := cmdutil.TestFactory(t, &core.CliConfig{
|
|
AppID: "test-app", AppSecret: "secret", Brand: core.BrandFeishu,
|
|
})
|
|
reg.Register(&httpmock.Stub{
|
|
Method: http.MethodGet,
|
|
URL: "/open-apis/bot/v3/info",
|
|
Body: map[string]interface{}{
|
|
"code": 0,
|
|
"msg": "ok",
|
|
"bot": map[string]interface{}{
|
|
"open_id": "ou_bot",
|
|
"app_name": "diagnostic bot",
|
|
},
|
|
},
|
|
})
|
|
|
|
if err := authStatusRun(&StatusOptions{Factory: f, Verify: true}); err != nil {
|
|
t.Fatalf("authStatusRun() error = %v", err)
|
|
}
|
|
|
|
var got statusOutput
|
|
if err := json.Unmarshal(stdout.Bytes(), &got); err != nil {
|
|
t.Fatalf("json.Unmarshal() error = %v", err)
|
|
}
|
|
if got.Identity != "bot" {
|
|
t.Fatalf("identity = %q, want bot", got.Identity)
|
|
}
|
|
if got.Verified == nil || !*got.Verified {
|
|
t.Fatalf("verified = %v, want true", got.Verified)
|
|
}
|
|
if got.Identities.Bot.Verified == nil || !*got.Identities.Bot.Verified {
|
|
t.Fatalf("bot verified = %v, want true", got.Identities.Bot.Verified)
|
|
}
|
|
if got.Identities.Bot.OpenID != "ou_bot" {
|
|
t.Fatalf("bot open id = %q, want ou_bot", got.Identities.Bot.OpenID)
|
|
}
|
|
if got.Identities.User.Status != "missing" {
|
|
t.Fatalf("user status = %q, want missing", got.Identities.User.Status)
|
|
}
|
|
}
|
|
|
|
type statusOutput struct {
|
|
Identity string `json:"identity"`
|
|
Verified *bool `json:"verified"`
|
|
Identities struct {
|
|
Bot statusIdentity `json:"bot"`
|
|
User statusIdentity `json:"user"`
|
|
} `json:"identities"`
|
|
}
|
|
|
|
type statusIdentity struct {
|
|
Status string `json:"status"`
|
|
Available bool `json:"available"`
|
|
Verified *bool `json:"verified"`
|
|
OpenID string `json:"openId"`
|
|
}
|