From 703b3403abe911d1e53793bfd7e1b188064d61ac Mon Sep 17 00:00:00 2001 From: IdanILT Date: Sat, 13 Feb 2021 17:11:58 +0200 Subject: [PATCH] Bug fix getAddress util when path empty port swap with path --- .../src/Microservices/endpointsUtil.ts | 7 ++++--- .../unit/Microservices/endpointsUtil.spec.ts | 12 ++++++++++++ packages/utils/src/address.ts | 2 +- packages/utils/tests/address.spec.ts | 15 +++++++++++++++ 4 files changed, 32 insertions(+), 4 deletions(-) diff --git a/packages/scalecube-microservice/src/Microservices/endpointsUtil.ts b/packages/scalecube-microservice/src/Microservices/endpointsUtil.ts index 89480d39e..1f73098ae 100644 --- a/packages/scalecube-microservice/src/Microservices/endpointsUtil.ts +++ b/packages/scalecube-microservice/src/Microservices/endpointsUtil.ts @@ -23,9 +23,10 @@ export interface Endpoints { export function minimized(endpoints: MicroserviceApi.Endpoint[]): Endpoints { const res: Endpoints = {}; endpoints.forEach((e) => { - res[getFullAddress(e.address)] = res[getFullAddress(e.address)] || {}; - res[getFullAddress(e.address)][e.serviceName] = res[getFullAddress(e.address)][e.serviceName] || {}; - res[getFullAddress(e.address)][e.serviceName][e.methodName] = sAsyncModel[e.asyncModel]; + const addr = getFullAddress(e.address); + res[addr] = res[addr] || {}; + res[addr][e.serviceName] = res[getFullAddress(e.address)][e.serviceName] || {}; + res[addr][e.serviceName][e.methodName] = sAsyncModel[e.asyncModel]; }); return res; } diff --git a/packages/scalecube-microservice/tests/unit/Microservices/endpointsUtil.spec.ts b/packages/scalecube-microservice/tests/unit/Microservices/endpointsUtil.spec.ts index b1103a613..a5e0a2d4e 100644 --- a/packages/scalecube-microservice/tests/unit/Microservices/endpointsUtil.spec.ts +++ b/packages/scalecube-microservice/tests/unit/Microservices/endpointsUtil.spec.ts @@ -28,6 +28,18 @@ describe('endpointsUtil', () => { path: 'B', }, }, + { + qualifier: 'GreetingService/greet$', + serviceName: 'GreetingService', + methodName: 'greet$', + asyncModel: 'requestStream' as AsyncModel, + address: { + protocol: 'pm', + host: 'defaultHost', + port: 1234, + path: '', + }, + }, ]; expect(endpoints).toEqual(restore(minimized(endpoints))); diff --git a/packages/utils/src/address.ts b/packages/utils/src/address.ts index 7de8b947e..647933744 100644 --- a/packages/utils/src/address.ts +++ b/packages/utils/src/address.ts @@ -55,7 +55,7 @@ const buildAddress = ({ key: string; }) => { let [v1, rest]: any = str.split(delimiter); - if (!rest) { + if (rest === undefined) { rest = v1; v1 = optionalValue; } diff --git a/packages/utils/tests/address.spec.ts b/packages/utils/tests/address.spec.ts index 98a90f57b..9d0eead4a 100644 --- a/packages/utils/tests/address.spec.ts +++ b/packages/utils/tests/address.spec.ts @@ -178,4 +178,19 @@ describe('Test address', () => { }) ); }); + test(` + Given a string 'ws://localhost:1234' + When calling getAddress with the given string + Then result will matching address object + `, () => { + const address = getAddress('ws://localhost:1234/'); + expect(address).toMatchObject( + expect.objectContaining({ + protocol: 'ws', + path: '', + host: 'localhost', + port: 1234, + }) + ); + }); });