mirror of
https://github.com/larksuite/cli.git
synced 2026-07-03 14:02:43 +08:00
124 lines
3.2 KiB
Go
124 lines
3.2 KiB
Go
// Copyright (c) 2026 Lark Technologies Pte. Ltd.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package config
|
|
|
|
import (
|
|
"fmt"
|
|
"testing"
|
|
|
|
"github.com/larksuite/cli/internal/i18n"
|
|
)
|
|
|
|
func TestGetInitMsg_Zh(t *testing.T) {
|
|
msg := getInitMsg("zh")
|
|
if msg != initMsgZh {
|
|
t.Error("expected zh message set")
|
|
}
|
|
if msg.SelectAction != "选择操作" {
|
|
t.Errorf("unexpected SelectAction: %s", msg.SelectAction)
|
|
}
|
|
}
|
|
|
|
func TestGetInitMsg_En(t *testing.T) {
|
|
msg := getInitMsg("en")
|
|
if msg != initMsgEn {
|
|
t.Error("expected en message set")
|
|
}
|
|
if msg.SelectAction != "Select action" {
|
|
t.Errorf("unexpected SelectAction: %s", msg.SelectAction)
|
|
}
|
|
}
|
|
|
|
func TestGetInitMsg_DefaultsToZh(t *testing.T) {
|
|
for _, lang := range []i18n.Lang{"", "unknown", "xyz", "invalid"} {
|
|
msg := getInitMsg(lang)
|
|
if msg != initMsgZh {
|
|
t.Errorf("getInitMsg(%q) should default to zh", lang)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestInitMsgZh_AllFieldsNonEmpty(t *testing.T) {
|
|
assertAllFieldsNonEmpty(t, initMsgZh, "zh")
|
|
}
|
|
|
|
func TestInitMsgEn_AllFieldsNonEmpty(t *testing.T) {
|
|
assertAllFieldsNonEmpty(t, initMsgEn, "en")
|
|
}
|
|
|
|
func assertAllFieldsNonEmpty(t *testing.T, msg *initMsg, label string) {
|
|
t.Helper()
|
|
fields := map[string]string{
|
|
"SelectAction": msg.SelectAction,
|
|
"CreateNewApp": msg.CreateNewApp,
|
|
"ConfigExistingApp": msg.ConfigExistingApp,
|
|
"Platform": msg.Platform,
|
|
"SelectPlatform": msg.SelectPlatform,
|
|
"Feishu": msg.Feishu,
|
|
"ScanQRCode": msg.ScanQRCode,
|
|
"ScanOrOpenLink": msg.ScanOrOpenLink,
|
|
"WaitingForScan": msg.WaitingForScan,
|
|
"OpenLinkNonTTY": msg.OpenLinkNonTTY,
|
|
"WaitingForScanNonTTY": msg.WaitingForScanNonTTY,
|
|
"DetectedLarkTenant": msg.DetectedLarkTenant,
|
|
"AppCreated": msg.AppCreated,
|
|
"ConfigSaved": msg.ConfigSaved,
|
|
"LangPreferenceSet": msg.LangPreferenceSet,
|
|
}
|
|
for name, val := range fields {
|
|
if val == "" {
|
|
t.Errorf("%s.%s is empty", label, name)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestInitMsg_FormatStrings(t *testing.T) {
|
|
for _, lang := range []i18n.Lang{i18n.LangZhCN, i18n.LangEnUS} {
|
|
msg := getInitMsg(lang)
|
|
// AppCreated and ConfigSaved should contain %s for App ID
|
|
got := fmt.Sprintf(msg.AppCreated, "cli_test123")
|
|
if got == msg.AppCreated {
|
|
t.Errorf("%s AppCreated has no format verb", lang)
|
|
}
|
|
got = fmt.Sprintf(msg.ConfigSaved, "cli_test123")
|
|
if got == msg.ConfigSaved {
|
|
t.Errorf("%s ConfigSaved has no format verb", lang)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestGetInitMsg_BilingualCollapse(t *testing.T) {
|
|
// The TUI is bilingual (zh + en). Only English-bucket languages return the
|
|
// English struct — by canonical locale ("en_us") or legacy short ("en").
|
|
// Everything else (zh, the other codes, invalid, "") returns Chinese.
|
|
tests := []struct {
|
|
lang i18n.Lang
|
|
shouldBeEn bool
|
|
}{
|
|
{i18n.LangZhCN, false},
|
|
{i18n.LangEnUS, true},
|
|
{"en", true}, // legacy short value
|
|
{i18n.LangJaJP, false},
|
|
{"fr_fr", false},
|
|
{"invalid", false},
|
|
{"", false},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(string(tt.lang), func(t *testing.T) {
|
|
msg := getInitMsg(tt.lang)
|
|
if msg == nil {
|
|
t.Fatal("getInitMsg returned nil")
|
|
}
|
|
want := initMsgZh
|
|
if tt.shouldBeEn {
|
|
want = initMsgEn
|
|
}
|
|
if msg != want {
|
|
t.Errorf("getInitMsg(%q) returned wrong struct", tt.lang)
|
|
}
|
|
})
|
|
}
|
|
}
|