diff --git a/apps/api/src/services/exchange-rate-data/exchange-rate-data.service.spec.ts b/apps/api/src/services/exchange-rate-data/exchange-rate-data.service.spec.ts new file mode 100644 index 0000000000..1245ecc54d --- /dev/null +++ b/apps/api/src/services/exchange-rate-data/exchange-rate-data.service.spec.ts @@ -0,0 +1,42 @@ +import { ExchangeRateDataService } from './exchange-rate-data.service'; + +describe('ExchangeRateDataService', () => { + let service: ExchangeRateDataService; + + beforeEach(() => { + service = new ExchangeRateDataService(null, null, null, null); + }); + + describe('toCurrency', () => { + it('should return the value unchanged for a null source currency without logging an error', () => { + const loggerSpy = jest.spyOn(service['logger'], 'error'); + + const result = service.toCurrency(100, null as any, 'EUR'); + + expect(result).toEqual(100); + expect(loggerSpy).not.toHaveBeenCalled(); + }); + + it('should return the value unchanged for an undefined source currency without logging an error', () => { + const loggerSpy = jest.spyOn(service['logger'], 'error'); + + const result = service.toCurrency(100, undefined as any, 'EUR'); + + expect(result).toEqual(100); + expect(loggerSpy).not.toHaveBeenCalled(); + }); + + it('should return the value unchanged for a null target currency without logging an error', () => { + const loggerSpy = jest.spyOn(service['logger'], 'error'); + + const result = service.toCurrency(100, 'EUR', null as any); + + expect(result).toEqual(100); + expect(loggerSpy).not.toHaveBeenCalled(); + }); + + it('should return 0 for a value of 0', () => { + expect(service.toCurrency(0, 'USD', 'EUR')).toEqual(0); + }); + }); +}); diff --git a/apps/api/src/services/exchange-rate-data/exchange-rate-data.service.ts b/apps/api/src/services/exchange-rate-data/exchange-rate-data.service.ts index b68ed2fb15..62e8c97598 100644 --- a/apps/api/src/services/exchange-rate-data/exchange-rate-data.service.ts +++ b/apps/api/src/services/exchange-rate-data/exchange-rate-data.service.ts @@ -257,6 +257,13 @@ export class ExchangeRateDataService { return 0; } + if (!aFromCurrency || !aToCurrency) { + // The currency of the value is unknown (e.g. an account without a + // currency), so no conversion can be performed. Return the value + // unchanged instead of logging an error for a "null" currency. + return aValue; + } + let factor: number; if (aFromCurrency === aToCurrency) {