2 Commits

Author SHA1 Message Date
Your Name
7a20548204 test: add social account domain tests
- Add SocialAccountStatus constants tests
- Add ExtraData Value/Scan tests
- Add SocialAccount ToInfo and field tests
2026-05-29 17:52:16 +08:00
Your Name
e47dae6fc6 test: add geminicli codeassist types tests
- Add TierInfo UnmarshalJSON tests
- Add LoadCodeAssistResponse GetTier tests
- Add model field tests
2026-05-29 17:43:16 +08:00
2 changed files with 262 additions and 5 deletions

View File

@@ -1,10 +1,128 @@
package domain
import "testing"
import (
"database/sql/driver"
"testing"
"time"
func TestSocialAccountTableName(t *testing.T) {
var account SocialAccount
if account.TableName() != "user_social_accounts" {
t.Fatalf("unexpected table name: %s", account.TableName())
"github.com/stretchr/testify/require"
)
func TestSocialAccountStatus_Constants(t *testing.T) {
require.Equal(t, SocialAccountStatus(1), SocialAccountStatusActive)
require.Equal(t, SocialAccountStatus(0), SocialAccountStatusInactive)
require.Equal(t, SocialAccountStatus(2), SocialAccountStatusDisabled)
}
func TestExtraData_Value(t *testing.T) {
tests := []struct {
name string
data ExtraData
want driver.Value
}{
{
name: "nil",
data: nil,
want: nil,
},
{
name: "empty",
data: ExtraData{},
want: []byte("{}"),
},
{
name: "with_data",
data: ExtraData{"key": "value", "num": 42},
want: []byte(`{"key":"value","num":42}`),
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got, err := tt.data.Value()
require.NoError(t, err)
if tt.want == nil {
require.Nil(t, got)
} else {
require.Equal(t, tt.want, got)
}
})
}
}
func TestExtraData_Scan(t *testing.T) {
tests := []struct {
name string
value interface{}
want ExtraData
wantErr bool
}{
{
name: "nil",
value: nil,
want: nil,
},
{
name: "valid_json",
value: []byte(`{"key":"value"}`),
want: ExtraData{"key": "value"},
},
{
name: "invalid_type",
value: "not bytes",
want: nil,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
var e ExtraData
err := e.Scan(tt.value)
if tt.wantErr {
require.Error(t, err)
} else {
require.NoError(t, err)
require.Equal(t, tt.want, e)
}
})
}
}
func TestSocialAccount_ToInfo(t *testing.T) {
now := time.Now()
sa := &SocialAccount{
ID: 1,
Provider: "github",
Nickname: "testuser",
Avatar: "https://example.com/avatar.png",
Status: SocialAccountStatusActive,
CreatedAt: &now,
}
info := sa.ToInfo()
require.NotNil(t, info)
require.Equal(t, sa.ID, info.ID)
require.Equal(t, sa.Provider, info.Provider)
require.Equal(t, sa.Nickname, info.Nickname)
require.Equal(t, sa.Avatar, info.Avatar)
require.Equal(t, sa.Status, info.Status)
require.Equal(t, sa.CreatedAt, info.CreatedAt)
}
func TestSocialAccountInfo_Fields(t *testing.T) {
now := time.Now()
info := SocialAccountInfo{
ID: 1,
Provider: "google",
Nickname: "user",
Avatar: "avatar.png",
Status: SocialAccountStatusInactive,
CreatedAt: &now,
}
require.Equal(t, int64(1), info.ID)
require.Equal(t, "google", info.Provider)
require.Equal(t, "user", info.Nickname)
require.Equal(t, "avatar.png", info.Avatar)
require.Equal(t, SocialAccountStatusInactive, info.Status)
}

View File

@@ -0,0 +1,139 @@
package geminicli
import (
"encoding/json"
"testing"
"github.com/stretchr/testify/require"
)
func TestTierInfo_UnmarshalJSON(t *testing.T) {
tests := []struct {
name string
input string
wantID string
wantErr bool
}{
{"string_tier", `"free-tier"`, "free-tier", false},
{"object_tier", `{"id":"pro-tier"}`, "pro-tier", false},
{"empty_string", `""`, "", false},
{"null", `null`, "", false},
{"invalid_json_empty", ``, "", true},
{"invalid_json_whitespace", ` `, "", true},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
var tier TierInfo
err := json.Unmarshal([]byte(tt.input), &tier)
if tt.wantErr {
require.Error(t, err)
} else {
require.NoError(t, err)
require.Equal(t, tt.wantID, tier.ID)
}
})
}
}
func TestLoadCodeAssistResponse_GetTier(t *testing.T) {
tests := []struct {
name string
resp LoadCodeAssistResponse
want string
}{
{
name: "paid_tier_priority",
resp: LoadCodeAssistResponse{
PaidTier: &TierInfo{ID: "pro"},
CurrentTier: &TierInfo{ID: "free"},
},
want: "pro",
},
{
name: "current_tier_only",
resp: LoadCodeAssistResponse{
CurrentTier: &TierInfo{ID: "free"},
},
want: "free",
},
{
name: "paid_empty_fallback",
resp: LoadCodeAssistResponse{
PaidTier: &TierInfo{ID: ""},
CurrentTier: &TierInfo{ID: "free"},
},
want: "free",
},
{
name: "no_tier",
resp: LoadCodeAssistResponse{},
want: "",
},
{
name: "nil_tiers",
resp: LoadCodeAssistResponse{
PaidTier: nil,
CurrentTier: nil,
},
want: "",
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got := tt.resp.GetTier()
require.Equal(t, tt.want, got)
})
}
}
func TestAllowedTier_Fields(t *testing.T) {
tier := AllowedTier{
ID: "pro",
IsDefault: true,
}
require.Equal(t, "pro", tier.ID)
require.True(t, tier.IsDefault)
}
func TestOnboardUserRequest_Fields(t *testing.T) {
req := OnboardUserRequest{
TierID: "pro",
Metadata: LoadCodeAssistMetadata{
IDEType: "vscode",
Platform: "linux",
PluginType: "extension",
},
}
require.Equal(t, "pro", req.TierID)
require.Equal(t, "vscode", req.Metadata.IDEType)
require.Equal(t, "linux", req.Metadata.Platform)
require.Equal(t, "extension", req.Metadata.PluginType)
}
func TestOnboardUserResponse_Fields(t *testing.T) {
resp := OnboardUserResponse{
Done: true,
Response: &OnboardUserResultData{
CloudAICompanionProject: "project123",
},
Name: "test",
}
require.True(t, resp.Done)
require.Equal(t, "test", resp.Name)
require.NotNil(t, resp.Response)
}
func TestLoadCodeAssistRequest_Fields(t *testing.T) {
req := LoadCodeAssistRequest{
Metadata: LoadCodeAssistMetadata{
IDEType: "vscode",
Platform: "macos",
PluginType: "extension",
},
}
require.Equal(t, "vscode", req.Metadata.IDEType)
require.Equal(t, "macos", req.Metadata.Platform)
require.Equal(t, "extension", req.Metadata.PluginType)
}