From f04e4a3c42dcef810b1f693c574d2e743ae0e422 Mon Sep 17 00:00:00 2001 From: Tomas Doran Date: Tue, 14 Dec 2021 13:46:56 +0000 Subject: [PATCH] Explicitly type convert metric values to Number(). Fixes #106 --- src/logger/MetricsContext.ts | 4 ++-- src/logger/__tests__/MetricsLogger.test.ts | 21 ++++++++++++++++++++- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/src/logger/MetricsContext.ts b/src/logger/MetricsContext.ts index 502f0b2..aa79b9a 100644 --- a/src/logger/MetricsContext.ts +++ b/src/logger/MetricsContext.ts @@ -180,9 +180,9 @@ export class MetricsContext { public putMetric(key: string, value: number, unit?: Unit | string): void { const currentMetric = this.metrics.get(key); if (currentMetric) { - currentMetric.addValue(value); + currentMetric.addValue(Number(value)); } else { - this.metrics.set(key, new MetricValues(value, unit)); + this.metrics.set(key, new MetricValues(Number(value), unit)); } } diff --git a/src/logger/__tests__/MetricsLogger.test.ts b/src/logger/__tests__/MetricsLogger.test.ts index a00d0d7..3897456 100644 --- a/src/logger/__tests__/MetricsLogger.test.ts +++ b/src/logger/__tests__/MetricsLogger.test.ts @@ -83,6 +83,25 @@ describe('successful', () => { expect(actualMetric!.unit).toBe('None'); }); + test('put metric with string corerces to Numeric', async () => { + // arrange + const expectedKey = faker.random.word(); + const expectedValues = [faker.random.number(), faker.random.number()]; + + // act + logger.putMetric(expectedKey, `${expectedValues[0]}` as any); + logger.putMetric(expectedKey, `${expectedValues[1]}` as any); + await logger.flush(); + + // assert + expect(sink.events).toHaveLength(1); + const actualMetric = sink.events[0].metrics.get(expectedKey); + expect(actualMetric).toBeTruthy(); + expect(actualMetric!.values).toStrictEqual(expectedValues); + expect(actualMetric!.unit).toBe('None'); + }); + + test('can put metric with enum unit', async () => { // arrange const expectedKey = faker.random.word(); @@ -398,4 +417,4 @@ describe('failure', () => { // assert await expect(logger.flush()).rejects.toBeUndefined(); }); -}); \ No newline at end of file +});