From 317cb96d5b74d9eb4a355e2b2584c4410f57a3d1 Mon Sep 17 00:00:00 2001 From: Eric Camellini Date: Thu, 13 Jun 2024 10:47:50 +0200 Subject: [PATCH 1/9] Improving puppeteer usage for testing to avoid spawning many browsers --- packages/agreement-process/package.json | 2 +- packages/agreement-process/test/utils.ts | 28 +- .../commons/src/pdf-generator/pdfGenerator.ts | 23 +- packages/purpose-process/test/utils.ts | 12 +- pnpm-lock.yaml | 288 ++---------------- 5 files changed, 59 insertions(+), 294 deletions(-) diff --git a/packages/agreement-process/package.json b/packages/agreement-process/package.json index 07c0111fef..ebabc17d93 100644 --- a/packages/agreement-process/package.json +++ b/packages/agreement-process/package.json @@ -31,7 +31,7 @@ "pagopa-interop-commons-test": "workspace:*", "pg-promise": "11.8.0", "prettier": "2.8.8", - "puppeteer": "22.10.0", + "puppeteer": "22.10.1", "testcontainers": "10.9.0", "ts-node": "10.9.2", "typescript": "5.4.5", diff --git a/packages/agreement-process/test/utils.ts b/packages/agreement-process/test/utils.ts index c1b7b42ce8..0cf8a10de8 100644 --- a/packages/agreement-process/test/utils.ts +++ b/packages/agreement-process/test/utils.ts @@ -26,9 +26,13 @@ import { Attribute, toReadModelAttribute, } from "pagopa-interop-models"; -import { genericLogger, initPDFGenerator } from "pagopa-interop-commons"; +import { + genericLogger, + initPDFGenerator, + launchBrowser, +} from "pagopa-interop-commons"; import { SelfcareV2Client } from "pagopa-interop-selfcare-v2-client"; -import puppeteer, { Browser } from "puppeteer"; +import puppeteer from "puppeteer"; import { agreementServiceBuilder } from "../src/services/agreementService.js"; import { readModelServiceBuilder } from "../src/services/readModelService.js"; import { config } from "../src/utilities/config.js"; @@ -43,16 +47,6 @@ export const { cleanup, readModelRepository, postgresDB, fileManager } = afterEach(cleanup); -const testBrowserInstance: Browser = await puppeteer.launch(); -const closeTestBrowserInstance = async (): Promise => - await testBrowserInstance.close(); - -afterAll(closeTestBrowserInstance); - -vi.spyOn(puppeteer, "launch").mockImplementation( - async () => testBrowserInstance -); - export const agreements = readModelRepository.agreements; export const eservices = readModelRepository.eservices; export const tenants = readModelRepository.tenants; @@ -60,9 +54,17 @@ export const attributes = readModelRepository.attributes; export const readModelService = readModelServiceBuilder(readModelRepository); -export const selfcareV2ClientMock: SelfcareV2Client = {} as SelfcareV2Client; +const testBrowserInstance = await launchBrowser({ pipe: true }); + +vi.spyOn(puppeteer, "launch").mockImplementation( + async () => testBrowserInstance +); + +afterAll(async () => await testBrowserInstance.close()); + export const pdfGenerator = await initPDFGenerator(); +export const selfcareV2ClientMock: SelfcareV2Client = {} as SelfcareV2Client; export const agreementService = agreementServiceBuilder( postgresDB, readModelService, diff --git a/packages/commons/src/pdf-generator/pdfGenerator.ts b/packages/commons/src/pdf-generator/pdfGenerator.ts index 47a56049f3..a6a81dacd3 100644 --- a/packages/commons/src/pdf-generator/pdfGenerator.ts +++ b/packages/commons/src/pdf-generator/pdfGenerator.ts @@ -12,12 +12,15 @@ export interface PDFGenerator { ) => Promise; } -export async function initPDFGenerator(): Promise { - const templateService = buildHTMLTemplateService(); - let browserInstance = await puppeteer.launch({ - /* NOTE - those configurations allow link (file://) usages for - resources files in template's folder +export const launchBrowser = ( + launchoptions: puppeteer.LaunchOptions = {} +): Promise => + puppeteer.launch({ + ...launchoptions, + + /* NOTE + those configurations allow link (file://) usages for + resources files in template's folder */ args: [ "--no-sandbox", @@ -29,18 +32,22 @@ export async function initPDFGenerator(): Promise { ], }); +export async function initPDFGenerator(): Promise { + const templateService = buildHTMLTemplateService(); + let browserInstance = await launchBrowser(); + const getBrowser = async (): Promise => { if (browserInstance?.connected) { return browserInstance; } else { - browserInstance = await puppeteer.launch(); + browserInstance = await launchBrowser(); return browserInstance; } }; // During unexpected browser crash restarts browser handling "disconnected" event browserInstance.on("disconnected", async () => { - browserInstance = await puppeteer.launch(); + browserInstance = await launchBrowser(); }); return { diff --git a/packages/purpose-process/test/utils.ts b/packages/purpose-process/test/utils.ts index 216c0d4ae7..0b8a72f678 100644 --- a/packages/purpose-process/test/utils.ts +++ b/packages/purpose-process/test/utils.ts @@ -1,6 +1,7 @@ /* eslint-disable @typescript-eslint/no-non-null-assertion */ import { initPDFGenerator, + launchBrowser, riskAnalysisFormToRiskAnalysisFormToValidate, } from "pagopa-interop-commons"; import { @@ -25,7 +26,7 @@ import { PurposeId, } from "pagopa-interop-models"; import { afterAll, afterEach, inject, vi } from "vitest"; -import puppeteer, { Browser } from "puppeteer"; +import puppeteer from "puppeteer"; import { ApiPurposeUpdateContent, ApiReversePurposeUpdateContent, @@ -52,15 +53,14 @@ export const purposes = readModelRepository.purposes; export const readModelService = readModelServiceBuilder(readModelRepository); -const testBrowserInstance: Browser = await puppeteer.launch({ pipe: true }); -const closeTestBrowserInstance = async (): Promise => - await testBrowserInstance.close(); - -afterAll(closeTestBrowserInstance); +const testBrowserInstance = await launchBrowser({ pipe: true }); vi.spyOn(puppeteer, "launch").mockImplementation( async () => testBrowserInstance ); + +afterAll(async () => await testBrowserInstance.close()); + const pdfGenerator = await initPDFGenerator(); export const purposeService = purposeServiceBuilder( diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index dee0a56e3c..8e48f9581b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -149,8 +149,8 @@ importers: specifier: 2.8.8 version: 2.8.8 puppeteer: - specifier: 22.10.0 - version: 22.10.0(typescript@5.4.5) + specifier: 22.10.1 + version: 22.10.1(typescript@5.4.5) testcontainers: specifier: 10.9.0 version: 10.9.0 @@ -786,6 +786,9 @@ importers: pg-promise: specifier: 11.8.0 version: 11.8.0 + puppeteer: + specifier: 22.10.1 + version: 22.10.1(typescript@5.4.5) testcontainers: specifier: 10.9.0 version: 10.9.0 @@ -934,7 +937,7 @@ importers: dependencies: aws-msk-iam-sasl-signer-js: specifier: ^1.0.0 - version: 1.0.0(@aws-sdk/client-sso-oidc@3.592.0) + version: 1.0.0(@aws-sdk/client-sso-oidc@3.596.0) kafkajs: specifier: 2.2.4 version: 2.2.4 @@ -1798,54 +1801,6 @@ packages: - aws-crt dev: false - /@aws-sdk/client-sso-oidc@3.592.0: - resolution: {integrity: sha512-11Zvm8nm0s/UF3XCjzFRpQU+8FFVW5rcr3BHfnH6xAe5JEoN6bJN/n+wOfnElnjek+90hh+Qc7s141AMrCjiiw==} - engines: {node: '>=16.0.0'} - dependencies: - '@aws-crypto/sha256-browser': 3.0.0 - '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/client-sts': 3.592.0(@aws-sdk/client-sso-oidc@3.592.0) - '@aws-sdk/core': 3.592.0 - '@aws-sdk/credential-provider-node': 3.592.0(@aws-sdk/client-sso-oidc@3.592.0)(@aws-sdk/client-sts@3.592.0) - '@aws-sdk/middleware-host-header': 3.577.0 - '@aws-sdk/middleware-logger': 3.577.0 - '@aws-sdk/middleware-recursion-detection': 3.577.0 - '@aws-sdk/middleware-user-agent': 3.587.0 - '@aws-sdk/region-config-resolver': 3.587.0 - '@aws-sdk/types': 3.577.0 - '@aws-sdk/util-endpoints': 3.587.0 - '@aws-sdk/util-user-agent-browser': 3.577.0 - '@aws-sdk/util-user-agent-node': 3.587.0 - '@smithy/config-resolver': 3.0.1 - '@smithy/core': 2.2.0 - '@smithy/fetch-http-handler': 3.0.1 - '@smithy/hash-node': 3.0.0 - '@smithy/invalid-dependency': 3.0.0 - '@smithy/middleware-content-length': 3.0.0 - '@smithy/middleware-endpoint': 3.0.1 - '@smithy/middleware-retry': 3.0.3 - '@smithy/middleware-serde': 3.0.0 - '@smithy/middleware-stack': 3.0.0 - '@smithy/node-config-provider': 3.1.0 - '@smithy/node-http-handler': 3.0.0 - '@smithy/protocol-http': 4.0.0 - '@smithy/smithy-client': 3.1.1 - '@smithy/types': 3.0.0 - '@smithy/url-parser': 3.0.0 - '@smithy/util-base64': 3.0.0 - '@smithy/util-body-length-browser': 3.0.0 - '@smithy/util-body-length-node': 3.0.0 - '@smithy/util-defaults-mode-browser': 3.0.3 - '@smithy/util-defaults-mode-node': 3.0.3 - '@smithy/util-endpoints': 2.0.1 - '@smithy/util-middleware': 3.0.0 - '@smithy/util-retry': 3.0.0 - '@smithy/util-utf8': 3.0.0 - tslib: 2.6.2 - transitivePeerDependencies: - - aws-crt - dev: false - /@aws-sdk/client-sso-oidc@3.596.0(@aws-sdk/client-sts@3.596.0): resolution: {integrity: sha512-KnTWtKzO0N+rMdIrVwbewFp4FAvVWBV/ekCAh5w7EN+uAvBHxMoFElE2RwlcRF/gH1/F715OspPMvOxPom6bMA==} engines: {node: '>=16.0.0'} @@ -2127,55 +2082,6 @@ packages: - aws-crt dev: false - /@aws-sdk/client-sts@3.592.0(@aws-sdk/client-sso-oidc@3.592.0): - resolution: {integrity: sha512-KUrOdszZfcrlpKr4dpdkGibZ/qq3Lnfu1rjv1U+V1QJQ9OuMo9J3sDWpWV9tigNqY0aGllarWH5cJbz9868W/w==} - engines: {node: '>=16.0.0'} - dependencies: - '@aws-crypto/sha256-browser': 3.0.0 - '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/client-sso-oidc': 3.592.0 - '@aws-sdk/core': 3.592.0 - '@aws-sdk/credential-provider-node': 3.592.0(@aws-sdk/client-sso-oidc@3.592.0)(@aws-sdk/client-sts@3.592.0) - '@aws-sdk/middleware-host-header': 3.577.0 - '@aws-sdk/middleware-logger': 3.577.0 - '@aws-sdk/middleware-recursion-detection': 3.577.0 - '@aws-sdk/middleware-user-agent': 3.587.0 - '@aws-sdk/region-config-resolver': 3.587.0 - '@aws-sdk/types': 3.577.0 - '@aws-sdk/util-endpoints': 3.587.0 - '@aws-sdk/util-user-agent-browser': 3.577.0 - '@aws-sdk/util-user-agent-node': 3.587.0 - '@smithy/config-resolver': 3.0.1 - '@smithy/core': 2.2.0 - '@smithy/fetch-http-handler': 3.0.1 - '@smithy/hash-node': 3.0.0 - '@smithy/invalid-dependency': 3.0.0 - '@smithy/middleware-content-length': 3.0.0 - '@smithy/middleware-endpoint': 3.0.1 - '@smithy/middleware-retry': 3.0.3 - '@smithy/middleware-serde': 3.0.0 - '@smithy/middleware-stack': 3.0.0 - '@smithy/node-config-provider': 3.1.0 - '@smithy/node-http-handler': 3.0.0 - '@smithy/protocol-http': 4.0.0 - '@smithy/smithy-client': 3.1.1 - '@smithy/types': 3.0.0 - '@smithy/url-parser': 3.0.0 - '@smithy/util-base64': 3.0.0 - '@smithy/util-body-length-browser': 3.0.0 - '@smithy/util-body-length-node': 3.0.0 - '@smithy/util-defaults-mode-browser': 3.0.3 - '@smithy/util-defaults-mode-node': 3.0.3 - '@smithy/util-endpoints': 2.0.1 - '@smithy/util-middleware': 3.0.0 - '@smithy/util-retry': 3.0.0 - '@smithy/util-utf8': 3.0.0 - tslib: 2.6.2 - transitivePeerDependencies: - - '@aws-sdk/client-sso-oidc' - - aws-crt - dev: false - /@aws-sdk/client-sts@3.596.0: resolution: {integrity: sha512-37+WQDjgmqS/YXj3vPzIVIrbXaFcZ1WXk715AMGIPBZn9Y2/wr2bmSTpX7bsMyn0G8+LxmoIxFcG7n1Gu0nvLg==} engines: {node: '>=16.0.0'} @@ -2343,21 +2249,6 @@ packages: tslib: 2.6.2 dev: false - /@aws-sdk/credential-provider-http@3.587.0: - resolution: {integrity: sha512-Su1SRWVRCuR1e32oxX3C1V4c5hpPN20WYcRfdcr2wXwHqSvys5DrnmuCC+JoEnS/zt3adUJhPliTqpfKgSdMrA==} - engines: {node: '>=16.0.0'} - dependencies: - '@aws-sdk/types': 3.577.0 - '@smithy/fetch-http-handler': 3.0.1 - '@smithy/node-http-handler': 3.0.0 - '@smithy/property-provider': 3.1.0 - '@smithy/protocol-http': 4.0.0 - '@smithy/smithy-client': 3.1.1 - '@smithy/types': 3.0.0 - '@smithy/util-stream': 3.0.1 - tslib: 2.6.2 - dev: false - /@aws-sdk/credential-provider-http@3.596.0: resolution: {integrity: sha512-nnmvEsz1KJgRmfSZJPWuzbxPRXu8Y+/78Ifa1jY3fQKSKdEJfXMDsjPljJvMDBl4dZ8pf5Hwx+S/ONnMEDwYEA==} engines: {node: '>=16.0.0'} @@ -2413,7 +2304,7 @@ packages: - aws-crt dev: false - /@aws-sdk/credential-provider-ini@3.583.0(@aws-sdk/client-sso-oidc@3.592.0)(@aws-sdk/client-sts@3.583.0): + /@aws-sdk/credential-provider-ini@3.583.0(@aws-sdk/client-sso-oidc@3.596.0)(@aws-sdk/client-sts@3.583.0): resolution: {integrity: sha512-8I0oWNg/yps6ctjhEeL/qJ9BIa/+xXP7RPDQqFKZ2zBkWbmLLOoMWXRvl8uKUBD6qCe+DGmcu9skfVXeXSesEQ==} engines: {node: '>=16.0.0'} peerDependencies: @@ -2422,7 +2313,7 @@ packages: '@aws-sdk/client-sts': 3.583.0 '@aws-sdk/credential-provider-env': 3.577.0 '@aws-sdk/credential-provider-process': 3.577.0 - '@aws-sdk/credential-provider-sso': 3.583.0(@aws-sdk/client-sso-oidc@3.592.0) + '@aws-sdk/credential-provider-sso': 3.583.0(@aws-sdk/client-sso-oidc@3.596.0) '@aws-sdk/credential-provider-web-identity': 3.577.0(@aws-sdk/client-sts@3.583.0) '@aws-sdk/types': 3.577.0 '@smithy/credential-provider-imds': 3.1.0 @@ -2435,29 +2326,6 @@ packages: - aws-crt dev: false - /@aws-sdk/credential-provider-ini@3.592.0(@aws-sdk/client-sso-oidc@3.592.0)(@aws-sdk/client-sts@3.592.0): - resolution: {integrity: sha512-3kG6ngCIOPbLJZZ3RV+NsU7HVK6vX1+1DrPJKj9fVlPYn7IXsk8NAaUT5885yC7+jKizjv0cWLrLKvAJV5gfUA==} - engines: {node: '>=16.0.0'} - peerDependencies: - '@aws-sdk/client-sts': ^3.592.0 - dependencies: - '@aws-sdk/client-sts': 3.592.0(@aws-sdk/client-sso-oidc@3.592.0) - '@aws-sdk/credential-provider-env': 3.587.0 - '@aws-sdk/credential-provider-http': 3.587.0 - '@aws-sdk/credential-provider-process': 3.587.0 - '@aws-sdk/credential-provider-sso': 3.592.0(@aws-sdk/client-sso-oidc@3.592.0) - '@aws-sdk/credential-provider-web-identity': 3.587.0(@aws-sdk/client-sts@3.592.0) - '@aws-sdk/types': 3.577.0 - '@smithy/credential-provider-imds': 3.1.0 - '@smithy/property-provider': 3.1.0 - '@smithy/shared-ini-file-loader': 3.1.0 - '@smithy/types': 3.0.0 - tslib: 2.6.2 - transitivePeerDependencies: - - '@aws-sdk/client-sso-oidc' - - aws-crt - dev: false - /@aws-sdk/credential-provider-ini@3.596.0(@aws-sdk/client-sso-oidc@3.596.0)(@aws-sdk/client-sts@3.596.0): resolution: {integrity: sha512-c7PLtd7GbnOVAc5sk3sVlHxLvEsM8RF96rsBGlRo4AVpil/lXLKyNv9VarS4w/ZZZoRbJRyZ+m92PjNcLvpTDQ==} engines: {node: '>=16.0.0'} @@ -2522,15 +2390,15 @@ packages: - aws-crt dev: false - /@aws-sdk/credential-provider-node@3.583.0(@aws-sdk/client-sso-oidc@3.592.0)(@aws-sdk/client-sts@3.583.0): + /@aws-sdk/credential-provider-node@3.583.0(@aws-sdk/client-sso-oidc@3.596.0)(@aws-sdk/client-sts@3.583.0): resolution: {integrity: sha512-yBNypBXny7zJH85SzxDj8s1mbLXv9c/Vbq0qR3R3POj2idZ6ywB/qlIRC1XwBuv49Wvg8kA1wKXk3K3jrpcVIw==} engines: {node: '>=16.0.0'} dependencies: '@aws-sdk/credential-provider-env': 3.577.0 '@aws-sdk/credential-provider-http': 3.582.0 - '@aws-sdk/credential-provider-ini': 3.583.0(@aws-sdk/client-sso-oidc@3.592.0)(@aws-sdk/client-sts@3.583.0) + '@aws-sdk/credential-provider-ini': 3.583.0(@aws-sdk/client-sso-oidc@3.596.0)(@aws-sdk/client-sts@3.583.0) '@aws-sdk/credential-provider-process': 3.577.0 - '@aws-sdk/credential-provider-sso': 3.583.0(@aws-sdk/client-sso-oidc@3.592.0) + '@aws-sdk/credential-provider-sso': 3.583.0(@aws-sdk/client-sso-oidc@3.596.0) '@aws-sdk/credential-provider-web-identity': 3.577.0(@aws-sdk/client-sts@3.583.0) '@aws-sdk/types': 3.577.0 '@smithy/credential-provider-imds': 3.1.0 @@ -2544,28 +2412,6 @@ packages: - aws-crt dev: false - /@aws-sdk/credential-provider-node@3.592.0(@aws-sdk/client-sso-oidc@3.592.0)(@aws-sdk/client-sts@3.592.0): - resolution: {integrity: sha512-BguihBGTrEjVBQ07hm+ZsO29eNJaxwBwUZMftgGAm2XcMIEClNPfm5hydxu2BmA4ouIJQJ6nG8pNYghEumM+Aw==} - engines: {node: '>=16.0.0'} - dependencies: - '@aws-sdk/credential-provider-env': 3.587.0 - '@aws-sdk/credential-provider-http': 3.587.0 - '@aws-sdk/credential-provider-ini': 3.592.0(@aws-sdk/client-sso-oidc@3.592.0)(@aws-sdk/client-sts@3.592.0) - '@aws-sdk/credential-provider-process': 3.587.0 - '@aws-sdk/credential-provider-sso': 3.592.0(@aws-sdk/client-sso-oidc@3.592.0) - '@aws-sdk/credential-provider-web-identity': 3.587.0(@aws-sdk/client-sts@3.592.0) - '@aws-sdk/types': 3.577.0 - '@smithy/credential-provider-imds': 3.1.0 - '@smithy/property-provider': 3.1.0 - '@smithy/shared-ini-file-loader': 3.1.0 - '@smithy/types': 3.0.0 - tslib: 2.6.2 - transitivePeerDependencies: - - '@aws-sdk/client-sso-oidc' - - '@aws-sdk/client-sts' - - aws-crt - dev: false - /@aws-sdk/credential-provider-node@3.596.0(@aws-sdk/client-sso-oidc@3.596.0)(@aws-sdk/client-sts@3.596.0): resolution: {integrity: sha512-F4MLyXpQyie1AnJS9n7TIRL0aF7YH8tKMIJXDsM5OXpSZi2en+yR6SzsxvHf5dwS2Ga8LUdEJyiyS2NoebaJGA==} engines: {node: '>=16.0.0'} @@ -2652,28 +2498,12 @@ packages: - aws-crt dev: false - /@aws-sdk/credential-provider-sso@3.583.0(@aws-sdk/client-sso-oidc@3.592.0): + /@aws-sdk/credential-provider-sso@3.583.0(@aws-sdk/client-sso-oidc@3.596.0): resolution: {integrity: sha512-G/1EvL9tBezSiU+06tG4K/kOvFfPjnheT4JSXqjPM7+vjKzgp2jxp1J9MMd69zs4jVWon932zMeGgjrCplzMEg==} engines: {node: '>=16.0.0'} dependencies: '@aws-sdk/client-sso': 3.583.0 - '@aws-sdk/token-providers': 3.577.0(@aws-sdk/client-sso-oidc@3.592.0) - '@aws-sdk/types': 3.577.0 - '@smithy/property-provider': 3.1.0 - '@smithy/shared-ini-file-loader': 3.1.0 - '@smithy/types': 3.0.0 - tslib: 2.6.2 - transitivePeerDependencies: - - '@aws-sdk/client-sso-oidc' - - aws-crt - dev: false - - /@aws-sdk/credential-provider-sso@3.592.0(@aws-sdk/client-sso-oidc@3.592.0): - resolution: {integrity: sha512-fYFzAdDHKHvhtufPPtrLdSv8lO6GuW3em6n3erM5uFdpGytNpjXvr3XGokIsuXcNkETAY/Xihg+G9ksNE8WJxQ==} - engines: {node: '>=16.0.0'} - dependencies: - '@aws-sdk/client-sso': 3.592.0 - '@aws-sdk/token-providers': 3.587.0(@aws-sdk/client-sso-oidc@3.592.0) + '@aws-sdk/token-providers': 3.577.0(@aws-sdk/client-sso-oidc@3.596.0) '@aws-sdk/types': 3.577.0 '@smithy/property-provider': 3.1.0 '@smithy/shared-ini-file-loader': 3.1.0 @@ -2723,19 +2553,6 @@ packages: tslib: 2.6.2 dev: false - /@aws-sdk/credential-provider-web-identity@3.587.0(@aws-sdk/client-sts@3.592.0): - resolution: {integrity: sha512-XqIx/I2PG7kyuw3WjAP9wKlxy8IvFJwB8asOFT1xPFoVfZYKIogjG9oLP5YiRtfvDkWIztHmg5MlVv3HdJDGRw==} - engines: {node: '>=16.0.0'} - peerDependencies: - '@aws-sdk/client-sts': ^3.587.0 - dependencies: - '@aws-sdk/client-sts': 3.592.0(@aws-sdk/client-sso-oidc@3.592.0) - '@aws-sdk/types': 3.577.0 - '@smithy/property-provider': 3.1.0 - '@smithy/types': 3.0.0 - tslib: 2.6.2 - dev: false - /@aws-sdk/credential-provider-web-identity@3.587.0(@aws-sdk/client-sts@3.596.0): resolution: {integrity: sha512-XqIx/I2PG7kyuw3WjAP9wKlxy8IvFJwB8asOFT1xPFoVfZYKIogjG9oLP5YiRtfvDkWIztHmg5MlVv3HdJDGRw==} engines: {node: '>=16.0.0'} @@ -2773,7 +2590,7 @@ packages: - aws-crt dev: false - /@aws-sdk/credential-providers@3.583.0(@aws-sdk/client-sso-oidc@3.592.0): + /@aws-sdk/credential-providers@3.583.0(@aws-sdk/client-sso-oidc@3.596.0): resolution: {integrity: sha512-aD/lw6LJW51f+LgdR54UxyGvXqWZs4HCT310Qf794qFItDWXqhHK4EgS1x41BgAvXPUx0+HSO8OI4eb+AklckA==} engines: {node: '>=16.0.0'} dependencies: @@ -2783,10 +2600,10 @@ packages: '@aws-sdk/credential-provider-cognito-identity': 3.583.0 '@aws-sdk/credential-provider-env': 3.577.0 '@aws-sdk/credential-provider-http': 3.582.0 - '@aws-sdk/credential-provider-ini': 3.583.0(@aws-sdk/client-sso-oidc@3.592.0)(@aws-sdk/client-sts@3.583.0) - '@aws-sdk/credential-provider-node': 3.583.0(@aws-sdk/client-sso-oidc@3.592.0)(@aws-sdk/client-sts@3.583.0) + '@aws-sdk/credential-provider-ini': 3.583.0(@aws-sdk/client-sso-oidc@3.596.0)(@aws-sdk/client-sts@3.583.0) + '@aws-sdk/credential-provider-node': 3.583.0(@aws-sdk/client-sso-oidc@3.596.0)(@aws-sdk/client-sts@3.583.0) '@aws-sdk/credential-provider-process': 3.577.0 - '@aws-sdk/credential-provider-sso': 3.583.0(@aws-sdk/client-sso-oidc@3.592.0) + '@aws-sdk/credential-provider-sso': 3.583.0(@aws-sdk/client-sso-oidc@3.596.0) '@aws-sdk/credential-provider-web-identity': 3.577.0(@aws-sdk/client-sts@3.583.0) '@aws-sdk/types': 3.577.0 '@smithy/credential-provider-imds': 3.1.0 @@ -3129,27 +2946,13 @@ packages: tslib: 2.6.2 dev: false - /@aws-sdk/token-providers@3.577.0(@aws-sdk/client-sso-oidc@3.592.0): + /@aws-sdk/token-providers@3.577.0(@aws-sdk/client-sso-oidc@3.596.0): resolution: {integrity: sha512-0CkIZpcC3DNQJQ1hDjm2bdSy/Xjs7Ny5YvSsacasGOkNfk+FdkiQy6N67bZX3Zbc9KIx+Nz4bu3iDeNSNplnnQ==} engines: {node: '>=16.0.0'} peerDependencies: '@aws-sdk/client-sso-oidc': ^3.577.0 dependencies: - '@aws-sdk/client-sso-oidc': 3.592.0 - '@aws-sdk/types': 3.577.0 - '@smithy/property-provider': 3.1.0 - '@smithy/shared-ini-file-loader': 3.1.0 - '@smithy/types': 3.0.0 - tslib: 2.6.2 - dev: false - - /@aws-sdk/token-providers@3.587.0(@aws-sdk/client-sso-oidc@3.592.0): - resolution: {integrity: sha512-ULqhbnLy1hmJNRcukANBWJmum3BbjXnurLPSFXoGdV0llXYlG55SzIla2VYqdveQEEjmsBuTZdFvXAtNpmS5Zg==} - engines: {node: '>=16.0.0'} - peerDependencies: - '@aws-sdk/client-sso-oidc': ^3.587.0 - dependencies: - '@aws-sdk/client-sso-oidc': 3.592.0 + '@aws-sdk/client-sso-oidc': 3.596.0(@aws-sdk/client-sts@3.596.0) '@aws-sdk/types': 3.577.0 '@smithy/property-provider': 3.1.0 '@smithy/shared-ini-file-loader': 3.1.0 @@ -5672,13 +5475,13 @@ packages: engines: {node: '>= 0.4'} dev: true - /aws-msk-iam-sasl-signer-js@1.0.0(@aws-sdk/client-sso-oidc@3.592.0): + /aws-msk-iam-sasl-signer-js@1.0.0(@aws-sdk/client-sso-oidc@3.596.0): resolution: {integrity: sha512-L0Jk0k2XNHMSGipJ8rRdTq51KrH/gwrfZ39iKY9BWHGOAv7EygsG4qJC7lIRsbu5/ZHB886Z3WsOsFxqR2R4XQ==} engines: {node: '>=14.x'} dependencies: '@aws-crypto/sha256-js': 4.0.0 '@aws-sdk/client-sts': 3.583.0 - '@aws-sdk/credential-providers': 3.583.0(@aws-sdk/client-sso-oidc@3.592.0) + '@aws-sdk/credential-providers': 3.583.0(@aws-sdk/client-sso-oidc@3.596.0) '@aws-sdk/util-format-url': 3.577.0 '@smithy/signature-v4': 2.3.0 '@types/buffers': 0.1.31 @@ -5902,17 +5705,6 @@ packages: resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} dev: true - /chromium-bidi@0.5.19(devtools-protocol@0.0.1286932): - resolution: {integrity: sha512-UA6zL77b7RYCjJkZBsZ0wlvCTD+jTjllZ8f6wdO4buevXgTZYjV+XLB9CiEa2OuuTGGTLnI7eN9I60YxuALGQg==} - peerDependencies: - devtools-protocol: '*' - dependencies: - devtools-protocol: 0.0.1286932 - mitt: 3.0.1 - urlpattern-polyfill: 10.0.0 - zod: 3.22.4 - dev: true - /chromium-bidi@0.5.23(devtools-protocol@0.0.1286932): resolution: {integrity: sha512-1o/gLU9wDqbN5nL2MtfjykjOuighGXc3/hnWueO1haiEoFgX8h5vbvcA4tgdQfjw1mkZ1OEF4x/+HVeqEX6NoA==} peerDependencies: @@ -8566,21 +8358,6 @@ packages: resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} engines: {node: '>=6'} - /puppeteer-core@22.10.0: - resolution: {integrity: sha512-I54J4Vy4I07UHsgB1QSmuFoF7KNQjJWcvFBPhtY+ezMdBfwgGDr8dzYrJa11aPgP9kxIUHjhktcMmmfJkOAtTw==} - engines: {node: '>=18'} - dependencies: - '@puppeteer/browsers': 2.2.3 - chromium-bidi: 0.5.19(devtools-protocol@0.0.1286932) - debug: 4.3.4 - devtools-protocol: 0.0.1286932 - ws: 8.17.0 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - dev: true - /puppeteer-core@22.10.1: resolution: {integrity: sha512-t98x55ohn6eioM/e1dmhy6bG9iuQ+mvpNXyr+UppB789uvNKKOvy9YnWpKp4mVyKxi9BGsceHAFuovQGqQKyCQ==} engines: {node: '>=18'} @@ -8595,23 +8372,6 @@ packages: - supports-color - utf-8-validate - /puppeteer@22.10.0(typescript@5.4.5): - resolution: {integrity: sha512-ZOkZd6a6t0BdKcWb0wAYHWQqCfdlN1PPnXOmg/XNrbo6gJhYWFX4qCNb6ahSn8TpAqBqLCoD4Q010F7GwOM7mA==} - engines: {node: '>=18'} - hasBin: true - requiresBuild: true - dependencies: - '@puppeteer/browsers': 2.2.3 - cosmiconfig: 9.0.0(typescript@5.4.5) - devtools-protocol: 0.0.1286932 - puppeteer-core: 22.10.0 - transitivePeerDependencies: - - bufferutil - - supports-color - - typescript - - utf-8-validate - dev: true - /puppeteer@22.10.1(typescript@5.4.5): resolution: {integrity: sha512-yFT7BlyIa4B1SnE6ccBVt+nYpDNTtZtwNh9tL79d6eWlGh94YrdzQDH+WtG88mCuQIcjjcJgvTRfm8uljuMgUQ==} engines: {node: '>=18'} @@ -9573,7 +9333,7 @@ packages: hasBin: true dependencies: cac: 6.7.14 - debug: 4.3.4 + debug: 4.3.5 pathe: 1.1.2 picocolors: 1.0.0 vite: 5.2.9(@types/node@20.14.2) @@ -9886,9 +9646,5 @@ packages: zod: 3.23.8 dev: false - /zod@3.22.4: - resolution: {integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==} - dev: true - /zod@3.23.8: resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} From 2c800a1ce46d644786e1c2e05311770bbed575eb Mon Sep 17 00:00:00 2001 From: Eric Camellini Date: Thu, 13 Jun 2024 11:22:18 +0200 Subject: [PATCH 2/9] Fixing lockfile --- pnpm-lock.yaml | 3 --- 1 file changed, 3 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8e48f9581b..14dfb6d9db 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -786,9 +786,6 @@ importers: pg-promise: specifier: 11.8.0 version: 11.8.0 - puppeteer: - specifier: 22.10.1 - version: 22.10.1(typescript@5.4.5) testcontainers: specifier: 10.9.0 version: 10.9.0 From e6873572057a04cad59fd5ca7a1e19939f27060f Mon Sep 17 00:00:00 2001 From: Eric Camellini Date: Thu, 13 Jun 2024 11:26:39 +0200 Subject: [PATCH 3/9] Also updating puppeteer --- packages/agreement-process/package.json | 2 +- packages/commons/package.json | 2 +- packages/purpose-process/package.json | 2 +- pnpm-lock.yaml | 36 ++++++++++++------------- 4 files changed, 21 insertions(+), 21 deletions(-) diff --git a/packages/agreement-process/package.json b/packages/agreement-process/package.json index ebabc17d93..5d4fa8a1e6 100644 --- a/packages/agreement-process/package.json +++ b/packages/agreement-process/package.json @@ -31,7 +31,7 @@ "pagopa-interop-commons-test": "workspace:*", "pg-promise": "11.8.0", "prettier": "2.8.8", - "puppeteer": "22.10.1", + "puppeteer": "22.11.0", "testcontainers": "10.9.0", "ts-node": "10.9.2", "typescript": "5.4.5", diff --git a/packages/commons/package.json b/packages/commons/package.json index cc24322066..46365a7ae4 100644 --- a/packages/commons/package.json +++ b/packages/commons/package.json @@ -37,7 +37,7 @@ "pagopa-interop-models": "workspace:*", "pg-promise": "11.8.0", "ts-pattern": "5.1.2", - "puppeteer": "22.10.1", + "puppeteer": "22.11.0", "uuid": "10.0.0", "winston": "3.13.0", "zod": "3.23.8", diff --git a/packages/purpose-process/package.json b/packages/purpose-process/package.json index 5427e17737..1e5f61e0c0 100644 --- a/packages/purpose-process/package.json +++ b/packages/purpose-process/package.json @@ -26,7 +26,7 @@ "cpx2": "7.0.1", "pagopa-interop-commons-test": "workspace:*", "prettier": "2.8.8", - "puppeteer": "22.10.1", + "puppeteer": "22.11.0", "testcontainers": "10.9.0", "ts-node": "10.9.2", "typescript": "5.4.5", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 14dfb6d9db..12a4cacab6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -149,8 +149,8 @@ importers: specifier: 2.8.8 version: 2.8.8 puppeteer: - specifier: 22.10.1 - version: 22.10.1(typescript@5.4.5) + specifier: 22.11.0 + version: 22.11.0(typescript@5.4.5) testcontainers: specifier: 10.9.0 version: 10.9.0 @@ -699,8 +699,8 @@ importers: specifier: 11.8.0 version: 11.8.0 puppeteer: - specifier: 22.10.1 - version: 22.10.1(typescript@5.4.5) + specifier: 22.11.0 + version: 22.11.0(typescript@5.4.5) ts-pattern: specifier: 5.1.2 version: 5.1.2 @@ -1129,8 +1129,8 @@ importers: specifier: 2.8.8 version: 2.8.8 puppeteer: - specifier: 22.10.1 - version: 22.10.1(typescript@5.4.5) + specifier: 22.11.0 + version: 22.11.0(typescript@5.4.5) testcontainers: specifier: 10.9.0 version: 10.9.0 @@ -5702,12 +5702,12 @@ packages: resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} dev: true - /chromium-bidi@0.5.23(devtools-protocol@0.0.1286932): + /chromium-bidi@0.5.23(devtools-protocol@0.0.1299070): resolution: {integrity: sha512-1o/gLU9wDqbN5nL2MtfjykjOuighGXc3/hnWueO1haiEoFgX8h5vbvcA4tgdQfjw1mkZ1OEF4x/+HVeqEX6NoA==} peerDependencies: devtools-protocol: '*' dependencies: - devtools-protocol: 0.0.1286932 + devtools-protocol: 0.0.1299070 mitt: 3.0.1 urlpattern-polyfill: 10.0.0 zod: 3.23.8 @@ -6024,8 +6024,8 @@ packages: engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} dev: false - /devtools-protocol@0.0.1286932: - resolution: {integrity: sha512-wu58HMQll9voDjR4NlPyoDEw1syfzaBNHymMMZ/QOXiHRNluOnDgu9hp1yHOKYoMlxCh4lSSiugLITe6Fvu1eA==} + /devtools-protocol@0.0.1299070: + resolution: {integrity: sha512-+qtL3eX50qsJ7c+qVyagqi7AWMoQCBGNfoyJZMwm/NSXVqLYbuitrWEEIzxfUmTNy7//Xe8yhMmQ+elj3uAqSg==} /diff-sequences@29.6.3: resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} @@ -8355,30 +8355,30 @@ packages: resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} engines: {node: '>=6'} - /puppeteer-core@22.10.1: - resolution: {integrity: sha512-t98x55ohn6eioM/e1dmhy6bG9iuQ+mvpNXyr+UppB789uvNKKOvy9YnWpKp4mVyKxi9BGsceHAFuovQGqQKyCQ==} + /puppeteer-core@22.11.0: + resolution: {integrity: sha512-57YUjhRoSpZWg9lCssWsgzM1/X/1jQnkKbbspbeW0bhZTt3TD4WdNXEYI7KrFFnSvx21tyHhfWW0zlxzbwYSAA==} engines: {node: '>=18'} dependencies: '@puppeteer/browsers': 2.2.3 - chromium-bidi: 0.5.23(devtools-protocol@0.0.1286932) + chromium-bidi: 0.5.23(devtools-protocol@0.0.1299070) debug: 4.3.5 - devtools-protocol: 0.0.1286932 + devtools-protocol: 0.0.1299070 ws: 8.17.0 transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate - /puppeteer@22.10.1(typescript@5.4.5): - resolution: {integrity: sha512-yFT7BlyIa4B1SnE6ccBVt+nYpDNTtZtwNh9tL79d6eWlGh94YrdzQDH+WtG88mCuQIcjjcJgvTRfm8uljuMgUQ==} + /puppeteer@22.11.0(typescript@5.4.5): + resolution: {integrity: sha512-U5U0Dx5Tsd/ec39BmflhcSFIK9UnZxGQfyUzvQVHivt6gIi6RgJqYL9MJaU90OG6tTz65XqzN4wF0ZyDyY0NuA==} engines: {node: '>=18'} hasBin: true requiresBuild: true dependencies: '@puppeteer/browsers': 2.2.3 cosmiconfig: 9.0.0(typescript@5.4.5) - devtools-protocol: 0.0.1286932 - puppeteer-core: 22.10.1 + devtools-protocol: 0.0.1299070 + puppeteer-core: 22.11.0 transitivePeerDependencies: - bufferutil - supports-color From 7e42554f77780aec9f2a8e012c12018a953d24d7 Mon Sep 17 00:00:00 2001 From: Eric Camellini Date: Thu, 13 Jun 2024 11:31:54 +0200 Subject: [PATCH 4/9] Reducing diff from main --- packages/agreement-process/test/utils.ts | 22 ++++++++++++---------- packages/purpose-process/test/utils.ts | 11 ++++++----- 2 files changed, 18 insertions(+), 15 deletions(-) diff --git a/packages/agreement-process/test/utils.ts b/packages/agreement-process/test/utils.ts index 0cf8a10de8..8eb29f5b00 100644 --- a/packages/agreement-process/test/utils.ts +++ b/packages/agreement-process/test/utils.ts @@ -32,7 +32,7 @@ import { launchBrowser, } from "pagopa-interop-commons"; import { SelfcareV2Client } from "pagopa-interop-selfcare-v2-client"; -import puppeteer from "puppeteer"; +import puppeteer, { Browser } from "puppeteer"; import { agreementServiceBuilder } from "../src/services/agreementService.js"; import { readModelServiceBuilder } from "../src/services/readModelService.js"; import { config } from "../src/utilities/config.js"; @@ -47,24 +47,26 @@ export const { cleanup, readModelRepository, postgresDB, fileManager } = afterEach(cleanup); -export const agreements = readModelRepository.agreements; -export const eservices = readModelRepository.eservices; -export const tenants = readModelRepository.tenants; -export const attributes = readModelRepository.attributes; +const testBrowserInstance: Browser = await launchBrowser({ pipe: true }); +const closeTestBrowserInstance = async (): Promise => + await testBrowserInstance.close(); -export const readModelService = readModelServiceBuilder(readModelRepository); - -const testBrowserInstance = await launchBrowser({ pipe: true }); +afterAll(closeTestBrowserInstance); vi.spyOn(puppeteer, "launch").mockImplementation( async () => testBrowserInstance ); -afterAll(async () => await testBrowserInstance.close()); +export const agreements = readModelRepository.agreements; +export const eservices = readModelRepository.eservices; +export const tenants = readModelRepository.tenants; +export const attributes = readModelRepository.attributes; + +export const readModelService = readModelServiceBuilder(readModelRepository); +export const selfcareV2ClientMock: SelfcareV2Client = {} as SelfcareV2Client; export const pdfGenerator = await initPDFGenerator(); -export const selfcareV2ClientMock: SelfcareV2Client = {} as SelfcareV2Client; export const agreementService = agreementServiceBuilder( postgresDB, readModelService, diff --git a/packages/purpose-process/test/utils.ts b/packages/purpose-process/test/utils.ts index 0b8a72f678..15c34ad2ed 100644 --- a/packages/purpose-process/test/utils.ts +++ b/packages/purpose-process/test/utils.ts @@ -26,7 +26,7 @@ import { PurposeId, } from "pagopa-interop-models"; import { afterAll, afterEach, inject, vi } from "vitest"; -import puppeteer from "puppeteer"; +import puppeteer, { Browser } from "puppeteer"; import { ApiPurposeUpdateContent, ApiReversePurposeUpdateContent, @@ -53,14 +53,15 @@ export const purposes = readModelRepository.purposes; export const readModelService = readModelServiceBuilder(readModelRepository); -const testBrowserInstance = await launchBrowser({ pipe: true }); +const testBrowserInstance: Browser = await launchBrowser({ pipe: true }); +const closeTestBrowserInstance = async (): Promise => + await testBrowserInstance.close(); + +afterAll(closeTestBrowserInstance); vi.spyOn(puppeteer, "launch").mockImplementation( async () => testBrowserInstance ); - -afterAll(async () => await testBrowserInstance.close()); - const pdfGenerator = await initPDFGenerator(); export const purposeService = purposeServiceBuilder( From 2dee45ca819bfbab7f062a712a17471095172950 Mon Sep 17 00:00:00 2001 From: Eric Camellini Date: Thu, 13 Jun 2024 11:38:11 +0200 Subject: [PATCH 5/9] Reducing concurrencty to avoid linter fail --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 2d9f727eda..51433af216 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ "test": "turbo test", "build": "turbo build", "check": "turbo check", - "lint": "turbo lint --concurrency=4", + "lint": "turbo lint --concurrency=2", "lint:autofix": "turbo lint:autofix", "format:check": "turbo format:check", "format:write": "turbo format:write", From 35a4c75dbff77bb9013c7359373980656d183cfc Mon Sep 17 00:00:00 2001 From: Eric Camellini Date: Thu, 13 Jun 2024 11:46:56 +0200 Subject: [PATCH 6/9] Fixing again --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 51433af216..39982de2ea 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ "test": "turbo test", "build": "turbo build", "check": "turbo check", - "lint": "turbo lint --concurrency=2", + "lint": "NODE_OPTIONS='--max-old-space-size=4096' turbo lint --concurrency=2", "lint:autofix": "turbo lint:autofix", "format:check": "turbo format:check", "format:write": "turbo format:write", From 36d5ecaa3054f143cd6e5b2676a2a311db1ddf9d Mon Sep 17 00:00:00 2001 From: Eric Camellini Date: Thu, 13 Jun 2024 12:10:11 +0200 Subject: [PATCH 7/9] Reverting changes --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 39982de2ea..2d9f727eda 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ "test": "turbo test", "build": "turbo build", "check": "turbo check", - "lint": "NODE_OPTIONS='--max-old-space-size=4096' turbo lint --concurrency=2", + "lint": "turbo lint --concurrency=4", "lint:autofix": "turbo lint:autofix", "format:check": "turbo format:check", "format:write": "turbo format:write", From fde2004a1227cd03a66522e5eec4e7e0ce7a1c34 Mon Sep 17 00:00:00 2001 From: Eric Camellini Date: Thu, 13 Jun 2024 14:29:04 +0200 Subject: [PATCH 8/9] Fixing linter --- packages/agreement-process/test/utils.ts | 5 ++- .../commons/src/pdf-generator/pdfGenerator.ts | 44 +++++++++++-------- packages/purpose-process/test/utils.ts | 5 ++- 3 files changed, 34 insertions(+), 20 deletions(-) diff --git a/packages/agreement-process/test/utils.ts b/packages/agreement-process/test/utils.ts index 8eb29f5b00..4240ba75b8 100644 --- a/packages/agreement-process/test/utils.ts +++ b/packages/agreement-process/test/utils.ts @@ -30,6 +30,7 @@ import { genericLogger, initPDFGenerator, launchBrowser, + puppeteerLaunchOptions, } from "pagopa-interop-commons"; import { SelfcareV2Client } from "pagopa-interop-selfcare-v2-client"; import puppeteer, { Browser } from "puppeteer"; @@ -47,7 +48,9 @@ export const { cleanup, readModelRepository, postgresDB, fileManager } = afterEach(cleanup); -const testBrowserInstance: Browser = await launchBrowser({ pipe: true }); +const testBrowserInstance: Browser = await puppeteer.launch( + puppeteerLaunchOptions({ pipe: true }) +); const closeTestBrowserInstance = async (): Promise => await testBrowserInstance.close(); diff --git a/packages/commons/src/pdf-generator/pdfGenerator.ts b/packages/commons/src/pdf-generator/pdfGenerator.ts index a6a81dacd3..33744f02ac 100644 --- a/packages/commons/src/pdf-generator/pdfGenerator.ts +++ b/packages/commons/src/pdf-generator/pdfGenerator.ts @@ -12,25 +12,33 @@ export interface PDFGenerator { ) => Promise; } -export const launchBrowser = ( - launchoptions: puppeteer.LaunchOptions = {} -): Promise => - puppeteer.launch({ - ...launchoptions, +/* Exporting a function for the launch options of puppeteer instead +of the launchBrowser function itself. This avoids exporting the puppeteer +module types, that cause ESLint to reach max heap size and crash. - /* NOTE - those configurations allow link (file://) usages for - resources files in template's folder - */ - args: [ - "--no-sandbox", - "--disable-setuid-sandbox", - "--disable-gpu", - "--disable-dev-shm-usage", - "--allow-file-access-from-files", - "--enable-local-file-accesses", - ], - }); +These reaused to launch puppeteer for testing +with the same params used in production, but allowing to set +pipe option to true. Pipe true allows test suites to run +without spawning a new browser instance for each test. +*/ +export const puppeteerLaunchOptions = ( + options: { pipe: boolean } = { pipe: false } +): object => ({ + ...options, + /* the following args allow file:// usages for + resources files in template's folder */ + args: [ + "--no-sandbox", + "--disable-setuid-sandbox", + "--disable-gpu", + "--disable-dev-shm-usage", + "--allow-file-access-from-files", + "--enable-local-file-accesses", + ], +}); + +const launchBrowser = (): Promise => + puppeteer.launch(puppeteerLaunchOptions()); export async function initPDFGenerator(): Promise { const templateService = buildHTMLTemplateService(); diff --git a/packages/purpose-process/test/utils.ts b/packages/purpose-process/test/utils.ts index 15c34ad2ed..33fe5e126a 100644 --- a/packages/purpose-process/test/utils.ts +++ b/packages/purpose-process/test/utils.ts @@ -2,6 +2,7 @@ import { initPDFGenerator, launchBrowser, + puppeteerLaunchOptions, riskAnalysisFormToRiskAnalysisFormToValidate, } from "pagopa-interop-commons"; import { @@ -53,7 +54,9 @@ export const purposes = readModelRepository.purposes; export const readModelService = readModelServiceBuilder(readModelRepository); -const testBrowserInstance: Browser = await launchBrowser({ pipe: true }); +const testBrowserInstance: Browser = await puppeteer.launch( + puppeteerLaunchOptions({ pipe: true }) +); const closeTestBrowserInstance = async (): Promise => await testBrowserInstance.close(); From 83ee4a98b09d372d7788fe694523a284c819801f Mon Sep 17 00:00:00 2001 From: Eric Camellini Date: Thu, 13 Jun 2024 14:33:51 +0200 Subject: [PATCH 9/9] Fixing test compile --- packages/agreement-process/test/utils.ts | 1 - packages/purpose-process/test/utils.ts | 1 - 2 files changed, 2 deletions(-) diff --git a/packages/agreement-process/test/utils.ts b/packages/agreement-process/test/utils.ts index 4240ba75b8..c92813257d 100644 --- a/packages/agreement-process/test/utils.ts +++ b/packages/agreement-process/test/utils.ts @@ -29,7 +29,6 @@ import { import { genericLogger, initPDFGenerator, - launchBrowser, puppeteerLaunchOptions, } from "pagopa-interop-commons"; import { SelfcareV2Client } from "pagopa-interop-selfcare-v2-client"; diff --git a/packages/purpose-process/test/utils.ts b/packages/purpose-process/test/utils.ts index 33fe5e126a..d63a73c5a2 100644 --- a/packages/purpose-process/test/utils.ts +++ b/packages/purpose-process/test/utils.ts @@ -1,7 +1,6 @@ /* eslint-disable @typescript-eslint/no-non-null-assertion */ import { initPDFGenerator, - launchBrowser, puppeteerLaunchOptions, riskAnalysisFormToRiskAnalysisFormToValidate, } from "pagopa-interop-commons";