From 648efc55b31083375345b33c842c2b951b6ec96d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jaime=20Ram=C3=ADrez?= Date: Fri, 29 Apr 2022 11:29:12 +0200 Subject: [PATCH 1/3] starting point --- history/source/rates/RatesService.js | 14 ++++++------ history/tests/unit/rates/RatesService.test.js | 22 ------------------- 2 files changed, 7 insertions(+), 29 deletions(-) diff --git a/history/source/rates/RatesService.js b/history/source/rates/RatesService.js index a2f75be..5c3102b 100644 --- a/history/source/rates/RatesService.js +++ b/history/source/rates/RatesService.js @@ -7,17 +7,17 @@ module.exports = class RatesService { loadRatesHistory(src, target) { const data = this.repository.load(src + "_TO_" + target); + // Each data point in "data" follows this format: + // { "value": exchangeRateValue } + if (data === null) { throw new Error("Unknown currency conversion"); } - return data.map((element, i) => { - const elementWithDate = {...element}; - var date = new Date(); - date.setDate(date.getDate() - i); - elementWithDate["date"] = date; - return elementWithDate; - }); + // TODO: return data points + // + // Each returned data point should include a date, following this syntax: + // {"value": exchangeRateValue, "date": instanceOfDate } } }; \ No newline at end of file diff --git a/history/tests/unit/rates/RatesService.test.js b/history/tests/unit/rates/RatesService.test.js index 32a8fc4..f845b70 100644 --- a/history/tests/unit/rates/RatesService.test.js +++ b/history/tests/unit/rates/RatesService.test.js @@ -2,16 +2,6 @@ const RatesService = require("../../../source/rates/RatesService"); describe("RatesService", () => { - // test("returns rates retrieved from a rates repository", () => { - // const repository = { - // load: () => [{ value: 1 }, { value: 2 }, { value: 3 } ] - // }; - - // const service = new RatesService(repository); - // const rates = service.loadRatesHistory("EUR", "USD"); - // expect(rates).toEqual([{ value: 1 }, { value: 2 }, { value: 3 } ]); - // }); - test("throws an exception if the repository returns null", () => { function invalidScenario() { const repository = { @@ -24,16 +14,4 @@ describe("RatesService", () => { expect(invalidScenario).toThrow(/Unknown currency conversion/i); }); - test("returns a list of currency exchange rates with dates", () => { - const repository = { - load: () => [{ value: 1 }, { value: 2 }, { value: 3 } ] - }; - - const service = new RatesService(repository); - const rates = service.loadRatesHistory("EUR", "USD"); - for (const rate of rates) { - expect(rate.date).toBeInstanceOf(Date); - } - }); - }); \ No newline at end of file From 3c134b65a2c974feab6d8d6064a8a623a06be80c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jaime=20Ram=C3=ADrez?= Date: Fri, 29 Apr 2022 13:24:57 +0200 Subject: [PATCH 2/3] add comments --- history/source/rates/RatesService.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/history/source/rates/RatesService.js b/history/source/rates/RatesService.js index 5c3102b..70970ea 100644 --- a/history/source/rates/RatesService.js +++ b/history/source/rates/RatesService.js @@ -1,3 +1,6 @@ +/** + * This service returns historical exchange rates + */ module.exports = class RatesService { constructor(repository) { From 3c8199f6c158f1ab0d316ad5ee44876141ffd6ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jaime=20Ram=C3=ADrez?= Date: Fri, 29 Apr 2022 15:35:16 +0200 Subject: [PATCH 3/3] tests --- history/source/rates/RatesService.js | 5 +-- history/tests/unit/rates/RatesService.test.js | 31 +++++++++++++++++++ 2 files changed, 32 insertions(+), 4 deletions(-) diff --git a/history/source/rates/RatesService.js b/history/source/rates/RatesService.js index 70970ea..6cf9c4c 100644 --- a/history/source/rates/RatesService.js +++ b/history/source/rates/RatesService.js @@ -17,10 +17,7 @@ module.exports = class RatesService { throw new Error("Unknown currency conversion"); } - // TODO: return data points - // - // Each returned data point should include a date, following this syntax: - // {"value": exchangeRateValue, "date": instanceOfDate } + return data.map(rate => ({ date: new Date() , ...rate })); } }; \ No newline at end of file diff --git a/history/tests/unit/rates/RatesService.test.js b/history/tests/unit/rates/RatesService.test.js index f845b70..2ccca12 100644 --- a/history/tests/unit/rates/RatesService.test.js +++ b/history/tests/unit/rates/RatesService.test.js @@ -14,4 +14,35 @@ describe("RatesService", () => { expect(invalidScenario).toThrow(/Unknown currency conversion/i); }); + test("returns exchange rates", () => { + // Given + const repository = { + load: () => [{ value: 0.5}] + }; + const service = new RatesService(repository); + + // When + const rates = service.loadRatesHistory("EUR", "USD"); + + // Then + expect(rates[0].value).toBe(0.5); + }); + + + test("returns exchange rates including dates", () => { + // Given + const repository = { + load: () => [{ value: 0.5}, { value: 0.3 }] + }; + const service = new RatesService(repository); + + // When + const rates = service.loadRatesHistory("EUR", "USD"); + + // Then + for(const rate of rates) { + expect(rate.date).toBeInstanceOf(Date); + } + }); + }); \ No newline at end of file