package exchangerates import ( "testing" "github.com/stretchr/testify/assert" "github.com/mayswind/ezbookkeeping/pkg/core" "github.com/mayswind/ezbookkeeping/pkg/models" ) const nationalBankOfKazakhstanMinimumRequiredContent = "\n" + " \n" + " \n" + " \n" + " USD\n" + " 28.04.2026\n" + " 450.50\n" + " 1\n" + " \n" + " \n" + " VND\n" + " 28.04.2026\n" + " 0.018\n" + " 10\n" + " \n" + " \n" + "" func TestNationalBankOfKazakhstanDataSource_StandardDataExtractBaseCurrency(t *testing.T) { dataSource := &NationalBankOfKazakhstanDataSource{} context := core.NewNullContext() resp, err := dataSource.Parse(context, []byte(nationalBankOfKazakhstanMinimumRequiredContent)) assert.Equal(t, nil, err) assert.Equal(t, "KZT", resp.BaseCurrency) } func TestNationalBankOfKazakhstanDataSource_StandardDataExtractUpdateTime(t *testing.T) { dataSource := &NationalBankOfKazakhstanDataSource{} context := core.NewNullContext() resp, err := dataSource.Parse(context, []byte(nationalBankOfKazakhstanMinimumRequiredContent)) assert.Equal(t, nil, err) assert.Equal(t, int64(1777316400), resp.UpdateTime) } func TestNationalBankOfKazakhstanDataSource_StandardDataExtractExchangeRates(t *testing.T) { dataSource := &NationalBankOfKazakhstanDataSource{} context := core.NewNullContext() resp, err := dataSource.Parse(context, []byte(nationalBankOfKazakhstanMinimumRequiredContent)) assert.Equal(t, nil, err) assert.Contains(t, resp.ExchangeRates, &models.LatestExchangeRate{ Currency: "USD", Rate: "0.0022197558268590455", }) assert.Contains(t, resp.ExchangeRates, &models.LatestExchangeRate{ Currency: "VND", Rate: "555.5555555555555", }) } func TestNationalBankOfKazakhstanDataSource_BlankContent(t *testing.T) { dataSource := &NationalBankOfKazakhstanDataSource{} context := core.NewNullContext() _, err := dataSource.Parse(context, []byte("")) assert.NotEqual(t, nil, err) } func TestNationalBankOfKazakhstanDataSource_EmptyData(t *testing.T) { dataSource := &NationalBankOfKazakhstanDataSource{} context := core.NewNullContext() content := "\n" + "\n" + "\n" + "\n" + "" _, err := dataSource.Parse(context, []byte(content)) assert.NotEqual(t, nil, err) } func TestNationalBankOfKazakhstanDataSource_InvalidCurrency(t *testing.T) { dataSource := &NationalBankOfKazakhstanDataSource{} context := core.NewNullContext() content := "\n" + " \n" + " \n" + " \n" + " XXX\n" + " 28.04.2026\n" + " 450.50\n" + " 1\n" + " \n" + " \n" + "" resp, err := dataSource.Parse(context, []byte(content)) assert.Equal(t, nil, err) assert.Len(t, resp.ExchangeRates, 0) } func TestNationalBankOfKazakhstanDataSource_InvalidUnit(t *testing.T) { dataSource := &NationalBankOfKazakhstanDataSource{} context := core.NewNullContext() content := "\n" + " \n" + " \n" + " \n" + " USD\n" + " 28.04.2026\n" + " 450.50\n" + " null\n" + " \n" + " \n" + "" resp, err := dataSource.Parse(context, []byte(content)) assert.Equal(t, nil, err) assert.Len(t, resp.ExchangeRates, 0) content = "\n" + " \n" + " \n" + " \n" + " USD\n" + " 28.04.2026\n" + " 450.50\n" + " 0\n" + " \n" + " \n" + "" resp, err = dataSource.Parse(context, []byte(content)) assert.Equal(t, nil, err) assert.Len(t, resp.ExchangeRates, 0) } func TestNationalBankOfKazakhstanDataSource_InvalidRate(t *testing.T) { dataSource := &NationalBankOfKazakhstanDataSource{} context := core.NewNullContext() content := "\n" + " \n" + " \n" + " \n" + " USD\n" + " 28.04.2026\n" + " null\n" + " 1\n" + " \n" + " \n" + "" resp, err := dataSource.Parse(context, []byte(content)) assert.Equal(t, nil, err) assert.Len(t, resp.ExchangeRates, 0) content = "\n" + " \n" + " \n" + " \n" + " USD\n" + " 28.04.2026\n" + " 0\n" + " 1\n" + " \n" + " \n" + "" resp, err = dataSource.Parse(context, []byte(content)) assert.Equal(t, nil, err) assert.Len(t, resp.ExchangeRates, 0) }