package ofx import ( "testing" "github.com/stretchr/testify/assert" "github.com/mayswind/ezbookkeeping/pkg/core" "github.com/mayswind/ezbookkeeping/pkg/errs" ) func TestCreateNewOFXFileReader_OFX2(t *testing.T) { context := core.NewNullContext() reader, err := createNewOFXFileReader(context, []byte( "\n"+ "\n"+ "\n"+ " \n"+ " \n"+ " \n"+ " CNY\n"+ " \n"+ " 123\n"+ " \n"+ " \n"+ " \n"+ " DEP\n"+ " 20240901012345.000[+8:CST]\n"+ " 123.45\n"+ " \n"+ " \n"+ " \n"+ " \n"+ " \n"+ "")) assert.Nil(t, err) ofxFile, err := reader.read(context) assert.Nil(t, err) assert.NotNil(t, ofxFile) assert.NotNil(t, ofxFile.FileHeader) assert.Equal(t, ofxVersion2, ofxFile.FileHeader.OFXDeclarationVersion) assert.Equal(t, "211", ofxFile.FileHeader.OFXDataVersion) assert.Equal(t, "NONE", ofxFile.FileHeader.Security) assert.Equal(t, "NONE", ofxFile.FileHeader.OldFileUid) assert.Equal(t, "NONE", ofxFile.FileHeader.NewFileUid) assert.NotNil(t, ofxFile.BankMessageResponseV1) assert.NotNil(t, ofxFile.BankMessageResponseV1.StatementTransactionResponse) assert.NotNil(t, ofxFile.BankMessageResponseV1.StatementTransactionResponse.StatementResponse) assert.Equal(t, "CNY", ofxFile.BankMessageResponseV1.StatementTransactionResponse.StatementResponse.DefaultCurrency) assert.NotNil(t, ofxFile.BankMessageResponseV1.StatementTransactionResponse.StatementResponse.AccountFrom) assert.Equal(t, "123", ofxFile.BankMessageResponseV1.StatementTransactionResponse.StatementResponse.AccountFrom.AccountId) assert.Equal(t, 1, len(ofxFile.BankMessageResponseV1.StatementTransactionResponse.StatementResponse.TransactionList.StatementTransactions)) assert.Equal(t, ofxDepositTransaction, ofxFile.BankMessageResponseV1.StatementTransactionResponse.StatementResponse.TransactionList.StatementTransactions[0].TransactionType) assert.Equal(t, "20240901012345.000[+8:CST]", ofxFile.BankMessageResponseV1.StatementTransactionResponse.StatementResponse.TransactionList.StatementTransactions[0].PostedDate) assert.Equal(t, "123.45", ofxFile.BankMessageResponseV1.StatementTransactionResponse.StatementResponse.TransactionList.StatementTransactions[0].Amount) } func TestCreateNewOFXFileReader_OFX2WithoutBreakLine(t *testing.T) { context := core.NewNullContext() reader, err := createNewOFXFileReader(context, []byte( ""+ ""+ ""+ " "+ " "+ " "+ " CNY"+ " "+ " 123"+ " "+ " "+ " "+ " DEP"+ " 20240901012345.000[+8:CST]"+ " 123.45"+ " "+ " "+ " "+ " "+ " "+ "")) assert.Nil(t, err) ofxFile, err := reader.read(context) assert.Nil(t, err) assert.NotNil(t, ofxFile) assert.NotNil(t, ofxFile.FileHeader) assert.Equal(t, ofxVersion2, ofxFile.FileHeader.OFXDeclarationVersion) assert.Equal(t, "211", ofxFile.FileHeader.OFXDataVersion) assert.Equal(t, "NONE", ofxFile.FileHeader.Security) assert.Equal(t, "NONE", ofxFile.FileHeader.OldFileUid) assert.Equal(t, "NONE", ofxFile.FileHeader.NewFileUid) assert.NotNil(t, ofxFile.BankMessageResponseV1) assert.NotNil(t, ofxFile.BankMessageResponseV1.StatementTransactionResponse) assert.NotNil(t, ofxFile.BankMessageResponseV1.StatementTransactionResponse.StatementResponse) assert.Equal(t, "CNY", ofxFile.BankMessageResponseV1.StatementTransactionResponse.StatementResponse.DefaultCurrency) assert.NotNil(t, ofxFile.BankMessageResponseV1.StatementTransactionResponse.StatementResponse.AccountFrom) assert.Equal(t, "123", ofxFile.BankMessageResponseV1.StatementTransactionResponse.StatementResponse.AccountFrom.AccountId) assert.Equal(t, 1, len(ofxFile.BankMessageResponseV1.StatementTransactionResponse.StatementResponse.TransactionList.StatementTransactions)) assert.Equal(t, ofxDepositTransaction, ofxFile.BankMessageResponseV1.StatementTransactionResponse.StatementResponse.TransactionList.StatementTransactions[0].TransactionType) assert.Equal(t, "20240901012345.000[+8:CST]", ofxFile.BankMessageResponseV1.StatementTransactionResponse.StatementResponse.TransactionList.StatementTransactions[0].PostedDate) assert.Equal(t, "123.45", ofxFile.BankMessageResponseV1.StatementTransactionResponse.StatementResponse.TransactionList.StatementTransactions[0].Amount) } func TestCreateNewOFXFileReader_OFX2WithoutOFXHeader(t *testing.T) { context := core.NewNullContext() _, err := createNewOFXFileReader(context, []byte( ""+ ""+ "")) assert.EqualError(t, err, errs.ErrInvalidOFXFile.Message) } func TestCreateNewOFXFileReader_OFX2WithInvalidHeaderVersion(t *testing.T) { context := core.NewNullContext() _, err := createNewOFXFileReader(context, []byte( ""+ ""+ ""+ "")) assert.EqualError(t, err, errs.ErrInvalidOFXFile.Message) } func TestCreateNewOFXFileReader_OFX2WithInvalidHeader(t *testing.T) { context := core.NewNullContext() _, err := createNewOFXFileReader(context, []byte( ""+ ""+ ""+ "")) _, err = createNewOFXFileReader(context, []byte( ""+ ""+ ""+ "")) assert.EqualError(t, err, errs.ErrInvalidOFXFile.Message) _, err = createNewOFXFileReader(context, []byte( ""+ ""+ ""+ "")) assert.EqualError(t, err, errs.ErrInvalidOFXFile.Message) } func TestCreateNewOFXFileReader_OFX2WithoutAnyHeader(t *testing.T) { context := core.NewNullContext() reader, err := createNewOFXFileReader(context, []byte( "\n"+ " \n"+ " \n"+ " \n"+ " CNY\n"+ " \n"+ " 123\n"+ " \n"+ " \n"+ " \n"+ " DEP\n"+ " 20240901012345.000[+8:CST]\n"+ " 123.45\n"+ " \n"+ " \n"+ " \n"+ " \n"+ " \n"+ "")) assert.Nil(t, err) ofxFile, err := reader.read(context) assert.Nil(t, err) assert.NotNil(t, ofxFile) assert.Nil(t, ofxFile.FileHeader) assert.NotNil(t, ofxFile.BankMessageResponseV1) assert.NotNil(t, ofxFile.BankMessageResponseV1.StatementTransactionResponse) assert.NotNil(t, ofxFile.BankMessageResponseV1.StatementTransactionResponse.StatementResponse) assert.Equal(t, "CNY", ofxFile.BankMessageResponseV1.StatementTransactionResponse.StatementResponse.DefaultCurrency) assert.NotNil(t, ofxFile.BankMessageResponseV1.StatementTransactionResponse.StatementResponse.AccountFrom) assert.Equal(t, "123", ofxFile.BankMessageResponseV1.StatementTransactionResponse.StatementResponse.AccountFrom.AccountId) assert.Equal(t, 1, len(ofxFile.BankMessageResponseV1.StatementTransactionResponse.StatementResponse.TransactionList.StatementTransactions)) assert.Equal(t, ofxDepositTransaction, ofxFile.BankMessageResponseV1.StatementTransactionResponse.StatementResponse.TransactionList.StatementTransactions[0].TransactionType) assert.Equal(t, "20240901012345.000[+8:CST]", ofxFile.BankMessageResponseV1.StatementTransactionResponse.StatementResponse.TransactionList.StatementTransactions[0].PostedDate) assert.Equal(t, "123.45", ofxFile.BankMessageResponseV1.StatementTransactionResponse.StatementResponse.TransactionList.StatementTransactions[0].Amount) }