package exchangerates import ( "testing" "github.com/stretchr/testify/assert" "github.com/mayswind/ezbookkeeping/pkg/core" "github.com/mayswind/ezbookkeeping/pkg/models" ) const centralBankOfHungaryDataSourceMinimumRequiredContent = "" + "" + "" + "" + "<MNBCurrentExchangeRates>" + "<Day date=\"2024-11-15\">" + "<Rate unit=\"100\" curr=\"JPY\">247,46</Rate>" + "<Rate unit=\"1\" curr=\"USD\">384,48</Rate>" + "</Day>" + "</MNBCurrentExchangeRates>" + "" + "" + "" + "" func TestCentralBankOfHungaryDataSource_StandardDataExtractBaseCurrency(t *testing.T) { dataSource := &CentralBankOfHungaryDataSource{} context := core.NewNullContext() actualLatestExchangeRateResponse, err := dataSource.Parse(context, []byte(centralBankOfHungaryDataSourceMinimumRequiredContent)) assert.Equal(t, nil, err) assert.Equal(t, "HUF", actualLatestExchangeRateResponse.BaseCurrency) } func TestCentralBankOfHungaryDataSource_StandardDataExtractUpdateTime(t *testing.T) { dataSource := &CentralBankOfHungaryDataSource{} context := core.NewNullContext() actualLatestExchangeRateResponse, err := dataSource.Parse(context, []byte(centralBankOfHungaryDataSourceMinimumRequiredContent)) assert.Equal(t, nil, err) assert.Equal(t, int64(1731664800), actualLatestExchangeRateResponse.UpdateTime) } func TestCentralBankOfHungaryDataSource_StandardDataExtractExchangeRates(t *testing.T) { dataSource := &CentralBankOfHungaryDataSource{} context := core.NewNullContext() actualLatestExchangeRateResponse, err := dataSource.Parse(context, []byte(centralBankOfHungaryDataSourceMinimumRequiredContent)) assert.Equal(t, nil, err) assert.Contains(t, actualLatestExchangeRateResponse.ExchangeRates, &models.LatestExchangeRate{ Currency: "JPY", Rate: "0.4041057140547967", }) assert.Contains(t, actualLatestExchangeRateResponse.ExchangeRates, &models.LatestExchangeRate{ Currency: "USD", Rate: "0.002600915522263837", }) } func TestCentralBankOfHungaryDataSource_BlankContent(t *testing.T) { dataSource := &CentralBankOfHungaryDataSource{} context := core.NewNullContext() _, err := dataSource.Parse(context, []byte("")) assert.NotEqual(t, nil, err) } func TestCentralBankOfHungaryDataSource_MissingSoapBody(t *testing.T) { dataSource := &CentralBankOfHungaryDataSource{} context := core.NewNullContext() _, err := dataSource.Parse(context, []byte(""+ "")) assert.NotEqual(t, nil, err) } func TestCentralBankOfHungaryDataSource_MissingGetCurrentExchangeRatesResponse(t *testing.T) { dataSource := &CentralBankOfHungaryDataSource{} context := core.NewNullContext() _, err := dataSource.Parse(context, []byte(""+ ""+ ""+ "")) assert.NotEqual(t, nil, err) } func TestCentralBankOfHungaryDataSource_MissingGetCurrentExchangeRatesResult(t *testing.T) { dataSource := &CentralBankOfHungaryDataSource{} context := core.NewNullContext() _, err := dataSource.Parse(context, []byte(""+ ""+ ""+ ""+ ""+ "")) assert.NotEqual(t, nil, err) } func TestCentralBankOfHungaryDataSource_EmptyGetCurrentExchangeRatesResult(t *testing.T) { dataSource := &CentralBankOfHungaryDataSource{} context := core.NewNullContext() _, err := dataSource.Parse(context, []byte(""+ ""+ ""+ ""+ ""+ ""+ ""+ "")) assert.NotEqual(t, nil, err) } func TestCentralBankOfHungaryDataSource_InvalidGetCurrentExchangeRatesResult(t *testing.T) { dataSource := &CentralBankOfHungaryDataSource{} context := core.NewNullContext() _, err := dataSource.Parse(context, []byte(""+ ""+ ""+ ""+ "<MNBCurrentExchangeRates>"+ "<Day date=\"2024-11-15\">"+ ""+ ""+ ""+ "")) assert.NotEqual(t, nil, err) } func TestCentralBankOfHungaryDataSource_InvalidCurrency(t *testing.T) { dataSource := &CentralBankOfHungaryDataSource{} context := core.NewNullContext() actualLatestExchangeRateResponse, err := dataSource.Parse(context, []byte(""+ ""+ ""+ ""+ "<MNBCurrentExchangeRates>"+ "<Day date=\"2024-11-15\">"+ "<Rate unit=\"1\" curr=\"XXX\">1</Rate>"+ "</Day>"+ "</MNBCurrentExchangeRates>"+ ""+ ""+ ""+ "")) assert.Equal(t, nil, err) assert.Len(t, actualLatestExchangeRateResponse.ExchangeRates, 0) } func TestCentralBankOfHungaryDataSource_EmptyRate(t *testing.T) { dataSource := &CentralBankOfHungaryDataSource{} context := core.NewNullContext() actualLatestExchangeRateResponse, err := dataSource.Parse(context, []byte(""+ ""+ ""+ ""+ "<MNBCurrentExchangeRates>"+ "<Day date=\"2024-11-15\">"+ "<Rate unit=\"1\" curr=\"USD\"></Rate>"+ "</Day>"+ "</MNBCurrentExchangeRates>"+ ""+ ""+ ""+ "")) assert.Equal(t, nil, err) assert.Len(t, actualLatestExchangeRateResponse.ExchangeRates, 0) } func TestCentralBankOfHungaryDataSource_InvalidRate(t *testing.T) { dataSource := &CentralBankOfHungaryDataSource{} context := core.NewNullContext() actualLatestExchangeRateResponse, err := dataSource.Parse(context, []byte(""+ ""+ ""+ ""+ "<MNBCurrentExchangeRates>"+ "<Day date=\"2024-11-15\">"+ "<Rate unit=\"1\" curr=\"USD\">null</Rate>"+ "</Day>"+ "</MNBCurrentExchangeRates>"+ ""+ ""+ ""+ "")) assert.Equal(t, nil, err) assert.Len(t, actualLatestExchangeRateResponse.ExchangeRates, 0) actualLatestExchangeRateResponse, err = dataSource.Parse(context, []byte(""+ ""+ ""+ ""+ "<MNBCurrentExchangeRates>"+ "<Day date=\"2024-11-15\">"+ "<Rate unit=\"1\" curr=\"USD\">0</Rate>"+ "</Day>"+ "</MNBCurrentExchangeRates>"+ ""+ ""+ ""+ "")) assert.Equal(t, nil, err) assert.Len(t, actualLatestExchangeRateResponse.ExchangeRates, 0) } func TestCentralBankOfHungaryDataSource_InvalidUnit(t *testing.T) { dataSource := &CentralBankOfHungaryDataSource{} context := core.NewNullContext() actualLatestExchangeRateResponse, err := dataSource.Parse(context, []byte(""+ ""+ ""+ ""+ "<MNBCurrentExchangeRates>"+ "<Day date=\"2024-11-15\">"+ "<Rate unit=\"null\" curr=\"USD\">384,48</Rate>"+ "</Day>"+ "</MNBCurrentExchangeRates>"+ ""+ ""+ ""+ "")) assert.Equal(t, nil, err) assert.Len(t, actualLatestExchangeRateResponse.ExchangeRates, 0) actualLatestExchangeRateResponse, err = dataSource.Parse(context, []byte(""+ ""+ ""+ ""+ "<MNBCurrentExchangeRates>"+ "<Day date=\"2024-11-15\">"+ "<Rate unit=\"0\" curr=\"USD\">384,48</Rate>"+ "</Day>"+ "</MNBCurrentExchangeRates>"+ ""+ ""+ ""+ "")) assert.Equal(t, nil, err) assert.Len(t, actualLatestExchangeRateResponse.ExchangeRates, 0) }