Files
ezbookkeeping/pkg/models/transaction_test.go

335 lines
11 KiB
Go

package models
import (
"sort"
"testing"
"github.com/stretchr/testify/assert"
"github.com/mayswind/ezbookkeeping/pkg/errs"
)
func TestParseTransactionTagFilter_EmptyTagFilter(t *testing.T) {
actualValue, err := ParseTransactionTagFilter("")
assert.Nil(t, err)
assert.Equal(t, 0, len(actualValue))
}
func TestParseTransactionTagFilter_NoTag(t *testing.T) {
actualValue, err := ParseTransactionTagFilter("none")
assert.Nil(t, err)
assert.Equal(t, 0, len(actualValue))
}
func TestParseTransactionTagFilter_NoValidFilter(t *testing.T) {
_, err := ParseTransactionTagFilter(";")
assert.EqualError(t, err, errs.ErrFormatInvalid.Message)
_, err = ParseTransactionTagFilter(";;")
assert.EqualError(t, err, errs.ErrFormatInvalid.Message)
}
func TestParseTransactionTagFilter_ValidOneFilterInTagFilters(t *testing.T) {
actualValue, err := ParseTransactionTagFilter("0:1")
assert.Nil(t, err)
assert.Equal(t, 1, len(actualValue))
assert.Equal(t, TRANSACTION_TAG_FILTER_HAS_ANY, actualValue[0].Type)
assert.Equal(t, 1, len(actualValue[0].TagIds))
assert.Equal(t, []int64{1}, actualValue[0].TagIds)
actualValue, err = ParseTransactionTagFilter("0:1,2,3")
assert.Nil(t, err)
assert.Equal(t, 1, len(actualValue))
assert.Equal(t, TRANSACTION_TAG_FILTER_HAS_ANY, actualValue[0].Type)
assert.Equal(t, 3, len(actualValue[0].TagIds))
assert.Equal(t, []int64{1, 2, 3}, actualValue[0].TagIds)
actualValue, err = ParseTransactionTagFilter("1:1,2,3")
assert.Nil(t, err)
assert.Equal(t, 1, len(actualValue))
assert.Equal(t, TRANSACTION_TAG_FILTER_HAS_ALL, actualValue[0].Type)
assert.Equal(t, 3, len(actualValue[0].TagIds))
assert.Equal(t, []int64{1, 2, 3}, actualValue[0].TagIds)
actualValue, err = ParseTransactionTagFilter("2:1,2,3")
assert.Nil(t, err)
assert.Equal(t, 1, len(actualValue))
assert.Equal(t, TRANSACTION_TAG_FILTER_NOT_HAS_ANY, actualValue[0].Type)
assert.Equal(t, 3, len(actualValue[0].TagIds))
assert.Equal(t, []int64{1, 2, 3}, actualValue[0].TagIds)
actualValue, err = ParseTransactionTagFilter("3:1,2,3")
assert.Nil(t, err)
assert.Equal(t, 1, len(actualValue))
assert.Equal(t, TRANSACTION_TAG_FILTER_NOT_HAS_ALL, actualValue[0].Type)
assert.Equal(t, 3, len(actualValue[0].TagIds))
assert.Equal(t, []int64{1, 2, 3}, actualValue[0].TagIds)
}
func TestParseTransactionTagFilter_InvalidTagFilterType(t *testing.T) {
_, err := ParseTransactionTagFilter("a:1,2,3")
assert.EqualError(t, err, errs.ErrFormatInvalid.Message)
_, err = ParseTransactionTagFilter("-1:1,2,3")
assert.EqualError(t, err, errs.ErrFormatInvalid.Message)
_, err = ParseTransactionTagFilter("4:1,2,3")
assert.EqualError(t, err, errs.ErrFormatInvalid.Message)
}
func TestParseTransactionTagFilter_NoTagIdsInFilter(t *testing.T) {
_, err := ParseTransactionTagFilter("0")
assert.EqualError(t, err, errs.ErrFormatInvalid.Message)
_, err = ParseTransactionTagFilter("0:")
assert.EqualError(t, err, errs.ErrTransactionTagIdInvalid.Message)
}
func TestParseTransactionTagFilter_InvalidTagIdsInFilter(t *testing.T) {
_, err := ParseTransactionTagFilter("0:abc")
assert.EqualError(t, err, errs.ErrTransactionTagIdInvalid.Message)
}
func TestParseTransactionTagFilter_ValidTwoFilterInTagFilters(t *testing.T) {
actualValue, err := ParseTransactionTagFilter("0:1,2,3;2:4,5,6")
assert.Nil(t, err)
assert.Equal(t, 2, len(actualValue))
assert.Equal(t, TRANSACTION_TAG_FILTER_HAS_ANY, actualValue[0].Type)
assert.Equal(t, 3, len(actualValue[0].TagIds))
assert.Equal(t, []int64{1, 2, 3}, actualValue[0].TagIds)
assert.Equal(t, TRANSACTION_TAG_FILTER_NOT_HAS_ANY, actualValue[1].Type)
assert.Equal(t, 3, len(actualValue[1].TagIds))
assert.Equal(t, []int64{4, 5, 6}, actualValue[1].TagIds)
}
func TestTransactionAmountsRequestGetTransactionAmountsRequestItems(t *testing.T) {
transactionAmountsRequest := &TransactionAmountsRequest{
Query: "name1_1234567890_1234567891|name2_1234567900_1234567901",
}
var expectedValue []*TransactionAmountsRequestItem
expectedValue = append(expectedValue, &TransactionAmountsRequestItem{
Name: "name1",
StartTime: 1234567890,
EndTime: 1234567891,
})
expectedValue = append(expectedValue, &TransactionAmountsRequestItem{
Name: "name2",
StartTime: 1234567900,
EndTime: 1234567901,
})
actualValue, err := transactionAmountsRequest.GetTransactionAmountsRequestItems()
assert.Nil(t, err)
assert.EqualValues(t, expectedValue, actualValue)
}
func TestTransactionAmountsRequestGetTransactionAmountsRequestItems_InvalidValue(t *testing.T) {
transactionAmountsRequest := &TransactionAmountsRequest{
Query: "name1_1234567890",
}
_, err := transactionAmountsRequest.GetTransactionAmountsRequestItems()
assert.NotNil(t, err)
assert.EqualError(t, err, errs.ErrQueryItemsInvalid.Message)
transactionAmountsRequest2 := &TransactionAmountsRequest{
Query: "name1_123456789f_1234567891",
}
_, err = transactionAmountsRequest2.GetTransactionAmountsRequestItems()
assert.NotNil(t, err)
transactionAmountsRequest3 := &TransactionAmountsRequest{
Query: "name1_1234567890_123456789f",
}
_, err = transactionAmountsRequest3.GetTransactionAmountsRequestItems()
assert.NotNil(t, err)
}
func TestYearMonthRangeRequestGetNumericYearMonthRange(t *testing.T) {
yearMonthRangeRequest := &YearMonthRangeRequest{
StartYearMonth: "2023-4",
EndYearMonth: "2024-05",
}
startYear, startMonth, endYear, endMonth, err := yearMonthRangeRequest.GetNumericYearMonthRange()
assert.Nil(t, err)
assert.Equal(t, int32(2023), startYear)
assert.Equal(t, int32(4), startMonth)
assert.Equal(t, int32(2024), endYear)
assert.Equal(t, int32(5), endMonth)
}
func TestYearMonthRangeRequestGetNumericYearMonthRange_InvalidValues(t *testing.T) {
yearMonthRangeRequest := &YearMonthRangeRequest{
StartYearMonth: "2023/4",
EndYearMonth: "2024/05",
}
_, _, _, _, err := yearMonthRangeRequest.GetNumericYearMonthRange()
assert.NotNil(t, err)
yearMonthRangeRequest2 := &YearMonthRangeRequest{
StartYearMonth: "2023-April",
}
_, _, _, _, err = yearMonthRangeRequest2.GetNumericYearMonthRange()
assert.NotNil(t, err)
yearMonthRangeRequest3 := &YearMonthRangeRequest{
EndYearMonth: "2024-May",
}
_, _, _, _, err = yearMonthRangeRequest3.GetNumericYearMonthRange()
assert.NotNil(t, err)
}
func TestTransactionInfoResponseSliceLess(t *testing.T) {
var transactionRespSlice TransactionInfoResponseSlice
transactionRespSlice = append(transactionRespSlice, &TransactionInfoResponse{
Id: 2,
Time: 3,
})
transactionRespSlice = append(transactionRespSlice, &TransactionInfoResponse{
Id: 3,
Time: 2,
})
transactionRespSlice = append(transactionRespSlice, &TransactionInfoResponse{
Id: 5,
Time: 2,
})
transactionRespSlice = append(transactionRespSlice, &TransactionInfoResponse{
Id: 4,
Time: 1,
})
transactionRespSlice = append(transactionRespSlice, &TransactionInfoResponse{
Id: 1,
Time: 3,
})
sort.Sort(transactionRespSlice)
assert.Equal(t, int64(2), transactionRespSlice[0].Id)
assert.Equal(t, int64(1), transactionRespSlice[1].Id)
assert.Equal(t, int64(5), transactionRespSlice[2].Id)
assert.Equal(t, int64(3), transactionRespSlice[3].Id)
assert.Equal(t, int64(4), transactionRespSlice[4].Id)
}
func TestTransactionStatisticTrendsResponseItemSliceLess(t *testing.T) {
var transactionTrendsSlice TransactionStatisticTrendsResponseItemSlice
transactionTrendsSlice = append(transactionTrendsSlice, &TransactionStatisticTrendsResponseItem{
Year: 2024,
Month: 9,
})
transactionTrendsSlice = append(transactionTrendsSlice, &TransactionStatisticTrendsResponseItem{
Year: 2022,
Month: 10,
})
transactionTrendsSlice = append(transactionTrendsSlice, &TransactionStatisticTrendsResponseItem{
Year: 2023,
Month: 1,
})
transactionTrendsSlice = append(transactionTrendsSlice, &TransactionStatisticTrendsResponseItem{
Year: 2022,
Month: 2,
})
transactionTrendsSlice = append(transactionTrendsSlice, &TransactionStatisticTrendsResponseItem{
Year: 2024,
Month: 1,
})
sort.Sort(transactionTrendsSlice)
assert.Equal(t, int32(2022), transactionTrendsSlice[0].Year)
assert.Equal(t, int32(2), transactionTrendsSlice[0].Month)
assert.Equal(t, int32(2022), transactionTrendsSlice[1].Year)
assert.Equal(t, int32(10), transactionTrendsSlice[1].Month)
assert.Equal(t, int32(2023), transactionTrendsSlice[2].Year)
assert.Equal(t, int32(1), transactionTrendsSlice[2].Month)
assert.Equal(t, int32(2024), transactionTrendsSlice[3].Year)
assert.Equal(t, int32(1), transactionTrendsSlice[3].Month)
assert.Equal(t, int32(2024), transactionTrendsSlice[4].Year)
assert.Equal(t, int32(9), transactionTrendsSlice[4].Month)
}
func TestTransactionStatisticAssetTrendsResponseItemSliceLess(t *testing.T) {
var transactionTrendsSlice TransactionStatisticAssetTrendsResponseItemSlice
transactionTrendsSlice = append(transactionTrendsSlice, &TransactionStatisticAssetTrendsResponseItem{
Year: 2024,
Month: 9,
Day: 1,
})
transactionTrendsSlice = append(transactionTrendsSlice, &TransactionStatisticAssetTrendsResponseItem{
Year: 2024,
Month: 9,
Day: 2,
})
transactionTrendsSlice = append(transactionTrendsSlice, &TransactionStatisticAssetTrendsResponseItem{
Year: 2024,
Month: 10,
Day: 1,
})
transactionTrendsSlice = append(transactionTrendsSlice, &TransactionStatisticAssetTrendsResponseItem{
Year: 2022,
Month: 10,
Day: 1,
})
transactionTrendsSlice = append(transactionTrendsSlice, &TransactionStatisticAssetTrendsResponseItem{
Year: 2023,
Month: 1,
Day: 1,
})
transactionTrendsSlice = append(transactionTrendsSlice, &TransactionStatisticAssetTrendsResponseItem{
Year: 2024,
Month: 2,
Day: 2,
})
sort.Sort(transactionTrendsSlice)
assert.Equal(t, int32(2022), transactionTrendsSlice[0].Year)
assert.Equal(t, int32(10), transactionTrendsSlice[0].Month)
assert.Equal(t, int32(1), transactionTrendsSlice[0].Day)
assert.Equal(t, int32(2023), transactionTrendsSlice[1].Year)
assert.Equal(t, int32(1), transactionTrendsSlice[1].Month)
assert.Equal(t, int32(1), transactionTrendsSlice[1].Day)
assert.Equal(t, int32(2024), transactionTrendsSlice[2].Year)
assert.Equal(t, int32(2), transactionTrendsSlice[2].Month)
assert.Equal(t, int32(2), transactionTrendsSlice[2].Day)
assert.Equal(t, int32(2024), transactionTrendsSlice[3].Year)
assert.Equal(t, int32(9), transactionTrendsSlice[3].Month)
assert.Equal(t, int32(1), transactionTrendsSlice[3].Day)
assert.Equal(t, int32(2024), transactionTrendsSlice[4].Year)
assert.Equal(t, int32(9), transactionTrendsSlice[4].Month)
assert.Equal(t, int32(2), transactionTrendsSlice[4].Day)
assert.Equal(t, int32(2024), transactionTrendsSlice[5].Year)
assert.Equal(t, int32(10), transactionTrendsSlice[5].Month)
assert.Equal(t, int32(1), transactionTrendsSlice[5].Day)
}
func TestTransactionAmountsResponseItemAmountInfoSliceLess(t *testing.T) {
var amountInfoSlice TransactionAmountsResponseItemAmountInfoSlice
amountInfoSlice = append(amountInfoSlice, &TransactionAmountsResponseItemAmountInfo{
Currency: "USD",
})
amountInfoSlice = append(amountInfoSlice, &TransactionAmountsResponseItemAmountInfo{
Currency: "EUR",
})
amountInfoSlice = append(amountInfoSlice, &TransactionAmountsResponseItemAmountInfo{
Currency: "CNY",
})
sort.Sort(amountInfoSlice)
assert.Equal(t, "CNY", amountInfoSlice[0].Currency)
assert.Equal(t, "EUR", amountInfoSlice[1].Currency)
assert.Equal(t, "USD", amountInfoSlice[2].Currency)
}