From 37ff0d1fab7e5e3bf38078381384bb32c556c83c Mon Sep 17 00:00:00 2001 From: MaysWind Date: Tue, 29 Oct 2024 00:38:24 +0800 Subject: [PATCH] check whether split quantity node exists --- ...ash_transaction_data_file_importer_test.go | 19 +++++++++++++++++++ .../gnucash/gnucash_transaction_table.go | 8 ++++++++ 2 files changed, 27 insertions(+) diff --git a/pkg/converters/gnucash/gnucash_transaction_data_file_importer_test.go b/pkg/converters/gnucash/gnucash_transaction_data_file_importer_test.go index 704e6bab..1c14a498 100644 --- a/pkg/converters/gnucash/gnucash_transaction_data_file_importer_test.go +++ b/pkg/converters/gnucash/gnucash_transaction_data_file_importer_test.go @@ -844,6 +844,25 @@ func TestGnuCashTransactionDatabaseFileParseImportedData_MissingTransactionRequi gnucashCommonValidDataCaseFooter), 0, nil, nil, nil, nil, nil) assert.EqualError(t, err, errs.ErrInvalidGnuCashFile.Message) + // Missing Transaction Split Quantity Node + _, _, _, _, _, _, err = converter.ParseImportedData(context, user, []byte( + gnucashCommonValidDataCaseHeader+ + "\n"+ + " \n"+ + " 2024-09-01 00:00:00 +0000\n"+ + " \n"+ + " \n"+ + " \n"+ + " 00000000000000000000000000001000\n"+ + " \n"+ + " \n"+ + " 00000000000000000000000000000010\n"+ + " \n"+ + " \n"+ + "\n"+ + gnucashCommonValidDataCaseFooter), 0, nil, nil, nil, nil, nil) + assert.EqualError(t, err, errs.ErrAmountInvalid.Message) + // Missing Transaction Split Account Node _, _, _, _, _, _, err = converter.ParseImportedData(context, user, []byte( gnucashCommonValidDataCaseHeader+ diff --git a/pkg/converters/gnucash/gnucash_transaction_table.go b/pkg/converters/gnucash/gnucash_transaction_table.go index f0e04949..9db3d157 100644 --- a/pkg/converters/gnucash/gnucash_transaction_table.go +++ b/pkg/converters/gnucash/gnucash_transaction_table.go @@ -136,6 +136,10 @@ func (t *gnucashTransactionDataRowIterator) parseTransaction(ctx core.Context, u return nil, false, errs.ErrMissingAccountData } + if splitData1.Quantity == "" || splitData2.Quantity == "" { + return nil, false, errs.ErrAmountInvalid + } + amount1, err := t.parseAmount(splitData1.Quantity) if err != nil { @@ -253,6 +257,10 @@ func (t *gnucashTransactionDataRowIterator) parseTransaction(ctx core.Context, u return nil, false, errs.ErrMissingAccountData } + if splitData.Quantity == "" { + return nil, false, errs.ErrAmountInvalid + } + amount, err := t.parseAmount(splitData.Quantity) if err != nil {