diff --git a/functions/versioningV1V2Webhook/src/app/handlers/baseHandler.js b/functions/versioningV1V2Webhook/src/app/handlers/baseHandler.js index a6c3e870a..16e562f57 100644 --- a/functions/versioningV1V2Webhook/src/app/handlers/baseHandler.js +++ b/functions/versioningV1V2Webhook/src/app/handlers/baseHandler.js @@ -5,6 +5,9 @@ class EventHandler { numRetry; constructor() { this.baseUrl = process.env.PN_WEBHOOK_URL; + if (Date.now() < new Date(`${process.env.START_READ_STREAM_TIMESTAMP}`) || Date.now() >= new Date(`${process.env.STOP_READ_STREAM_TIMESTAMP}`)) { + this.baseUrl = process.env.PN_STREAM_URL; + } this.attemptTimeout = process.env.ATTEMPT_TIMEOUT_SEC * 1000; this.numRetry = process.env.NUM_RETRY; } @@ -66,6 +69,11 @@ class EventHandler { version = 25; } + if (event["path"].includes("v2.6")) { + version = 26; + } + + console.log('version is ', version); return version; diff --git a/functions/versioningV1V2Webhook/src/app/handlers/consumeEventStreamHandler.js b/functions/versioningV1V2Webhook/src/app/handlers/consumeEventStreamHandler.js index a7a1b0d0c..41417539d 100644 --- a/functions/versioningV1V2Webhook/src/app/handlers/consumeEventStreamHandler.js +++ b/functions/versioningV1V2Webhook/src/app/handlers/consumeEventStreamHandler.js @@ -68,6 +68,10 @@ class ConsumeEventStreamHandler extends EventHandler { console.debug('Mapping to v25') responseBody.push(data); break; + case 26: + console.debug('Mapping to v26') + responseBody.push(data); + break; default: console.error('Invalid version ', version) break; diff --git a/functions/versioningV1V2Webhook/src/app/handlers/createEventStreamHandler.js b/functions/versioningV1V2Webhook/src/app/handlers/createEventStreamHandler.js index e4c78a94e..f278e750a 100644 --- a/functions/versioningV1V2Webhook/src/app/handlers/createEventStreamHandler.js +++ b/functions/versioningV1V2Webhook/src/app/handlers/createEventStreamHandler.js @@ -29,6 +29,7 @@ class CreateEventStreamHandler extends EventHandler { case 23: case 24: case 25: + case 26: requestBody = requestBody; break; default: @@ -60,6 +61,9 @@ class CreateEventStreamHandler extends EventHandler { case 25: transformedObject = response.data; break; + case 26: + transformedObject = response.data; + break; default: console.error('Invalid version ', version) break; diff --git a/functions/versioningV1V2Webhook/src/app/handlers/disableEventStreamHandler.js b/functions/versioningV1V2Webhook/src/app/handlers/disableEventStreamHandler.js index 29d3bbd93..07ceb9613 100644 --- a/functions/versioningV1V2Webhook/src/app/handlers/disableEventStreamHandler.js +++ b/functions/versioningV1V2Webhook/src/app/handlers/disableEventStreamHandler.js @@ -59,6 +59,9 @@ class DisableEventStreamHandler extends EventHandler { case 25: transformedObject = response.data; break; + case 26: + transformedObject = response.data; + break; default: console.error('Invalid version ', version) break; diff --git a/functions/versioningV1V2Webhook/src/app/handlers/getEventStreamHandler.js b/functions/versioningV1V2Webhook/src/app/handlers/getEventStreamHandler.js index a02cc0542..de11c86b3 100644 --- a/functions/versioningV1V2Webhook/src/app/handlers/getEventStreamHandler.js +++ b/functions/versioningV1V2Webhook/src/app/handlers/getEventStreamHandler.js @@ -49,6 +49,7 @@ class GetEventStreamHandler extends EventHandler { case 23: case 24: case 25: + case 26: transformedObject = response.data; break; default: diff --git a/functions/versioningV1V2Webhook/src/app/handlers/updateEventStreamHandler.js b/functions/versioningV1V2Webhook/src/app/handlers/updateEventStreamHandler.js index c2d4de77c..9b57e4d0b 100644 --- a/functions/versioningV1V2Webhook/src/app/handlers/updateEventStreamHandler.js +++ b/functions/versioningV1V2Webhook/src/app/handlers/updateEventStreamHandler.js @@ -32,6 +32,9 @@ class UpdateEventStreamHandler extends EventHandler { case 24: requestBody = requestBody; break; + case 26: + requestBody = requestBody; + break; default: console.error('Invalid version ', version) break; @@ -68,6 +71,7 @@ class UpdateEventStreamHandler extends EventHandler { case 23: case 24: case 25: + case 26: transformedObject = response.data; break; default: diff --git a/functions/versioningV1V2Webhook/src/test/handlers/consumeEventStreamHandler.test.js b/functions/versioningV1V2Webhook/src/test/handlers/consumeEventStreamHandler.test.js index a0a0daa8e..221c6febf 100644 --- a/functions/versioningV1V2Webhook/src/test/handlers/consumeEventStreamHandler.test.js +++ b/functions/versioningV1V2Webhook/src/test/handlers/consumeEventStreamHandler.test.js @@ -56,12 +56,14 @@ describe("ConsumeEventStreamHandler", () => { }); }); describe("handlerEvent", () => { - - process.env = Object.assign(process.env, { - PN_WEBHOOK_URL: "https://api.dev.notifichedigitali.it/delivery-progresses/v2.4", - }); - it("successful request - with element", async () => { + process.env = Object.assign(process.env, { + PN_WEBHOOK_URL: "https://api.dev.notifichedigitali.it/delivery-progresses/v2.6", + PN_STREAM_URL: "https://api.dev.notifichedigitali.it/delivery-progresses-2/v2.6", + START_READ_STREAM_TIMESTAMP: "2019-01-01T00:00:00Z", + STOP_READ_STREAM_TIMESTAMP: "2099-01-01T00:00:00Z" + }); + const streamId = "12345"; const event = { path: "/delivery-progresses/streams/"+ streamId +"/events", @@ -162,6 +164,13 @@ describe("ConsumeEventStreamHandler", () => { }); it("successful request V24 to V23", async () => { + process.env = Object.assign(process.env, { + PN_WEBHOOK_URL: "https://api.dev.notifichedigitali.it/delivery-progresses/v2.6", + PN_STREAM_URL: "https://api.dev.notifichedigitali.it/delivery-progresses-2/v2.6", + START_READ_STREAM_TIMESTAMP: "2019-01-01T00:00:00Z", + STOP_READ_STREAM_TIMESTAMP: "2099-01-01T00:00:00Z" + }); + const streamId = "12345"; const event = { path: "/delivery-progresses/v2.3/streams/"+ streamId +"/events", @@ -284,6 +293,13 @@ describe("ConsumeEventStreamHandler", () => { }); it("successful request V24 to V10", async () => { + process.env = Object.assign(process.env, { + PN_WEBHOOK_URL: "https://api.dev.notifichedigitali.it/delivery-progresses/v2.6", + PN_STREAM_URL: "https://api.dev.notifichedigitali.it/delivery-progresses-2/v2.6", + START_READ_STREAM_TIMESTAMP: "2019-01-01T00:00:00Z", + STOP_READ_STREAM_TIMESTAMP: "2099-01-01T00:00:00Z" + }); + const streamId = "12345"; const event = { path: "/delivery-progresses/streams/"+ streamId +"/events", @@ -571,6 +587,13 @@ describe("ConsumeEventStreamHandler", () => { }); it("successful request V26 to V25", async () => { + process.env = Object.assign(process.env, { + PN_WEBHOOK_URL: "https://api.dev.notifichedigitali.it/delivery-progresses/v2.6", + PN_STREAM_URL: "https://api.dev.notifichedigitali.it/delivery-progresses-2/v2.6", + START_READ_STREAM_TIMESTAMP: "2019-01-01T00:00:00Z", + STOP_READ_STREAM_TIMESTAMP: "2099-01-01T00:00:00Z" + }); + const streamId = "12345"; const event = { path: "/delivery-progresses/v2.5/streams/"+ streamId +"/events", diff --git a/functions/versioningV1V2Webhook/src/test/handlers/createEventStreamHandler.test.js b/functions/versioningV1V2Webhook/src/test/handlers/createEventStreamHandler.test.js index 827b012e6..2619756aa 100644 --- a/functions/versioningV1V2Webhook/src/test/handlers/createEventStreamHandler.test.js +++ b/functions/versioningV1V2Webhook/src/test/handlers/createEventStreamHandler.test.js @@ -59,11 +59,12 @@ describe("CreateEventStreamHandler", () => { describe("handlerEvent that applies a map function for response body", () => { - process.env = Object.assign(process.env, { - PN_WEBHOOK_URL: "https://api.dev.notifichedigitali.it/delivery-progresses/v2.6", - }); - it("successful request v10", async () => { + process.env = Object.assign(process.env, { + PN_WEBHOOK_URL: "https://api.dev.notifichedigitali.it/delivery-progresses/v2.6", + START_READ_STREAM_TIMESTAMP: "2019-01-01T00:00:00Z", + STOP_READ_STREAM_TIMESTAMP: "2099-01-01T00:00:00Z" + }); const b = JSON.stringify({ title: "stream name", @@ -182,6 +183,22 @@ describe("CreateEventStreamHandler", () => { disabledDate: "2024-02-02T12:00:00Z", version: "v25" } + }, + { + version: "v2.6", + responseBody: { + title: "stream name", + eventType: "STATUS", + groups: [ + { groupId: "group1", groupName: "Group One" }, + { groupId: "group2", groupName: "Group Two" } + ], + filterValues: ["status_1", "status_2"], + streamId: "12345678-90ab-cdef-ghij-klmnopqrstuv", + activationDate: "2024-02-01T12:00:00Z", + disabledDate: "2024-02-02T12:00:00Z", + version: "v26" + } } ]; @@ -189,6 +206,8 @@ describe("CreateEventStreamHandler", () => { process.env = Object.assign(process.env, { PN_WEBHOOK_URL: "https://api.dev.notifichedigitali.it/delivery-progresses/v2.6", + START_READ_STREAM_TIMESTAMP: "2019-01-01T00:00:00Z", + STOP_READ_STREAM_TIMESTAMP: "2099-01-01T00:00:00Z" }); testCases.forEach(({ version, responseBody }) => { @@ -224,5 +243,50 @@ describe("CreateEventStreamHandler", () => { }); }); }); + + describe("handlerEvent test url change", () => { + testCases.forEach(({ version, responseBody }) => { + it(`successful request ${version}`, async () => { + process.env = Object.assign(process.env, { + PN_STREAM_URL: "https://api.dev.notifichedigitali.it/delivery-progresses-2/v2.6", + START_READ_STREAM_TIMESTAMP: "2099-01-01T00:00:00Z", + }); + + createEventStreamHandler = new CreateEventStreamHandler(); + + const b = JSON.stringify({ + title: "stream name", + eventType: "STATUS", + filterValues: ["status_1", "status_2"] + }); + + const event = { + path: `/delivery-progresses/${version}/streams`, + httpMethod: "POST", + headers: {}, + requestContext: { + authorizer: {}, + }, + body: b + }; + + let url = `${process.env.PN_STREAM_URL}/streams`; + + mock.onPost(url).reply(200, responseBody); + + const context = {}; + const response = await createEventStreamHandler.handlerEvent(event, context); + + expect(response.statusCode).to.equal(200); + expect(response.body).to.equal(JSON.stringify(responseBody)); + + expect(mock.history.post.length).to.equal(1); + + process.env = Object.assign(process.env, { + START_READ_STREAM_TIMESTAMP: "2019-01-01T00:00:00Z", + }); + }); + }); + }); }); }); \ No newline at end of file diff --git a/functions/versioningV1V2Webhook/src/test/handlers/deleteEventStreamHandler.test.js b/functions/versioningV1V2Webhook/src/test/handlers/deleteEventStreamHandler.test.js index a832ad037..23ffc5327 100644 --- a/functions/versioningV1V2Webhook/src/test/handlers/deleteEventStreamHandler.test.js +++ b/functions/versioningV1V2Webhook/src/test/handlers/deleteEventStreamHandler.test.js @@ -91,5 +91,42 @@ describe("DeleteEventStreamHandler", () => { }); }); + describe("handlerEvent flag url change", () => { + it("successful request", async () => { + process.env = Object.assign(process.env, { + PN_STREAM_URL: "https://api.dev.notifichedigitali.it/delivery-progresses-2/v2.6", + START_READ_STREAM_TIMESTAMP: "2099-01-01T00:00:00Z", + }); + + deleteEventStreamHandler = new DeleteEventStreamHandler(); + + const streamId = "12345"; + const event = { + path: "/delivery-progresses/streams", + pathParameters : { streamId: streamId }, + httpMethod: "DELETE", + headers: {}, + requestContext: { + authorizer: {}, + }, + }; + + let url = `${process.env.PN_STREAM_URL}/streams/${streamId}`; + + mock.onDelete(url).reply(204); + + const context = {}; + const response = await deleteEventStreamHandler.handlerEvent(event, context); + + expect(response.statusCode).to.equal(204); + + expect(mock.history.delete.length).to.equal(1); + + process.env = Object.assign(process.env, { + START_READ_STREAM_TIMESTAMP: "2019-01-01T00:00:00Z", + }); + }); + }); + }); }); \ No newline at end of file diff --git a/functions/versioningV1V2Webhook/src/test/handlers/disableEventStreamHandler.test.js b/functions/versioningV1V2Webhook/src/test/handlers/disableEventStreamHandler.test.js index 681fee6b8..c9b1ce112 100644 --- a/functions/versioningV1V2Webhook/src/test/handlers/disableEventStreamHandler.test.js +++ b/functions/versioningV1V2Webhook/src/test/handlers/disableEventStreamHandler.test.js @@ -214,6 +214,66 @@ describe("DisableEventStreamHandler", () => { }); }); + describe("handlerEvent", () => { + + it("successful request 2.6", async () => { + + process.env = Object.assign(process.env, { + PN_STREAM_URL: "https://api.dev.notifichedigitali.it/delivery-progresses-2/v2.6", + START_READ_STREAM_TIMESTAMP: "2099-01-01T00:00:00Z", + }); + + disableEventStreamHandler = new DisableEventStreamHandler(); + + const streamId = "12345"; + const b = '{}' + const event = { + path: "/delivery-progresses/v2.6/streams/{streamId}/action/disable", + pathParameters : { streamId: streamId }, + httpMethod: "PUT", + headers: {}, + requestContext: { + authorizer: {}, + }, + body: b + }; + + let url = `${process.env.PN_STREAM_URL}/streams/${streamId}/action/disable`; + + const responseBodyV26 = { + title: "stream name", + eventType: "STATUS", + groups: [{ + groupId: "group1", + groupName: "Group One" + }, + { + groupId: "group2", + groupName: "Group Two" + }], + filterValues: ["status_1", "status_2"], + streamId: "12345678-90ab-cdef-ghij-klmnopqrstuv", + activationDate: "2024-02-01T12:00:00Z", + disabledDate: "2024-02-02T12:00:00Z", + version: "v26" + } + + mock.onPost(url).reply(200, responseBodyV26); + + const context = {}; + const response = await disableEventStreamHandler.handlerEvent(event, context); + + expect(response.statusCode).to.equal(200); + expect(response.body).to.equal(JSON.stringify(responseBodyV26)); + + expect(mock.history.post.length).to.equal(1); + + process.env = Object.assign(process.env, { + START_READ_STREAM_TIMESTAMP: "2019-01-01T00:00:00Z", + }); + }); + }); + describe("handlerEvent 1.0 error", () => { process.env = Object.assign(process.env, { diff --git a/functions/versioningV1V2Webhook/src/test/handlers/getEventStreamHandler.test.js b/functions/versioningV1V2Webhook/src/test/handlers/getEventStreamHandler.test.js index 94bcc19b4..7ce1851e6 100644 --- a/functions/versioningV1V2Webhook/src/test/handlers/getEventStreamHandler.test.js +++ b/functions/versioningV1V2Webhook/src/test/handlers/getEventStreamHandler.test.js @@ -184,6 +184,22 @@ describe("GetEventStreamHandler", () => { disabledDate: "2024-02-02T12:00:00Z", version: "v25" } + }, + { + version: "v2.6", + responseBody: { + title: "stream name", + eventType: "STATUS", + groups: [ + { groupId: "group1", groupName: "Group One" }, + { groupId: "group2", groupName: "Group Two" } + ], + filterValues: ["status_1", "status_2"], + streamId: "12345678-90ab-cdef-ghij-klmnopqrstuv", + activationDate: "2024-02-01T12:00:00Z", + disabledDate: "2024-02-02T12:00:00Z", + version: "v26" + } } ]; @@ -224,5 +240,50 @@ describe("GetEventStreamHandler", () => { }); }); }); + + describe("handlerEvent flag url change", () => { + + testCases.forEach(({ version, responseBody }) => { + it(`successful request ${version}`, async () => { + process.env = Object.assign(process.env, { + PN_STREAM_URL: "https://api.dev.notifichedigitali.it/delivery-progresses-2/v2.6", + START_READ_STREAM_TIMESTAMP: "2099-01-01T00:00:00Z", + }); + + getEventStreamHandler = new GetEventStreamHandler(); + + const streamId = "12345"; + const event = { + path: `/delivery-progresses/${version}/streams/${streamId}`, + pathParameters: { streamId: streamId }, + httpMethod: "GET", + headers: {}, + requestContext: { + authorizer: {}, + }, + body: { + title: "stream name", + eventType: "STATUS", + filterValues: ["status_1", "status_2"] + } + }; + + let url = `${process.env.PN_STREAM_URL}/streams/${streamId}`; + + mock.onGet(url).reply(200, responseBody); + + const context = {}; + const response = await getEventStreamHandler.handlerEvent(event, context); + + expect(response.statusCode).to.equal(200); + expect(response.body).to.equal(JSON.stringify(responseBody)); + expect(mock.history.get.length).to.equal(1); + + process.env = Object.assign(process.env, { + START_READ_STREAM_TIMESTAMP: "2019-01-01T00:00:00Z" + }); + }); + }); + }); }); }); \ No newline at end of file diff --git a/functions/versioningV1V2Webhook/src/test/handlers/listEventStreamsHandler.test.js b/functions/versioningV1V2Webhook/src/test/handlers/listEventStreamsHandler.test.js index 9b4e837e6..46c1d4a8b 100644 --- a/functions/versioningV1V2Webhook/src/test/handlers/listEventStreamsHandler.test.js +++ b/functions/versioningV1V2Webhook/src/test/handlers/listEventStreamsHandler.test.js @@ -92,4 +92,51 @@ describe("ListEventStreamsHandler", () => { expect(mock.history.get.length).to.equal(1); }); }); + + describe("handlerEvent url change flag", () => { + it("successful request", async () => { + process.env = Object.assign(process.env, { + PN_STREAM_URL: "https://api.dev.notifichedigitali.it/delivery-progresses-2/v2.6", + START_READ_STREAM_TIMESTAMP: "2099-01-01T00:00:00Z", + }); + + listEventStreamsHandler = new ListEventStreamsHandler(); + + const event = { + path: "/delivery-progresses/streams", + httpMethod: "GET", + headers: {}, + requestContext: { + authorizer: {}, + }, + }; + + let url = `${process.env.PN_STREAM_URL}/streams`; + + const responseBody = [ + { + title: "stream name 1", + streamId: "12345678-90ab-cdef-ghij-klmnopqrstuv" + }, + { + title: "stream name 2", + streamId: "abcdefgh-ijkl-mnop-qrst-uvwxyz123456" + } + ] + + mock.onGet(url).reply(200, responseBody); + + const context = {}; + const response = await listEventStreamsHandler.handlerEvent(event, context); + + expect(response.statusCode).to.equal(200); + expect(response.body).to.equal(JSON.stringify(responseBody)); + + expect(mock.history.get.length).to.equal(1); + + process.env = Object.assign(process.env, { + START_READ_STREAM_TIMESTAMP: "2019-01-01T00:00:00Z", + }); + }); + }); }); \ No newline at end of file diff --git a/functions/versioningV1V2Webhook/src/test/handlers/updateEventStreamHandler.test.js b/functions/versioningV1V2Webhook/src/test/handlers/updateEventStreamHandler.test.js index 08b4968c9..364c8e0dc 100644 --- a/functions/versioningV1V2Webhook/src/test/handlers/updateEventStreamHandler.test.js +++ b/functions/versioningV1V2Webhook/src/test/handlers/updateEventStreamHandler.test.js @@ -183,6 +183,22 @@ describe("UpdateEventStreamHandler", () => { disabledDate: "2024-02-02T12:00:00Z", version: "v25" } + }, + { + version: "v2.6", + responseBody: { + title: "stream name", + eventType: "STATUS", + groups: [ + { groupId: "group1", groupName: "Group One" }, + { groupId: "group2", groupName: "Group Two" } + ], + filterValues: ["status_1", "status_2"], + streamId: "12345678-90ab-cdef-ghij-klmnopqrstuv", + activationDate: "2024-02-01T12:00:00Z", + disabledDate: "2024-02-02T12:00:00Z", + version: "v26" + } } ]; @@ -224,5 +240,51 @@ describe("UpdateEventStreamHandler", () => { }); }); }); + + describe("handlerEvent", () => { + + testCases.forEach(({ version, responseBody }) => { + it(`successful request ${version}`, async () => { + process.env = Object.assign(process.env, { + PN_STREAM_URL: "https://api.dev.notifichedigitali.it/delivery-progresses-2/v2.6", + START_READ_STREAM_TIMESTAMP: "2099-01-01T00:00:00Z", + }); + + updateEventStreamHandler = new UpdateEventStreamHandler(); + + const streamId = "12345"; + const b = JSON.stringify({ + title: "stream name", + eventType: "STATUS", + filterValues: ["status_1", "status_2"] + }); + const event = { + path: `/delivery-progresses/${version}/streams`, + pathParameters: { streamId: streamId }, + httpMethod: "PUT", + headers: {}, + requestContext: { + authorizer: {}, + }, + body: b + }; + + let url = `${process.env.PN_STREAM_URL}/streams/${streamId}`; + + mock.onPut(url).reply(200, responseBody); + + const context = {}; + const response = await updateEventStreamHandler.handlerEvent(event, context); + + expect(response.statusCode).to.equal(200); + expect(response.body).to.equal(JSON.stringify(responseBody)); + expect(mock.history.put.length).to.equal(1); + + process.env = Object.assign(process.env, { + START_READ_STREAM_TIMESTAMP: "2019-01-01T00:00:00Z", + }); + }); + }); + }); }); }); \ No newline at end of file diff --git a/scripts/aws/cfn/microservice.yml b/scripts/aws/cfn/microservice.yml index a78e1c17c..0f84ec5ab 100644 --- a/scripts/aws/cfn/microservice.yml +++ b/scripts/aws/cfn/microservice.yml @@ -1973,8 +1973,11 @@ Resources: Variables: REGION: !Sub ${AWS::Region} PN_WEBHOOK_URL: !Sub "http://${ApplicationLoadBalancerDomain}:8080/delivery-progresses/v2.6" + PN_STREAM_URL: !Sub "http://${ApplicationLoadBalancerDomain}:8080/delivery-progresses-2/v2.6" NUM_RETRY: !Ref NumRetry ATTEMPT_TIMEOUT_SEC: !Ref AttemptTimeoutSec + START_READ_STREAM_TIMESTAMP: !Sub [ '${SelectedEnv}', { SelectedEnv: !Select [ 0, !Ref WebhookFeatureFlags ] } ] + STOP_READ_STREAM_TIMESTAMP: !Sub [ '${SelectedEnv}', { SelectedEnv: !Select [ 1, !Ref WebhookFeatureFlags ] } ] TracingConfig: Mode: Active Layers: