@azure/microsoft-playwright-testing 1.0.0-alpha.20250318.1 → 1.0.0-alpha.20250319.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{common → browser/common}/constants.d.ts +1 -1
- package/dist/browser/common/constants.d.ts.map +1 -0
- package/dist/browser/common/constants.js +226 -0
- package/dist/browser/common/constants.js.map +1 -0
- package/dist/browser/common/customerConfig.d.ts.map +1 -0
- package/dist/browser/common/customerConfig.js +13 -0
- package/dist/{common → browser/common}/customerConfig.js.map +1 -1
- package/dist/{common → browser/common}/entraIdAccessToken.d.ts +2 -2
- package/dist/browser/common/entraIdAccessToken.d.ts.map +1 -0
- package/dist/browser/common/entraIdAccessToken.js +71 -0
- package/dist/browser/common/entraIdAccessToken.js.map +1 -0
- package/dist/browser/common/environmentVariables.d.ts.map +1 -0
- package/dist/browser/common/environmentVariables.js +15 -0
- package/dist/browser/common/environmentVariables.js.map +1 -0
- package/dist/browser/common/executor.d.ts.map +1 -0
- package/dist/browser/common/executor.js +74 -0
- package/dist/browser/common/executor.js.map +1 -0
- package/dist/browser/common/httpService.d.ts.map +1 -0
- package/dist/browser/common/httpService.js +33 -0
- package/dist/browser/common/httpService.js.map +1 -0
- package/dist/browser/common/logger.d.ts.map +1 -0
- package/dist/browser/common/logger.js +6 -0
- package/dist/browser/common/logger.js.map +1 -0
- package/dist/browser/common/messages.d.ts.map +1 -0
- package/dist/browser/common/messages.js +37 -0
- package/dist/browser/common/messages.js.map +1 -0
- package/dist/browser/common/multimap.d.ts.map +1 -0
- package/dist/browser/common/multimap.js +60 -0
- package/dist/browser/common/multimap.js.map +1 -0
- package/dist/{common → browser/common}/playwrightServiceConfig.d.ts +1 -1
- package/dist/browser/common/playwrightServiceConfig.d.ts.map +1 -0
- package/dist/browser/common/playwrightServiceConfig.js +45 -0
- package/dist/browser/common/playwrightServiceConfig.js.map +1 -0
- package/dist/{common → browser/common}/types.d.ts +1 -1
- package/dist/browser/common/types.d.ts.map +1 -0
- package/dist/browser/common/types.js +4 -0
- package/dist/browser/common/types.js.map +1 -0
- package/dist/browser/core/global/playwright-service-global-setup.d.ts.map +1 -0
- package/dist/browser/core/global/playwright-service-global-setup.js +19 -0
- package/dist/browser/core/global/playwright-service-global-setup.js.map +1 -0
- package/dist/browser/core/global/playwright-service-global-teardown.d.ts.map +1 -0
- package/dist/browser/core/global/playwright-service-global-teardown.js +19 -0
- package/dist/browser/core/global/playwright-service-global-teardown.js.map +1 -0
- package/dist/{core → browser/core}/playwrightService.d.ts +1 -1
- package/dist/browser/core/playwrightService.d.ts.map +1 -0
- package/dist/browser/core/playwrightService.js +190 -0
- package/dist/browser/core/playwrightService.js.map +1 -0
- package/dist/browser/core/playwrightServiceEntra.d.ts.map +1 -0
- package/dist/browser/core/playwrightServiceEntra.js +49 -0
- package/dist/browser/core/playwrightServiceEntra.js.map +1 -0
- package/dist/browser/core/playwrightServiceUtils.d.ts +3 -0
- package/dist/browser/core/playwrightServiceUtils.d.ts.map +1 -0
- package/dist/browser/core/playwrightServiceUtils.js +11 -0
- package/dist/browser/core/playwrightServiceUtils.js.map +1 -0
- package/dist/{index.d.ts → browser/index.d.ts} +3 -3
- package/dist/browser/index.d.ts.map +1 -0
- package/dist/browser/index.js +11 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/browser/model/entraTokenDetails.d.ts.map +1 -0
- package/dist/browser/model/entraTokenDetails.js +5 -0
- package/dist/browser/model/entraTokenDetails.js.map +1 -0
- package/dist/browser/model/mptTokenDetails.d.ts.map +1 -0
- package/dist/browser/model/mptTokenDetails.js +10 -0
- package/dist/browser/model/mptTokenDetails.js.map +1 -0
- package/dist/browser/model/shard.d.ts.map +1 -0
- package/dist/browser/model/shard.js +19 -0
- package/dist/browser/model/shard.js.map +1 -0
- package/dist/browser/model/storageUri.d.ts.map +1 -0
- package/dist/browser/model/storageUri.js +18 -0
- package/dist/browser/model/storageUri.js.map +1 -0
- package/dist/{model → browser/model}/testResult.d.ts +1 -1
- package/dist/browser/model/testResult.d.ts.map +1 -0
- package/dist/browser/model/testResult.js +5 -0
- package/dist/browser/model/testResult.js.map +1 -0
- package/dist/{model → browser/model}/testRun.d.ts +1 -1
- package/dist/browser/model/testRun.d.ts.map +1 -0
- package/dist/browser/model/testRun.js +8 -0
- package/dist/browser/model/testRun.js.map +1 -0
- package/dist/browser/package.json +3 -0
- package/dist/{reporter → browser/reporter}/index.d.ts +1 -1
- package/dist/browser/reporter/index.d.ts.map +1 -0
- package/dist/browser/reporter/index.js +12 -0
- package/dist/browser/reporter/index.js.map +1 -0
- package/dist/{reporter → browser/reporter}/mptReporter.d.ts +1 -1
- package/dist/browser/reporter/mptReporter.d.ts.map +1 -0
- package/dist/browser/reporter/mptReporter.js +373 -0
- package/dist/browser/reporter/mptReporter.js.map +1 -0
- package/dist/browser/utils/cIInfoProvider.d.ts.map +1 -0
- package/dist/browser/utils/cIInfoProvider.js +101 -0
- package/dist/browser/utils/cIInfoProvider.js.map +1 -0
- package/dist/browser/utils/getPlaywrightVersion.d.ts +2 -0
- package/dist/browser/utils/getPlaywrightVersion.d.ts.map +1 -0
- package/dist/browser/utils/getPlaywrightVersion.js +19 -0
- package/dist/browser/utils/getPlaywrightVersion.js.map +1 -0
- package/dist/{utils → browser/utils}/packageManager.d.ts +1 -1
- package/dist/browser/utils/packageManager.d.ts.map +1 -0
- package/dist/browser/utils/packageManager.js +47 -0
- package/dist/browser/utils/packageManager.js.map +1 -0
- package/dist/browser/utils/parseJwt.d.ts +4 -0
- package/dist/browser/utils/parseJwt.d.ts.map +1 -0
- package/dist/browser/utils/parseJwt.js +16 -0
- package/dist/browser/utils/parseJwt.js.map +1 -0
- package/dist/{utils → browser/utils}/reporterUtils.d.ts +10 -10
- package/dist/browser/utils/reporterUtils.d.ts.map +1 -0
- package/dist/browser/utils/reporterUtils.js +585 -0
- package/dist/browser/utils/reporterUtils.js.map +1 -0
- package/dist/{utils → browser/utils}/serviceClient.d.ts +7 -7
- package/dist/browser/utils/serviceClient.d.ts.map +1 -0
- package/dist/browser/utils/serviceClient.js +103 -0
- package/dist/browser/utils/serviceClient.js.map +1 -0
- package/dist/browser/utils/storageClient.d.ts.map +1 -0
- package/dist/browser/utils/storageClient.js +37 -0
- package/dist/browser/utils/storageClient.js.map +1 -0
- package/dist/{utils → browser/utils}/utils.d.ts +3 -4
- package/dist/browser/utils/utils.d.ts.map +1 -0
- package/dist/browser/utils/utils.js +151 -0
- package/dist/browser/utils/utils.js.map +1 -0
- package/dist/commonjs/common/constants.d.ts +95 -0
- package/dist/commonjs/common/constants.d.ts.map +1 -0
- package/dist/commonjs/common/constants.js.map +1 -0
- package/dist/commonjs/common/customerConfig.d.ts +9 -0
- package/dist/commonjs/common/customerConfig.d.ts.map +1 -0
- package/dist/commonjs/common/customerConfig.js.map +1 -0
- package/dist/commonjs/common/entraIdAccessToken.d.ts +12 -0
- package/dist/commonjs/common/entraIdAccessToken.d.ts.map +1 -0
- package/dist/{common → commonjs/common}/entraIdAccessToken.js +22 -18
- package/dist/commonjs/common/entraIdAccessToken.js.map +1 -0
- package/dist/commonjs/common/environmentVariables.d.ts +13 -0
- package/dist/commonjs/common/environmentVariables.d.ts.map +1 -0
- package/dist/{common → commonjs/common}/environmentVariables.js +4 -4
- package/dist/commonjs/common/environmentVariables.js.map +1 -0
- package/dist/commonjs/common/executor.d.ts +2 -0
- package/dist/commonjs/common/executor.d.ts.map +1 -0
- package/dist/{common → commonjs/common}/executor.js +13 -13
- package/dist/commonjs/common/executor.js.map +1 -0
- package/dist/commonjs/common/httpService.d.ts +5 -0
- package/dist/commonjs/common/httpService.d.ts.map +1 -0
- package/dist/{common → commonjs/common}/httpService.js +4 -4
- package/dist/commonjs/common/httpService.js.map +1 -0
- package/dist/commonjs/common/logger.d.ts +3 -0
- package/dist/commonjs/common/logger.d.ts.map +1 -0
- package/dist/commonjs/common/logger.js.map +1 -0
- package/dist/commonjs/common/messages.d.ts +35 -0
- package/dist/commonjs/common/messages.d.ts.map +1 -0
- package/dist/commonjs/common/messages.js.map +1 -0
- package/dist/commonjs/common/multimap.d.ts +16 -0
- package/dist/commonjs/common/multimap.d.ts.map +1 -0
- package/dist/commonjs/common/multimap.js.map +1 -0
- package/dist/commonjs/common/playwrightServiceConfig.d.ts +13 -0
- package/dist/commonjs/common/playwrightServiceConfig.d.ts.map +1 -0
- package/dist/commonjs/common/playwrightServiceConfig.js +48 -0
- package/dist/commonjs/common/playwrightServiceConfig.js.map +1 -0
- package/{types/microsoft-playwright-testing.d.ts → dist/commonjs/common/types.d.ts} +226 -273
- package/dist/commonjs/common/types.d.ts.map +1 -0
- package/dist/commonjs/common/types.js.map +1 -0
- package/dist/commonjs/core/global/playwright-service-global-setup.d.ts +4 -0
- package/dist/commonjs/core/global/playwright-service-global-setup.d.ts.map +1 -0
- package/dist/commonjs/core/global/playwright-service-global-setup.js +22 -0
- package/dist/commonjs/core/global/playwright-service-global-setup.js.map +1 -0
- package/dist/commonjs/core/global/playwright-service-global-teardown.d.ts +4 -0
- package/dist/commonjs/core/global/playwright-service-global-teardown.d.ts.map +1 -0
- package/dist/commonjs/core/global/playwright-service-global-teardown.js +22 -0
- package/dist/commonjs/core/global/playwright-service-global-teardown.js.map +1 -0
- package/dist/commonjs/core/playwrightService.d.ts +64 -0
- package/dist/commonjs/core/playwrightService.d.ts.map +1 -0
- package/dist/{core → commonjs/core}/playwrightService.js +44 -43
- package/dist/commonjs/core/playwrightService.js.map +1 -0
- package/dist/commonjs/core/playwrightServiceEntra.d.ts +16 -0
- package/dist/commonjs/core/playwrightServiceEntra.d.ts.map +1 -0
- package/dist/{core → commonjs/core}/playwrightServiceEntra.js +12 -12
- package/dist/commonjs/core/playwrightServiceEntra.js.map +1 -0
- package/dist/commonjs/core/playwrightServiceUtils-cjs.cjs.map +1 -0
- package/dist/commonjs/core/playwrightServiceUtils-cjs.d.cts.map +1 -0
- package/dist/commonjs/core/playwrightServiceUtils.d.ts +3 -0
- package/dist/commonjs/core/playwrightServiceUtils.js +10 -0
- package/dist/commonjs/index.d.ts +10 -0
- package/dist/commonjs/index.d.ts.map +1 -0
- package/dist/{index.js → commonjs/index.js} +9 -10
- package/dist/commonjs/index.js.map +1 -0
- package/dist/commonjs/model/entraTokenDetails.d.ts +5 -0
- package/dist/commonjs/model/entraTokenDetails.d.ts.map +1 -0
- package/dist/commonjs/model/entraTokenDetails.js.map +1 -0
- package/dist/commonjs/model/mptTokenDetails.d.ts +11 -0
- package/dist/commonjs/model/mptTokenDetails.d.ts.map +1 -0
- package/dist/commonjs/model/mptTokenDetails.js.map +1 -0
- package/dist/commonjs/model/shard.d.ts +41 -0
- package/dist/commonjs/model/shard.d.ts.map +1 -0
- package/dist/commonjs/model/shard.js.map +1 -0
- package/dist/commonjs/model/storageUri.d.ts +14 -0
- package/dist/commonjs/model/storageUri.d.ts.map +1 -0
- package/dist/commonjs/model/storageUri.js.map +1 -0
- package/dist/commonjs/model/testResult.d.ts +40 -0
- package/dist/commonjs/model/testResult.d.ts.map +1 -0
- package/dist/commonjs/model/testResult.js.map +1 -0
- package/dist/commonjs/model/testRun.d.ts +36 -0
- package/dist/commonjs/model/testRun.d.ts.map +1 -0
- package/dist/commonjs/model/testRun.js.map +1 -0
- package/dist/commonjs/package.json +3 -0
- package/dist/commonjs/reporter/index.d.ts +10 -0
- package/dist/commonjs/reporter/index.d.ts.map +1 -0
- package/dist/{reporter → commonjs/reporter}/index.js +2 -2
- package/dist/commonjs/reporter/index.js.map +1 -0
- package/{types/reporter/microsoft-playwright-testing.d.ts → dist/commonjs/reporter/mptReporter.d.ts} +100 -150
- package/dist/commonjs/reporter/mptReporter.d.ts.map +1 -0
- package/dist/{reporter → commonjs/reporter}/mptReporter.js +52 -52
- package/dist/commonjs/reporter/mptReporter.js.map +1 -0
- package/dist/commonjs/utils/cIInfoProvider.d.ts +25 -0
- package/dist/commonjs/utils/cIInfoProvider.d.ts.map +1 -0
- package/dist/commonjs/utils/cIInfoProvider.js.map +1 -0
- package/dist/commonjs/utils/getPlaywrightVersion.d.ts +2 -0
- package/dist/commonjs/utils/getPlaywrightVersion.d.ts.map +1 -0
- package/dist/commonjs/utils/getPlaywrightVersion.js +23 -0
- package/dist/commonjs/utils/getPlaywrightVersion.js.map +1 -0
- package/dist/commonjs/utils/packageManager.d.ts +15 -0
- package/dist/commonjs/utils/packageManager.d.ts.map +1 -0
- package/dist/commonjs/utils/packageManager.js.map +1 -0
- package/dist/commonjs/utils/parseJwt.d.ts +4 -0
- package/dist/commonjs/utils/parseJwt.d.ts.map +1 -0
- package/dist/commonjs/utils/parseJwt.js +21 -0
- package/dist/commonjs/utils/parseJwt.js.map +1 -0
- package/dist/commonjs/utils/reporterUtils.d.ts +60 -0
- package/dist/commonjs/utils/reporterUtils.d.ts.map +1 -0
- package/dist/{utils → commonjs/utils}/reporterUtils.js +47 -47
- package/dist/commonjs/utils/reporterUtils.js.map +1 -0
- package/dist/commonjs/utils/serviceClient.d.ts +25 -0
- package/dist/commonjs/utils/serviceClient.d.ts.map +1 -0
- package/dist/{utils → commonjs/utils}/serviceClient.js +19 -19
- package/dist/commonjs/utils/serviceClient.js.map +1 -0
- package/dist/commonjs/utils/storageClient.d.ts +6 -0
- package/dist/commonjs/utils/storageClient.d.ts.map +1 -0
- package/dist/{utils → commonjs/utils}/storageClient.js +7 -7
- package/dist/commonjs/utils/storageClient.js.map +1 -0
- package/dist/commonjs/utils/utils.d.ts +28 -0
- package/dist/commonjs/utils/utils.d.ts.map +1 -0
- package/dist/{utils → commonjs/utils}/utils.js +38 -60
- package/dist/commonjs/utils/utils.js.map +1 -0
- package/dist/esm/common/constants.d.ts +95 -0
- package/dist/esm/common/constants.d.ts.map +1 -0
- package/dist/esm/common/constants.js +226 -0
- package/dist/esm/common/constants.js.map +1 -0
- package/dist/esm/common/customerConfig.d.ts +9 -0
- package/dist/esm/common/customerConfig.d.ts.map +1 -0
- package/dist/esm/common/customerConfig.js +13 -0
- package/dist/esm/common/customerConfig.js.map +1 -0
- package/dist/esm/common/entraIdAccessToken.d.ts +12 -0
- package/dist/esm/common/entraIdAccessToken.d.ts.map +1 -0
- package/dist/esm/common/entraIdAccessToken.js +71 -0
- package/dist/esm/common/entraIdAccessToken.js.map +1 -0
- package/dist/esm/common/environmentVariables.d.ts +13 -0
- package/dist/esm/common/environmentVariables.d.ts.map +1 -0
- package/dist/esm/common/environmentVariables.js +15 -0
- package/dist/esm/common/environmentVariables.js.map +1 -0
- package/dist/esm/common/executor.d.ts +2 -0
- package/dist/esm/common/executor.d.ts.map +1 -0
- package/dist/esm/common/executor.js +74 -0
- package/dist/esm/common/executor.js.map +1 -0
- package/dist/esm/common/httpService.d.ts +5 -0
- package/dist/esm/common/httpService.d.ts.map +1 -0
- package/dist/esm/common/httpService.js +33 -0
- package/dist/esm/common/httpService.js.map +1 -0
- package/dist/esm/common/logger.d.ts +3 -0
- package/dist/esm/common/logger.d.ts.map +1 -0
- package/dist/esm/common/logger.js +6 -0
- package/dist/esm/common/logger.js.map +1 -0
- package/dist/esm/common/messages.d.ts +35 -0
- package/dist/esm/common/messages.d.ts.map +1 -0
- package/dist/esm/common/messages.js +37 -0
- package/dist/esm/common/messages.js.map +1 -0
- package/dist/esm/common/multimap.d.ts +16 -0
- package/dist/esm/common/multimap.d.ts.map +1 -0
- package/dist/esm/common/multimap.js +60 -0
- package/dist/esm/common/multimap.js.map +1 -0
- package/dist/esm/common/playwrightServiceConfig.d.ts +13 -0
- package/dist/esm/common/playwrightServiceConfig.d.ts.map +1 -0
- package/dist/esm/common/playwrightServiceConfig.js +45 -0
- package/dist/esm/common/playwrightServiceConfig.js.map +1 -0
- package/dist/esm/common/types.d.ts +226 -0
- package/dist/esm/common/types.d.ts.map +1 -0
- package/dist/esm/common/types.js +4 -0
- package/dist/esm/common/types.js.map +1 -0
- package/dist/esm/core/global/playwright-service-global-setup.d.ts +4 -0
- package/dist/esm/core/global/playwright-service-global-setup.d.ts.map +1 -0
- package/dist/esm/core/global/playwright-service-global-setup.js +19 -0
- package/dist/esm/core/global/playwright-service-global-setup.js.map +1 -0
- package/dist/esm/core/global/playwright-service-global-teardown.d.ts +4 -0
- package/dist/esm/core/global/playwright-service-global-teardown.d.ts.map +1 -0
- package/dist/esm/core/global/playwright-service-global-teardown.js +19 -0
- package/dist/esm/core/global/playwright-service-global-teardown.js.map +1 -0
- package/dist/esm/core/playwrightService.d.ts +64 -0
- package/dist/esm/core/playwrightService.d.ts.map +1 -0
- package/dist/esm/core/playwrightService.js +190 -0
- package/dist/esm/core/playwrightService.js.map +1 -0
- package/dist/esm/core/playwrightServiceEntra.d.ts +16 -0
- package/dist/esm/core/playwrightServiceEntra.d.ts.map +1 -0
- package/dist/esm/core/playwrightServiceEntra.js +49 -0
- package/dist/esm/core/playwrightServiceEntra.js.map +1 -0
- package/dist/esm/core/playwrightServiceUtils.d.ts +3 -0
- package/dist/esm/core/playwrightServiceUtils.d.ts.map +1 -0
- package/dist/esm/core/playwrightServiceUtils.js +11 -0
- package/dist/esm/core/playwrightServiceUtils.js.map +1 -0
- package/dist/esm/index.d.ts +10 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +11 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/model/entraTokenDetails.d.ts +5 -0
- package/dist/esm/model/entraTokenDetails.d.ts.map +1 -0
- package/dist/esm/model/entraTokenDetails.js +5 -0
- package/dist/esm/model/entraTokenDetails.js.map +1 -0
- package/dist/esm/model/mptTokenDetails.d.ts +11 -0
- package/dist/esm/model/mptTokenDetails.d.ts.map +1 -0
- package/dist/esm/model/mptTokenDetails.js +10 -0
- package/dist/esm/model/mptTokenDetails.js.map +1 -0
- package/dist/esm/model/shard.d.ts +41 -0
- package/dist/esm/model/shard.d.ts.map +1 -0
- package/dist/esm/model/shard.js +19 -0
- package/dist/esm/model/shard.js.map +1 -0
- package/dist/esm/model/storageUri.d.ts +14 -0
- package/dist/esm/model/storageUri.d.ts.map +1 -0
- package/dist/esm/model/storageUri.js +18 -0
- package/dist/esm/model/storageUri.js.map +1 -0
- package/dist/esm/model/testResult.d.ts +40 -0
- package/dist/esm/model/testResult.d.ts.map +1 -0
- package/dist/esm/model/testResult.js +5 -0
- package/dist/esm/model/testResult.js.map +1 -0
- package/dist/esm/model/testRun.d.ts +36 -0
- package/dist/esm/model/testRun.d.ts.map +1 -0
- package/dist/esm/model/testRun.js +8 -0
- package/dist/esm/model/testRun.js.map +1 -0
- package/dist/esm/package.json +3 -0
- package/dist/esm/reporter/index.d.ts +10 -0
- package/dist/esm/reporter/index.d.ts.map +1 -0
- package/dist/esm/reporter/index.js +12 -0
- package/dist/esm/reporter/index.js.map +1 -0
- package/dist/esm/reporter/mptReporter.d.ts +100 -0
- package/dist/esm/reporter/mptReporter.d.ts.map +1 -0
- package/dist/esm/reporter/mptReporter.js +373 -0
- package/dist/esm/reporter/mptReporter.js.map +1 -0
- package/dist/esm/utils/cIInfoProvider.d.ts +25 -0
- package/dist/esm/utils/cIInfoProvider.d.ts.map +1 -0
- package/dist/esm/utils/cIInfoProvider.js +101 -0
- package/dist/esm/utils/cIInfoProvider.js.map +1 -0
- package/dist/esm/utils/getPlaywrightVersion.d.ts +2 -0
- package/dist/esm/utils/getPlaywrightVersion.d.ts.map +1 -0
- package/dist/esm/utils/getPlaywrightVersion.js +19 -0
- package/dist/esm/utils/getPlaywrightVersion.js.map +1 -0
- package/dist/esm/utils/packageManager.d.ts +15 -0
- package/dist/esm/utils/packageManager.d.ts.map +1 -0
- package/dist/esm/utils/packageManager.js +47 -0
- package/dist/esm/utils/packageManager.js.map +1 -0
- package/dist/esm/utils/parseJwt.d.ts +4 -0
- package/dist/esm/utils/parseJwt.d.ts.map +1 -0
- package/dist/esm/utils/parseJwt.js +16 -0
- package/dist/esm/utils/parseJwt.js.map +1 -0
- package/dist/esm/utils/reporterUtils.d.ts +60 -0
- package/dist/esm/utils/reporterUtils.d.ts.map +1 -0
- package/dist/esm/utils/reporterUtils.js +585 -0
- package/dist/esm/utils/reporterUtils.js.map +1 -0
- package/dist/esm/utils/serviceClient.d.ts +25 -0
- package/dist/esm/utils/serviceClient.d.ts.map +1 -0
- package/dist/esm/utils/serviceClient.js +103 -0
- package/dist/esm/utils/serviceClient.js.map +1 -0
- package/dist/esm/utils/storageClient.d.ts +6 -0
- package/dist/esm/utils/storageClient.d.ts.map +1 -0
- package/dist/esm/utils/storageClient.js +37 -0
- package/dist/esm/utils/storageClient.js.map +1 -0
- package/dist/esm/utils/utils.d.ts +28 -0
- package/dist/esm/utils/utils.d.ts.map +1 -0
- package/dist/esm/utils/utils.js +151 -0
- package/dist/esm/utils/utils.js.map +1 -0
- package/dist/react-native/common/constants.d.ts +95 -0
- package/dist/react-native/common/constants.d.ts.map +1 -0
- package/dist/react-native/common/constants.js +226 -0
- package/dist/react-native/common/constants.js.map +1 -0
- package/dist/react-native/common/customerConfig.d.ts +9 -0
- package/dist/react-native/common/customerConfig.d.ts.map +1 -0
- package/dist/react-native/common/customerConfig.js +13 -0
- package/dist/react-native/common/customerConfig.js.map +1 -0
- package/dist/react-native/common/entraIdAccessToken.d.ts +12 -0
- package/dist/react-native/common/entraIdAccessToken.d.ts.map +1 -0
- package/dist/react-native/common/entraIdAccessToken.js +71 -0
- package/dist/react-native/common/entraIdAccessToken.js.map +1 -0
- package/dist/react-native/common/environmentVariables.d.ts +13 -0
- package/dist/react-native/common/environmentVariables.d.ts.map +1 -0
- package/dist/react-native/common/environmentVariables.js +15 -0
- package/dist/react-native/common/environmentVariables.js.map +1 -0
- package/dist/react-native/common/executor.d.ts +2 -0
- package/dist/react-native/common/executor.d.ts.map +1 -0
- package/dist/react-native/common/executor.js +74 -0
- package/dist/react-native/common/executor.js.map +1 -0
- package/dist/react-native/common/httpService.d.ts +5 -0
- package/dist/react-native/common/httpService.d.ts.map +1 -0
- package/dist/react-native/common/httpService.js +33 -0
- package/dist/react-native/common/httpService.js.map +1 -0
- package/dist/react-native/common/logger.d.ts +3 -0
- package/dist/react-native/common/logger.d.ts.map +1 -0
- package/dist/react-native/common/logger.js +6 -0
- package/dist/react-native/common/logger.js.map +1 -0
- package/dist/react-native/common/messages.d.ts +35 -0
- package/dist/react-native/common/messages.d.ts.map +1 -0
- package/dist/react-native/common/messages.js +37 -0
- package/dist/react-native/common/messages.js.map +1 -0
- package/dist/react-native/common/multimap.d.ts +16 -0
- package/dist/react-native/common/multimap.d.ts.map +1 -0
- package/dist/react-native/common/multimap.js +60 -0
- package/dist/react-native/common/multimap.js.map +1 -0
- package/dist/react-native/common/playwrightServiceConfig.d.ts +13 -0
- package/dist/react-native/common/playwrightServiceConfig.d.ts.map +1 -0
- package/dist/react-native/common/playwrightServiceConfig.js +45 -0
- package/dist/react-native/common/playwrightServiceConfig.js.map +1 -0
- package/dist/react-native/common/types.d.ts +226 -0
- package/dist/react-native/common/types.d.ts.map +1 -0
- package/dist/react-native/common/types.js +4 -0
- package/dist/react-native/common/types.js.map +1 -0
- package/dist/react-native/core/global/playwright-service-global-setup.d.ts +4 -0
- package/dist/react-native/core/global/playwright-service-global-setup.d.ts.map +1 -0
- package/dist/react-native/core/global/playwright-service-global-setup.js +19 -0
- package/dist/react-native/core/global/playwright-service-global-setup.js.map +1 -0
- package/dist/react-native/core/global/playwright-service-global-teardown.d.ts +4 -0
- package/dist/react-native/core/global/playwright-service-global-teardown.d.ts.map +1 -0
- package/dist/react-native/core/global/playwright-service-global-teardown.js +19 -0
- package/dist/react-native/core/global/playwright-service-global-teardown.js.map +1 -0
- package/dist/react-native/core/playwrightService.d.ts +64 -0
- package/dist/react-native/core/playwrightService.d.ts.map +1 -0
- package/dist/react-native/core/playwrightService.js +190 -0
- package/dist/react-native/core/playwrightService.js.map +1 -0
- package/dist/react-native/core/playwrightServiceEntra.d.ts +16 -0
- package/dist/react-native/core/playwrightServiceEntra.d.ts.map +1 -0
- package/dist/react-native/core/playwrightServiceEntra.js +49 -0
- package/dist/react-native/core/playwrightServiceEntra.js.map +1 -0
- package/dist/react-native/core/playwrightServiceUtils.d.ts +3 -0
- package/dist/react-native/core/playwrightServiceUtils.d.ts.map +1 -0
- package/dist/react-native/core/playwrightServiceUtils.js +11 -0
- package/dist/react-native/core/playwrightServiceUtils.js.map +1 -0
- package/dist/react-native/index.d.ts +10 -0
- package/dist/react-native/index.d.ts.map +1 -0
- package/dist/react-native/index.js +11 -0
- package/dist/react-native/index.js.map +1 -0
- package/dist/react-native/model/entraTokenDetails.d.ts +5 -0
- package/dist/react-native/model/entraTokenDetails.d.ts.map +1 -0
- package/dist/react-native/model/entraTokenDetails.js +5 -0
- package/dist/react-native/model/entraTokenDetails.js.map +1 -0
- package/dist/react-native/model/mptTokenDetails.d.ts +11 -0
- package/dist/react-native/model/mptTokenDetails.d.ts.map +1 -0
- package/dist/react-native/model/mptTokenDetails.js +10 -0
- package/dist/react-native/model/mptTokenDetails.js.map +1 -0
- package/dist/react-native/model/shard.d.ts +41 -0
- package/dist/react-native/model/shard.d.ts.map +1 -0
- package/dist/react-native/model/shard.js +19 -0
- package/dist/react-native/model/shard.js.map +1 -0
- package/dist/react-native/model/storageUri.d.ts +14 -0
- package/dist/react-native/model/storageUri.d.ts.map +1 -0
- package/dist/react-native/model/storageUri.js +18 -0
- package/dist/react-native/model/storageUri.js.map +1 -0
- package/dist/react-native/model/testResult.d.ts +40 -0
- package/dist/react-native/model/testResult.d.ts.map +1 -0
- package/dist/react-native/model/testResult.js +5 -0
- package/dist/react-native/model/testResult.js.map +1 -0
- package/dist/react-native/model/testRun.d.ts +36 -0
- package/dist/react-native/model/testRun.d.ts.map +1 -0
- package/dist/react-native/model/testRun.js +8 -0
- package/dist/react-native/model/testRun.js.map +1 -0
- package/dist/react-native/package.json +3 -0
- package/dist/react-native/reporter/index.d.ts +10 -0
- package/dist/react-native/reporter/index.d.ts.map +1 -0
- package/dist/react-native/reporter/index.js +12 -0
- package/dist/react-native/reporter/index.js.map +1 -0
- package/dist/react-native/reporter/mptReporter.d.ts +100 -0
- package/dist/react-native/reporter/mptReporter.d.ts.map +1 -0
- package/dist/react-native/reporter/mptReporter.js +373 -0
- package/dist/react-native/reporter/mptReporter.js.map +1 -0
- package/dist/react-native/utils/cIInfoProvider.d.ts +25 -0
- package/dist/react-native/utils/cIInfoProvider.d.ts.map +1 -0
- package/dist/react-native/utils/cIInfoProvider.js +101 -0
- package/dist/react-native/utils/cIInfoProvider.js.map +1 -0
- package/dist/react-native/utils/getPlaywrightVersion.d.ts +2 -0
- package/dist/react-native/utils/getPlaywrightVersion.d.ts.map +1 -0
- package/dist/react-native/utils/getPlaywrightVersion.js +19 -0
- package/dist/react-native/utils/getPlaywrightVersion.js.map +1 -0
- package/dist/react-native/utils/packageManager.d.ts +15 -0
- package/dist/react-native/utils/packageManager.d.ts.map +1 -0
- package/dist/react-native/utils/packageManager.js +47 -0
- package/dist/react-native/utils/packageManager.js.map +1 -0
- package/dist/react-native/utils/parseJwt.d.ts +4 -0
- package/dist/react-native/utils/parseJwt.d.ts.map +1 -0
- package/dist/react-native/utils/parseJwt.js +16 -0
- package/dist/react-native/utils/parseJwt.js.map +1 -0
- package/dist/react-native/utils/reporterUtils.d.ts +60 -0
- package/dist/react-native/utils/reporterUtils.d.ts.map +1 -0
- package/dist/react-native/utils/reporterUtils.js +585 -0
- package/dist/react-native/utils/reporterUtils.js.map +1 -0
- package/dist/react-native/utils/serviceClient.d.ts +25 -0
- package/dist/react-native/utils/serviceClient.d.ts.map +1 -0
- package/dist/react-native/utils/serviceClient.js +103 -0
- package/dist/react-native/utils/serviceClient.js.map +1 -0
- package/dist/react-native/utils/storageClient.d.ts +6 -0
- package/dist/react-native/utils/storageClient.d.ts.map +1 -0
- package/dist/react-native/utils/storageClient.js +37 -0
- package/dist/react-native/utils/storageClient.js.map +1 -0
- package/dist/react-native/utils/utils.d.ts +28 -0
- package/dist/react-native/utils/utils.d.ts.map +1 -0
- package/dist/react-native/utils/utils.js +151 -0
- package/dist/react-native/utils/utils.js.map +1 -0
- package/package.json +73 -28
- package/CHANGELOG.md +0 -88
- package/dist/common/constants.d.ts.map +0 -1
- package/dist/common/constants.js.map +0 -1
- package/dist/common/customerConfig.d.ts.map +0 -1
- package/dist/common/entraIdAccessToken.d.ts.map +0 -1
- package/dist/common/entraIdAccessToken.js.map +0 -1
- package/dist/common/environmentVariables.d.ts.map +0 -1
- package/dist/common/environmentVariables.js.map +0 -1
- package/dist/common/executor.d.ts.map +0 -1
- package/dist/common/executor.js.map +0 -1
- package/dist/common/httpService.d.ts.map +0 -1
- package/dist/common/httpService.js.map +0 -1
- package/dist/common/logger.d.ts.map +0 -1
- package/dist/common/logger.js.map +0 -1
- package/dist/common/messages.d.ts.map +0 -1
- package/dist/common/messages.js.map +0 -1
- package/dist/common/multimap.d.ts.map +0 -1
- package/dist/common/multimap.js.map +0 -1
- package/dist/common/playwrightServiceConfig.d.ts.map +0 -1
- package/dist/common/playwrightServiceConfig.js +0 -48
- package/dist/common/playwrightServiceConfig.js.map +0 -1
- package/dist/common/types.d.ts.map +0 -1
- package/dist/common/types.js.map +0 -1
- package/dist/core/global/playwright-service-global-setup.d.ts.map +0 -1
- package/dist/core/global/playwright-service-global-setup.js +0 -22
- package/dist/core/global/playwright-service-global-setup.js.map +0 -1
- package/dist/core/global/playwright-service-global-teardown.d.ts.map +0 -1
- package/dist/core/global/playwright-service-global-teardown.js +0 -22
- package/dist/core/global/playwright-service-global-teardown.js.map +0 -1
- package/dist/core/playwrightService.d.ts.map +0 -1
- package/dist/core/playwrightService.js.map +0 -1
- package/dist/core/playwrightServiceEntra.d.ts.map +0 -1
- package/dist/core/playwrightServiceEntra.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/model/entraTokenDetails.d.ts.map +0 -1
- package/dist/model/entraTokenDetails.js.map +0 -1
- package/dist/model/mptTokenDetails.d.ts.map +0 -1
- package/dist/model/mptTokenDetails.js.map +0 -1
- package/dist/model/shard.d.ts.map +0 -1
- package/dist/model/shard.js.map +0 -1
- package/dist/model/storageUri.d.ts.map +0 -1
- package/dist/model/storageUri.js.map +0 -1
- package/dist/model/testResult.d.ts.map +0 -1
- package/dist/model/testResult.js.map +0 -1
- package/dist/model/testRun.d.ts.map +0 -1
- package/dist/model/testRun.js.map +0 -1
- package/dist/reporter/index.d.ts.map +0 -1
- package/dist/reporter/index.js.map +0 -1
- package/dist/reporter/mptReporter.d.ts.map +0 -1
- package/dist/reporter/mptReporter.js.map +0 -1
- package/dist/utils/cIInfoProvider.d.ts.map +0 -1
- package/dist/utils/cIInfoProvider.js.map +0 -1
- package/dist/utils/packageManager.d.ts.map +0 -1
- package/dist/utils/packageManager.js.map +0 -1
- package/dist/utils/reporterUtils.d.ts.map +0 -1
- package/dist/utils/reporterUtils.js.map +0 -1
- package/dist/utils/serviceClient.d.ts.map +0 -1
- package/dist/utils/serviceClient.js.map +0 -1
- package/dist/utils/storageClient.d.ts.map +0 -1
- package/dist/utils/storageClient.js.map +0 -1
- package/dist/utils/utils.d.ts.map +0 -1
- package/dist/utils/utils.js.map +0 -1
- /package/dist/{common → browser/common}/customerConfig.d.ts +0 -0
- /package/dist/{common → browser/common}/environmentVariables.d.ts +0 -0
- /package/dist/{common → browser/common}/executor.d.ts +0 -0
- /package/dist/{common → browser/common}/httpService.d.ts +0 -0
- /package/dist/{common → browser/common}/logger.d.ts +0 -0
- /package/dist/{common → browser/common}/messages.d.ts +0 -0
- /package/dist/{common → browser/common}/multimap.d.ts +0 -0
- /package/dist/{core → browser/core}/global/playwright-service-global-setup.d.ts +0 -0
- /package/dist/{core → browser/core}/global/playwright-service-global-teardown.d.ts +0 -0
- /package/dist/{core → browser/core}/playwrightServiceEntra.d.ts +0 -0
- /package/dist/{model → browser/model}/entraTokenDetails.d.ts +0 -0
- /package/dist/{model → browser/model}/mptTokenDetails.d.ts +0 -0
- /package/dist/{model → browser/model}/shard.d.ts +0 -0
- /package/dist/{model → browser/model}/storageUri.d.ts +0 -0
- /package/dist/{utils → browser/utils}/cIInfoProvider.d.ts +0 -0
- /package/dist/{utils → browser/utils}/storageClient.d.ts +0 -0
- /package/dist/{common → commonjs/common}/constants.js +0 -0
- /package/dist/{common → commonjs/common}/customerConfig.js +0 -0
- /package/dist/{common → commonjs/common}/logger.js +0 -0
- /package/dist/{common → commonjs/common}/messages.js +0 -0
- /package/dist/{common → commonjs/common}/multimap.js +0 -0
- /package/dist/{common → commonjs/common}/types.js +0 -0
- /package/dist/{model → commonjs/model}/entraTokenDetails.js +0 -0
- /package/dist/{model → commonjs/model}/mptTokenDetails.js +0 -0
- /package/dist/{model → commonjs/model}/shard.js +0 -0
- /package/dist/{model → commonjs/model}/storageUri.js +0 -0
- /package/dist/{model → commonjs/model}/testResult.js +0 -0
- /package/dist/{model → commonjs/model}/testRun.js +0 -0
- /package/dist/{tsdoc-metadata.json → commonjs/tsdoc-metadata.json} +0 -0
- /package/dist/{utils → commonjs/utils}/cIInfoProvider.js +0 -0
- /package/dist/{utils → commonjs/utils}/packageManager.js +0 -0
|
@@ -3,19 +3,19 @@
|
|
|
3
3
|
// Licensed under the MIT License.
|
|
4
4
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
5
|
const tslib_1 = require("tslib");
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
const
|
|
9
|
-
const
|
|
10
|
-
const
|
|
11
|
-
const
|
|
12
|
-
const
|
|
13
|
-
const
|
|
14
|
-
const
|
|
15
|
-
const
|
|
16
|
-
const
|
|
17
|
-
const
|
|
18
|
-
const
|
|
6
|
+
const node_child_process_1 = require("node:child_process");
|
|
7
|
+
const logger_js_1 = require("../common/logger.js");
|
|
8
|
+
const node_crypto_1 = require("node:crypto");
|
|
9
|
+
const node_fs_1 = tslib_1.__importDefault(require("node:fs"));
|
|
10
|
+
const node_path_1 = tslib_1.__importDefault(require("node:path"));
|
|
11
|
+
const constants_js_1 = require("../common/constants.js");
|
|
12
|
+
const mptTokenDetails_js_1 = require("../model/mptTokenDetails.js");
|
|
13
|
+
const shard_js_1 = require("../model/shard.js");
|
|
14
|
+
const testResult_js_1 = require("../model/testResult.js");
|
|
15
|
+
const testRun_js_1 = require("../model/testRun.js");
|
|
16
|
+
const cIInfoProvider_js_1 = require("./cIInfoProvider.js");
|
|
17
|
+
const cIInfoProvider_js_2 = require("./cIInfoProvider.js");
|
|
18
|
+
const utils_js_1 = require("./utils.js");
|
|
19
19
|
class ReporterUtils {
|
|
20
20
|
// eslint-disable-next-line @azure/azure-sdk/ts-use-interface-parameters
|
|
21
21
|
constructor(envVariables, config, _) {
|
|
@@ -29,7 +29,7 @@ class ReporterUtils {
|
|
|
29
29
|
this.flakyTests = 0;
|
|
30
30
|
}
|
|
31
31
|
async getTestRunObject(ciInfo) {
|
|
32
|
-
const testRun = new
|
|
32
|
+
const testRun = new testRun_js_1.TestRun();
|
|
33
33
|
const runName = this.envVariables.runName || (await this.getRunName(ciInfo));
|
|
34
34
|
testRun.testRunId = this.envVariables.runId;
|
|
35
35
|
testRun.displayName = ReporterUtils.isNullOrEmpty(runName) ? this.envVariables.runId : runName;
|
|
@@ -48,7 +48,7 @@ class ReporterUtils {
|
|
|
48
48
|
return testRun;
|
|
49
49
|
}
|
|
50
50
|
getTestRunShardStartObject() {
|
|
51
|
-
const shard = new
|
|
51
|
+
const shard = new shard_js_1.Shard();
|
|
52
52
|
if (this.config.shard !== null && this.config.shard !== undefined) {
|
|
53
53
|
this.envVariables.shardId = this.config.shard.current.toString();
|
|
54
54
|
}
|
|
@@ -69,7 +69,7 @@ class ReporterUtils {
|
|
|
69
69
|
shard.shardId = (_a = this.envVariables.shardId) !== null && _a !== void 0 ? _a : "1";
|
|
70
70
|
shard.summary.totalTime = result.duration;
|
|
71
71
|
shard.summary.endTime = ReporterUtils.timestampToRFC3339(Date.now());
|
|
72
|
-
shard.summary.status =
|
|
72
|
+
shard.summary.status = shard_js_1.TestRunStatus.CLIENT_COMPLETE;
|
|
73
73
|
shard.summary.errorMessages = errorMessages;
|
|
74
74
|
shard.summary.uploadMetadata = attachmentMetadata;
|
|
75
75
|
shard.uploadCompleted = true;
|
|
@@ -88,7 +88,7 @@ class ReporterUtils {
|
|
|
88
88
|
}
|
|
89
89
|
}
|
|
90
90
|
catch (error) {
|
|
91
|
-
|
|
91
|
+
logger_js_1.reporterLogger.error(`Error in fetching OS - ${error}`);
|
|
92
92
|
}
|
|
93
93
|
return "";
|
|
94
94
|
}
|
|
@@ -116,14 +116,14 @@ class ReporterUtils {
|
|
|
116
116
|
default:
|
|
117
117
|
break;
|
|
118
118
|
}
|
|
119
|
-
const testResult = new
|
|
119
|
+
const testResult = new testResult_js_1.TestResult();
|
|
120
120
|
testResult.runId = this.envVariables.runId;
|
|
121
121
|
testResult.shardId = this.envVariables.runId + "_" + this.envVariables.shardId;
|
|
122
122
|
testResult.accountId = this.envVariables.accountId;
|
|
123
123
|
testResult.suiteId = ReporterUtils.calculateSha1(`${test.parent.title}-${test.location.file}`);
|
|
124
124
|
testResult.testId = testResult.suiteId.concat(`-${ReporterUtils.calculateSha1(test.title)}`);
|
|
125
125
|
testResult.testCombinationId = test.id;
|
|
126
|
-
testResult.testExecutionId = (0,
|
|
126
|
+
testResult.testExecutionId = (0, node_crypto_1.randomUUID)();
|
|
127
127
|
testResult.testTitle = test.title;
|
|
128
128
|
testResult.suiteTitle = this.extractRootParentTitle(test.parent);
|
|
129
129
|
testResult.fileName = test.location.file;
|
|
@@ -138,7 +138,7 @@ class ReporterUtils {
|
|
|
138
138
|
jobName: jobName,
|
|
139
139
|
projectName: test.parent.project().name,
|
|
140
140
|
browserType: browserName ? browserName.toUpperCase() : "",
|
|
141
|
-
os: this.getOSName(result,
|
|
141
|
+
os: this.getOSName(result, constants_js_1.Constants.OS),
|
|
142
142
|
};
|
|
143
143
|
testResult.annotations = this.extractTestAnnotations(test.annotations);
|
|
144
144
|
testResult.tags = this.extractTestTags(test);
|
|
@@ -155,7 +155,7 @@ class ReporterUtils {
|
|
|
155
155
|
}
|
|
156
156
|
generateMarkdownSummary(testRunUrl) {
|
|
157
157
|
try {
|
|
158
|
-
if (
|
|
158
|
+
if (cIInfoProvider_js_2.CIInfoProvider.getCIProvider() === cIInfoProvider_js_1.CI_PROVIDERS.GITHUB) {
|
|
159
159
|
const markdownContent = `
|
|
160
160
|
#### Microsoft Playwright Testing run summary
|
|
161
161
|
|
|
@@ -171,11 +171,11 @@ class ReporterUtils {
|
|
|
171
171
|
|
|
172
172
|
#### For more details, visit the [service dashboard](${testRunUrl}).
|
|
173
173
|
`;
|
|
174
|
-
|
|
174
|
+
node_fs_1.default.writeFileSync(process.env["GITHUB_STEP_SUMMARY"], markdownContent);
|
|
175
175
|
}
|
|
176
176
|
}
|
|
177
177
|
catch (err) {
|
|
178
|
-
|
|
178
|
+
logger_js_1.reporterLogger.error(`\nCould not generate markdown summary - ${err}`);
|
|
179
179
|
}
|
|
180
180
|
}
|
|
181
181
|
getRawTestResultObject(result) {
|
|
@@ -188,15 +188,15 @@ class ReporterUtils {
|
|
|
188
188
|
return rawTestResult;
|
|
189
189
|
}
|
|
190
190
|
static getRunId(cIInfo) {
|
|
191
|
-
if (cIInfo === null || cIInfo.provider ===
|
|
192
|
-
return (0,
|
|
191
|
+
if (cIInfo === null || cIInfo.provider === cIInfoProvider_js_1.CI_PROVIDERS.DEFAULT) {
|
|
192
|
+
return (0, node_crypto_1.randomUUID)();
|
|
193
193
|
}
|
|
194
194
|
const concatString = `${cIInfo.provider}-${cIInfo.repo}-${cIInfo.runId}-${cIInfo.runAttempt}`;
|
|
195
195
|
const runId = ReporterUtils.calculateSha1(concatString);
|
|
196
196
|
return runId;
|
|
197
197
|
}
|
|
198
198
|
static calculateSha1(buffer) {
|
|
199
|
-
const hash = (0,
|
|
199
|
+
const hash = (0, node_crypto_1.createHash)("sha1");
|
|
200
200
|
hash.update(buffer);
|
|
201
201
|
return hash.digest("hex");
|
|
202
202
|
}
|
|
@@ -218,9 +218,9 @@ class ReporterUtils {
|
|
|
218
218
|
const _token = Buffer.from(token, "base64");
|
|
219
219
|
const tokenDetails = JSON.parse(_token.toString());
|
|
220
220
|
switch (tokenType) {
|
|
221
|
-
case
|
|
221
|
+
case mptTokenDetails_js_1.TokenType.MPT:
|
|
222
222
|
return tokenDetails;
|
|
223
|
-
case
|
|
223
|
+
case mptTokenDetails_js_1.TokenType.ENTRA:
|
|
224
224
|
return tokenDetails;
|
|
225
225
|
default:
|
|
226
226
|
throw new Error("Unsupported token type");
|
|
@@ -274,21 +274,21 @@ class ReporterUtils {
|
|
|
274
274
|
const currentTimestampPlus10Minutes = Date.now() + 10 * 60 * 1000;
|
|
275
275
|
const isSasValidityGreaterThanCurrentTimePlus10Minutes = timestampFromIsoString > currentTimestampPlus10Minutes;
|
|
276
276
|
if (!isSasValidityGreaterThanCurrentTimePlus10Minutes) {
|
|
277
|
-
|
|
277
|
+
logger_js_1.reporterLogger.info(`Sas rotation required because close to expiry, SasUriValidTillTime: ${timestampFromIsoString}, CurrentTime: ${currentTimestampPlus10Minutes}`);
|
|
278
278
|
}
|
|
279
279
|
return isSasValidityGreaterThanCurrentTimePlus10Minutes;
|
|
280
280
|
}
|
|
281
|
-
|
|
281
|
+
logger_js_1.reporterLogger.error(`Sas rotation required because expiry param not found.`);
|
|
282
282
|
return false;
|
|
283
283
|
}
|
|
284
284
|
catch (error) {
|
|
285
|
-
|
|
285
|
+
logger_js_1.reporterLogger.error(`Sas rotation required because of ${error}.`);
|
|
286
286
|
return false;
|
|
287
287
|
}
|
|
288
288
|
}
|
|
289
289
|
static getFileSize(attachmentPath) {
|
|
290
290
|
try {
|
|
291
|
-
const stats =
|
|
291
|
+
const stats = node_fs_1.default.statSync(attachmentPath);
|
|
292
292
|
return stats.size;
|
|
293
293
|
}
|
|
294
294
|
catch (error) {
|
|
@@ -309,7 +309,7 @@ class ReporterUtils {
|
|
|
309
309
|
return "";
|
|
310
310
|
}
|
|
311
311
|
const accessTokenRegex = new RegExp(this.envVariables.accessToken, "g");
|
|
312
|
-
return info.replace(accessTokenRegex,
|
|
312
|
+
return info.replace(accessTokenRegex, constants_js_1.Constants.DEFAULT_REDACTED_MESSAGE);
|
|
313
313
|
}
|
|
314
314
|
static getRegionFromAccountID(accountId) {
|
|
315
315
|
if (accountId.includes("_")) {
|
|
@@ -338,13 +338,13 @@ class ReporterUtils {
|
|
|
338
338
|
retries: this.config.projects[0].retries,
|
|
339
339
|
shards: this.config.shard ? this.config.shard : { total: 1 },
|
|
340
340
|
testFramework: {
|
|
341
|
-
name:
|
|
341
|
+
name: constants_js_1.Constants.TEST_FRAMEWORK_NAME,
|
|
342
342
|
version: this.config.version,
|
|
343
|
-
runnerName:
|
|
343
|
+
runnerName: constants_js_1.Constants.TEST_FRAMEWORK_RUNNERNAME,
|
|
344
344
|
},
|
|
345
|
-
testType:
|
|
346
|
-
testSdkLanguage:
|
|
347
|
-
reporterPackageVersion: (0,
|
|
345
|
+
testType: constants_js_1.Constants.TEST_TYPE,
|
|
346
|
+
testSdkLanguage: constants_js_1.Constants.TEST_SDK_LANGUAGE,
|
|
347
|
+
reporterPackageVersion: (0, utils_js_1.getPackageVersion)(),
|
|
348
348
|
};
|
|
349
349
|
return testRunConfig;
|
|
350
350
|
}
|
|
@@ -352,7 +352,7 @@ class ReporterUtils {
|
|
|
352
352
|
if (!location) {
|
|
353
353
|
return undefined;
|
|
354
354
|
}
|
|
355
|
-
const file = this.toPosixPath(
|
|
355
|
+
const file = this.toPosixPath(node_path_1.default.relative(this.config.rootDir, location.file));
|
|
356
356
|
return {
|
|
357
357
|
file,
|
|
358
358
|
line: location.line,
|
|
@@ -393,7 +393,7 @@ class ReporterUtils {
|
|
|
393
393
|
return result;
|
|
394
394
|
}
|
|
395
395
|
toPosixPath(aPath) {
|
|
396
|
-
return aPath.split(
|
|
396
|
+
return aPath.split(node_path_1.default.sep).join(node_path_1.default.posix.sep);
|
|
397
397
|
}
|
|
398
398
|
getAttachmentStatus(testResult) {
|
|
399
399
|
let attachmentStatus = "";
|
|
@@ -500,7 +500,7 @@ class ReporterUtils {
|
|
|
500
500
|
}
|
|
501
501
|
async getRunName(ciInfo) {
|
|
502
502
|
var _a;
|
|
503
|
-
if (ciInfo.provider ===
|
|
503
|
+
if (ciInfo.provider === cIInfoProvider_js_1.CI_PROVIDERS.GITHUB &&
|
|
504
504
|
process.env["GITHUB_EVENT_NAME"] === "pull_request") {
|
|
505
505
|
const prNumber = `${(_a = process.env["GITHUB_REF_NAME"]) === null || _a === void 0 ? void 0 : _a.split("/")[0]}`;
|
|
506
506
|
const prLink = `${process.env["GITHUB_REPOSITORY"]}/pull/${prNumber}`;
|
|
@@ -508,25 +508,25 @@ class ReporterUtils {
|
|
|
508
508
|
}
|
|
509
509
|
let gitCommitMessage = null;
|
|
510
510
|
try {
|
|
511
|
-
const gitVersion = await this.runCommand(
|
|
511
|
+
const gitVersion = await this.runCommand(constants_js_1.Constants.GIT_VERSION_COMMAND);
|
|
512
512
|
if (ReporterUtils.isNullOrEmpty(gitVersion)) {
|
|
513
513
|
throw new Error("Git is not installed on the machine");
|
|
514
514
|
}
|
|
515
|
-
const isInsideWorkTree = await this.runCommand(
|
|
515
|
+
const isInsideWorkTree = await this.runCommand(constants_js_1.Constants.GIT_REV_PARSE);
|
|
516
516
|
if (isInsideWorkTree !== "true") {
|
|
517
517
|
throw new Error("Not inside a git repository");
|
|
518
518
|
}
|
|
519
|
-
gitCommitMessage = await this.runCommand(
|
|
519
|
+
gitCommitMessage = await this.runCommand(constants_js_1.Constants.GIT_COMMIT_MESSAGE_COMMAND);
|
|
520
520
|
return gitCommitMessage;
|
|
521
521
|
}
|
|
522
522
|
catch (err) {
|
|
523
|
-
|
|
523
|
+
logger_js_1.reporterLogger.error(`\nError in getting git commit message: ${err}.`);
|
|
524
524
|
return "";
|
|
525
525
|
}
|
|
526
526
|
}
|
|
527
527
|
async runCommand(command) {
|
|
528
528
|
return new Promise((resolve, reject) => {
|
|
529
|
-
(0,
|
|
529
|
+
(0, node_child_process_1.exec)(command, (error, stdout, stderr) => {
|
|
530
530
|
if (error) {
|
|
531
531
|
reject(error);
|
|
532
532
|
return;
|
|
@@ -577,7 +577,7 @@ ReporterUtils.getReporterBackOffOptions = {
|
|
|
577
577
|
retry: (error) => {
|
|
578
578
|
if (error.response) {
|
|
579
579
|
const status = error.response.status;
|
|
580
|
-
if (
|
|
580
|
+
if (constants_js_1.Constants.NON_RETRYABLE_STATUS_CODES.includes(status)) {
|
|
581
581
|
return false;
|
|
582
582
|
}
|
|
583
583
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reporterUtils.js","sourceRoot":"","sources":["../../../src/utils/reporterUtils.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type {\n FullResult,\n Location,\n TestCase,\n TestResult,\n TestStep,\n FullConfig,\n Suite,\n} from \"@playwright/test/reporter\";\nimport { exec } from \"node:child_process\";\nimport { reporterLogger } from \"../common/logger.js\";\nimport { createHash, randomUUID } from \"node:crypto\";\nimport type { IBackOffOptions } from \"../common/types.js\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { Constants } from \"../common/constants.js\";\nimport type { EnvironmentVariables } from \"../common/environmentVariables.js\";\nimport type { DedupedStep, RawTestStep } from \"../common/types.js\";\nimport { TokenType } from \"../model/mptTokenDetails.js\";\nimport type { UploadMetadata } from \"../model/shard.js\";\nimport { Shard, TestRunStatus } from \"../model/shard.js\";\nimport type { RawTestResult } from \"../model/testResult.js\";\nimport { TestResult as MPTTestResult } from \"../model/testResult.js\";\nimport type { TestRunConfig } from \"../model/testRun.js\";\nimport { TestRun } from \"../model/testRun.js\";\nimport type { CIInfo } from \"./cIInfoProvider.js\";\nimport { CI_PROVIDERS } from \"./cIInfoProvider.js\";\nimport { CIInfoProvider } from \"./cIInfoProvider.js\";\nimport type { StorageUri } from \"../model/storageUri.js\";\nimport { getPackageVersion } from \"./utils.js\";\nclass ReporterUtils {\n private envVariables: EnvironmentVariables;\n\n private config: FullConfig;\n totalTests: number;\n failedTests: number;\n skippedTests: number;\n passedTests: number;\n flakyTests: number;\n startTime: number;\n\n // eslint-disable-next-line @azure/azure-sdk/ts-use-interface-parameters\n constructor(envVariables: EnvironmentVariables, config: FullConfig, _: Suite) {\n this.config = config;\n this.envVariables = envVariables;\n this.startTime = Date.now();\n\n this.totalTests = 0;\n this.failedTests = 0;\n this.skippedTests = 0;\n this.passedTests = 0;\n this.flakyTests = 0;\n }\n\n public async getTestRunObject(ciInfo: CIInfo): Promise<TestRun> {\n const testRun = new TestRun();\n const runName = this.envVariables.runName || (await this.getRunName(ciInfo));\n testRun.testRunId = this.envVariables.runId;\n testRun.displayName = ReporterUtils.isNullOrEmpty(runName) ? this.envVariables.runId : runName;\n testRun.creatorName = this.envVariables.userName;\n testRun.creatorId = this.envVariables.userId!;\n testRun.startTime = ReporterUtils.timestampToRFC3339(this.startTime);\n testRun.ciConfig = {\n ciProviderName: ciInfo.provider!,\n branch: ciInfo.branch!,\n author: ciInfo.author!,\n commitId: ciInfo.commitId!,\n revisionUrl: ciInfo.revisionUrl!,\n };\n testRun.testRunConfig = this.getTestRunConfig();\n testRun.cloudReportingEnabled = \"true\";\n return testRun;\n }\n\n public getTestRunShardStartObject(): Shard {\n const shard = new Shard();\n if (this.config.shard !== null && this.config.shard !== undefined) {\n this.envVariables.shardId = this.config.shard.current.toString();\n } else {\n this.envVariables.shardId = \"1\";\n }\n shard.shardId = this.envVariables.shardId;\n shard.summary = {\n startTime: ReporterUtils.timestampToRFC3339(this.startTime),\n };\n shard.uploadCompleted = false;\n return shard;\n }\n\n public getTestRunShardEndObject(\n result: FullResult,\n // eslint-disable-next-line @azure/azure-sdk/ts-use-interface-parameters\n shard: Shard,\n errorMessages: string[],\n attachmentMetadata: UploadMetadata,\n workers: number,\n ): Shard {\n shard.shardId = this.envVariables.shardId ?? \"1\";\n shard.summary.totalTime = result.duration;\n shard.summary.endTime = ReporterUtils.timestampToRFC3339(Date.now());\n shard.summary.status = TestRunStatus.CLIENT_COMPLETE;\n shard.summary.errorMessages = errorMessages;\n shard.summary.uploadMetadata = attachmentMetadata;\n shard.uploadCompleted = true;\n shard.workers = workers;\n return shard;\n }\n\n public getOSName(result: TestResult, data: string): string {\n try {\n for (const attachment of result.attachments) {\n if (attachment.name === data) {\n const match = attachment?.contentType?.match(/charset=(.*)/);\n const charset = match && match.length > 1 ? match[1] : \"utf-8\";\n return attachment.body?.toString((charset as any) || \"utf-8\").toUpperCase() || \"\";\n }\n }\n } catch (error) {\n reporterLogger.error(`Error in fetching OS - ${error}`);\n }\n return \"\";\n }\n\n public getTestResultObject(test: TestCase, result: TestResult, jobName: string): MPTTestResult {\n switch (test.outcome()) {\n case \"skipped\":\n this.skippedTests++;\n this.totalTests++;\n break;\n case \"expected\":\n this.passedTests++;\n this.totalTests++;\n break;\n case \"unexpected\":\n if (result.retry === test.retries) {\n this.failedTests++;\n this.totalTests++;\n }\n break;\n case \"flaky\":\n this.totalTests++;\n this.flakyTests++;\n break;\n default:\n break;\n }\n\n const testResult = new MPTTestResult();\n testResult.runId = this.envVariables.runId;\n testResult.shardId = this.envVariables.runId + \"_\" + this.envVariables.shardId;\n testResult.accountId = this.envVariables.accountId!;\n testResult.suiteId = ReporterUtils.calculateSha1(`${test.parent.title}-${test.location.file}`);\n testResult.testId = testResult.suiteId.concat(`-${ReporterUtils.calculateSha1(test.title)}`);\n testResult.testCombinationId = test.id;\n testResult.testExecutionId = randomUUID();\n testResult.testTitle = test.title;\n testResult.suiteTitle = this.extractRootParentTitle(test.parent)!;\n testResult.fileName = test.location.file;\n testResult.status = this.getTestStatus(test, result);\n testResult.lineNumber = test.location.line;\n testResult.retry = result.retry ? result.retry : 0;\n let browserName = test.parent.project()?.use.browserName?.toLowerCase();\n if (!browserName) {\n browserName = test.parent.project()?.use.defaultBrowserType?.toLowerCase();\n }\n testResult.webTestConfig = {\n jobName: jobName,\n projectName: test.parent.project()!.name,\n browserType: browserName ? browserName.toUpperCase() : \"\",\n os: this.getOSName(result, Constants.OS),\n };\n testResult.annotations = this.extractTestAnnotations(test.annotations);\n testResult.tags = this.extractTestTags(test);\n testResult.resultsSummary = {\n status: result.status.toUpperCase(),\n duration: result.duration,\n startTime: result.startTime.toISOString().replace(/\\.\\d+Z$/, \"Z\"),\n attachmentsMetadata: this.getAttachmentStatus(result),\n };\n testResult.artifactsPath = result.attachments\n .filter((attachment) => attachment?.path !== null && attachment?.path !== undefined) // Filter attachments with defined and non-null path property\n .map(\n (attachment) =>\n `${testResult.testExecutionId}/${ReporterUtils.getFileRelativePath(attachment.path!)}`,\n );\n return testResult;\n }\n\n public generateMarkdownSummary(testRunUrl: string): void {\n try {\n if (CIInfoProvider.getCIProvider() === CI_PROVIDERS.GITHUB) {\n const markdownContent = `\n#### Microsoft Playwright Testing run summary\n\n#### Results:\n \n **Passed:** ${this.passedTests}\n \n **Failed:** ${this.failedTests}\n \n **Flaky:** ${this.flakyTests}\n \n **Skipped:** ${this.skippedTests}\n \n#### For more details, visit the [service dashboard](${testRunUrl}).\n `;\n fs.writeFileSync(process.env[\"GITHUB_STEP_SUMMARY\"]!, markdownContent);\n }\n } catch (err) {\n reporterLogger.error(`\\nCould not generate markdown summary - ${err}`);\n }\n }\n\n public getRawTestResultObject(result: TestResult): RawTestResult {\n const rawTestResult: RawTestResult = {\n steps: this.dedupeSteps(result.steps).map((step) => this.serializeTestStep(step)),\n errors: this.getTestError(result),\n stdErr: result.stderr ? JSON.stringify(result.stderr, null, 2) : \"\",\n stdOut: result.stdout ? JSON.stringify(result.stdout, null, 2) : \"\",\n };\n return rawTestResult;\n }\n\n public static getRunId(cIInfo: CIInfo): string {\n if (cIInfo === null || cIInfo.provider === CI_PROVIDERS.DEFAULT) {\n return randomUUID();\n }\n\n const concatString = `${cIInfo.provider}-${cIInfo.repo}-${cIInfo.runId}-${cIInfo.runAttempt}`;\n const runId = ReporterUtils.calculateSha1(concatString);\n return runId;\n }\n\n public static calculateSha1(buffer: Buffer | string): string {\n const hash = createHash(\"sha1\");\n hash.update(buffer);\n return hash.digest(\"hex\");\n }\n\n /*\n public static getTokenDetails(accessToken: string) {\n let tokenDetails = new MPTTokenDetails();\n try {\n const token = accessToken.split('.')[1];\n const _token = Buffer.from(token, 'base64');\n tokenDetails = JSON.parse(_token.toString());\n } catch (err) {\n throw err;\n }\n return tokenDetails;\n }\n */\n\n public static getTokenDetails<T>(accessToken: string, tokenType: TokenType): T {\n const token = accessToken.split(\".\")[1]!;\n const _token = Buffer.from(token, \"base64\");\n const tokenDetails = JSON.parse(_token.toString());\n\n switch (tokenType) {\n case TokenType.MPT:\n return tokenDetails as T;\n case TokenType.ENTRA:\n return tokenDetails as T;\n default:\n throw new Error(\"Unsupported token type\");\n }\n }\n\n public static hasAudienceClaim(token: string): boolean {\n try {\n // Split the token into its three parts\n const parts = token.split(\".\");\n if (parts.length !== 3) {\n throw new Error(\"Invalid token format\");\n }\n\n // Base64 decode the payload\n const payload = parts[1]!;\n const decodedPayload = Buffer.from(payload, \"base64\");\n\n // Parse the decoded payload as JSON\n const payloadObject = JSON.parse(decodedPayload.toString());\n\n // Check if the payload has an 'aud' claim\n return \"aud\" in payloadObject;\n } catch (error) {\n return false;\n }\n }\n\n public static timestampToRFC3339(timestamp: number): string {\n const date = new Date(timestamp);\n const dateString = date.toISOString().replace(/\\.\\d+Z$/, \"Z\");\n return dateString;\n }\n\n public static getFileRelativePath(filePath: string): string {\n if (filePath) {\n let parts = filePath.split(\"/\");\n\n if (parts.length > 1) {\n return parts[parts.length - 1]!;\n }\n\n parts = filePath.split(\"\\\\\");\n\n if (parts.length > 1) {\n return parts[parts.length - 1]!;\n }\n }\n\n return filePath;\n }\n\n public static getReporterBackOffOptions: Partial<IBackOffOptions> = {\n numOfAttempts: 3,\n jitter: \"full\",\n retry: (error) => {\n if (error.response) {\n const status = error.response.status;\n if (Constants.NON_RETRYABLE_STATUS_CODES.includes(status)) {\n return false;\n }\n }\n return true;\n },\n };\n\n // eslint-disable-next-line @azure/azure-sdk/ts-use-interface-parameters\n public static isTimeGreaterThanCurrentPlus10Minutes(sasUri: StorageUri): boolean {\n try {\n const url = new URL(sasUri.uri);\n const params = new URLSearchParams(url.search);\n const expiryTime = params.get(\"se\"); // 'se' is the query parameter for the expiry time\n if (expiryTime) {\n const timestampFromIsoString = new Date(expiryTime).getTime();\n const currentTimestampPlus10Minutes = Date.now() + 10 * 60 * 1000;\n const isSasValidityGreaterThanCurrentTimePlus10Minutes =\n timestampFromIsoString > currentTimestampPlus10Minutes;\n if (!isSasValidityGreaterThanCurrentTimePlus10Minutes) {\n reporterLogger.info(\n `Sas rotation required because close to expiry, SasUriValidTillTime: ${timestampFromIsoString}, CurrentTime: ${currentTimestampPlus10Minutes}`,\n );\n }\n return isSasValidityGreaterThanCurrentTimePlus10Minutes;\n }\n reporterLogger.error(`Sas rotation required because expiry param not found.`);\n return false;\n } catch (error) {\n reporterLogger.error(`Sas rotation required because of ${error}.`);\n return false;\n }\n }\n\n public static getFileSize(attachmentPath: string): number {\n try {\n const stats = fs.statSync(attachmentPath);\n return stats.size;\n } catch (error) {\n return 0;\n }\n }\n\n public static getBufferSize(attachmentBody: Buffer): number {\n try {\n const fileSizeInBytes = attachmentBody.length;\n return fileSizeInBytes;\n } catch (error) {\n return 0;\n }\n }\n\n public redactAccessToken(info: string | undefined): string {\n if (!info || ReporterUtils.isNullOrEmpty(this.envVariables.accessToken)) {\n return \"\";\n }\n const accessTokenRegex = new RegExp(this.envVariables.accessToken, \"g\");\n return info.replace(accessTokenRegex, Constants.DEFAULT_REDACTED_MESSAGE);\n }\n public static getRegionFromAccountID(accountId: string): string | undefined {\n if (accountId.includes(\"_\")) {\n return accountId.split(\"_\")[0]!;\n } else {\n return;\n } // Handling for older workspaces without region in id\n }\n\n public progressBar(current: number, total: number): void {\n const width = 40;\n const percent = current / total;\n const completed = Math.round(width * percent);\n const remaining = width - completed;\n\n if (current % Math.round(total / 5) === 0 || current === total) {\n process.stdout.write(\"\\r\");\n process.stdout.write(\n `[${\"=\".repeat(completed)}${\" \".repeat(remaining)}] ${Math.round(percent * 100)}%`,\n );\n }\n }\n\n private getTestRunConfig(): TestRunConfig {\n const testRunConfig: TestRunConfig = {\n workers: this.getWorkers(),\n pwVersion: this.config.version,\n timeout: this.config.globalTimeout,\n repeatEach: this.config.projects[0].repeatEach,\n retries: this.config.projects[0].retries,\n shards: this.config.shard ? this.config.shard : { total: 1 },\n testFramework: {\n name: Constants.TEST_FRAMEWORK_NAME,\n version: this.config.version,\n runnerName: Constants.TEST_FRAMEWORK_RUNNERNAME,\n },\n testType: Constants.TEST_TYPE,\n testSdkLanguage: Constants.TEST_SDK_LANGUAGE,\n reporterPackageVersion: getPackageVersion(),\n };\n return testRunConfig;\n }\n\n private relativeLocation(location: Location | undefined): Location | undefined {\n if (!location) {\n return undefined;\n }\n const file = this.toPosixPath(path.relative(this.config.rootDir, location.file));\n return {\n file,\n line: location.line,\n column: location.column,\n };\n }\n\n private extractTestTags(input: TestCase): string[] {\n let tags: string[] = [];\n if (\"tags\" in input && Array.isArray(input.tags) && input.tags.length > 0) {\n tags = input.tags.map((tag) => tag.slice(1));\n return tags;\n }\n\n // Check if the input string contains tags directly\n const regex = /@(\\w+)/g;\n const matches = input.title.match(regex);\n if (matches) {\n tags = tags.concat(matches.map((match) => match.slice(1)));\n }\n\n // Try parsing the input string as a JavaScript object\n try {\n const obj = JSON.parse(`{${input}}`);\n if (obj.tag && Array.isArray(obj.tag)) {\n tags = tags.concat(obj.tag);\n }\n } catch (error) {\n // Ignore parsing errors\n }\n return tags;\n }\n\n private extractTestAnnotations(annotations: TestCase[\"annotations\"]): string[] {\n const result = annotations.map((annotation) => {\n if (annotation.type && annotation.description) {\n return `${annotation.type}: ${annotation.description}`;\n }\n return annotation.type;\n });\n return result;\n }\n\n private toPosixPath(aPath: string): string {\n return aPath.split(path.sep).join(path.posix.sep);\n }\n\n private getAttachmentStatus(testResult: TestResult): string {\n let attachmentStatus: string = \"\";\n for (const attachment of testResult.attachments) {\n if (attachment.contentType.includes(\"image\")) {\n if (attachmentStatus !== \"\") {\n attachmentStatus += \",\";\n }\n attachmentStatus += \"image\";\n } else if (attachment.contentType.includes(\"video\")) {\n if (attachmentStatus !== \"\") {\n attachmentStatus += \",\";\n }\n attachmentStatus += \"video\";\n } else if (attachment.contentType === \"application/zip\") {\n if (attachmentStatus !== \"\") {\n attachmentStatus += \",\";\n }\n attachmentStatus += \"trace\";\n } else if (attachment.contentType === \"text/plain\") {\n if (attachmentStatus !== \"\") {\n attachmentStatus += \",\";\n }\n attachmentStatus += \"txt\";\n }\n }\n return attachmentStatus;\n }\n\n private dedupeSteps(steps: TestStep[]): DedupedStep[] {\n const result: DedupedStep[] = [];\n let lastResult = undefined;\n for (const step of steps) {\n const canDedupe =\n !step.error && step.duration >= 0 && step.location?.file && !step.steps.length;\n const lastStep = lastResult?.step;\n if (\n canDedupe &&\n lastResult &&\n lastStep &&\n step.category === lastStep.category &&\n step.title === lastStep.title &&\n step.location?.file === lastStep.location?.file &&\n step.location?.line === lastStep.location?.line &&\n step.location?.column === lastStep.location?.column\n ) {\n ++lastResult.count;\n lastResult.duration += step.duration;\n continue;\n }\n lastResult = { step, count: 1, duration: step.duration };\n result.push(lastResult);\n if (!canDedupe) {\n lastResult = undefined;\n }\n }\n return result;\n }\n\n private serializeTestStep(dedupedStep: DedupedStep): RawTestStep {\n const { step, duration, count } = dedupedStep;\n const result: RawTestStep = {\n title: step.title,\n category: step.category,\n startTime: step.startTime.toISOString(),\n duration,\n error: step.error ? step.error.message : undefined,\n location: this.relativeLocation(step.location),\n steps: this.dedupeSteps(step.steps).map((subStep) => this.serializeTestStep(subStep)),\n count: count,\n };\n return result;\n }\n\n private getTestStatus(test: TestCase, result: TestResult): string {\n if (test.expectedStatus === result.status) {\n if (result.status === \"skipped\") {\n return \"SKIPPED\";\n } else {\n return \"PASSED\";\n }\n } else if (result.status === \"interrupted\") {\n return \"SKIPPED\";\n } else {\n return \"FAILED\";\n }\n }\n\n private extractRootParentTitle(suite: Suite): string | undefined {\n // Traverse through the parent properties until reaching the root parent\n let currentSuite: Suite | undefined = suite;\n let depthCount: number = 0;\n let suiteTitle: string = currentSuite.title;\n const projectName = currentSuite.project()!.name;\n while (currentSuite?.parent && !ReporterUtils.isNullOrEmpty(currentSuite.parent.title)) {\n if (depthCount > 10 || currentSuite.parent.title === projectName) {\n break;\n }\n suiteTitle = suiteTitle + \" > \" + currentSuite.parent.title;\n currentSuite = currentSuite.parent;\n depthCount++;\n }\n return suiteTitle;\n }\n\n private async getRunName(ciInfo: CIInfo): Promise<string> {\n if (\n ciInfo.provider === CI_PROVIDERS.GITHUB &&\n process.env[\"GITHUB_EVENT_NAME\"] === \"pull_request\"\n ) {\n const prNumber: string = `${process.env[\"GITHUB_REF_NAME\"]?.split(\"/\")[0]}`;\n const prLink: string = `${process.env[\"GITHUB_REPOSITORY\"]}/pull/${prNumber}`;\n return `PR# ${prNumber} on Repo: ${process.env[\"GITHUB_REPOSITORY\"]} (${prLink})`;\n }\n\n let gitCommitMessage: string | null = null;\n try {\n const gitVersion = await this.runCommand(Constants.GIT_VERSION_COMMAND);\n if (ReporterUtils.isNullOrEmpty(gitVersion)) {\n throw new Error(\"Git is not installed on the machine\");\n }\n const isInsideWorkTree = await this.runCommand(Constants.GIT_REV_PARSE);\n if (isInsideWorkTree !== \"true\") {\n throw new Error(\"Not inside a git repository\");\n }\n gitCommitMessage = await this.runCommand(Constants.GIT_COMMIT_MESSAGE_COMMAND);\n return gitCommitMessage;\n } catch (err) {\n reporterLogger.error(`\\nError in getting git commit message: ${err}.`);\n return \"\";\n }\n }\n\n private async runCommand(command: string): Promise<string> {\n return new Promise((resolve, reject) => {\n exec(command, (error, stdout, stderr) => {\n if (error) {\n reject(error);\n return;\n }\n if (stderr) {\n reject(new Error(stderr));\n return;\n }\n resolve(stdout.trim());\n });\n });\n }\n\n public static isNullOrEmpty(str: string | null | undefined): boolean {\n return !str || str.trim() === \"\";\n }\n\n private getTestError(result: TestResult): string {\n if (!result.errors || result.errors.length === 0) return \"\";\n const errorMessages: { message: string }[] = [];\n result.errors.forEach((error) => {\n if (error.message) errorMessages.push({ message: error.message });\n if (error.snippet && error.location) {\n errorMessages.push({\n message: error.snippet + \"\\n\\n\" + this.getReadableLineLocation(error.location),\n });\n } else if (error.snippet) errorMessages.push({ message: error.snippet });\n });\n return JSON.stringify(errorMessages, null, 2);\n }\n\n private getReadableLineLocation(location: Location): string {\n return `at ${location.file}:${location.line}:${location.column}`;\n }\n\n private getWorkers(): number {\n if (\n this.config.metadata &&\n \"actualWorkers\" in this.config.metadata &&\n typeof this.config.metadata.actualWorkers === \"number\"\n ) {\n return this.config.metadata.actualWorkers;\n }\n return this.config.workers;\n }\n}\n\nexport default ReporterUtils;\n"]}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { FullResult } from "@playwright/test/reporter";
|
|
2
|
+
import type { EnvironmentVariables } from "../common/environmentVariables.js";
|
|
3
|
+
import type { Shard, UploadMetadata } from "../model/shard.js";
|
|
4
|
+
import type { StorageUri } from "../model/storageUri.js";
|
|
5
|
+
import type { TestResult } from "../model/testResult.js";
|
|
6
|
+
import type { TestRun } from "../model/testRun.js";
|
|
7
|
+
import type { CIInfo } from "./cIInfoProvider.js";
|
|
8
|
+
import type ReporterUtils from "./reporterUtils.js";
|
|
9
|
+
export declare class ServiceClient {
|
|
10
|
+
private httpService;
|
|
11
|
+
private readonly envVariables;
|
|
12
|
+
private readonly reporterUtils;
|
|
13
|
+
private readonly addInformationalMessage;
|
|
14
|
+
private isInformationMessagePresent;
|
|
15
|
+
private addKeyToInformationMessage;
|
|
16
|
+
constructor(envVariables: EnvironmentVariables, reporterUtils: ReporterUtils, addErrorInformation: (errorMessage: string) => void, isInformationMessagePresent: (key: string) => boolean, addKeyToInformationMessage: (key: string) => void);
|
|
17
|
+
patchTestRun(ciInfo: CIInfo): Promise<TestRun>;
|
|
18
|
+
postTestRunShardStart(): Promise<Shard>;
|
|
19
|
+
postTestRunShardEnd(result: FullResult, shard: Shard, errorMessages: string[], attachmentMetadata: UploadMetadata, workers: number): Promise<TestRun>;
|
|
20
|
+
postTestResults(testResults: TestResult[]): Promise<void>;
|
|
21
|
+
createStorageUri(): Promise<StorageUri>;
|
|
22
|
+
private getServiceEndpoint;
|
|
23
|
+
private handleErrorResponse;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=serviceClient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serviceClient.d.ts","sourceRoot":"","sources":["../../../src/utils/serviceClient.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAE5D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAE9E,OAAO,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,aAAa,MAAM,oBAAoB,CAAC;AAIpD,qBAAa,aAAa;IACxB,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAuB;IACpD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAiC;IACzE,OAAO,CAAC,2BAA2B,CAA2B;IAC9D,OAAO,CAAC,0BAA0B,CAAwB;gBAGxD,YAAY,EAAE,oBAAoB,EAClC,aAAa,EAAE,aAAa,EAE5B,mBAAmB,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,IAAI,EACnD,2BAA2B,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,EACrD,0BAA0B,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI;IAU7C,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAmC9C,qBAAqB,IAAI,OAAO,CAAC,KAAK,CAAC;IAqBvC,mBAAmB,CACvB,MAAM,EAAE,UAAU,EAElB,KAAK,EAAE,KAAK,EACZ,aAAa,EAAE,MAAM,EAAE,EACvB,kBAAkB,EAAE,cAAc,EAClC,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,OAAO,CAAC;IA4Bb,eAAe,CAAC,WAAW,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBzD,gBAAgB,IAAI,OAAO,CAAC,UAAU,CAAC;IAkB7C,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,mBAAmB;CAS5B"}
|
|
@@ -3,16 +3,16 @@
|
|
|
3
3
|
// Licensed under the MIT License.
|
|
4
4
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
5
|
exports.ServiceClient = void 0;
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
const
|
|
6
|
+
const constants_js_1 = require("../common/constants.js");
|
|
7
|
+
const httpService_js_1 = require("../common/httpService.js");
|
|
8
|
+
const logger_js_1 = require("../common/logger.js");
|
|
9
9
|
class ServiceClient {
|
|
10
10
|
constructor(
|
|
11
11
|
/* eslint-disable @azure/azure-sdk/ts-use-interface-parameters */
|
|
12
12
|
envVariables, reporterUtils,
|
|
13
13
|
/* eslint-enable @azure/azure-sdk/ts-use-interface-parameters */
|
|
14
14
|
addErrorInformation, isInformationMessagePresent, addKeyToInformationMessage) {
|
|
15
|
-
this.httpService = new
|
|
15
|
+
this.httpService = new httpService_js_1.HttpService();
|
|
16
16
|
this.envVariables = envVariables;
|
|
17
17
|
this.reporterUtils = reporterUtils;
|
|
18
18
|
this.addInformationalMessage = addErrorInformation;
|
|
@@ -23,33 +23,33 @@ class ServiceClient {
|
|
|
23
23
|
const testRun = await this.reporterUtils.getTestRunObject(ciInfo);
|
|
24
24
|
// Escape the runId to avoid issues with special characters
|
|
25
25
|
const escapedRunId = encodeURIComponent(this.envVariables.runId);
|
|
26
|
-
const response = await this.httpService.callAPI("PATCH", `${this.getServiceEndpoint()}/${
|
|
26
|
+
const response = await this.httpService.callAPI("PATCH", `${this.getServiceEndpoint()}/${constants_js_1.Constants.testRunsEndpoint.replace("{workspaceId}", this.envVariables.accountId)}/${escapedRunId}?api-version=${constants_js_1.Constants.API_VERSION}`, JSON.stringify(testRun), this.envVariables.accessToken, "application/merge-patch+json", this.envVariables.correlationId);
|
|
27
27
|
if (response.status === 200) {
|
|
28
28
|
return JSON.parse(response.bodyAsText);
|
|
29
29
|
}
|
|
30
30
|
else if (response.status === 409) {
|
|
31
|
-
const errorMessage =
|
|
31
|
+
const errorMessage = constants_js_1.Constants.CONFLICT_409_ERROR_MESSAGE.replace("{runId}", this.envVariables.runId);
|
|
32
32
|
this.addInformationalMessage(errorMessage);
|
|
33
33
|
process.stdout.write(`\n${errorMessage}`);
|
|
34
34
|
}
|
|
35
35
|
else if (response.status === 403) {
|
|
36
|
-
const errorMessage =
|
|
36
|
+
const errorMessage = constants_js_1.Constants.FORBIDDEN_403_ERROR_MESSAGE.replace(new RegExp("{workspaceId}", "g"), this.envVariables.accountId);
|
|
37
37
|
this.addInformationalMessage(errorMessage);
|
|
38
38
|
process.stdout.write(`\n${errorMessage}`);
|
|
39
39
|
}
|
|
40
40
|
else {
|
|
41
|
-
this.handleErrorResponse(response,
|
|
41
|
+
this.handleErrorResponse(response, constants_js_1.Constants.patchTestRun);
|
|
42
42
|
}
|
|
43
43
|
throw new Error(`Received status ${response.status} from service from PATCH TestRun call.`);
|
|
44
44
|
}
|
|
45
45
|
async postTestRunShardStart() {
|
|
46
46
|
const postTestRunShardObject = this.reporterUtils.getTestRunShardStartObject();
|
|
47
47
|
const escapedRunId = encodeURIComponent(this.envVariables.runId);
|
|
48
|
-
const response = await this.httpService.callAPI("POST", `${this.getServiceEndpoint()}/${
|
|
48
|
+
const response = await this.httpService.callAPI("POST", `${this.getServiceEndpoint()}/${constants_js_1.Constants.testRunsShardEndpoint.replace("{workspaceId}", this.envVariables.accountId).replace("{testRunId}", escapedRunId)}/?api-version=${constants_js_1.Constants.API_VERSION}`, JSON.stringify(postTestRunShardObject), this.envVariables.accessToken, "application/json", this.envVariables.correlationId);
|
|
49
49
|
if (response.status === 200) {
|
|
50
50
|
return JSON.parse(response.bodyAsText);
|
|
51
51
|
}
|
|
52
|
-
this.handleErrorResponse(response,
|
|
52
|
+
this.handleErrorResponse(response, constants_js_1.Constants.patchTestRunShardStart);
|
|
53
53
|
throw new Error(`Received status ${response.status} from service from PATCH TestRun Shard Start call.`);
|
|
54
54
|
}
|
|
55
55
|
async postTestRunShardEnd(result,
|
|
@@ -57,11 +57,11 @@ class ServiceClient {
|
|
|
57
57
|
shard, errorMessages, attachmentMetadata, workers) {
|
|
58
58
|
const postTestRunShardObject = this.reporterUtils.getTestRunShardEndObject(result, shard, errorMessages, attachmentMetadata, workers);
|
|
59
59
|
const escapedRunId = encodeURIComponent(this.envVariables.runId);
|
|
60
|
-
const response = await this.httpService.callAPI("POST", `${this.getServiceEndpoint()}/${
|
|
60
|
+
const response = await this.httpService.callAPI("POST", `${this.getServiceEndpoint()}/${constants_js_1.Constants.testRunsShardEndpoint.replace("{workspaceId}", this.envVariables.accountId).replace("{testRunId}", escapedRunId)}/?api-version=${constants_js_1.Constants.API_VERSION}`, JSON.stringify(postTestRunShardObject), this.envVariables.accessToken, "application/json", this.envVariables.correlationId);
|
|
61
61
|
if (response.status === 200) {
|
|
62
62
|
return JSON.parse(response.bodyAsText);
|
|
63
63
|
}
|
|
64
|
-
this.handleErrorResponse(response,
|
|
64
|
+
this.handleErrorResponse(response, constants_js_1.Constants.patchTestRunShardEnd);
|
|
65
65
|
throw new Error(`Received status ${response.status} from service from PATCH TestRun Shard End call.`);
|
|
66
66
|
}
|
|
67
67
|
// eslint-disable-next-line @azure/azure-sdk/ts-use-interface-parameters
|
|
@@ -70,32 +70,32 @@ class ServiceClient {
|
|
|
70
70
|
const payload = {
|
|
71
71
|
value: testResults,
|
|
72
72
|
};
|
|
73
|
-
const response = await this.httpService.callAPI("POST", `${this.getServiceEndpoint()}/${
|
|
73
|
+
const response = await this.httpService.callAPI("POST", `${this.getServiceEndpoint()}/${constants_js_1.Constants.testResultsEndpoint.replace("{workspaceId}", this.envVariables.accountId)}?api-version=${constants_js_1.Constants.API_VERSION}`, JSON.stringify(payload), this.envVariables.accessToken, "application/json", this.envVariables.correlationId);
|
|
74
74
|
if (response.status === 200) {
|
|
75
75
|
return;
|
|
76
76
|
}
|
|
77
|
-
this.handleErrorResponse(response,
|
|
77
|
+
this.handleErrorResponse(response, constants_js_1.Constants.postTestResults);
|
|
78
78
|
}
|
|
79
79
|
catch (error) {
|
|
80
|
-
|
|
80
|
+
logger_js_1.reporterLogger.error(`Error occurred while posting test results: ${error}`);
|
|
81
81
|
}
|
|
82
82
|
}
|
|
83
83
|
async createStorageUri() {
|
|
84
84
|
const escapedRunId = encodeURIComponent(this.envVariables.runId);
|
|
85
|
-
const response = await this.httpService.callAPI("POST", `${this.getServiceEndpoint()}/${
|
|
85
|
+
const response = await this.httpService.callAPI("POST", `${this.getServiceEndpoint()}/${constants_js_1.Constants.storageUriEndpoint.replace("{workspaceId}", this.envVariables.accountId).replace("{testRunId}", escapedRunId)}?api-version=${constants_js_1.Constants.API_VERSION}`, null, this.envVariables.accessToken, "application/json", this.envVariables.correlationId);
|
|
86
86
|
if (response.status === 200) {
|
|
87
87
|
return JSON.parse(response.bodyAsText);
|
|
88
88
|
}
|
|
89
|
-
this.handleErrorResponse(response,
|
|
89
|
+
this.handleErrorResponse(response, constants_js_1.Constants.getStorageUri);
|
|
90
90
|
throw new Error(`Received status ${response.status} from service from GET StorageUri call.`);
|
|
91
91
|
}
|
|
92
92
|
getServiceEndpoint() {
|
|
93
|
-
return process.env[
|
|
93
|
+
return process.env[constants_js_1.InternalEnvironmentVariables.MPT_SERVICE_REPORTING_URL];
|
|
94
94
|
}
|
|
95
95
|
handleErrorResponse(response, action) {
|
|
96
96
|
var _a, _b;
|
|
97
97
|
const statusCode = response.status;
|
|
98
|
-
const errorMessage = (_b = (_a =
|
|
98
|
+
const errorMessage = (_b = (_a = constants_js_1.Constants.ERROR_MESSAGE[action]) === null || _a === void 0 ? void 0 : _a[statusCode]) !== null && _b !== void 0 ? _b : "Unknown error occured.";
|
|
99
99
|
if (!this.isInformationMessagePresent(statusCode.toString())) {
|
|
100
100
|
this.addKeyToInformationMessage(statusCode.toString());
|
|
101
101
|
this.addInformationalMessage(errorMessage);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serviceClient.js","sourceRoot":"","sources":["../../../src/utils/serviceClient.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { FullResult } from \"@playwright/test/reporter\";\nimport { Constants, InternalEnvironmentVariables } from \"../common/constants.js\";\nimport type { EnvironmentVariables } from \"../common/environmentVariables.js\";\nimport { HttpService } from \"../common/httpService.js\";\nimport type { Shard, UploadMetadata } from \"../model/shard.js\";\nimport type { StorageUri } from \"../model/storageUri.js\";\nimport type { TestResult } from \"../model/testResult.js\";\nimport type { TestRun } from \"../model/testRun.js\";\nimport type { CIInfo } from \"./cIInfoProvider.js\";\nimport type ReporterUtils from \"./reporterUtils.js\";\nimport type { PipelineResponse } from \"@azure/core-rest-pipeline\";\nimport { reporterLogger } from \"../common/logger.js\";\n\nexport class ServiceClient {\n private httpService: HttpService;\n private readonly envVariables: EnvironmentVariables;\n private readonly reporterUtils: ReporterUtils;\n private readonly addInformationalMessage: (errorMessage: string) => void;\n private isInformationMessagePresent: (key: string) => boolean;\n private addKeyToInformationMessage: (key: string) => void;\n constructor(\n /* eslint-disable @azure/azure-sdk/ts-use-interface-parameters */\n envVariables: EnvironmentVariables,\n reporterUtils: ReporterUtils,\n /* eslint-enable @azure/azure-sdk/ts-use-interface-parameters */\n addErrorInformation: (errorMessage: string) => void,\n isInformationMessagePresent: (key: string) => boolean,\n addKeyToInformationMessage: (key: string) => void,\n ) {\n this.httpService = new HttpService();\n this.envVariables = envVariables;\n this.reporterUtils = reporterUtils;\n this.addInformationalMessage = addErrorInformation;\n this.isInformationMessagePresent = isInformationMessagePresent;\n this.addKeyToInformationMessage = addKeyToInformationMessage;\n }\n\n async patchTestRun(ciInfo: CIInfo): Promise<TestRun> {\n const testRun = await this.reporterUtils.getTestRunObject(ciInfo);\n\n // Escape the runId to avoid issues with special characters\n const escapedRunId = encodeURIComponent(this.envVariables.runId!);\n const response: PipelineResponse = await this.httpService.callAPI(\n \"PATCH\",\n `${this.getServiceEndpoint()}/${Constants.testRunsEndpoint.replace(\"{workspaceId}\", this.envVariables.accountId!)}/${escapedRunId}?api-version=${Constants.API_VERSION}`,\n JSON.stringify(testRun),\n this.envVariables.accessToken,\n \"application/merge-patch+json\",\n this.envVariables.correlationId!,\n );\n if (response.status === 200) {\n return JSON.parse(response.bodyAsText!) as TestRun;\n } else if (response.status === 409) {\n const errorMessage = Constants.CONFLICT_409_ERROR_MESSAGE.replace(\n \"{runId}\",\n this.envVariables.runId,\n );\n this.addInformationalMessage(errorMessage);\n process.stdout.write(`\\n${errorMessage}`);\n } else if (response.status === 403) {\n const errorMessage = Constants.FORBIDDEN_403_ERROR_MESSAGE.replace(\n new RegExp(\"{workspaceId}\", \"g\"),\n this.envVariables.accountId!,\n );\n this.addInformationalMessage(errorMessage);\n process.stdout.write(`\\n${errorMessage}`);\n } else {\n this.handleErrorResponse(response, Constants.patchTestRun);\n }\n throw new Error(`Received status ${response.status} from service from PATCH TestRun call.`);\n }\n\n async postTestRunShardStart(): Promise<Shard> {\n const postTestRunShardObject = this.reporterUtils.getTestRunShardStartObject();\n const escapedRunId = encodeURIComponent(this.envVariables.runId!);\n const response: PipelineResponse = await this.httpService.callAPI(\n \"POST\",\n `${this.getServiceEndpoint()}/${Constants.testRunsShardEndpoint.replace(\"{workspaceId}\", this.envVariables.accountId!).replace(\"{testRunId}\", escapedRunId)}/?api-version=${Constants.API_VERSION}`,\n JSON.stringify(postTestRunShardObject),\n this.envVariables.accessToken,\n \"application/json\",\n this.envVariables.correlationId!,\n );\n if (response.status === 200) {\n return JSON.parse(response.bodyAsText!) as Shard;\n }\n this.handleErrorResponse(response, Constants.patchTestRunShardStart);\n\n throw new Error(\n `Received status ${response.status} from service from PATCH TestRun Shard Start call.`,\n );\n }\n\n async postTestRunShardEnd(\n result: FullResult,\n // eslint-disable-next-line @azure/azure-sdk/ts-use-interface-parameters\n shard: Shard,\n errorMessages: string[],\n attachmentMetadata: UploadMetadata,\n workers: number,\n ): Promise<TestRun> {\n const postTestRunShardObject = this.reporterUtils.getTestRunShardEndObject(\n result,\n shard,\n errorMessages,\n attachmentMetadata,\n workers,\n );\n const escapedRunId = encodeURIComponent(this.envVariables.runId!);\n const response: PipelineResponse = await this.httpService.callAPI(\n \"POST\",\n `${this.getServiceEndpoint()}/${Constants.testRunsShardEndpoint.replace(\"{workspaceId}\", this.envVariables.accountId!).replace(\"{testRunId}\", escapedRunId)}/?api-version=${Constants.API_VERSION}`,\n JSON.stringify(postTestRunShardObject),\n this.envVariables.accessToken,\n \"application/json\",\n this.envVariables.correlationId!,\n );\n if (response.status === 200) {\n return JSON.parse(response.bodyAsText!) as TestRun;\n }\n this.handleErrorResponse(response, Constants.patchTestRunShardEnd);\n\n throw new Error(\n `Received status ${response.status} from service from PATCH TestRun Shard End call.`,\n );\n }\n\n // eslint-disable-next-line @azure/azure-sdk/ts-use-interface-parameters\n async postTestResults(testResults: TestResult[]): Promise<void> {\n try {\n const payload: any = {\n value: testResults,\n };\n const response: PipelineResponse = await this.httpService.callAPI(\n \"POST\",\n `${this.getServiceEndpoint()}/${Constants.testResultsEndpoint.replace(\"{workspaceId}\", this.envVariables.accountId!)}?api-version=${Constants.API_VERSION}`,\n JSON.stringify(payload),\n this.envVariables.accessToken,\n \"application/json\",\n this.envVariables.correlationId!,\n );\n if (response.status === 200) {\n return;\n }\n this.handleErrorResponse(response, Constants.postTestResults);\n } catch (error) {\n reporterLogger.error(`Error occurred while posting test results: ${error}`);\n }\n }\n\n async createStorageUri(): Promise<StorageUri> {\n const escapedRunId = encodeURIComponent(this.envVariables.runId!);\n const response: PipelineResponse = await this.httpService.callAPI(\n \"POST\",\n `${this.getServiceEndpoint()}/${Constants.storageUriEndpoint.replace(\"{workspaceId}\", this.envVariables.accountId!).replace(\"{testRunId}\", escapedRunId)}?api-version=${Constants.API_VERSION}`,\n null,\n this.envVariables.accessToken,\n \"application/json\",\n this.envVariables.correlationId!,\n );\n if (response.status === 200) {\n return JSON.parse(response.bodyAsText!) as StorageUri;\n }\n this.handleErrorResponse(response, Constants.getStorageUri);\n\n throw new Error(`Received status ${response.status} from service from GET StorageUri call.`);\n }\n\n private getServiceEndpoint(): string {\n return process.env[InternalEnvironmentVariables.MPT_SERVICE_REPORTING_URL]!;\n }\n\n private handleErrorResponse(response: PipelineResponse, action: string): void {\n const statusCode = response.status;\n const errorMessage = Constants.ERROR_MESSAGE[action]?.[statusCode] ?? \"Unknown error occured.\";\n if (!this.isInformationMessagePresent(statusCode.toString())) {\n this.addKeyToInformationMessage(statusCode.toString());\n this.addInformationalMessage(errorMessage);\n }\n process.stdout.write(`${errorMessage}\\n`);\n }\n}\n"]}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare class StorageClient {
|
|
2
|
+
uploadFile(uri: string, filePath: string, fileRelativePath: string): Promise<void>;
|
|
3
|
+
uploadBuffer(uri: string, buffer: string, fileRelativePath: string): Promise<void>;
|
|
4
|
+
private getCloudFilepath;
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=storageClient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storageClient.d.ts","sourceRoot":"","sources":["../../../src/utils/storageClient.ts"],"names":[],"mappings":"AAOA,qBAAa,aAAa;IACX,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAalF,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAa/F,OAAO,CAAC,gBAAgB;CAOzB"}
|
|
@@ -4,18 +4,18 @@
|
|
|
4
4
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
5
|
exports.StorageClient = void 0;
|
|
6
6
|
const storage_blob_1 = require("@azure/storage-blob");
|
|
7
|
-
const
|
|
8
|
-
const
|
|
7
|
+
const logger_js_1 = require("../common/logger.js");
|
|
8
|
+
const constants_js_1 = require("../common/constants.js");
|
|
9
9
|
class StorageClient {
|
|
10
10
|
async uploadFile(uri, filePath, fileRelativePath) {
|
|
11
11
|
try {
|
|
12
12
|
const cloudFilepath = this.getCloudFilepath(uri, fileRelativePath);
|
|
13
13
|
const blobClient = new storage_blob_1.BlockBlobClient(cloudFilepath);
|
|
14
14
|
await blobClient.uploadFile(filePath, { concurrency: 10 });
|
|
15
|
-
|
|
15
|
+
logger_js_1.reporterLogger.info(`\nUploaded file ${filePath}.`);
|
|
16
16
|
}
|
|
17
17
|
catch (err) {
|
|
18
|
-
|
|
18
|
+
logger_js_1.reporterLogger.error(`\nUnable to upload file ${filePath}, Name: ${err.name}, Message: ${err.message}, Stack: ${err.stack}`);
|
|
19
19
|
}
|
|
20
20
|
}
|
|
21
21
|
async uploadBuffer(uri, buffer, fileRelativePath) {
|
|
@@ -23,15 +23,15 @@ class StorageClient {
|
|
|
23
23
|
const cloudFilepath = this.getCloudFilepath(uri, fileRelativePath);
|
|
24
24
|
const blobClient = new storage_blob_1.BlockBlobClient(cloudFilepath);
|
|
25
25
|
await blobClient.upload(buffer, buffer.length);
|
|
26
|
-
|
|
26
|
+
logger_js_1.reporterLogger.verbose(`\nUploaded buffer to ${fileRelativePath}.`);
|
|
27
27
|
}
|
|
28
28
|
catch (err) {
|
|
29
|
-
|
|
29
|
+
logger_js_1.reporterLogger.error(`\nUnable to upload buffer ${fileRelativePath}, Name: ${err.name}, Message: ${err.message}, Stack: ${err.stack}`);
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
32
|
getCloudFilepath(uri, fileRelativePath) {
|
|
33
33
|
// Split the uri on "?" to get the container uri and sas token
|
|
34
|
-
const parts = uri.split(
|
|
34
|
+
const parts = uri.split(constants_js_1.Constants.SAS_URI_SEPARATOR);
|
|
35
35
|
const containerUri = parts[0];
|
|
36
36
|
const sasToken = parts[1];
|
|
37
37
|
return containerUri + "/" + fileRelativePath + "?" + sasToken;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storageClient.js","sourceRoot":"","sources":["../../../src/utils/storageClient.ts"],"names":[],"mappings":";AAAA,uCAAuC;AACvC,kCAAkC;;;AAElC,sDAAsD;AACtD,mDAAqD;AACrD,yDAAmD;AAEnD,MAAa,aAAa;IACjB,KAAK,CAAC,UAAU,CAAC,GAAW,EAAE,QAAgB,EAAE,gBAAwB;QAC7E,IAAI,CAAC;YACH,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;YACnE,MAAM,UAAU,GAAG,IAAI,8BAAe,CAAC,aAAa,CAAC,CAAC;YACtD,MAAM,UAAU,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC;YAC3D,0BAAc,CAAC,IAAI,CAAC,mBAAmB,QAAQ,GAAG,CAAC,CAAC;QACtD,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,0BAAc,CAAC,KAAK,CAClB,2BAA2B,QAAQ,WAAW,GAAG,CAAC,IAAI,cAAc,GAAG,CAAC,OAAO,YAAY,GAAG,CAAC,KAAK,EAAE,CACvG,CAAC;QACJ,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,YAAY,CAAC,GAAW,EAAE,MAAc,EAAE,gBAAwB;QAC7E,IAAI,CAAC;YACH,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;YACnE,MAAM,UAAU,GAAG,IAAI,8BAAe,CAAC,aAAa,CAAC,CAAC;YACtD,MAAM,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;YAC/C,0BAAc,CAAC,OAAO,CAAC,wBAAwB,gBAAgB,GAAG,CAAC,CAAC;QACtE,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,0BAAc,CAAC,KAAK,CAClB,6BAA6B,gBAAgB,WAAW,GAAG,CAAC,IAAI,cAAc,GAAG,CAAC,OAAO,YAAY,GAAG,CAAC,KAAK,EAAE,CACjH,CAAC;QACJ,CAAC;IACH,CAAC;IAEO,gBAAgB,CAAC,GAAW,EAAE,gBAAwB;QAC5D,8DAA8D;QAC9D,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,wBAAS,CAAC,iBAAiB,CAAC,CAAC;QACrD,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAC9B,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAC1B,OAAO,YAAY,GAAG,GAAG,GAAG,gBAAgB,GAAG,GAAG,GAAG,QAAQ,CAAC;IAChE,CAAC;CACF;AAlCD,sCAkCC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { BlockBlobClient } from \"@azure/storage-blob\";\nimport { reporterLogger } from \"../common/logger.js\";\nimport { Constants } from \"../common/constants.js\";\n\nexport class StorageClient {\n public async uploadFile(uri: string, filePath: string, fileRelativePath: string): Promise<void> {\n try {\n const cloudFilepath = this.getCloudFilepath(uri, fileRelativePath);\n const blobClient = new BlockBlobClient(cloudFilepath);\n await blobClient.uploadFile(filePath, { concurrency: 10 });\n reporterLogger.info(`\\nUploaded file ${filePath}.`);\n } catch (err: any) {\n reporterLogger.error(\n `\\nUnable to upload file ${filePath}, Name: ${err.name}, Message: ${err.message}, Stack: ${err.stack}`,\n );\n }\n }\n\n public async uploadBuffer(uri: string, buffer: string, fileRelativePath: string): Promise<void> {\n try {\n const cloudFilepath = this.getCloudFilepath(uri, fileRelativePath);\n const blobClient = new BlockBlobClient(cloudFilepath);\n await blobClient.upload(buffer, buffer.length);\n reporterLogger.verbose(`\\nUploaded buffer to ${fileRelativePath}.`);\n } catch (err: any) {\n reporterLogger.error(\n `\\nUnable to upload buffer ${fileRelativePath}, Name: ${err.name}, Message: ${err.message}, Stack: ${err.stack}`,\n );\n }\n }\n\n private getCloudFilepath(uri: string, fileRelativePath: string): string {\n // Split the uri on \"?\" to get the container uri and sas token\n const parts = uri.split(Constants.SAS_URI_SEPARATOR);\n const containerUri = parts[0];\n const sasToken = parts[1];\n return containerUri + \"/\" + fileRelativePath + \"?\" + sasToken;\n }\n}\n"]}
|