@azure/microsoft-playwright-testing 1.0.0-alpha.20241017.3 → 1.0.0-alpha.20241018.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/reporter/mptReporter.js +2 -2
- package/dist/reporter/mptReporter.js.map +1 -1
- package/dist/utils/serviceClient.d.ts.map +1 -1
- package/dist/utils/serviceClient.js +9 -4
- package/dist/utils/serviceClient.js.map +1 -1
- package/dist/utils/utils.js +1 -1
- package/dist/utils/utils.js.map +1 -1
- package/package.json +1 -1
|
@@ -186,14 +186,14 @@ class MPTReporter {
|
|
|
186
186
|
try {
|
|
187
187
|
const testRunResponse = await this.serviceClient.patchTestRun(this.ciInfo);
|
|
188
188
|
logger_1.reporterLogger.info(`\nTest run report successfully initialized: ${testRunResponse === null || testRunResponse === void 0 ? void 0 : testRunResponse.displayName}.`);
|
|
189
|
-
process.stdout.write(`Initializing reporting for this test run. You can view the results at: https://playwright.microsoft.com/workspaces/${this.envVariables.accountId}/runs/${this.envVariables.runId}\n`);
|
|
189
|
+
process.stdout.write(`Initializing reporting for this test run. You can view the results at: https://playwright.microsoft.com/workspaces/${encodeURIComponent(this.envVariables.accountId)}/runs/${encodeURIComponent(this.envVariables.runId)}\n`);
|
|
190
190
|
const shardResponse = await this.serviceClient.postTestRunShardStart();
|
|
191
191
|
this.shard = shardResponse;
|
|
192
192
|
// Set test report link as environment variable. If/else to check if environment variable defined or not.
|
|
193
193
|
if (constants_1.Constants.DEFAULT_SERVICE_ENDPOINT &&
|
|
194
194
|
this.envVariables.accountId &&
|
|
195
195
|
this.envVariables.runId) {
|
|
196
|
-
this.testRunUrl = `${constants_1.Constants.DEFAULT_DASHBOARD_ENDPOINT}/workspaces/${
|
|
196
|
+
this.testRunUrl = `${constants_1.Constants.DEFAULT_DASHBOARD_ENDPOINT}/workspaces/${encodeURIComponent(this.envVariables.accountId)}/runs/${encodeURIComponent(this.envVariables.runId)}`;
|
|
197
197
|
}
|
|
198
198
|
return true;
|
|
199
199
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mptReporter.js","sourceRoot":"","sources":["../../src/reporter/mptReporter.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type {\n FullResult,\n TestCase,\n TestResult,\n FullConfig,\n Reporter,\n Suite,\n} from \"@playwright/test/reporter\";\nimport { reporterLogger } from \"../common/logger\";\nimport {\n Constants,\n InternalEnvironmentVariables,\n TestResultErrorConstants,\n} from \"../common/constants\";\nimport { EnvironmentVariables } from \"../common/environmentVariables\";\nimport { MultiMap } from \"../common/multimap\";\nimport { EntraTokenDetails } from \"../model/entraTokenDetails\";\nimport { MPTTokenDetails, TokenType } from \"../model/mptTokenDetails\";\nimport { Shard, UploadMetadata } from \"../model/shard\";\nimport { StorageUri } from \"../model/storageUri\";\nimport { TestResult as MPTTestResult, RawTestResult } from \"../model/testResult\";\nimport { TestRun } from \"../model/testRun\";\nimport { CIInfo, CIInfoProvider } from \"../utils/cIInfoProvider\";\nimport ReporterUtils from \"../utils/reporterUtils\";\nimport { ServiceClient } from \"../utils/serviceClient\";\nimport { StorageClient } from \"../utils/storageClient\";\nimport { MPTReporterConfig } from \"../common/types\";\nimport { ServiceErrorMessageConstants } from \"../common/messages\";\nimport { validateMptPAT, populateValuesFromServiceUrl } from \"../utils/utils\";\n\n/**\n * @public\n *\n * Extends Playwright's Reporter class to enable Microsoft Playwright Testing's Reporting\n * feature to publish test results and related artifacts and\n * view them in the service portal for faster and easier troubleshooting.\n *\n * @example\n *\n * ```\n * import { defineConfig } from \"@playwright/test\";\n *\n * export default defineConfig({\n * reporter: [[\"@azure/microsoft-playwright-testing/reporter\"]]\n * });\n * ```\n */\nclass MPTReporter implements Reporter {\n private isTokenValid: boolean = true;\n private enableGitHubSummary = true;\n private isRegionValid: boolean = true;\n private shard!: Shard;\n private isTestRunStartSuccess: boolean = false;\n private ciInfo: CIInfo = CIInfoProvider.getCIInfo();\n private serviceClient!: ServiceClient;\n private storageClient!: StorageClient;\n private reporterUtils!: ReporterUtils;\n private envVariables!: EnvironmentVariables;\n private testRawResults = new MultiMap<string, string>();\n private promiseOnBegin!: Promise<boolean>;\n private _testEndPromises: Promise<void>[] = [];\n private testResultBatch: Set<MPTTestResult> = new Set<MPTTestResult>();\n private errorMessages: string[] = [];\n private informationalMessages: string[] = [];\n private processedErrorMessageKeys: string[] = [];\n private sasUri!: StorageUri;\n private uploadMetadata: UploadMetadata = {\n numTestResults: 0,\n numTotalAttachments: 0,\n sizeTotalAttachments: 0,\n };\n private numWorkers: number = -1;\n private testRunUrl: string = \"\";\n private enableResultPublish: boolean = true;\n\n constructor(config: Partial<MPTReporterConfig>) {\n if (config?.enableGitHubSummary !== undefined) {\n this.enableGitHubSummary = config.enableGitHubSummary;\n }\n if (config?.enableResultPublish !== undefined) {\n this.enableResultPublish = config.enableResultPublish;\n }\n }\n private _addError(errorMessage: string): void {\n if (this.errorMessages.length < Constants.ERROR_MESSAGES_MAX_LENGTH) {\n this.errorMessages.push(this.reporterUtils.redactAccessToken(errorMessage));\n }\n }\n\n private _addInformationalMessage = (message: string): void => {\n this.informationalMessages.push(message);\n };\n\n private _addKeyToInformationMessage = (key: string): void => {\n this.processedErrorMessageKeys.push(key);\n };\n\n private _isInformationMessagePresent = (key: string): boolean => {\n return this.processedErrorMessageKeys.includes(key);\n };\n private _reporterFailureHandler = (error: { key: string; message: string }): void => {\n if (!this._isInformationMessagePresent(error.key)) {\n this._addKeyToInformationMessage(error.key);\n this._addInformationalMessage(error.message);\n }\n this.isTokenValid = false;\n };\n /**\n * @public\n *\n * Called once before running tests.\n *\n * @param config - Resolved configuration.\n * @param suite - The root suite that contains all projects, files and test cases.\n */\n onBegin(config: FullConfig, suite: Suite): void {\n if (!this.enableResultPublish) return;\n this.initializeMPTReporter();\n this.reporterUtils = new ReporterUtils(this.envVariables, config, suite);\n if (this.isTokenValid && this.isRegionValid) {\n this.serviceClient = new ServiceClient(\n this.envVariables,\n this.reporterUtils,\n this._addInformationalMessage,\n this._isInformationMessagePresent,\n this._addKeyToInformationMessage,\n );\n this.promiseOnBegin = this._onBegin();\n }\n }\n\n /**\n * @public\n *\n * Called after a test has been finished in the worker process.\n *\n * @param test - Test that has been finished.\n * @param result - Result of the test run.\n */\n onTestEnd(test: TestCase, result: TestResult): void {\n this.numWorkers = Math.max(this.numWorkers, result.parallelIndex + 1);\n this.processTestResult(result);\n if (!this.enableResultPublish) return;\n // Process test result\n this._onTestEnd(test, result);\n // Upload the test results batch\n try {\n if (this.testResultBatch.size >= Constants.TEST_BATCH_SIZE) {\n const currResultBatch: MPTTestResult[] = [...this.testResultBatch];\n if (this.isTestRunStartSuccess) {\n this._testEndPromises.push(this.serviceClient.postTestResults(currResultBatch));\n reporterLogger.info(`\\nAdded test results batch for upload.`);\n this.testResultBatch.clear();\n }\n }\n } catch (err: any) {\n this._addError(`Name: ${err.name}, Message: ${err.message}, Stack: ${err.stack}`);\n reporterLogger.error(`\\nError in uploading test results: ${err.message}.`);\n }\n }\n\n /**\n * @public\n *\n * Called after all tests have been run, or testing has been interrupted. Note that this method may return a [Promise]\n * and Playwright Test will await it. Reporter is allowed to override the status and hence affect the exit code of the\n * test runner.\n *\n * @param result - Result of the full test run, `status` can be one of:\n * - `'passed'` - Everything went as expected.\n * - `'failed'` - Any test has failed.\n * - `'timedout'` - The\n * {@link https://playwright.dev/docs/api/class-testconfig#test-config-global-timeout | testConfig.globalTimeout} has\n * been reached.\n * - `'interrupted'` - Interrupted by the user.\n */\n async onEnd(result: FullResult): Promise<void> {\n if (this.enableResultPublish) {\n await this._onEnd(result);\n if (!this.isTestRunStartSuccess) {\n this._addError(`\\nUnable to initialize test run report.`);\n } else {\n let count: number = 0;\n process.stdout.write(\"\\nUploading test results.\");\n await Promise.allSettled(this._testEndPromises).then((values) => {\n values.forEach((value) => {\n if (value.status === \"fulfilled\") {\n count++;\n this.reporterUtils.progressBar(count, this._testEndPromises.length);\n }\n return value.status;\n });\n reporterLogger.info(`\\nTest result processing completed.`);\n return values;\n });\n try {\n await this.serviceClient.postTestRunShardEnd(\n result,\n this.shard,\n this.errorMessages,\n this.uploadMetadata,\n this.numWorkers,\n );\n reporterLogger.info(`\\nTest run successfully uploaded.`);\n\n if (this.enableGitHubSummary) {\n this.reporterUtils.generateMarkdownSummary(this.testRunUrl);\n }\n\n process.stdout.write(`\\nTest report: ${this.testRunUrl}\\n`);\n } catch (err: any) {\n this._addError(`Name: ${err.name}, Message: ${err.message}, Stack: ${err.stack}`);\n reporterLogger.error(`\\nError in completing test run: ${err.message}`);\n process.stdout.write(`\\nUnable to complete test results upload.`);\n }\n }\n }\n this.displayAdditionalInformation();\n }\n\n private async _onBegin(): Promise<boolean> {\n process.stdout.write(`\\n`);\n try {\n const testRunResponse: TestRun | undefined = await this.serviceClient.patchTestRun(\n this.ciInfo,\n );\n reporterLogger.info(\n `\\nTest run report successfully initialized: ${testRunResponse?.displayName}.`,\n );\n process.stdout.write(\n `Initializing reporting for this test run. You can view the results at: https://playwright.microsoft.com/workspaces/${this.envVariables.accountId}/runs/${this.envVariables.runId}\\n`,\n );\n const shardResponse = await this.serviceClient.postTestRunShardStart();\n this.shard = shardResponse;\n // Set test report link as environment variable. If/else to check if environment variable defined or not.\n if (\n Constants.DEFAULT_SERVICE_ENDPOINT &&\n this.envVariables.accountId &&\n this.envVariables.runId\n ) {\n this.testRunUrl = `${Constants.DEFAULT_DASHBOARD_ENDPOINT}/workspaces/${encodeURI(\n this.envVariables.accountId,\n )}/runs/${encodeURI(this.envVariables.runId)}`;\n }\n return true;\n } catch (err: any) {\n this._addError(`Name: ${err.name}, Message: ${err.message}, Stack: ${err.stack}`);\n reporterLogger.error(`\\nError in initializing test run report: ${err.message}.`);\n return false;\n }\n }\n\n private async _onTestEnd(test: TestCase, result: TestResult): Promise<undefined> {\n try {\n this.isTestRunStartSuccess = await this.promiseOnBegin;\n if (!this.isTestRunStartSuccess) {\n this._addError(`\\nUnable to initialize test run report.`);\n return;\n }\n this.uploadMetadata.numTestResults++;\n const testResultObject: MPTTestResult = this.reporterUtils.getTestResultObject(\n test,\n result,\n this.ciInfo.jobId!,\n );\n this.testResultBatch.add(testResultObject);\n // Store test attachments in array\n const testAttachments: string[] = [];\n for (const attachment of result.attachments) {\n if (attachment.path !== undefined && attachment.path !== \"\") {\n testAttachments.push(attachment.path);\n this.uploadMetadata.numTotalAttachments++;\n this.uploadMetadata.sizeTotalAttachments += ReporterUtils.getFileSize(attachment.path);\n }\n }\n\n // Get raw result object and store it in map\n const rawTestResult: RawTestResult = this.reporterUtils.getRawTestResultObject(result);\n this.testRawResults.set(testResultObject.testExecutionId, JSON.stringify(rawTestResult));\n this._testEndPromises.push(\n this._uploadTestResultAttachments(testResultObject.testExecutionId, testAttachments),\n );\n } catch (err: any) {\n this._addError(`Name: ${err.name}, Message: ${err.message}, Stack: ${err.stack}`);\n reporterLogger.error(`\\nError in processing test result: ${err.message}.`);\n }\n }\n\n private async _onEnd(_: FullResult): Promise<void> {\n this.isTestRunStartSuccess = await this.promiseOnBegin;\n if (!this.isTestRunStartSuccess) {\n this._addError(`\\nUnable to initialize test run report.`);\n return;\n }\n try {\n // Upload the remaining test results\n if (this.testResultBatch.size > 0) {\n await this.serviceClient.postTestResults([...this.testResultBatch]);\n reporterLogger.info(`\\nUploaded test results batch successfully.`);\n this.testResultBatch.clear();\n }\n } catch (err: any) {\n this._addError(`Name: ${err.name}, Message: ${err.message}, Stack: ${err.stack}`);\n reporterLogger.error(`\\nError in uploading test run information: ${err.message}`);\n }\n }\n\n private async _uploadTestResultAttachments(\n testExecutionId: string,\n testAttachments: string[],\n ): Promise<void> {\n try {\n this.isTestRunStartSuccess = await this.promiseOnBegin;\n if (!this.isTestRunStartSuccess) {\n this._addError(`\\nUnable to initialize test run report.`);\n return;\n }\n for (const attachmentPath of testAttachments) {\n const fileRelativePath = `${testExecutionId}/${ReporterUtils.getFileRelativePath(\n attachmentPath,\n )}`;\n if (\n this.sasUri === undefined ||\n !ReporterUtils.isTimeGreaterThanCurrentPlus10Minutes(this.sasUri)\n ) {\n // Renew the sas uri\n this.sasUri = await this.serviceClient.createStorageUri();\n reporterLogger.info(\n `\\nFetched SAS URI with validity: ${this.sasUri.expiresAt} and access: ${this.sasUri.accessLevel}.`,\n );\n }\n this.storageClient.uploadFile(this.sasUri.uri, attachmentPath, fileRelativePath);\n }\n const rawTestResult = this.testRawResults.get(testExecutionId);\n if (\n this.sasUri === undefined ||\n !ReporterUtils.isTimeGreaterThanCurrentPlus10Minutes(this.sasUri)\n ) {\n // Renew the sas uri\n this.sasUri = await this.serviceClient.createStorageUri();\n }\n this.storageClient.uploadBuffer(\n this.sasUri.uri,\n rawTestResult[0]!,\n `${testExecutionId}/rawTestResult.json`,\n );\n } catch (err: any) {\n this._addError(`Name: ${err.name}, Message: ${err.message}, Stack: ${err.stack}`);\n reporterLogger.error(`\\nError in uploading test result attachments: ${err.message}`);\n }\n }\n\n private initializeMPTReporter(): void {\n this.envVariables = new EnvironmentVariables();\n if (process.env[InternalEnvironmentVariables.MPT_SETUP_FATAL_ERROR] === \"true\") {\n this.isTokenValid = false;\n return;\n }\n if (!process.env[\"PLAYWRIGHT_SERVICE_REPORTING_URL\"]) {\n process.stdout.write(\"\\nReporting service url not found.\");\n this.isTokenValid = false;\n return;\n }\n reporterLogger.info(`Reporting url - ${process.env[\"PLAYWRIGHT_SERVICE_REPORTING_URL\"]}`);\n if (this.envVariables.accessToken === undefined || this.envVariables.accessToken === \"\") {\n process.stdout.write(`\\n${ServiceErrorMessageConstants.NO_AUTH_ERROR.message}`);\n this.isTokenValid = false;\n } else if (ReporterUtils.hasAudienceClaim(this.envVariables.accessToken)) {\n const result = populateValuesFromServiceUrl();\n this.envVariables.region = result!.region;\n this.envVariables.accountId = result!.accountId;\n const entraTokenDetails: EntraTokenDetails = ReporterUtils.getTokenDetails<EntraTokenDetails>(\n this.envVariables.accessToken,\n TokenType.ENTRA,\n );\n this.envVariables.userId = entraTokenDetails.oid;\n this.envVariables.userName = entraTokenDetails.name;\n } else {\n const mptTokenDetails: MPTTokenDetails = ReporterUtils.getTokenDetails<MPTTokenDetails>(\n this.envVariables.accessToken,\n TokenType.MPT,\n );\n validateMptPAT(this._reporterFailureHandler);\n this.envVariables.accountId = mptTokenDetails.aid;\n this.envVariables.userId = mptTokenDetails.oid;\n this.envVariables.userName = mptTokenDetails.userName;\n this.envVariables.region = ReporterUtils.getRegionFromAccountID(this.envVariables.accountId!);\n }\n this.storageClient = new StorageClient();\n if (\n this.envVariables.region &&\n !Constants.SupportedRegions.includes(this.envVariables.region!) &&\n this.isTokenValid\n ) {\n process.stdout.write(\n `\\nUnsupported region's workspace used to generate the input Access Token; the supported regions are ${Constants.SupportedRegions.join(\n \", \",\n )}`,\n );\n this.isRegionValid = false;\n }\n if (this.envVariables.runId === undefined || this.envVariables.runId === \"\") {\n this.envVariables.runId = ReporterUtils.getRunId(this.ciInfo);\n }\n }\n\n private displayAdditionalInformation(): void {\n if (this.informationalMessages.length > 0) console.info(); // Add a new line before displaying the messages\n this.informationalMessages.forEach((message, index) => {\n console.info(`${index + 1}. ${message}`);\n });\n }\n\n private processTestResult(result: TestResult): void {\n if (\n process.env[InternalEnvironmentVariables.MPT_CLOUD_HOSTED_BROWSER_USED] &&\n result.status !== \"passed\"\n ) {\n result.errors.forEach((error) => {\n TestResultErrorConstants.forEach((testResultErrorParseObj) => {\n if (this.processedErrorMessageKeys.includes(testResultErrorParseObj.key)) {\n return;\n }\n const errorMessage = error.message;\n if (!errorMessage) return;\n const match = errorMessage.match(testResultErrorParseObj.pattern);\n if (match) {\n this.processedErrorMessageKeys.push(testResultErrorParseObj.key);\n this._addInformationalMessage(testResultErrorParseObj.message);\n }\n });\n });\n }\n }\n\n /**\n * @public\n *\n * Whether this reporter uses stdio for reporting. When it does not, Playwright Test could add some output to enhance\n * user experience. If your reporter does not print to the terminal, it is strongly recommended to return `false`.\n */\n printsToStdio(): boolean {\n return true;\n }\n}\nexport default MPTReporter;\n"]}
|
|
1
|
+
{"version":3,"file":"mptReporter.js","sourceRoot":"","sources":["../../src/reporter/mptReporter.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type {\n FullResult,\n TestCase,\n TestResult,\n FullConfig,\n Reporter,\n Suite,\n} from \"@playwright/test/reporter\";\nimport { reporterLogger } from \"../common/logger\";\nimport {\n Constants,\n InternalEnvironmentVariables,\n TestResultErrorConstants,\n} from \"../common/constants\";\nimport { EnvironmentVariables } from \"../common/environmentVariables\";\nimport { MultiMap } from \"../common/multimap\";\nimport { EntraTokenDetails } from \"../model/entraTokenDetails\";\nimport { MPTTokenDetails, TokenType } from \"../model/mptTokenDetails\";\nimport { Shard, UploadMetadata } from \"../model/shard\";\nimport { StorageUri } from \"../model/storageUri\";\nimport { TestResult as MPTTestResult, RawTestResult } from \"../model/testResult\";\nimport { TestRun } from \"../model/testRun\";\nimport { CIInfo, CIInfoProvider } from \"../utils/cIInfoProvider\";\nimport ReporterUtils from \"../utils/reporterUtils\";\nimport { ServiceClient } from \"../utils/serviceClient\";\nimport { StorageClient } from \"../utils/storageClient\";\nimport { MPTReporterConfig } from \"../common/types\";\nimport { ServiceErrorMessageConstants } from \"../common/messages\";\nimport { validateMptPAT, populateValuesFromServiceUrl } from \"../utils/utils\";\n\n/**\n * @public\n *\n * Extends Playwright's Reporter class to enable Microsoft Playwright Testing's Reporting\n * feature to publish test results and related artifacts and\n * view them in the service portal for faster and easier troubleshooting.\n *\n * @example\n *\n * ```\n * import { defineConfig } from \"@playwright/test\";\n *\n * export default defineConfig({\n * reporter: [[\"@azure/microsoft-playwright-testing/reporter\"]]\n * });\n * ```\n */\nclass MPTReporter implements Reporter {\n private isTokenValid: boolean = true;\n private enableGitHubSummary = true;\n private isRegionValid: boolean = true;\n private shard!: Shard;\n private isTestRunStartSuccess: boolean = false;\n private ciInfo: CIInfo = CIInfoProvider.getCIInfo();\n private serviceClient!: ServiceClient;\n private storageClient!: StorageClient;\n private reporterUtils!: ReporterUtils;\n private envVariables!: EnvironmentVariables;\n private testRawResults = new MultiMap<string, string>();\n private promiseOnBegin!: Promise<boolean>;\n private _testEndPromises: Promise<void>[] = [];\n private testResultBatch: Set<MPTTestResult> = new Set<MPTTestResult>();\n private errorMessages: string[] = [];\n private informationalMessages: string[] = [];\n private processedErrorMessageKeys: string[] = [];\n private sasUri!: StorageUri;\n private uploadMetadata: UploadMetadata = {\n numTestResults: 0,\n numTotalAttachments: 0,\n sizeTotalAttachments: 0,\n };\n private numWorkers: number = -1;\n private testRunUrl: string = \"\";\n private enableResultPublish: boolean = true;\n\n constructor(config: Partial<MPTReporterConfig>) {\n if (config?.enableGitHubSummary !== undefined) {\n this.enableGitHubSummary = config.enableGitHubSummary;\n }\n if (config?.enableResultPublish !== undefined) {\n this.enableResultPublish = config.enableResultPublish;\n }\n }\n private _addError(errorMessage: string): void {\n if (this.errorMessages.length < Constants.ERROR_MESSAGES_MAX_LENGTH) {\n this.errorMessages.push(this.reporterUtils.redactAccessToken(errorMessage));\n }\n }\n\n private _addInformationalMessage = (message: string): void => {\n this.informationalMessages.push(message);\n };\n\n private _addKeyToInformationMessage = (key: string): void => {\n this.processedErrorMessageKeys.push(key);\n };\n\n private _isInformationMessagePresent = (key: string): boolean => {\n return this.processedErrorMessageKeys.includes(key);\n };\n private _reporterFailureHandler = (error: { key: string; message: string }): void => {\n if (!this._isInformationMessagePresent(error.key)) {\n this._addKeyToInformationMessage(error.key);\n this._addInformationalMessage(error.message);\n }\n this.isTokenValid = false;\n };\n /**\n * @public\n *\n * Called once before running tests.\n *\n * @param config - Resolved configuration.\n * @param suite - The root suite that contains all projects, files and test cases.\n */\n onBegin(config: FullConfig, suite: Suite): void {\n if (!this.enableResultPublish) return;\n this.initializeMPTReporter();\n this.reporterUtils = new ReporterUtils(this.envVariables, config, suite);\n if (this.isTokenValid && this.isRegionValid) {\n this.serviceClient = new ServiceClient(\n this.envVariables,\n this.reporterUtils,\n this._addInformationalMessage,\n this._isInformationMessagePresent,\n this._addKeyToInformationMessage,\n );\n this.promiseOnBegin = this._onBegin();\n }\n }\n\n /**\n * @public\n *\n * Called after a test has been finished in the worker process.\n *\n * @param test - Test that has been finished.\n * @param result - Result of the test run.\n */\n onTestEnd(test: TestCase, result: TestResult): void {\n this.numWorkers = Math.max(this.numWorkers, result.parallelIndex + 1);\n this.processTestResult(result);\n if (!this.enableResultPublish) return;\n // Process test result\n this._onTestEnd(test, result);\n // Upload the test results batch\n try {\n if (this.testResultBatch.size >= Constants.TEST_BATCH_SIZE) {\n const currResultBatch: MPTTestResult[] = [...this.testResultBatch];\n if (this.isTestRunStartSuccess) {\n this._testEndPromises.push(this.serviceClient.postTestResults(currResultBatch));\n reporterLogger.info(`\\nAdded test results batch for upload.`);\n this.testResultBatch.clear();\n }\n }\n } catch (err: any) {\n this._addError(`Name: ${err.name}, Message: ${err.message}, Stack: ${err.stack}`);\n reporterLogger.error(`\\nError in uploading test results: ${err.message}.`);\n }\n }\n\n /**\n * @public\n *\n * Called after all tests have been run, or testing has been interrupted. Note that this method may return a [Promise]\n * and Playwright Test will await it. Reporter is allowed to override the status and hence affect the exit code of the\n * test runner.\n *\n * @param result - Result of the full test run, `status` can be one of:\n * - `'passed'` - Everything went as expected.\n * - `'failed'` - Any test has failed.\n * - `'timedout'` - The\n * {@link https://playwright.dev/docs/api/class-testconfig#test-config-global-timeout | testConfig.globalTimeout} has\n * been reached.\n * - `'interrupted'` - Interrupted by the user.\n */\n async onEnd(result: FullResult): Promise<void> {\n if (this.enableResultPublish) {\n await this._onEnd(result);\n if (!this.isTestRunStartSuccess) {\n this._addError(`\\nUnable to initialize test run report.`);\n } else {\n let count: number = 0;\n process.stdout.write(\"\\nUploading test results.\");\n await Promise.allSettled(this._testEndPromises).then((values) => {\n values.forEach((value) => {\n if (value.status === \"fulfilled\") {\n count++;\n this.reporterUtils.progressBar(count, this._testEndPromises.length);\n }\n return value.status;\n });\n reporterLogger.info(`\\nTest result processing completed.`);\n return values;\n });\n try {\n await this.serviceClient.postTestRunShardEnd(\n result,\n this.shard,\n this.errorMessages,\n this.uploadMetadata,\n this.numWorkers,\n );\n reporterLogger.info(`\\nTest run successfully uploaded.`);\n\n if (this.enableGitHubSummary) {\n this.reporterUtils.generateMarkdownSummary(this.testRunUrl);\n }\n\n process.stdout.write(`\\nTest report: ${this.testRunUrl}\\n`);\n } catch (err: any) {\n this._addError(`Name: ${err.name}, Message: ${err.message}, Stack: ${err.stack}`);\n reporterLogger.error(`\\nError in completing test run: ${err.message}`);\n process.stdout.write(`\\nUnable to complete test results upload.`);\n }\n }\n }\n this.displayAdditionalInformation();\n }\n\n private async _onBegin(): Promise<boolean> {\n process.stdout.write(`\\n`);\n try {\n const testRunResponse: TestRun | undefined = await this.serviceClient.patchTestRun(\n this.ciInfo,\n );\n reporterLogger.info(\n `\\nTest run report successfully initialized: ${testRunResponse?.displayName}.`,\n );\n process.stdout.write(\n `Initializing reporting for this test run. You can view the results at: https://playwright.microsoft.com/workspaces/${encodeURIComponent(this.envVariables.accountId!)}/runs/${encodeURIComponent(this.envVariables.runId!)}\\n`,\n );\n const shardResponse = await this.serviceClient.postTestRunShardStart();\n this.shard = shardResponse;\n // Set test report link as environment variable. If/else to check if environment variable defined or not.\n if (\n Constants.DEFAULT_SERVICE_ENDPOINT &&\n this.envVariables.accountId &&\n this.envVariables.runId\n ) {\n this.testRunUrl = `${Constants.DEFAULT_DASHBOARD_ENDPOINT}/workspaces/${encodeURIComponent(\n this.envVariables.accountId,\n )}/runs/${encodeURIComponent(this.envVariables.runId)}`;\n }\n return true;\n } catch (err: any) {\n this._addError(`Name: ${err.name}, Message: ${err.message}, Stack: ${err.stack}`);\n reporterLogger.error(`\\nError in initializing test run report: ${err.message}.`);\n return false;\n }\n }\n\n private async _onTestEnd(test: TestCase, result: TestResult): Promise<undefined> {\n try {\n this.isTestRunStartSuccess = await this.promiseOnBegin;\n if (!this.isTestRunStartSuccess) {\n this._addError(`\\nUnable to initialize test run report.`);\n return;\n }\n this.uploadMetadata.numTestResults++;\n const testResultObject: MPTTestResult = this.reporterUtils.getTestResultObject(\n test,\n result,\n this.ciInfo.jobId!,\n );\n this.testResultBatch.add(testResultObject);\n // Store test attachments in array\n const testAttachments: string[] = [];\n for (const attachment of result.attachments) {\n if (attachment.path !== undefined && attachment.path !== \"\") {\n testAttachments.push(attachment.path);\n this.uploadMetadata.numTotalAttachments++;\n this.uploadMetadata.sizeTotalAttachments += ReporterUtils.getFileSize(attachment.path);\n }\n }\n\n // Get raw result object and store it in map\n const rawTestResult: RawTestResult = this.reporterUtils.getRawTestResultObject(result);\n this.testRawResults.set(testResultObject.testExecutionId, JSON.stringify(rawTestResult));\n this._testEndPromises.push(\n this._uploadTestResultAttachments(testResultObject.testExecutionId, testAttachments),\n );\n } catch (err: any) {\n this._addError(`Name: ${err.name}, Message: ${err.message}, Stack: ${err.stack}`);\n reporterLogger.error(`\\nError in processing test result: ${err.message}.`);\n }\n }\n\n private async _onEnd(_: FullResult): Promise<void> {\n this.isTestRunStartSuccess = await this.promiseOnBegin;\n if (!this.isTestRunStartSuccess) {\n this._addError(`\\nUnable to initialize test run report.`);\n return;\n }\n try {\n // Upload the remaining test results\n if (this.testResultBatch.size > 0) {\n await this.serviceClient.postTestResults([...this.testResultBatch]);\n reporterLogger.info(`\\nUploaded test results batch successfully.`);\n this.testResultBatch.clear();\n }\n } catch (err: any) {\n this._addError(`Name: ${err.name}, Message: ${err.message}, Stack: ${err.stack}`);\n reporterLogger.error(`\\nError in uploading test run information: ${err.message}`);\n }\n }\n\n private async _uploadTestResultAttachments(\n testExecutionId: string,\n testAttachments: string[],\n ): Promise<void> {\n try {\n this.isTestRunStartSuccess = await this.promiseOnBegin;\n if (!this.isTestRunStartSuccess) {\n this._addError(`\\nUnable to initialize test run report.`);\n return;\n }\n for (const attachmentPath of testAttachments) {\n const fileRelativePath = `${testExecutionId}/${ReporterUtils.getFileRelativePath(\n attachmentPath,\n )}`;\n if (\n this.sasUri === undefined ||\n !ReporterUtils.isTimeGreaterThanCurrentPlus10Minutes(this.sasUri)\n ) {\n // Renew the sas uri\n this.sasUri = await this.serviceClient.createStorageUri();\n reporterLogger.info(\n `\\nFetched SAS URI with validity: ${this.sasUri.expiresAt} and access: ${this.sasUri.accessLevel}.`,\n );\n }\n this.storageClient.uploadFile(this.sasUri.uri, attachmentPath, fileRelativePath);\n }\n const rawTestResult = this.testRawResults.get(testExecutionId);\n if (\n this.sasUri === undefined ||\n !ReporterUtils.isTimeGreaterThanCurrentPlus10Minutes(this.sasUri)\n ) {\n // Renew the sas uri\n this.sasUri = await this.serviceClient.createStorageUri();\n }\n this.storageClient.uploadBuffer(\n this.sasUri.uri,\n rawTestResult[0]!,\n `${testExecutionId}/rawTestResult.json`,\n );\n } catch (err: any) {\n this._addError(`Name: ${err.name}, Message: ${err.message}, Stack: ${err.stack}`);\n reporterLogger.error(`\\nError in uploading test result attachments: ${err.message}`);\n }\n }\n\n private initializeMPTReporter(): void {\n this.envVariables = new EnvironmentVariables();\n if (process.env[InternalEnvironmentVariables.MPT_SETUP_FATAL_ERROR] === \"true\") {\n this.isTokenValid = false;\n return;\n }\n if (!process.env[\"PLAYWRIGHT_SERVICE_REPORTING_URL\"]) {\n process.stdout.write(\"\\nReporting service url not found.\");\n this.isTokenValid = false;\n return;\n }\n reporterLogger.info(`Reporting url - ${process.env[\"PLAYWRIGHT_SERVICE_REPORTING_URL\"]}`);\n if (this.envVariables.accessToken === undefined || this.envVariables.accessToken === \"\") {\n process.stdout.write(`\\n${ServiceErrorMessageConstants.NO_AUTH_ERROR.message}`);\n this.isTokenValid = false;\n } else if (ReporterUtils.hasAudienceClaim(this.envVariables.accessToken)) {\n const result = populateValuesFromServiceUrl();\n this.envVariables.region = result!.region;\n this.envVariables.accountId = result!.accountId;\n const entraTokenDetails: EntraTokenDetails = ReporterUtils.getTokenDetails<EntraTokenDetails>(\n this.envVariables.accessToken,\n TokenType.ENTRA,\n );\n this.envVariables.userId = entraTokenDetails.oid;\n this.envVariables.userName = entraTokenDetails.name;\n } else {\n const mptTokenDetails: MPTTokenDetails = ReporterUtils.getTokenDetails<MPTTokenDetails>(\n this.envVariables.accessToken,\n TokenType.MPT,\n );\n validateMptPAT(this._reporterFailureHandler);\n this.envVariables.accountId = mptTokenDetails.aid;\n this.envVariables.userId = mptTokenDetails.oid;\n this.envVariables.userName = mptTokenDetails.userName;\n this.envVariables.region = ReporterUtils.getRegionFromAccountID(this.envVariables.accountId!);\n }\n this.storageClient = new StorageClient();\n if (\n this.envVariables.region &&\n !Constants.SupportedRegions.includes(this.envVariables.region!) &&\n this.isTokenValid\n ) {\n process.stdout.write(\n `\\nUnsupported region's workspace used to generate the input Access Token; the supported regions are ${Constants.SupportedRegions.join(\n \", \",\n )}`,\n );\n this.isRegionValid = false;\n }\n if (this.envVariables.runId === undefined || this.envVariables.runId === \"\") {\n this.envVariables.runId = ReporterUtils.getRunId(this.ciInfo);\n }\n }\n\n private displayAdditionalInformation(): void {\n if (this.informationalMessages.length > 0) console.info(); // Add a new line before displaying the messages\n this.informationalMessages.forEach((message, index) => {\n console.info(`${index + 1}. ${message}`);\n });\n }\n\n private processTestResult(result: TestResult): void {\n if (\n process.env[InternalEnvironmentVariables.MPT_CLOUD_HOSTED_BROWSER_USED] &&\n result.status !== \"passed\"\n ) {\n result.errors.forEach((error) => {\n TestResultErrorConstants.forEach((testResultErrorParseObj) => {\n if (this.processedErrorMessageKeys.includes(testResultErrorParseObj.key)) {\n return;\n }\n const errorMessage = error.message;\n if (!errorMessage) return;\n const match = errorMessage.match(testResultErrorParseObj.pattern);\n if (match) {\n this.processedErrorMessageKeys.push(testResultErrorParseObj.key);\n this._addInformationalMessage(testResultErrorParseObj.message);\n }\n });\n });\n }\n }\n\n /**\n * @public\n *\n * Whether this reporter uses stdio for reporting. When it does not, Playwright Test could add some output to enhance\n * user experience. If your reporter does not print to the terminal, it is strongly recommended to return `false`.\n */\n printsToStdio(): boolean {\n return true;\n }\n}\nexport default MPTReporter;\n"]}
|
|
@@ -1 +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,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAEtE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAI5C,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;
|
|
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,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAEtE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAI5C,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"}
|
|
@@ -21,7 +21,9 @@ class ServiceClient {
|
|
|
21
21
|
}
|
|
22
22
|
async patchTestRun(ciInfo) {
|
|
23
23
|
const testRun = await this.reporterUtils.getTestRunObject(ciInfo);
|
|
24
|
-
|
|
24
|
+
// Escape the runId to avoid issues with special characters
|
|
25
|
+
const escapedRunId = encodeURIComponent(this.envVariables.runId);
|
|
26
|
+
const response = await this.httpService.callAPI("PATCH", `${this.getServiceEndpoint()}/${constants_1.Constants.testRunsEndpoint.replace("{workspaceId}", this.envVariables.accountId)}/${escapedRunId}?api-version=${constants_1.Constants.API_VERSION}`, JSON.stringify(testRun), this.envVariables.accessToken, "application/merge-patch+json", this.envVariables.correlationId);
|
|
25
27
|
if (response.status === 200) {
|
|
26
28
|
return JSON.parse(response.bodyAsText);
|
|
27
29
|
}
|
|
@@ -42,7 +44,8 @@ class ServiceClient {
|
|
|
42
44
|
}
|
|
43
45
|
async postTestRunShardStart() {
|
|
44
46
|
const postTestRunShardObject = this.reporterUtils.getTestRunShardStartObject();
|
|
45
|
-
const
|
|
47
|
+
const escapedRunId = encodeURIComponent(this.envVariables.runId);
|
|
48
|
+
const response = await this.httpService.callAPI("POST", `${this.getServiceEndpoint()}/${constants_1.Constants.testRunsShardEndpoint.replace("{workspaceId}", this.envVariables.accountId).replace("{testRunId}", escapedRunId)}/?api-version=${constants_1.Constants.API_VERSION}`, JSON.stringify(postTestRunShardObject), this.envVariables.accessToken, "application/json", this.envVariables.correlationId);
|
|
46
49
|
if (response.status === 200) {
|
|
47
50
|
return JSON.parse(response.bodyAsText);
|
|
48
51
|
}
|
|
@@ -53,7 +56,8 @@ class ServiceClient {
|
|
|
53
56
|
// eslint-disable-next-line @azure/azure-sdk/ts-use-interface-parameters
|
|
54
57
|
shard, errorMessages, attachmentMetadata, workers) {
|
|
55
58
|
const postTestRunShardObject = this.reporterUtils.getTestRunShardEndObject(result, shard, errorMessages, attachmentMetadata, workers);
|
|
56
|
-
const
|
|
59
|
+
const escapedRunId = encodeURIComponent(this.envVariables.runId);
|
|
60
|
+
const response = await this.httpService.callAPI("POST", `${this.getServiceEndpoint()}/${constants_1.Constants.testRunsShardEndpoint.replace("{workspaceId}", this.envVariables.accountId).replace("{testRunId}", escapedRunId)}/?api-version=${constants_1.Constants.API_VERSION}`, JSON.stringify(postTestRunShardObject), this.envVariables.accessToken, "application/json", this.envVariables.correlationId);
|
|
57
61
|
if (response.status === 200) {
|
|
58
62
|
return JSON.parse(response.bodyAsText);
|
|
59
63
|
}
|
|
@@ -77,7 +81,8 @@ class ServiceClient {
|
|
|
77
81
|
}
|
|
78
82
|
}
|
|
79
83
|
async createStorageUri() {
|
|
80
|
-
const
|
|
84
|
+
const escapedRunId = encodeURIComponent(this.envVariables.runId);
|
|
85
|
+
const response = await this.httpService.callAPI("POST", `${this.getServiceEndpoint()}/${constants_1.Constants.storageUriEndpoint.replace("{workspaceId}", this.envVariables.accountId).replace("{testRunId}", escapedRunId)}?api-version=${constants_1.Constants.API_VERSION}`, null, this.envVariables.accessToken, "application/json", this.envVariables.correlationId);
|
|
81
86
|
if (response.status === 200) {
|
|
82
87
|
return JSON.parse(response.bodyAsText);
|
|
83
88
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serviceClient.js","sourceRoot":"","sources":["../../src/utils/serviceClient.ts"],"names":[],"mappings":";AAAA,uCAAuC;AACvC,kCAAkC;;;AAGlC,mDAAgD;AAEhD,uDAAoD;AAQpD,6CAAkD;AAElD,MAAa,aAAa;IAOxB;IACE,iEAAiE;IACjE,YAAkC,EAClC,aAA4B;IAC5B,gEAAgE;IAChE,mBAAmD,EACnD,2BAAqD,EACrD,0BAAiD;QAEjD,IAAI,CAAC,WAAW,GAAG,IAAI,yBAAW,EAAE,CAAC;QACrC,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,uBAAuB,GAAG,mBAAmB,CAAC;QACnD,IAAI,CAAC,2BAA2B,GAAG,2BAA2B,CAAC;QAC/D,IAAI,CAAC,0BAA0B,GAAG,0BAA0B,CAAC;IAC/D,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,MAAc;QAC/B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAClE,MAAM,QAAQ,GAAqB,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAC/D,OAAO,EACP,GAAG,IAAI,CAAC,kBAAkB,EAAE,IAAI,qBAAS,CAAC,gBAAgB,CAAC,OAAO,CAAC,eAAe,EAAE,IAAI,CAAC,YAAY,CAAC,SAAU,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,gBAAgB,qBAAS,CAAC,WAAW,EAAE,EACnL,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EACvB,IAAI,CAAC,YAAY,CAAC,WAAW,EAC7B,8BAA8B,EAC9B,IAAI,CAAC,YAAY,CAAC,aAAc,CACjC,CAAC;QACF,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAW,CAAY,CAAC;QACrD,CAAC;aAAM,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACnC,MAAM,YAAY,GAAG,qBAAS,CAAC,0BAA0B,CAAC,OAAO,CAC/D,SAAS,EACT,IAAI,CAAC,YAAY,CAAC,KAAK,CACxB,CAAC;YACF,IAAI,CAAC,uBAAuB,CAAC,YAAY,CAAC,CAAC;YAC3C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,YAAY,EAAE,CAAC,CAAC;QAC5C,CAAC;aAAM,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACnC,MAAM,YAAY,GAAG,qBAAS,CAAC,2BAA2B,CAAC,OAAO,CAChE,IAAI,MAAM,CAAC,eAAe,EAAE,GAAG,CAAC,EAChC,IAAI,CAAC,YAAY,CAAC,SAAU,CAC7B,CAAC;YACF,IAAI,CAAC,uBAAuB,CAAC,YAAY,CAAC,CAAC;YAC3C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,YAAY,EAAE,CAAC,CAAC;QAC5C,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,qBAAS,CAAC,YAAY,CAAC,CAAC;QAC7D,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,mBAAmB,QAAQ,CAAC,MAAM,wCAAwC,CAAC,CAAC;IAC9F,CAAC;IAED,KAAK,CAAC,qBAAqB;QACzB,MAAM,sBAAsB,GAAG,IAAI,CAAC,aAAa,CAAC,0BAA0B,EAAE,CAAC;QAC/E,MAAM,QAAQ,GAAqB,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAC/D,MAAM,EACN,GAAG,IAAI,CAAC,kBAAkB,EAAE,IAAI,qBAAS,CAAC,qBAAqB,CAAC,OAAO,CAAC,eAAe,EAAE,IAAI,CAAC,YAAY,CAAC,SAAU,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,iBAAiB,qBAAS,CAAC,WAAW,EAAE,EAC9M,IAAI,CAAC,SAAS,CAAC,sBAAsB,CAAC,EACtC,IAAI,CAAC,YAAY,CAAC,WAAW,EAC7B,kBAAkB,EAClB,IAAI,CAAC,YAAY,CAAC,aAAc,CACjC,CAAC;QACF,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAW,CAAU,CAAC;QACnD,CAAC;QACD,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,qBAAS,CAAC,sBAAsB,CAAC,CAAC;QAErE,MAAM,IAAI,KAAK,CACb,mBAAmB,QAAQ,CAAC,MAAM,oDAAoD,CACvF,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,mBAAmB,CACvB,MAAkB;IAClB,wEAAwE;IACxE,KAAY,EACZ,aAAuB,EACvB,kBAAkC,EAClC,OAAe;QAEf,MAAM,sBAAsB,GAAG,IAAI,CAAC,aAAa,CAAC,wBAAwB,CACxE,MAAM,EACN,KAAK,EACL,aAAa,EACb,kBAAkB,EAClB,OAAO,CACR,CAAC;QACF,MAAM,QAAQ,GAAqB,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAC/D,MAAM,EACN,GAAG,IAAI,CAAC,kBAAkB,EAAE,IAAI,qBAAS,CAAC,qBAAqB,CAAC,OAAO,CAAC,eAAe,EAAE,IAAI,CAAC,YAAY,CAAC,SAAU,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,iBAAiB,qBAAS,CAAC,WAAW,EAAE,EAC9M,IAAI,CAAC,SAAS,CAAC,sBAAsB,CAAC,EACtC,IAAI,CAAC,YAAY,CAAC,WAAW,EAC7B,kBAAkB,EAClB,IAAI,CAAC,YAAY,CAAC,aAAc,CACjC,CAAC;QACF,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAW,CAAY,CAAC;QACrD,CAAC;QACD,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,qBAAS,CAAC,oBAAoB,CAAC,CAAC;QAEnE,MAAM,IAAI,KAAK,CACb,mBAAmB,QAAQ,CAAC,MAAM,kDAAkD,CACrF,CAAC;IACJ,CAAC;IAED,wEAAwE;IACxE,KAAK,CAAC,eAAe,CAAC,WAAyB;QAC7C,IAAI,CAAC;YACH,MAAM,OAAO,GAAQ;gBACnB,KAAK,EAAE,WAAW;aACnB,CAAC;YACF,MAAM,QAAQ,GAAqB,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAC/D,MAAM,EACN,GAAG,IAAI,CAAC,kBAAkB,EAAE,IAAI,qBAAS,CAAC,mBAAmB,CAAC,OAAO,CAAC,eAAe,EAAE,IAAI,CAAC,YAAY,CAAC,SAAU,CAAC,gBAAgB,qBAAS,CAAC,WAAW,EAAE,EAC3J,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EACvB,IAAI,CAAC,YAAY,CAAC,WAAW,EAC7B,kBAAkB,EAClB,IAAI,CAAC,YAAY,CAAC,aAAc,CACjC,CAAC;YACF,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBAC5B,OAAO;YACT,CAAC;YACD,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,qBAAS,CAAC,eAAe,CAAC,CAAC;QAChE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,uBAAc,CAAC,KAAK,CAAC,8CAA8C,KAAK,EAAE,CAAC,CAAC;QAC9E,CAAC;IACH,CAAC;IAED,KAAK,CAAC,gBAAgB;QACpB,MAAM,QAAQ,GAAqB,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAC/D,MAAM,EACN,GAAG,IAAI,CAAC,kBAAkB,EAAE,IAAI,qBAAS,CAAC,kBAAkB,CAAC,OAAO,CAAC,eAAe,EAAE,IAAI,CAAC,YAAY,CAAC,SAAU,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,gBAAgB,qBAAS,CAAC,WAAW,EAAE,EAC1M,IAAI,EACJ,IAAI,CAAC,YAAY,CAAC,WAAW,EAC7B,kBAAkB,EAClB,IAAI,CAAC,YAAY,CAAC,aAAc,CACjC,CAAC;QACF,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAW,CAAe,CAAC;QACxD,CAAC;QACD,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,qBAAS,CAAC,aAAa,CAAC,CAAC;QAE5D,MAAM,IAAI,KAAK,CAAC,mBAAmB,QAAQ,CAAC,MAAM,yCAAyC,CAAC,CAAC;IAC/F,CAAC;IAEO,kBAAkB;QACxB,OAAO,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAE,CAAC;IAC1D,CAAC;IAEO,mBAAmB,CAAC,QAA0B,EAAE,MAAc;;QACpE,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC;QACnC,MAAM,YAAY,GAAG,MAAA,MAAA,qBAAS,CAAC,aAAa,CAAC,MAAM,CAAC,0CAAG,UAAU,CAAC,mCAAI,wBAAwB,CAAC;QAC/F,IAAI,CAAC,IAAI,CAAC,2BAA2B,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC;YAC7D,IAAI,CAAC,0BAA0B,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;YACvD,IAAI,CAAC,uBAAuB,CAAC,YAAY,CAAC,CAAC;QAC7C,CAAC;QACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,YAAY,IAAI,CAAC,CAAC;IAC5C,CAAC;CACF;AAlKD,sCAkKC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { FullResult } from \"@playwright/test/reporter\";\nimport { Constants } from \"../common/constants\";\nimport { EnvironmentVariables } from \"../common/environmentVariables\";\nimport { HttpService } from \"../common/httpService\";\nimport { Shard, UploadMetadata } from \"../model/shard\";\nimport { StorageUri } from \"../model/storageUri\";\nimport { TestResult } from \"../model/testResult\";\nimport { TestRun } from \"../model/testRun\";\nimport { CIInfo } from \"./cIInfoProvider\";\nimport ReporterUtils from \"./reporterUtils\";\nimport { PipelineResponse } from \"@azure/core-rest-pipeline\";\nimport { reporterLogger } from \"../common/logger\";\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 const response: PipelineResponse = await this.httpService.callAPI(\n \"PATCH\",\n `${this.getServiceEndpoint()}/${Constants.testRunsEndpoint.replace(\"{workspaceId}\", this.envVariables.accountId!)}/${this.envVariables.runId}?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 response: PipelineResponse = await this.httpService.callAPI(\n \"POST\",\n `${this.getServiceEndpoint()}/${Constants.testRunsShardEndpoint.replace(\"{workspaceId}\", this.envVariables.accountId!).replace(\"{testRunId}\", this.envVariables.runId)}/?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 response: PipelineResponse = await this.httpService.callAPI(\n \"POST\",\n `${this.getServiceEndpoint()}/${Constants.testRunsShardEndpoint.replace(\"{workspaceId}\", this.envVariables.accountId!).replace(\"{testRunId}\", this.envVariables.runId)}/?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 response: PipelineResponse = await this.httpService.callAPI(\n \"POST\",\n `${this.getServiceEndpoint()}/${Constants.storageUriEndpoint.replace(\"{workspaceId}\", this.envVariables.accountId!).replace(\"{testRunId}\", this.envVariables.runId)}?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[\"PLAYWRIGHT_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"]}
|
|
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 } from \"../common/constants\";\nimport { EnvironmentVariables } from \"../common/environmentVariables\";\nimport { HttpService } from \"../common/httpService\";\nimport { Shard, UploadMetadata } from \"../model/shard\";\nimport { StorageUri } from \"../model/storageUri\";\nimport { TestResult } from \"../model/testResult\";\nimport { TestRun } from \"../model/testRun\";\nimport { CIInfo } from \"./cIInfoProvider\";\nimport ReporterUtils from \"./reporterUtils\";\nimport { PipelineResponse } from \"@azure/core-rest-pipeline\";\nimport { reporterLogger } from \"../common/logger\";\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[\"PLAYWRIGHT_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"]}
|
package/dist/utils/utils.js
CHANGED
|
@@ -64,7 +64,7 @@ const getAndSetRunId = () => {
|
|
|
64
64
|
};
|
|
65
65
|
exports.getAndSetRunId = getAndSetRunId;
|
|
66
66
|
const getServiceWSEndpoint = (runId, runName, os) => {
|
|
67
|
-
return `${(0, exports.getServiceBaseURL)()}?runId=${runId}&runName=${runName}&os=${os}&api-version=${constants_1.API_VERSION}`;
|
|
67
|
+
return `${(0, exports.getServiceBaseURL)()}?runId=${encodeURIComponent(runId)}&runName=${encodeURIComponent(runName)}&os=${os}&api-version=${constants_1.API_VERSION}`;
|
|
68
68
|
};
|
|
69
69
|
exports.getServiceWSEndpoint = getServiceWSEndpoint;
|
|
70
70
|
const validateServiceUrl = () => {
|
package/dist/utils/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils/utils.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { JwtPayload, VersionInfo } from \"../common/types\";\nimport {\n API_VERSION,\n InternalEnvironmentVariables,\n MINIMUM_SUPPORTED_PLAYWRIGHT_VERSION,\n ServiceEnvironmentVariable,\n} from \"../common/constants\";\nimport { ServiceErrorMessageConstants } from \"../common/messages\";\nimport { EntraIdAccessToken } from \"../common/entraIdAccessToken\";\nimport { coreLogger } from \"../common/logger\";\nimport type { TokenCredential } from \"@azure/identity\";\nimport ReporterUtils from \"./reporterUtils\";\nimport { CIInfoProvider } from \"./cIInfoProvider\";\nimport { getPackageManager } from \"./packageManager\";\nimport { execSync } from \"child_process\";\n\nexport const exitWithFailureMessage = (error: { key: string; message: string }): never => {\n console.log();\n console.error(error.message);\n // eslint-disable-next-line n/no-process-exit\n process.exit(1);\n};\nexport const base64UrlDecode = (base64Url: string): string => {\n const base64 = base64Url.replace(/-/g, \"+\").replace(/_/g, \"/\");\n const buffer = Buffer.from(base64, \"base64\");\n return buffer.toString(\"utf-8\");\n};\n\nexport const populateValuesFromServiceUrl = (): { region: string; accountId: string } | null => {\n // Service URL format: wss://<region>.api.playwright.microsoft.com/accounts/<workspace-id>/browsers\n const url = process.env[\"PLAYWRIGHT_SERVICE_URL\"]!;\n if (!ReporterUtils.isNullOrEmpty(url)) {\n const parts = url.split(\"/\");\n\n if (parts.length > 2) {\n const subdomainParts = parts[2]!.split(\".\");\n const region = subdomainParts.length > 0 ? subdomainParts[0] : null;\n const accountId = parts[4];\n\n return { region: region!, accountId: accountId! };\n }\n }\n return null;\n};\nexport const parseJwt = <T = JwtPayload>(token: string): T => {\n const parts = token.split(\".\");\n if (parts.length !== 3) {\n throw new Error(\"Invalid JWT token.\");\n }\n const payload = base64UrlDecode(parts[1]!);\n return JSON.parse(payload) as T;\n};\n\nexport const getAccessToken = (): string | undefined => {\n return process.env[ServiceEnvironmentVariable.PLAYWRIGHT_SERVICE_ACCESS_TOKEN];\n};\n\nexport const getServiceBaseURL = (): string | undefined => {\n return process.env[ServiceEnvironmentVariable.PLAYWRIGHT_SERVICE_URL];\n};\n\nexport const getAndSetRunId = (): string => {\n const runId = ReporterUtils.getRunId(CIInfoProvider.getCIInfo());\n process.env[InternalEnvironmentVariables.MPT_SERVICE_RUN_ID] = runId;\n return runId;\n};\n\nexport const getServiceWSEndpoint = (runId: string, runName: string, os: string): string => {\n return `${getServiceBaseURL()}?runId=${runId}&runName=${runName}&os=${os}&api-version=${API_VERSION}`;\n};\n\nexport const validateServiceUrl = (): void => {\n const serviceUrl = getServiceBaseURL();\n if (!serviceUrl) {\n exitWithFailureMessage(ServiceErrorMessageConstants.NO_SERVICE_URL_ERROR);\n }\n};\n\nexport const validateMptPAT = (\n validationFailureCallback: (error: { key: string; message: string }) => void,\n): void => {\n try {\n const accessToken = getAccessToken();\n const result = populateValuesFromServiceUrl();\n if (!accessToken) {\n validationFailureCallback(ServiceErrorMessageConstants.NO_AUTH_ERROR);\n }\n const claims = parseJwt<JwtPayload>(accessToken!);\n if (!claims.exp) {\n validationFailureCallback(ServiceErrorMessageConstants.INVALID_MPT_PAT_ERROR);\n }\n if (Date.now() >= claims.exp! * 1000) {\n validationFailureCallback(ServiceErrorMessageConstants.EXPIRED_MPT_PAT_ERROR);\n }\n if (result!.accountId !== claims!.aid) {\n validationFailureCallback(ServiceErrorMessageConstants.WORKSPACE_MISMATCH_ERROR);\n }\n } catch (err) {\n coreLogger.error(err);\n exitWithFailureMessage(ServiceErrorMessageConstants.INVALID_MPT_PAT_ERROR);\n }\n};\n\nexport const fetchOrValidateAccessToken = async (credential?: TokenCredential): Promise<string> => {\n const entraIdAccessToken = new EntraIdAccessToken(credential);\n if (entraIdAccessToken.token && entraIdAccessToken.doesEntraIdAccessTokenNeedRotation()) {\n await entraIdAccessToken.fetchEntraIdAccessToken();\n }\n if (!getAccessToken()) {\n throw new Error(ServiceErrorMessageConstants.NO_AUTH_ERROR.message);\n }\n return getAccessToken()!;\n};\n\nexport const emitReportingUrl = (): void => {\n const regex =\n /wss:\\/\\/([\\w-]+)\\.api\\.(playwright(?:-test|-int)?\\.io|playwright\\.microsoft\\.com)\\//;\n const url = getServiceBaseURL();\n const match = url?.match(regex);\n if (match && match.length >= 3) {\n const [, region, domain] = match;\n process.env[ServiceEnvironmentVariable.PLAYWRIGHT_SERVICE_REPORTING_URL] =\n `https://${region}.reporting.api.${domain}`;\n }\n};\n\nexport const getPlaywrightVersion = (): string => {\n if (process.env[InternalEnvironmentVariables.MPT_PLAYWRIGHT_VERSION]) {\n return process.env[InternalEnvironmentVariables.MPT_PLAYWRIGHT_VERSION]!;\n }\n\n const packageManager = getPackageManager();\n const command = packageManager.runCommand(\"playwright\", \"--version\");\n const stdout = execSync(command).toString().trim();\n const version = packageManager.getVersionFromStdout(stdout);\n process.env[InternalEnvironmentVariables.MPT_PLAYWRIGHT_VERSION] = version;\n coreLogger.info(\n `Playwright version being used - ${process.env[InternalEnvironmentVariables.MPT_PLAYWRIGHT_VERSION]}`,\n );\n return process.env[InternalEnvironmentVariables.MPT_PLAYWRIGHT_VERSION]!;\n};\n\nexport const getVersionInfo = (version: string): VersionInfo => {\n const regex = /^(\\d+)(?:\\.(\\d+))?(?:\\.(\\d+))?/;\n const match = version.match(regex);\n const versionInfo = {\n major: 0,\n minor: 0,\n patch: 0,\n };\n versionInfo.major = match && match[1] ? parseInt(match[1], 10) : 0;\n versionInfo.minor = match && match[2] ? parseInt(match[2], 10) : 0;\n versionInfo.patch = match && match[3] ? parseInt(match[3], 10) : 0;\n return versionInfo;\n};\n\nexport const validatePlaywrightVersion = (): void => {\n const minimumSupportedVersion = MINIMUM_SUPPORTED_PLAYWRIGHT_VERSION;\n const installedVersion = getPlaywrightVersion();\n\n const minimumSupportedVersionInfo = getVersionInfo(minimumSupportedVersion);\n const installedVersionInfo = getVersionInfo(installedVersion);\n const isInstalledVersionGreater =\n installedVersionInfo.major > minimumSupportedVersionInfo.major ||\n (installedVersionInfo.major === minimumSupportedVersionInfo.major &&\n installedVersionInfo.minor >= minimumSupportedVersionInfo.minor);\n if (!isInstalledVersionGreater) {\n exitWithFailureMessage(ServiceErrorMessageConstants.INVALID_PLAYWRIGHT_VERSION_ERROR);\n }\n};\n"]}
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils/utils.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { JwtPayload, VersionInfo } from \"../common/types\";\nimport {\n API_VERSION,\n InternalEnvironmentVariables,\n MINIMUM_SUPPORTED_PLAYWRIGHT_VERSION,\n ServiceEnvironmentVariable,\n} from \"../common/constants\";\nimport { ServiceErrorMessageConstants } from \"../common/messages\";\nimport { EntraIdAccessToken } from \"../common/entraIdAccessToken\";\nimport { coreLogger } from \"../common/logger\";\nimport type { TokenCredential } from \"@azure/identity\";\nimport ReporterUtils from \"./reporterUtils\";\nimport { CIInfoProvider } from \"./cIInfoProvider\";\nimport { getPackageManager } from \"./packageManager\";\nimport { execSync } from \"child_process\";\n\nexport const exitWithFailureMessage = (error: { key: string; message: string }): never => {\n console.log();\n console.error(error.message);\n // eslint-disable-next-line n/no-process-exit\n process.exit(1);\n};\nexport const base64UrlDecode = (base64Url: string): string => {\n const base64 = base64Url.replace(/-/g, \"+\").replace(/_/g, \"/\");\n const buffer = Buffer.from(base64, \"base64\");\n return buffer.toString(\"utf-8\");\n};\n\nexport const populateValuesFromServiceUrl = (): { region: string; accountId: string } | null => {\n // Service URL format: wss://<region>.api.playwright.microsoft.com/accounts/<workspace-id>/browsers\n const url = process.env[\"PLAYWRIGHT_SERVICE_URL\"]!;\n if (!ReporterUtils.isNullOrEmpty(url)) {\n const parts = url.split(\"/\");\n\n if (parts.length > 2) {\n const subdomainParts = parts[2]!.split(\".\");\n const region = subdomainParts.length > 0 ? subdomainParts[0] : null;\n const accountId = parts[4];\n\n return { region: region!, accountId: accountId! };\n }\n }\n return null;\n};\nexport const parseJwt = <T = JwtPayload>(token: string): T => {\n const parts = token.split(\".\");\n if (parts.length !== 3) {\n throw new Error(\"Invalid JWT token.\");\n }\n const payload = base64UrlDecode(parts[1]!);\n return JSON.parse(payload) as T;\n};\n\nexport const getAccessToken = (): string | undefined => {\n return process.env[ServiceEnvironmentVariable.PLAYWRIGHT_SERVICE_ACCESS_TOKEN];\n};\n\nexport const getServiceBaseURL = (): string | undefined => {\n return process.env[ServiceEnvironmentVariable.PLAYWRIGHT_SERVICE_URL];\n};\n\nexport const getAndSetRunId = (): string => {\n const runId = ReporterUtils.getRunId(CIInfoProvider.getCIInfo());\n process.env[InternalEnvironmentVariables.MPT_SERVICE_RUN_ID] = runId;\n return runId;\n};\n\nexport const getServiceWSEndpoint = (runId: string, runName: string, os: string): string => {\n return `${getServiceBaseURL()}?runId=${encodeURIComponent(runId)}&runName=${encodeURIComponent(runName)}&os=${os}&api-version=${API_VERSION}`;\n};\n\nexport const validateServiceUrl = (): void => {\n const serviceUrl = getServiceBaseURL();\n if (!serviceUrl) {\n exitWithFailureMessage(ServiceErrorMessageConstants.NO_SERVICE_URL_ERROR);\n }\n};\n\nexport const validateMptPAT = (\n validationFailureCallback: (error: { key: string; message: string }) => void,\n): void => {\n try {\n const accessToken = getAccessToken();\n const result = populateValuesFromServiceUrl();\n if (!accessToken) {\n validationFailureCallback(ServiceErrorMessageConstants.NO_AUTH_ERROR);\n }\n const claims = parseJwt<JwtPayload>(accessToken!);\n if (!claims.exp) {\n validationFailureCallback(ServiceErrorMessageConstants.INVALID_MPT_PAT_ERROR);\n }\n if (Date.now() >= claims.exp! * 1000) {\n validationFailureCallback(ServiceErrorMessageConstants.EXPIRED_MPT_PAT_ERROR);\n }\n if (result!.accountId !== claims!.aid) {\n validationFailureCallback(ServiceErrorMessageConstants.WORKSPACE_MISMATCH_ERROR);\n }\n } catch (err) {\n coreLogger.error(err);\n exitWithFailureMessage(ServiceErrorMessageConstants.INVALID_MPT_PAT_ERROR);\n }\n};\n\nexport const fetchOrValidateAccessToken = async (credential?: TokenCredential): Promise<string> => {\n const entraIdAccessToken = new EntraIdAccessToken(credential);\n if (entraIdAccessToken.token && entraIdAccessToken.doesEntraIdAccessTokenNeedRotation()) {\n await entraIdAccessToken.fetchEntraIdAccessToken();\n }\n if (!getAccessToken()) {\n throw new Error(ServiceErrorMessageConstants.NO_AUTH_ERROR.message);\n }\n return getAccessToken()!;\n};\n\nexport const emitReportingUrl = (): void => {\n const regex =\n /wss:\\/\\/([\\w-]+)\\.api\\.(playwright(?:-test|-int)?\\.io|playwright\\.microsoft\\.com)\\//;\n const url = getServiceBaseURL();\n const match = url?.match(regex);\n if (match && match.length >= 3) {\n const [, region, domain] = match;\n process.env[ServiceEnvironmentVariable.PLAYWRIGHT_SERVICE_REPORTING_URL] =\n `https://${region}.reporting.api.${domain}`;\n }\n};\n\nexport const getPlaywrightVersion = (): string => {\n if (process.env[InternalEnvironmentVariables.MPT_PLAYWRIGHT_VERSION]) {\n return process.env[InternalEnvironmentVariables.MPT_PLAYWRIGHT_VERSION]!;\n }\n\n const packageManager = getPackageManager();\n const command = packageManager.runCommand(\"playwright\", \"--version\");\n const stdout = execSync(command).toString().trim();\n const version = packageManager.getVersionFromStdout(stdout);\n process.env[InternalEnvironmentVariables.MPT_PLAYWRIGHT_VERSION] = version;\n coreLogger.info(\n `Playwright version being used - ${process.env[InternalEnvironmentVariables.MPT_PLAYWRIGHT_VERSION]}`,\n );\n return process.env[InternalEnvironmentVariables.MPT_PLAYWRIGHT_VERSION]!;\n};\n\nexport const getVersionInfo = (version: string): VersionInfo => {\n const regex = /^(\\d+)(?:\\.(\\d+))?(?:\\.(\\d+))?/;\n const match = version.match(regex);\n const versionInfo = {\n major: 0,\n minor: 0,\n patch: 0,\n };\n versionInfo.major = match && match[1] ? parseInt(match[1], 10) : 0;\n versionInfo.minor = match && match[2] ? parseInt(match[2], 10) : 0;\n versionInfo.patch = match && match[3] ? parseInt(match[3], 10) : 0;\n return versionInfo;\n};\n\nexport const validatePlaywrightVersion = (): void => {\n const minimumSupportedVersion = MINIMUM_SUPPORTED_PLAYWRIGHT_VERSION;\n const installedVersion = getPlaywrightVersion();\n\n const minimumSupportedVersionInfo = getVersionInfo(minimumSupportedVersion);\n const installedVersionInfo = getVersionInfo(installedVersion);\n const isInstalledVersionGreater =\n installedVersionInfo.major > minimumSupportedVersionInfo.major ||\n (installedVersionInfo.major === minimumSupportedVersionInfo.major &&\n installedVersionInfo.minor >= minimumSupportedVersionInfo.minor);\n if (!isInstalledVersionGreater) {\n exitWithFailureMessage(ServiceErrorMessageConstants.INVALID_PLAYWRIGHT_VERSION_ERROR);\n }\n};\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@azure/microsoft-playwright-testing",
|
|
3
|
-
"version": "1.0.0-alpha.
|
|
3
|
+
"version": "1.0.0-alpha.20241018.2",
|
|
4
4
|
"description": "Package to integrate your Playwright test suite with Microsoft Playwright Testing service",
|
|
5
5
|
"homepage": "https://github.com/Azure/azure-sdk-for-js/tree/main/sdk/playwrighttesting/microsoft-playwright-testing/README.md",
|
|
6
6
|
"sdk-type": "client",
|