add Central Bank of Hungary exchange rates data source

This commit is contained in:
MaysWind
2024-11-17 21:29:57 +08:00
parent dd6eecb0c2
commit dcac6a4bb0
6 changed files with 473 additions and 0 deletions
+1
View File
@@ -346,6 +346,7 @@ custom_map_tile_server_default_zoom_level = 14
# "danmarks_national_bank": https://www.nationalbanken.dk/en/what-we-do/stable-prices-monetary-policy-and-the-danish-economy/exchange-rates
# "euro_central_bank": https://www.ecb.europa.eu/stats/policy_and_exchange_rates/euro_reference_exchange_rates/html/index.en.html
# "national_bank_of_georgia": https://nbg.gov.ge/en/monetary-policy/currency
# "central_bank_of_hungary": https://www.mnb.hu/en/arfolyamok
# "bank_of_israel": https://www.boi.org.il/en/economic-roles/financial-markets/exchange-rates/
# "norges_bank": https://www.norges-bank.no/en/topics/Statistics/exchange_rates/
# "national_bank_of_poland": https://nbp.pl/en/statistic-and-financial-reporting/rates/
+16
View File
@@ -119,6 +119,22 @@ func TestExchangeRatesApiLatestExchangeRateHandler_NationalBankOfGeorgiaDataSour
checkExchangeRatesHaveSpecifiedCurrencies(t, exchangeRateResponse.BaseCurrency, supportedCurrencyCodes, exchangeRateResponse.ExchangeRates)
}
func TestExchangeRatesApiLatestExchangeRateHandler_CentralBankOfHungaryDataSource(t *testing.T) {
exchangeRateResponse := executeLatestExchangeRateHandler(t, settings.CentralBankOfHungaryDataSource)
if exchangeRateResponse == nil {
return
}
assert.Equal(t, "HUF", exchangeRateResponse.BaseCurrency)
supportedCurrencyCodes := []string{"AUD", "BGN", "BRL", "CAD", "CHF", "CNY", "CZK", "DKK", "EUR",
"GBP", "HKD", "IDR", "ILS", "INR", "ISK", "JPY", "KRW", "MXN", "MYR", "NOK", "NZD",
"PHP", "PLN", "RON", "RSD", "RUB", "SEK", "SGD", "THB", "TRY", "UAH", "USD", "ZAR"}
checkExchangeRatesHaveSpecifiedCurrencies(t, exchangeRateResponse.BaseCurrency, supportedCurrencyCodes, exchangeRateResponse.ExchangeRates)
}
func TestExchangeRatesApiLatestExchangeRateHandler_BankOfIsraelDataSource(t *testing.T) {
exchangeRateResponse := executeLatestExchangeRateHandler(t, settings.BankOfIsraelDataSource)
@@ -0,0 +1,203 @@
package exchangerates
import (
"bytes"
"encoding/xml"
"math"
"net/http"
"strings"
"time"
"github.com/mayswind/ezbookkeeping/pkg/core"
"github.com/mayswind/ezbookkeeping/pkg/errs"
"github.com/mayswind/ezbookkeeping/pkg/log"
"github.com/mayswind/ezbookkeeping/pkg/models"
"github.com/mayswind/ezbookkeeping/pkg/utils"
"github.com/mayswind/ezbookkeeping/pkg/validators"
)
const centralBankOfHungaryExchangeRateServiceUrl = "http://www.mnb.hu/arfolyamok.asmx"
const centralBankOfHungaryExchangeRateServiceCurrentExchangeRatesSoapAction = "http://www.mnb.hu/webservices/MNBArfolyamServiceSoap/GetCurrentExchangeRates"
const centralBankOfHungaryExchangeRateReferenceUrl = "https://www.mnb.hu/en/arfolyamok"
const centralBankOfHungaryDataSource = "Magyar Nemzeti Bank"
const centralBankOfHungaryBaseCurrency = "HUF"
const centralBankOfHungaryUpdateDateFormat = "2006-01-02 15"
const centralBankOfHungaryUpdateDateTimezone = "Europe/Budapest"
// CentralBankOfHungaryDataSource defines the structure of exchange rates data source of central bank of Hungary
type CentralBankOfHungaryDataSource struct {
ExchangeRatesDataSource
}
// CentralBankOfHungaryExchangeRateServiceResponse represents the response data of exchange rate service for central bank of Hungary
type CentralBankOfHungaryExchangeRateServiceResponse struct {
XMLName xml.Name `xml:"Envelope"`
GetCurrentExchangeRatesResult string `xml:"Body>GetCurrentExchangeRatesResponse>GetCurrentExchangeRatesResult"`
}
// CentralBankOfHungaryCurrentExchangeRatesResult represents the current exchange rate result data from central bank of Hungary
type CentralBankOfHungaryCurrentExchangeRatesResult struct {
XMLName xml.Name `xml:"MNBCurrentExchangeRates"`
AllExchangeRates []*CentralBankOfHungaryExchangeRates `xml:"Day"`
}
// CentralBankOfHungaryExchangeRates represents the exchange rates data from Danmarks Nationalbank
type CentralBankOfHungaryExchangeRates struct {
Date string `xml:"date,attr"`
ExchangeRates []*CentralBankOfHungaryExchangeRate `xml:"Rate"`
}
// CentralBankOfHungaryExchangeRate represents the exchange rate data from central bank of Hungary
type CentralBankOfHungaryExchangeRate struct {
Currency string `xml:"curr,attr"`
Unit string `xml:"unit,attr"`
Rate string `xml:",chardata"`
}
// ToLatestExchangeRateResponse returns a view-object according to original data from central bank of Hungary
func (e *CentralBankOfHungaryCurrentExchangeRatesResult) ToLatestExchangeRateResponse(c core.Context) *models.LatestExchangeRateResponse {
if len(e.AllExchangeRates) < 1 {
log.Errorf(c, "[central_bank_of_hungary_datasource.ToLatestExchangeRateResponse] all exchange rates is empty")
return nil
}
latestCentralBankOfHungaryExchangeRate := e.AllExchangeRates[0]
if len(latestCentralBankOfHungaryExchangeRate.ExchangeRates) < 1 {
log.Errorf(c, "[central_bank_of_hungary_datasource.ToLatestExchangeRateResponse] exchange rates is empty")
return nil
}
exchangeRates := make(models.LatestExchangeRateSlice, 0, len(e.AllExchangeRates))
for i := 0; i < len(latestCentralBankOfHungaryExchangeRate.ExchangeRates); i++ {
exchangeRate := latestCentralBankOfHungaryExchangeRate.ExchangeRates[i]
if _, exists := validators.AllCurrencyNames[exchangeRate.Currency]; !exists {
continue
}
finalExchangeRate := exchangeRate.ToLatestExchangeRate(c)
if finalExchangeRate == nil {
continue
}
exchangeRates = append(exchangeRates, finalExchangeRate)
}
timezone, err := time.LoadLocation(centralBankOfHungaryUpdateDateTimezone)
if err != nil {
log.Errorf(c, "[central_bank_of_hungary_datasource.ToLatestExchangeRateResponse] failed to get timezone, timezone name is %s", centralBankOfHungaryUpdateDateTimezone)
return nil
}
updateDateTime := latestCentralBankOfHungaryExchangeRate.Date + " 11" // The exchange rates are fixed at 11 am.
updateTime, err := time.ParseInLocation(centralBankOfHungaryUpdateDateFormat, updateDateTime, timezone)
if err != nil {
log.Errorf(c, "[central_bank_of_hungary_datasource.ToLatestExchangeRateResponse] failed to parse update date, datetime is %s", updateDateTime)
return nil
}
latestExchangeRateResp := &models.LatestExchangeRateResponse{
DataSource: centralBankOfHungaryDataSource,
ReferenceUrl: centralBankOfHungaryExchangeRateReferenceUrl,
UpdateTime: updateTime.Unix(),
BaseCurrency: centralBankOfHungaryBaseCurrency,
ExchangeRates: exchangeRates,
}
return latestExchangeRateResp
}
// ToLatestExchangeRate returns a data pair according to original data from central bank of Hungary
func (e *CentralBankOfHungaryExchangeRate) ToLatestExchangeRate(c core.Context) *models.LatestExchangeRate {
rate, err := utils.StringToFloat64(strings.ReplaceAll(e.Rate, ",", "."))
if err != nil {
log.Warnf(c, "[central_bank_of_hungary_datasource.ToLatestExchangeRate] failed to parse rate, currency is %s, rate is %s", e.Currency, e.Rate)
return nil
}
if rate <= 0 {
log.Warnf(c, "[central_bank_of_hungary_datasource.ToLatestExchangeRate] rate is invalid, currency is %s, rate is %s", e.Currency, e.Rate)
return nil
}
unit, err := utils.StringToFloat64(e.Unit)
if err != nil {
log.Warnf(c, "[central_bank_of_hungary_datasource.ToLatestExchangeRate] failed to parse unit, currency is %s, unit is %s", e.Currency, e.Unit)
return nil
}
finalRate := unit / rate
if math.IsInf(finalRate, 0) {
return nil
}
return &models.LatestExchangeRate{
Currency: e.Currency,
Rate: utils.Float64ToString(finalRate),
}
}
// BuildRequests returns the central bank of Hungary exchange rates http requests
func (e *CentralBankOfHungaryDataSource) BuildRequests() ([]*http.Request, error) {
req, err := http.NewRequest("POST", centralBankOfHungaryExchangeRateServiceUrl, bytes.NewReader([]byte(
"<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\">"+
"<s:Body>"+
"<GetCurrentExchangeRates xmlns=\"http://www.mnb.hu/webservices/\" xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\"/>"+
"</s:Body>"+
"</s:Envelope>")))
if err != nil {
return nil, err
}
req.Header.Set("Content-Type", "text/xml; charset=utf-8")
req.Header.Set("SOAPAction", centralBankOfHungaryExchangeRateServiceCurrentExchangeRatesSoapAction)
return []*http.Request{req}, nil
}
// Parse returns the common response entity according to the central bank of Hungary data source raw response
func (e *CentralBankOfHungaryDataSource) Parse(c core.Context, content []byte) (*models.LatestExchangeRateResponse, error) {
responseXmlDecoder := xml.NewDecoder(bytes.NewReader(content))
centralBankOfHungaryServiceResponse := &CentralBankOfHungaryExchangeRateServiceResponse{}
err := responseXmlDecoder.Decode(centralBankOfHungaryServiceResponse)
if err != nil {
log.Errorf(c, "[central_bank_of_hungary_datasource.Parse] failed to parse service response xml data, content is %s, because %s", string(content), err.Error())
return nil, errs.ErrFailedToRequestRemoteApi
}
if len(centralBankOfHungaryServiceResponse.GetCurrentExchangeRatesResult) < 1 {
log.Errorf(c, "[central_bank_of_hungary_datasource.Parse] exchange rates response is empty")
return nil, errs.ErrFailedToRequestRemoteApi
}
resultXmlDecoder := xml.NewDecoder(strings.NewReader(centralBankOfHungaryServiceResponse.GetCurrentExchangeRatesResult))
centralBankOfHungaryExchangeRatesResult := &CentralBankOfHungaryCurrentExchangeRatesResult{}
err = resultXmlDecoder.Decode(centralBankOfHungaryExchangeRatesResult)
if err != nil {
log.Errorf(c, "[central_bank_of_hungary_datasource.Parse] failed to parse exchange rates response xml data, content is %s, because %s", string(content), err.Error())
return nil, errs.ErrFailedToRequestRemoteApi
}
latestExchangeRateResponse := centralBankOfHungaryExchangeRatesResult.ToLatestExchangeRateResponse(c)
if latestExchangeRateResponse == nil {
log.Errorf(c, "[central_bank_of_hungary_datasource.Parse] failed to parse latest exchange rate data, content is %s", string(content))
return nil, errs.ErrFailedToRequestRemoteApi
}
return latestExchangeRateResponse, nil
}
@@ -0,0 +1,248 @@
package exchangerates
import (
"testing"
"github.com/stretchr/testify/assert"
"github.com/mayswind/ezbookkeeping/pkg/core"
"github.com/mayswind/ezbookkeeping/pkg/models"
)
const centralBankOfHungaryDataSourceMinimumRequiredContent = "<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\">" +
"<s:Body>" +
"<GetCurrentExchangeRatesResponse xmlns=\"http://www.mnb.hu/webservices/\" xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\">" +
"<GetCurrentExchangeRatesResult>" +
"&lt;MNBCurrentExchangeRates&gt;" +
"&lt;Day date=\"2024-11-15\"&gt;" +
"&lt;Rate unit=\"100\" curr=\"JPY\"&gt;247,46&lt;/Rate&gt;" +
"&lt;Rate unit=\"1\" curr=\"USD\"&gt;384,48&lt;/Rate&gt;" +
"&lt;/Day&gt;" +
"&lt;/MNBCurrentExchangeRates&gt;" +
"</GetCurrentExchangeRatesResult>" +
"</GetCurrentExchangeRatesResponse>" +
"</s:Body>" +
"</s:Envelope>"
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("<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\">"+
"</s:Envelope>"))
assert.NotEqual(t, nil, err)
}
func TestCentralBankOfHungaryDataSource_MissingGetCurrentExchangeRatesResponse(t *testing.T) {
dataSource := &CentralBankOfHungaryDataSource{}
context := core.NewNullContext()
_, err := dataSource.Parse(context, []byte("<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\">"+
"<s:Body>"+
"</s:Body>"+
"</s:Envelope>"))
assert.NotEqual(t, nil, err)
}
func TestCentralBankOfHungaryDataSource_MissingGetCurrentExchangeRatesResult(t *testing.T) {
dataSource := &CentralBankOfHungaryDataSource{}
context := core.NewNullContext()
_, err := dataSource.Parse(context, []byte("<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\">"+
"<s:Body>"+
"<GetCurrentExchangeRatesResponse xmlns=\"http://www.mnb.hu/webservices/\" xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\">"+
"</GetCurrentExchangeRatesResponse>"+
"</s:Body>"+
"</s:Envelope>"))
assert.NotEqual(t, nil, err)
}
func TestCentralBankOfHungaryDataSource_EmptyGetCurrentExchangeRatesResult(t *testing.T) {
dataSource := &CentralBankOfHungaryDataSource{}
context := core.NewNullContext()
_, err := dataSource.Parse(context, []byte("<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\">"+
"<s:Body>"+
"<GetCurrentExchangeRatesResponse xmlns=\"http://www.mnb.hu/webservices/\" xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\">"+
"<GetCurrentExchangeRatesResult>"+
"</GetCurrentExchangeRatesResult>"+
"</GetCurrentExchangeRatesResponse>"+
"</s:Body>"+
"</s:Envelope>"))
assert.NotEqual(t, nil, err)
}
func TestCentralBankOfHungaryDataSource_InvalidGetCurrentExchangeRatesResult(t *testing.T) {
dataSource := &CentralBankOfHungaryDataSource{}
context := core.NewNullContext()
_, err := dataSource.Parse(context, []byte("<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\">"+
"<s:Body>"+
"<GetCurrentExchangeRatesResponse xmlns=\"http://www.mnb.hu/webservices/\" xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\">"+
"<GetCurrentExchangeRatesResult>"+
"&lt;MNBCurrentExchangeRates&gt;"+
"&lt;Day date=\"2024-11-15\"&gt;"+
"</GetCurrentExchangeRatesResult>"+
"</GetCurrentExchangeRatesResponse>"+
"</s:Body>"+
"</s:Envelope>"))
assert.NotEqual(t, nil, err)
}
func TestCentralBankOfHungaryDataSource_InvalidCurrency(t *testing.T) {
dataSource := &CentralBankOfHungaryDataSource{}
context := core.NewNullContext()
actualLatestExchangeRateResponse, err := dataSource.Parse(context, []byte("<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\">"+
"<s:Body>"+
"<GetCurrentExchangeRatesResponse xmlns=\"http://www.mnb.hu/webservices/\" xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\">"+
"<GetCurrentExchangeRatesResult>"+
"&lt;MNBCurrentExchangeRates&gt;"+
"&lt;Day date=\"2024-11-15\"&gt;"+
"&lt;Rate unit=\"1\" curr=\"XXX\"&gt;1&lt;/Rate&gt;"+
"&lt;/Day&gt;"+
"&lt;/MNBCurrentExchangeRates&gt;"+
"</GetCurrentExchangeRatesResult>"+
"</GetCurrentExchangeRatesResponse>"+
"</s:Body>"+
"</s:Envelope>"))
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("<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\">"+
"<s:Body>"+
"<GetCurrentExchangeRatesResponse xmlns=\"http://www.mnb.hu/webservices/\" xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\">"+
"<GetCurrentExchangeRatesResult>"+
"&lt;MNBCurrentExchangeRates&gt;"+
"&lt;Day date=\"2024-11-15\"&gt;"+
"&lt;Rate unit=\"1\" curr=\"USD\"&gt;&lt;/Rate&gt;"+
"&lt;/Day&gt;"+
"&lt;/MNBCurrentExchangeRates&gt;"+
"</GetCurrentExchangeRatesResult>"+
"</GetCurrentExchangeRatesResponse>"+
"</s:Body>"+
"</s:Envelope>"))
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("<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\">"+
"<s:Body>"+
"<GetCurrentExchangeRatesResponse xmlns=\"http://www.mnb.hu/webservices/\" xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\">"+
"<GetCurrentExchangeRatesResult>"+
"&lt;MNBCurrentExchangeRates&gt;"+
"&lt;Day date=\"2024-11-15\"&gt;"+
"&lt;Rate unit=\"1\" curr=\"USD\"&gt;null&lt;/Rate&gt;"+
"&lt;/Day&gt;"+
"&lt;/MNBCurrentExchangeRates&gt;"+
"</GetCurrentExchangeRatesResult>"+
"</GetCurrentExchangeRatesResponse>"+
"</s:Body>"+
"</s:Envelope>"))
assert.Equal(t, nil, err)
assert.Len(t, actualLatestExchangeRateResponse.ExchangeRates, 0)
actualLatestExchangeRateResponse, err = dataSource.Parse(context, []byte("<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\">"+
"<s:Body>"+
"<GetCurrentExchangeRatesResponse xmlns=\"http://www.mnb.hu/webservices/\" xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\">"+
"<GetCurrentExchangeRatesResult>"+
"&lt;MNBCurrentExchangeRates&gt;"+
"&lt;Day date=\"2024-11-15\"&gt;"+
"&lt;Rate unit=\"1\" curr=\"USD\"&gt;0&lt;/Rate&gt;"+
"&lt;/Day&gt;"+
"&lt;/MNBCurrentExchangeRates&gt;"+
"</GetCurrentExchangeRatesResult>"+
"</GetCurrentExchangeRatesResponse>"+
"</s:Body>"+
"</s:Envelope>"))
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("<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\">"+
"<s:Body>"+
"<GetCurrentExchangeRatesResponse xmlns=\"http://www.mnb.hu/webservices/\" xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\">"+
"<GetCurrentExchangeRatesResult>"+
"&lt;MNBCurrentExchangeRates&gt;"+
"&lt;Day date=\"2024-11-15\"&gt;"+
"&lt;Rate unit=\"null\" curr=\"USD\"&gt;384,48&lt;/Rate&gt;"+
"&lt;/Day&gt;"+
"&lt;/MNBCurrentExchangeRates&gt;"+
"</GetCurrentExchangeRatesResult>"+
"</GetCurrentExchangeRatesResponse>"+
"</s:Body>"+
"</s:Envelope>"))
assert.Equal(t, nil, err)
assert.Len(t, actualLatestExchangeRateResponse.ExchangeRates, 0)
actualLatestExchangeRateResponse, err = dataSource.Parse(context, []byte("<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\">"+
"<s:Body>"+
"<GetCurrentExchangeRatesResponse xmlns=\"http://www.mnb.hu/webservices/\" xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\">"+
"<GetCurrentExchangeRatesResult>"+
"&lt;MNBCurrentExchangeRates&gt;"+
"&lt;Day date=\"2024-11-15\"&gt;"+
"&lt;Rate unit=\"\" curr=\"USD\"&gt;384,48&lt;/Rate&gt;"+
"&lt;/Day&gt;"+
"&lt;/MNBCurrentExchangeRates&gt;"+
"</GetCurrentExchangeRatesResult>"+
"</GetCurrentExchangeRatesResponse>"+
"</s:Body>"+
"</s:Envelope>"))
assert.Equal(t, nil, err)
assert.Len(t, actualLatestExchangeRateResponse.ExchangeRates, 0)
}
@@ -35,6 +35,9 @@ func InitializeExchangeRatesDataSource(config *settings.Config) error {
} else if config.ExchangeRatesDataSource == settings.NationalBankOfGeorgiaDataSource {
Container.Current = &NationalBankOfGeorgiaDataSource{}
return nil
} else if config.ExchangeRatesDataSource == settings.CentralBankOfHungaryDataSource {
Container.Current = &CentralBankOfHungaryDataSource{}
return nil
} else if config.ExchangeRatesDataSource == settings.BankOfIsraelDataSource {
Container.Current = &BankOfIsraelDataSource{}
return nil
+2
View File
@@ -106,6 +106,7 @@ const (
DanmarksNationalbankDataSource string = "danmarks_national_bank"
EuroCentralBankDataSource string = "euro_central_bank"
NationalBankOfGeorgiaDataSource string = "national_bank_of_georgia"
CentralBankOfHungaryDataSource string = "central_bank_of_hungary"
BankOfIsraelDataSource string = "bank_of_israel"
NorgesBankDataSource string = "norges_bank"
NationalBankOfPolandDataSource string = "national_bank_of_poland"
@@ -891,6 +892,7 @@ func loadExchangeRatesConfiguration(config *Config, configFile *ini.File, sectio
dataSource == DanmarksNationalbankDataSource ||
dataSource == EuroCentralBankDataSource ||
dataSource == NationalBankOfGeorgiaDataSource ||
dataSource == CentralBankOfHungaryDataSource ||
dataSource == BankOfIsraelDataSource ||
dataSource == NorgesBankDataSource ||
dataSource == NationalBankOfPolandDataSource ||