From 7a20548204ee55af60cdfa23dea9d08c2f47fcb9 Mon Sep 17 00:00:00 2001 From: Your Name Date: Fri, 29 May 2026 17:52:16 +0800 Subject: [PATCH] test: add social account domain tests - Add SocialAccountStatus constants tests - Add ExtraData Value/Scan tests - Add SocialAccount ToInfo and field tests --- internal/domain/social_account_test.go | 128 ++++++++++++++++++++++++- 1 file changed, 123 insertions(+), 5 deletions(-) diff --git a/internal/domain/social_account_test.go b/internal/domain/social_account_test.go index 0594cef..6705412 100644 --- a/internal/domain/social_account_test.go +++ b/internal/domain/social_account_test.go @@ -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) +}