Files
ezbookkeeping/pkg/services/accounts_test.go
T
2025-09-20 21:08:42 +08:00

219 lines
6.0 KiB
Go

package services
import (
"testing"
"github.com/stretchr/testify/assert"
"github.com/mayswind/ezbookkeeping/pkg/models"
)
func TestGetAccountMapByList_EmptyList(t *testing.T) {
accounts := make([]*models.Account, 0)
actualAccountMap := Accounts.GetAccountMapByList(accounts)
assert.NotNil(t, actualAccountMap)
assert.Equal(t, 0, len(actualAccountMap))
}
func TestGetAccountMapByList_MultipleList(t *testing.T) {
accounts := []*models.Account{
{
AccountId: 1001,
Name: "Cash Account",
Category: models.ACCOUNT_CATEGORY_CASH,
},
{
AccountId: 1002,
Name: "Checking Account",
Category: models.ACCOUNT_CATEGORY_CHECKING_ACCOUNT,
},
{
AccountId: 1003,
Name: "Credit Card",
Category: models.ACCOUNT_CATEGORY_CREDIT_CARD,
},
}
actualAccountMap := Accounts.GetAccountMapByList(accounts)
assert.Equal(t, 3, len(actualAccountMap))
assert.Contains(t, actualAccountMap, int64(1001))
assert.Contains(t, actualAccountMap, int64(1002))
assert.Contains(t, actualAccountMap, int64(1003))
assert.Equal(t, "Cash Account", actualAccountMap[1001].Name)
assert.Equal(t, "Checking Account", actualAccountMap[1002].Name)
assert.Equal(t, "Credit Card", actualAccountMap[1003].Name)
}
func TestGetVisibleAccountNameMapByList_EmptyList(t *testing.T) {
accounts := make([]*models.Account, 0)
actualAccountMap := Accounts.GetVisibleAccountNameMapByList(accounts)
assert.NotNil(t, actualAccountMap)
assert.Equal(t, 0, len(actualAccountMap))
}
func TestGetVisibleAccountNameMapByList_WithHiddenAccount(t *testing.T) {
accounts := []*models.Account{
{
AccountId: 1001,
Name: "Visible Account",
Type: models.ACCOUNT_TYPE_SINGLE_ACCOUNT,
Hidden: false,
},
{
AccountId: 1002,
Name: "Hidden Account",
Type: models.ACCOUNT_TYPE_SINGLE_ACCOUNT,
Hidden: true,
},
}
actualAccountMap := Accounts.GetVisibleAccountNameMapByList(accounts)
assert.Equal(t, 1, len(actualAccountMap))
assert.Contains(t, actualAccountMap, "Visible Account")
assert.NotContains(t, actualAccountMap, "Hidden Account")
}
func TestGetVisibleAccountNameMapByList_WithParentAccount(t *testing.T) {
accounts := []*models.Account{
{
AccountId: 1001,
Name: "Single Account",
Type: models.ACCOUNT_TYPE_SINGLE_ACCOUNT,
Hidden: false,
},
{
AccountId: 1002,
Name: "Multi Sub Accounts",
Type: models.ACCOUNT_TYPE_MULTI_SUB_ACCOUNTS,
Hidden: false,
},
}
actualAccountMap := Accounts.GetVisibleAccountNameMapByList(accounts)
assert.Equal(t, 1, len(actualAccountMap))
assert.Contains(t, actualAccountMap, "Single Account")
assert.NotContains(t, actualAccountMap, "Multi Sub Accounts")
}
func TestGetAccountNames_EmptyList(t *testing.T) {
accounts := make([]*models.Account, 0)
actualAccountMap := Accounts.GetAccountNames(accounts)
assert.NotNil(t, actualAccountMap)
assert.Equal(t, 0, len(actualAccountMap))
}
func TestGetAccountNames_MultipleList(t *testing.T) {
accounts := []*models.Account{
{
AccountId: 1001,
Name: "Cash Account",
},
{
AccountId: 1002,
Name: "Checking Account",
},
{
AccountId: 1003,
Name: "Credit Card",
},
}
actualAccountMap := Accounts.GetAccountNames(accounts)
assert.Equal(t, 3, len(actualAccountMap))
assert.Equal(t, "Cash Account", actualAccountMap[0])
assert.Equal(t, "Checking Account", actualAccountMap[1])
assert.Equal(t, "Credit Card", actualAccountMap[2])
}
func TestGetAccountOrSubAccountIdsByAccountName_EmptyList(t *testing.T) {
accounts := make([]*models.Account, 0)
actualAccountMap := Accounts.GetAccountOrSubAccountIdsByAccountName(accounts, "Test Account")
assert.NotNil(t, actualAccountMap)
assert.Equal(t, 0, len(actualAccountMap))
}
func TestGetAccountOrSubAccountIdsByAccountName_NotMatch(t *testing.T) {
accounts := []*models.Account{
{
AccountId: 1001,
Name: "Cash Account",
Type: models.ACCOUNT_TYPE_SINGLE_ACCOUNT,
},
}
actualAccountMap := Accounts.GetAccountOrSubAccountIdsByAccountName(accounts, "Non-existent Account")
assert.NotNil(t, actualAccountMap)
assert.Equal(t, 0, len(actualAccountMap))
}
func TestGetAccountOrSubAccountIdsByAccountName_MatchSingle(t *testing.T) {
accounts := []*models.Account{
{
AccountId: 1001,
Name: "Cash Account",
Type: models.ACCOUNT_TYPE_SINGLE_ACCOUNT,
},
}
actualAccountMap := Accounts.GetAccountOrSubAccountIdsByAccountName(accounts, "Cash Account")
assert.Equal(t, 1, len(actualAccountMap))
assert.Contains(t, actualAccountMap, int64(1001))
}
func TestGetAccountOrSubAccountIdsByAccountName_MatchMultiple(t *testing.T) {
accounts := []*models.Account{
{
AccountId: 1001,
Name: "Test Account",
Type: models.ACCOUNT_TYPE_SINGLE_ACCOUNT,
},
{
AccountId: 2001,
Name: "Test Account",
Type: models.ACCOUNT_TYPE_MULTI_SUB_ACCOUNTS,
ParentAccountId: 0,
},
{
AccountId: 2002,
Name: "Sub 1-1",
Type: models.ACCOUNT_TYPE_SINGLE_ACCOUNT,
ParentAccountId: 2001,
},
{
AccountId: 2003,
Name: "Sub 1-2",
Type: models.ACCOUNT_TYPE_SINGLE_ACCOUNT,
ParentAccountId: 2001,
},
{
AccountId: 3001,
Name: "Test Account",
Type: models.ACCOUNT_TYPE_MULTI_SUB_ACCOUNTS,
ParentAccountId: 0,
},
{
AccountId: 3002,
Name: "Sub 2-1",
Type: models.ACCOUNT_TYPE_SINGLE_ACCOUNT,
ParentAccountId: 3001,
},
{
AccountId: 4001,
Name: "Other Account",
Type: models.ACCOUNT_TYPE_SINGLE_ACCOUNT,
},
}
actualAccountMap := Accounts.GetAccountOrSubAccountIdsByAccountName(accounts, "Test Account")
assert.Equal(t, 4, len(actualAccountMap))
assert.Contains(t, actualAccountMap, int64(1001))
assert.Contains(t, actualAccountMap, int64(2002))
assert.Contains(t, actualAccountMap, int64(2003))
assert.Contains(t, actualAccountMap, int64(3002))
assert.NotContains(t, actualAccountMap, int64(2001))
assert.NotContains(t, actualAccountMap, int64(3001))
assert.NotContains(t, actualAccountMap, int64(4001))
}