package exchangerates import ( "testing" "github.com/stretchr/testify/assert" "github.com/mayswind/ezbookkeeping/pkg/core" "github.com/mayswind/ezbookkeeping/pkg/models" ) const bankOfIsraelMinimumRequiredContent = "" + "\n" + " \n" + " \n" + " 3.733\n" + " USD\n" + " 2024-11-11T13:26:05.6590204Z\n" + " 1\n" + " \n" + " \n" + " 2.4287\n" + " JPY\n" + " 2024-11-11T13:26:05.6590204Z\n" + " 100\n" + " \n" + " \n" + "" func TestBankOfIsraelDataSource_StandardDataExtractBaseCurrency(t *testing.T) { dataSource := &BankOfIsraelDataSource{} context := core.NewNullContext() actualLatestExchangeRateResponse, err := dataSource.Parse(context, []byte(bankOfIsraelMinimumRequiredContent)) assert.Equal(t, nil, err) assert.Equal(t, "ILS", actualLatestExchangeRateResponse.BaseCurrency) } func TestBankOfIsraelDataSource_StandardDataExtractExchangeRates(t *testing.T) { dataSource := &BankOfIsraelDataSource{} context := core.NewNullContext() actualLatestExchangeRateResponse, err := dataSource.Parse(context, []byte(bankOfIsraelMinimumRequiredContent)) assert.Equal(t, nil, err) assert.Contains(t, actualLatestExchangeRateResponse.ExchangeRates, &models.LatestExchangeRate{ Currency: "USD", Rate: "0.2678810608090008", }) assert.Contains(t, actualLatestExchangeRateResponse.ExchangeRates, &models.LatestExchangeRate{ Currency: "JPY", Rate: "41.17429077284144", }) } func TestBankOfIsraelDataSource_BlankContent(t *testing.T) { dataSource := &BankOfIsraelDataSource{} context := core.NewNullContext() _, err := dataSource.Parse(context, []byte("")) assert.NotEqual(t, nil, err) } func TestBankOfIsraelDataSource_EmptyExchangeRatesResponseCollectioDTO(t *testing.T) { dataSource := &BankOfIsraelDataSource{} context := core.NewNullContext() _, err := dataSource.Parse(context, []byte("\n"+ "")) assert.NotEqual(t, nil, err) } func TestBankOfIsraelDataSource_InvalidCurrency(t *testing.T) { dataSource := &BankOfIsraelDataSource{} context := core.NewNullContext() actualLatestExchangeRateResponse, err := dataSource.Parse(context, []byte("\n"+ " \n"+ " \n"+ " 1\n"+ " XXX\n"+ " 2024-11-11T13:26:05.6590204Z\n"+ " 1\n"+ " \n"+ " \n"+ "")) assert.Equal(t, nil, err) assert.Len(t, actualLatestExchangeRateResponse.ExchangeRates, 0) } func TestBankOfIsraelDataSource_EmptyRate(t *testing.T) { dataSource := &BankOfIsraelDataSource{} context := core.NewNullContext() actualLatestExchangeRateResponse, err := dataSource.Parse(context, []byte("\n"+ " \n"+ " \n"+ " USD\n"+ " 2024-11-11T13:26:05.6590204Z\n"+ " 1\n"+ " \n"+ " \n"+ "")) assert.Equal(t, nil, err) assert.Len(t, actualLatestExchangeRateResponse.ExchangeRates, 0) } func TestBankOfIsraelDataSource_InvalidRate(t *testing.T) { dataSource := &BankOfIsraelDataSource{} context := core.NewNullContext() actualLatestExchangeRateResponse, err := dataSource.Parse(context, []byte("\n"+ " \n"+ " \n"+ " null\n"+ " USD\n"+ " 2024-11-11T13:26:05.6590204Z\n"+ " 1\n"+ " \n"+ " \n"+ "")) assert.Equal(t, nil, err) assert.Len(t, actualLatestExchangeRateResponse.ExchangeRates, 0) actualLatestExchangeRateResponse, err = dataSource.Parse(context, []byte("\n"+ " \n"+ " \n"+ " 0\n"+ " USD\n"+ " 2024-11-11T13:26:05.6590204Z\n"+ " 1\n"+ " \n"+ " \n"+ "")) assert.Equal(t, nil, err) assert.Len(t, actualLatestExchangeRateResponse.ExchangeRates, 0) } func TestBankOfIsraelDataSource_EmptyUnit(t *testing.T) { dataSource := &BankOfIsraelDataSource{} context := core.NewNullContext() actualLatestExchangeRateResponse, err := dataSource.Parse(context, []byte("\n"+ " \n"+ " \n"+ " 1\n"+ " USD\n"+ " 2024-11-11T13:26:05.6590204Z\n"+ " \n"+ " \n"+ "")) assert.Equal(t, nil, err) assert.Len(t, actualLatestExchangeRateResponse.ExchangeRates, 0) } func TestBankOfIsraelDataSource_InvalidUnit(t *testing.T) { dataSource := &BankOfIsraelDataSource{} context := core.NewNullContext() actualLatestExchangeRateResponse, err := dataSource.Parse(context, []byte("\n"+ " \n"+ " \n"+ " 1\n"+ " USD\n"+ " 2024-11-11T13:26:05.6590204Z\n"+ " null\n"+ " \n"+ " \n"+ "")) assert.Equal(t, nil, err) assert.Len(t, actualLatestExchangeRateResponse.ExchangeRates, 0) }