@lokalise/playwright-reporters 1.3.0 → 1.4.0-beta.1
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/README.md +7 -3
- package/dist/playwright.config.js +3 -3
- package/dist/playwright.config.js.map +1 -1
- package/dist/src/analytics/elastic.d.ts +4 -1
- package/dist/src/analytics/elastic.js +14 -3
- package/dist/src/analytics/elastic.js.map +1 -1
- package/dist/src/analytics/logger.js.map +1 -1
- package/dist/src/analytics/reporter.d.ts +18 -8
- package/dist/src/analytics/reporter.js +76 -16
- package/dist/src/analytics/reporter.js.map +1 -1
- package/dist/src/analytics/tests/browserUsage.test.d.ts +1 -0
- package/dist/src/analytics/tests/browserUsage.test.js +39 -0
- package/dist/src/analytics/tests/browserUsage.test.js.map +1 -0
- package/dist/src/analytics/tests/transform.test.js +77 -77
- package/dist/src/analytics/tests/transform.test.js.map +1 -1
- package/dist/src/analytics/transform.d.ts +25 -10
- package/dist/src/analytics/transform.js +45 -19
- package/dist/src/analytics/transform.js.map +1 -1
- package/dist/src/index.d.ts +2 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/retry/reporter.d.ts +1 -1
- package/dist/src/retry/reporter.js +30 -32
- package/dist/src/retry/reporter.js.map +1 -1
- package/package.json +20 -17
package/README.md
CHANGED
|
@@ -5,7 +5,7 @@ This is a collection of reporters to use with our Playwright test frameworks.
|
|
|
5
5
|
## Key Features
|
|
6
6
|
|
|
7
7
|
- Retry reporter: Provides an easy way to retry failed tests on Jenkins or locally.
|
|
8
|
-
- Analytics reporter: Uploads test results to ElasticSearch for further analysis.
|
|
8
|
+
- Analytics reporter: Uploads test results and browser usage to ElasticSearch for further analysis.
|
|
9
9
|
|
|
10
10
|
## Getting Started
|
|
11
11
|
|
|
@@ -28,10 +28,14 @@ export default defineConfig({
|
|
|
28
28
|
flakyTestIndex: 'flaky_tests_0001',
|
|
29
29
|
failedTestIndex: 'non_passing_tests_0001',
|
|
30
30
|
testRunIndex: 'test_run_0001',
|
|
31
|
-
|
|
31
|
+
browserUsageIndex: 'browser_usage_0001',
|
|
32
|
+
elasticUrl: 'http://elasticUrl',
|
|
32
33
|
elasticToken: 'elasticToken',
|
|
33
34
|
currentBuildId: 'buildId',
|
|
34
|
-
debug:
|
|
35
|
+
debug: true,
|
|
36
|
+
dryRun: false,
|
|
37
|
+
prenvId: 'develop',
|
|
38
|
+
product: 'product',
|
|
35
39
|
})],
|
|
36
40
|
],
|
|
37
41
|
...
|
|
@@ -4,11 +4,11 @@ const test_1 = require("@playwright/test");
|
|
|
4
4
|
// eslint-disable-next-line import/no-default-export
|
|
5
5
|
exports.default = (0, test_1.defineConfig)({
|
|
6
6
|
retries: 0,
|
|
7
|
-
reporter: [[
|
|
7
|
+
reporter: [['list'], ['html', { open: 'never' }]],
|
|
8
8
|
projects: [
|
|
9
9
|
{
|
|
10
|
-
name:
|
|
11
|
-
testMatch:
|
|
10
|
+
name: 'analytics',
|
|
11
|
+
testMatch: 'src/analytics/tests/*.test.ts',
|
|
12
12
|
},
|
|
13
13
|
],
|
|
14
14
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"playwright.config.js","sourceRoot":"","sources":["../playwright.config.ts"],"names":[],"mappings":";;AAAA,
|
|
1
|
+
{"version":3,"file":"playwright.config.js","sourceRoot":"","sources":["../playwright.config.ts"],"names":[],"mappings":";;AAAA,2CAA+C;AAE/C,oDAAoD;AACpD,kBAAe,IAAA,mBAAY,EAAC;IAC3B,OAAO,EAAE,CAAC;IACV,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IACjD,QAAQ,EAAE;QACT;YACC,IAAI,EAAE,WAAW;YACjB,SAAS,EAAE,+BAA+B;SAC1C;KACD;CACD,CAAC,CAAA"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { type formBuildData, type formFailedTestData, type formFlakyTestData } from
|
|
1
|
+
import { type formBrowserUsageData, type formBuildData, type formFailedTestData, type formFlakyTestData } from './transform';
|
|
2
2
|
export interface ElasticConfig {
|
|
3
3
|
flakyTestIndex: string;
|
|
4
4
|
failedTestIndex: string;
|
|
5
5
|
testRunIndex: string;
|
|
6
|
+
browserUsageIndex?: string;
|
|
6
7
|
elasticUrl: string;
|
|
7
8
|
elasticToken: string;
|
|
8
9
|
}
|
|
@@ -11,6 +12,7 @@ export declare class Elastic {
|
|
|
11
12
|
private readonly flakyTestIndex;
|
|
12
13
|
private readonly failedTestIndex;
|
|
13
14
|
private readonly testRunIndex;
|
|
15
|
+
private readonly browserUsageIndex;
|
|
14
16
|
private readonly elasticUrl;
|
|
15
17
|
private readonly elasticToken;
|
|
16
18
|
constructor(analyticsConfig: ElasticConfig);
|
|
@@ -18,6 +20,7 @@ export declare class Elastic {
|
|
|
18
20
|
saveFlakyData(flake: ReturnType<typeof formFlakyTestData>): Promise<void>;
|
|
19
21
|
saveFailedData(failure: ReturnType<typeof formFailedTestData>): Promise<void>;
|
|
20
22
|
saveBuildData(build: ReturnType<typeof formBuildData>): Promise<void>;
|
|
23
|
+
saveBrowserUsageData(usageData: ReturnType<typeof formBrowserUsageData>): Promise<void>;
|
|
21
24
|
getLastRunDataByTime(): Promise<string | null>;
|
|
22
25
|
getLastRunDataByPrenvIdAndProject(prenvId: string, projects?: string[]): Promise<string | null>;
|
|
23
26
|
}
|
|
@@ -8,6 +8,7 @@ class Elastic {
|
|
|
8
8
|
this.flakyTestIndex = analyticsConfig.flakyTestIndex;
|
|
9
9
|
this.failedTestIndex = analyticsConfig.failedTestIndex;
|
|
10
10
|
this.testRunIndex = analyticsConfig.testRunIndex;
|
|
11
|
+
this.browserUsageIndex = analyticsConfig?.browserUsageIndex;
|
|
11
12
|
this.elasticUrl = analyticsConfig.elasticUrl;
|
|
12
13
|
this.elasticToken = analyticsConfig.elasticToken;
|
|
13
14
|
}
|
|
@@ -46,6 +47,16 @@ class Elastic {
|
|
|
46
47
|
(0, logger_1.logger)(error);
|
|
47
48
|
}
|
|
48
49
|
}
|
|
50
|
+
async saveBrowserUsageData(usageData) {
|
|
51
|
+
try {
|
|
52
|
+
await this.request.post(`/${this.browserUsageIndex}/_doc`, {
|
|
53
|
+
data: usageData,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
(0, logger_1.logger)(error);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
49
60
|
async getLastRunDataByTime() {
|
|
50
61
|
try {
|
|
51
62
|
const response = await this.request.post(`/${this.testRunIndex}/_search`, {
|
|
@@ -53,7 +64,7 @@ class Elastic {
|
|
|
53
64
|
sort: [
|
|
54
65
|
{
|
|
55
66
|
startTime: {
|
|
56
|
-
order:
|
|
67
|
+
order: 'desc',
|
|
57
68
|
},
|
|
58
69
|
},
|
|
59
70
|
],
|
|
@@ -77,7 +88,7 @@ class Elastic {
|
|
|
77
88
|
must: [
|
|
78
89
|
{
|
|
79
90
|
term: {
|
|
80
|
-
prenvId
|
|
91
|
+
prenvId,
|
|
81
92
|
},
|
|
82
93
|
},
|
|
83
94
|
...(projects ?? []).map((project) => ({
|
|
@@ -91,7 +102,7 @@ class Elastic {
|
|
|
91
102
|
sort: [
|
|
92
103
|
{
|
|
93
104
|
startTime: {
|
|
94
|
-
order:
|
|
105
|
+
order: 'desc',
|
|
95
106
|
},
|
|
96
107
|
},
|
|
97
108
|
],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"elastic.js","sourceRoot":"","sources":["../../../src/analytics/elastic.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"elastic.js","sourceRoot":"","sources":["../../../src/analytics/elastic.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../src/analytics/logger.ts"],"names":[],"mappings":";;;AAAO,MAAM,MAAM,GAAG,CAAC,GAAG,QAAmB,EAAE,EAAE;IAChD,sCAAsC;IACtC,OAAO,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../src/analytics/logger.ts"],"names":[],"mappings":";;;AAAO,MAAM,MAAM,GAAG,CAAC,GAAG,QAAmB,EAAE,EAAE;IAChD,sCAAsC;IACtC,OAAO,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAA;AACzB,CAAC,CAAA;AAHY,QAAA,MAAM,UAGlB"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { type FullConfig, type FullResult, type Reporter, type Suite, type TestCase, type TestResult, type TestStatus, type TestStep } from
|
|
2
|
-
import { type ElasticConfig } from
|
|
1
|
+
import { type FullConfig, type FullResult, type Reporter, type Suite, type TestCase, type TestResult, type TestStatus, type TestStep } from '@playwright/test/reporter';
|
|
2
|
+
import { type ElasticConfig } from './elastic';
|
|
3
3
|
export default class AnalyticsReporter implements Reporter {
|
|
4
|
-
readonly listOfNonPassingTests
|
|
5
|
-
readonly listOfFlakyTests
|
|
6
|
-
readonly browserCreationTimes
|
|
7
|
-
readonly
|
|
8
|
-
private elastic;
|
|
4
|
+
private readonly listOfNonPassingTests;
|
|
5
|
+
private readonly listOfFlakyTests;
|
|
6
|
+
private readonly browserCreationTimes;
|
|
7
|
+
private readonly browserUsage;
|
|
8
|
+
private readonly elastic;
|
|
9
9
|
private runStartTime;
|
|
10
10
|
private runEndTime;
|
|
11
11
|
private numberOfTests;
|
|
@@ -13,8 +13,12 @@ export default class AnalyticsReporter implements Reporter {
|
|
|
13
13
|
private projectNames;
|
|
14
14
|
private testOwnerCount;
|
|
15
15
|
private readonly options;
|
|
16
|
+
private readonly isMainPREnv;
|
|
17
|
+
private workerCount;
|
|
16
18
|
constructor(options: ReporterOptions);
|
|
19
|
+
private shouldSaveBrowserData;
|
|
17
20
|
onBegin(config: FullConfig, suite: Suite): Promise<void>;
|
|
21
|
+
onStepBegin(test: TestCase, result: TestResult, step: TestStep): void;
|
|
18
22
|
onStepEnd(test: TestCase, result: TestResult, step: TestStep): void;
|
|
19
23
|
onTestEnd(test: TestCase, result: TestResult): Promise<void>;
|
|
20
24
|
private onEndDebug;
|
|
@@ -33,7 +37,8 @@ type ReporterOptions = {
|
|
|
33
37
|
*/
|
|
34
38
|
dryRun?: boolean;
|
|
35
39
|
currentBuildId: string;
|
|
36
|
-
prenvId
|
|
40
|
+
prenvId: string;
|
|
41
|
+
product: 'autopilot' | 'expert';
|
|
37
42
|
} & ElasticConfig;
|
|
38
43
|
export interface TestAnalyticsData {
|
|
39
44
|
timestamp: number;
|
|
@@ -46,4 +51,9 @@ export interface TestAnalyticsData {
|
|
|
46
51
|
totalDuration: number;
|
|
47
52
|
retry?: number;
|
|
48
53
|
}
|
|
54
|
+
export type BrowserUsageData = Record<string, {
|
|
55
|
+
browserRequestTimestamp: number;
|
|
56
|
+
browserCreationTimestamp: number;
|
|
57
|
+
browserCloseTimestamp: number;
|
|
58
|
+
}>;
|
|
49
59
|
export {};
|
|
@@ -12,20 +12,36 @@ class AnalyticsReporter {
|
|
|
12
12
|
this.listOfNonPassingTests = [];
|
|
13
13
|
this.listOfFlakyTests = [];
|
|
14
14
|
this.browserCreationTimes = [];
|
|
15
|
-
this.
|
|
15
|
+
this.browserUsage = {};
|
|
16
16
|
this.projectNames = [];
|
|
17
17
|
this.testOwnerCount = {};
|
|
18
18
|
this.testRunId = faker_1.faker.string.uuid();
|
|
19
19
|
this.runStartTime = Date.now();
|
|
20
20
|
this.runEndTime = Date.now();
|
|
21
21
|
this.numberOfTests = 0;
|
|
22
|
+
this.workerCount = 0;
|
|
23
|
+
this.isMainPREnv = (() => {
|
|
24
|
+
if (options.product === 'expert' && options.prenvId === 'develop') {
|
|
25
|
+
return true;
|
|
26
|
+
}
|
|
27
|
+
if (options.product === 'autopilot' && options.prenvId === 'main') {
|
|
28
|
+
return true;
|
|
29
|
+
}
|
|
30
|
+
return false;
|
|
31
|
+
})();
|
|
22
32
|
this.elastic = new elastic_1.Elastic(options);
|
|
23
33
|
}
|
|
34
|
+
shouldSaveBrowserData(test) {
|
|
35
|
+
const isAPISuite = test?.parent?.project()?.name?.includes('api');
|
|
36
|
+
const isIndexProvided = this.options.browserUsageIndex !== undefined;
|
|
37
|
+
return !isAPISuite && isIndexProvided;
|
|
38
|
+
}
|
|
24
39
|
async onBegin(config, suite) {
|
|
25
40
|
try {
|
|
26
41
|
this.runStartTime = Date.now();
|
|
27
42
|
this.numberOfTests = suite.allTests().length;
|
|
28
43
|
this.projectNames = suite.suites.map((testSuite) => testSuite.title);
|
|
44
|
+
this.workerCount = config.workers;
|
|
29
45
|
if (!this.options.dryRun) {
|
|
30
46
|
await this.elastic.setNativeRequestContext();
|
|
31
47
|
}
|
|
@@ -34,24 +50,48 @@ class AnalyticsReporter {
|
|
|
34
50
|
console.error("Could not perform 'onBegin' analytics step", error);
|
|
35
51
|
}
|
|
36
52
|
}
|
|
53
|
+
onStepBegin(test, result, step) {
|
|
54
|
+
if (!this.shouldSaveBrowserData(test)) {
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
try {
|
|
58
|
+
if (step.title.toLowerCase().includes('create browser')) {
|
|
59
|
+
const testId = `${test.id}-${result.retry ?? 0}`;
|
|
60
|
+
this.browserUsage[testId] = {
|
|
61
|
+
browserRequestTimestamp: step.startTime.getTime(),
|
|
62
|
+
browserCreationTimestamp: 0,
|
|
63
|
+
browserCloseTimestamp: 0,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
catch (error) {
|
|
68
|
+
console.error("Could not perform 'onStepBegin' analytics step", error);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
37
71
|
onStepEnd(test, result, step) {
|
|
38
72
|
try {
|
|
39
|
-
if (step.title.toLowerCase().includes(
|
|
73
|
+
if (step.title.toLowerCase().includes('create browser')) {
|
|
40
74
|
this.browserCreationTimes.push(step.duration);
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
75
|
+
if (!this.shouldSaveBrowserData(test)) {
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
const testId = `${test.id}-${result.retry ?? 0}`;
|
|
79
|
+
this.browserUsage[testId] = {
|
|
80
|
+
...this.browserUsage[testId],
|
|
81
|
+
browserCreationTimestamp: step.startTime.getTime() + step.duration,
|
|
82
|
+
};
|
|
44
83
|
}
|
|
45
84
|
}
|
|
46
85
|
catch (error) {
|
|
47
86
|
console.error("Could not perform 'onStepEnd' analytics step", error);
|
|
48
87
|
}
|
|
49
88
|
}
|
|
89
|
+
// eslint-disable-next-line max-statements
|
|
50
90
|
async onTestEnd(test, result) {
|
|
51
91
|
try {
|
|
52
92
|
const { status, retry: currentRetryCount } = result;
|
|
53
93
|
const { retries: maxRetriesCount } = test;
|
|
54
|
-
if ([
|
|
94
|
+
if (['failed', 'timedOut', 'interrupted'].includes(status) &&
|
|
55
95
|
currentRetryCount === maxRetriesCount) {
|
|
56
96
|
const failedTest = (0, transform_1.formFailedTestData)(test, result, this.testRunId, this.options.prenvId);
|
|
57
97
|
this.listOfNonPassingTests.push(failedTest);
|
|
@@ -59,7 +99,7 @@ class AnalyticsReporter {
|
|
|
59
99
|
await this.elastic.saveFailedData(failedTest);
|
|
60
100
|
}
|
|
61
101
|
}
|
|
62
|
-
else if ([
|
|
102
|
+
else if (['passed'].includes(status) && currentRetryCount) {
|
|
63
103
|
const flakyTest = (0, transform_1.formFlakyTestData)(test, result, this.testRunId, this.options.prenvId);
|
|
64
104
|
this.listOfFlakyTests.push(flakyTest);
|
|
65
105
|
if (!this.options.dryRun) {
|
|
@@ -70,20 +110,30 @@ class AnalyticsReporter {
|
|
|
70
110
|
const ownerTeamNames = (0, transform_1.getTeamNames)(test);
|
|
71
111
|
this.testOwnerCount = (0, transform_1.addTeamCount)(this.testOwnerCount, ownerTeamNames);
|
|
72
112
|
}
|
|
113
|
+
if (!this.shouldSaveBrowserData(test)) {
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
const testId = `${test.id}-${result.retry ?? 0}`;
|
|
117
|
+
this.browserUsage[testId] = {
|
|
118
|
+
...this.browserUsage[testId],
|
|
119
|
+
browserCloseTimestamp: result.startTime.getTime() + result.duration,
|
|
120
|
+
};
|
|
73
121
|
}
|
|
74
122
|
catch (error) {
|
|
75
123
|
console.error("Could not perform 'onTestEnd' analytics step", error);
|
|
76
124
|
}
|
|
77
125
|
}
|
|
78
|
-
onEndDebug(buildData) {
|
|
126
|
+
onEndDebug(buildData, browserUsageData) {
|
|
79
127
|
(0, transform_1.calculateRuntime)(this.runStartTime);
|
|
80
128
|
(0, transform_1.calculateRetriedTests)(this.listOfFlakyTests);
|
|
81
|
-
console.log(
|
|
129
|
+
console.log('NON PASSING TESTS');
|
|
82
130
|
console.table(this.listOfNonPassingTests);
|
|
83
|
-
console.log(
|
|
131
|
+
console.log('FLAKY TESTS');
|
|
84
132
|
console.table(this.listOfFlakyTests);
|
|
85
|
-
console.log(
|
|
133
|
+
console.log('RUN DATA');
|
|
86
134
|
console.table([buildData]);
|
|
135
|
+
console.log('BROWSER USAGE DATA');
|
|
136
|
+
console.log(browserUsageData);
|
|
87
137
|
}
|
|
88
138
|
async onEnd(result) {
|
|
89
139
|
try {
|
|
@@ -105,7 +155,7 @@ class AnalyticsReporter {
|
|
|
105
155
|
return await this.elastic.getLastRunDataByTime();
|
|
106
156
|
};
|
|
107
157
|
const buildIDWithPrefix = this.options?.dryRun === true
|
|
108
|
-
?
|
|
158
|
+
? 'dryRun'
|
|
109
159
|
: transform_1.getBuildIdWithPrefix.bind(this)(await getLastBuildData(), this.options.currentBuildId);
|
|
110
160
|
const buildData = (0, transform_1.formBuildData)({
|
|
111
161
|
result,
|
|
@@ -115,19 +165,29 @@ class AnalyticsReporter {
|
|
|
115
165
|
numberOfTests: this.numberOfTests,
|
|
116
166
|
failedTests: this.listOfNonPassingTests,
|
|
117
167
|
flakyTests: this.listOfFlakyTests,
|
|
118
|
-
|
|
119
|
-
browserClose: this.browserClosingTimes.reduce((acc, current) => acc + current, 0),
|
|
168
|
+
browserCreationTimes: this.browserCreationTimes,
|
|
120
169
|
project: projectData,
|
|
121
170
|
teamStats: this.testOwnerCount,
|
|
122
171
|
buildId: buildIDWithPrefix,
|
|
123
172
|
prenvId: this.options.prenvId,
|
|
124
173
|
});
|
|
174
|
+
const browserUsageData = (0, transform_1.formBrowserUsageData)({
|
|
175
|
+
startTime: this.runStartTime,
|
|
176
|
+
testRunId: this.testRunId,
|
|
177
|
+
isMainPREnv: this.isMainPREnv,
|
|
178
|
+
browserUsage: this.browserUsage,
|
|
179
|
+
workerCount: this.workerCount,
|
|
180
|
+
product: this.options.product,
|
|
181
|
+
});
|
|
125
182
|
if (!this.options.dryRun) {
|
|
126
183
|
await this.elastic.saveBuildData(buildData);
|
|
184
|
+
if (browserUsageData.browserUsageAfterCreation > 0 &&
|
|
185
|
+
browserUsageData.browserUsageFromRequest > 0) {
|
|
186
|
+
await this.elastic.saveBrowserUsageData(browserUsageData);
|
|
187
|
+
}
|
|
127
188
|
}
|
|
128
|
-
// eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
|
|
129
189
|
if (this.options.debug || this.options.dryRun) {
|
|
130
|
-
this.onEndDebug(buildData);
|
|
190
|
+
this.onEndDebug(buildData, browserUsageData);
|
|
131
191
|
}
|
|
132
192
|
}
|
|
133
193
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reporter.js","sourceRoot":"","sources":["../../../src/analytics/reporter.ts"],"names":[],"mappings":";;;AAAA,+BAA+B;AAC/B,
|
|
1
|
+
{"version":3,"file":"reporter.js","sourceRoot":"","sources":["../../../src/analytics/reporter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const test_1 = require("@playwright/test");
|
|
4
|
+
const transform_1 = require("../transform");
|
|
5
|
+
test_1.test.describe('Analytics: browser usage transform', () => {
|
|
6
|
+
(0, test_1.test)('should form browser usage', () => {
|
|
7
|
+
const startTime = Date.now();
|
|
8
|
+
const formedBrowserUsageData = (0, transform_1.formBrowserUsageData)({
|
|
9
|
+
startTime,
|
|
10
|
+
testRunId: 'testRunId',
|
|
11
|
+
isMainPREnv: true,
|
|
12
|
+
browserUsage: {
|
|
13
|
+
testId1: {
|
|
14
|
+
browserRequestTimestamp: 123,
|
|
15
|
+
browserCreationTimestamp: 234,
|
|
16
|
+
browserCloseTimestamp: 345,
|
|
17
|
+
},
|
|
18
|
+
testId2: {
|
|
19
|
+
browserRequestTimestamp: 234,
|
|
20
|
+
browserCreationTimestamp: 345,
|
|
21
|
+
browserCloseTimestamp: 456,
|
|
22
|
+
},
|
|
23
|
+
},
|
|
24
|
+
workerCount: 2,
|
|
25
|
+
product: 'expert',
|
|
26
|
+
});
|
|
27
|
+
(0, test_1.expect)(formedBrowserUsageData).toMatchObject({
|
|
28
|
+
timestamp: startTime,
|
|
29
|
+
testRunId: 'testRunId',
|
|
30
|
+
isMain: true,
|
|
31
|
+
workerCount: 2,
|
|
32
|
+
product: 'expert',
|
|
33
|
+
browserUsageFromRequest: 444,
|
|
34
|
+
browserUsageAfterCreation: 222,
|
|
35
|
+
createdBrowserCount: 2,
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
//# sourceMappingURL=browserUsage.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browserUsage.test.js","sourceRoot":"","sources":["../../../../src/analytics/tests/browserUsage.test.ts"],"names":[],"mappings":";;AAAA,2CAA+C;AAE/C,4CAAmD;AAEnD,WAAI,CAAC,QAAQ,CAAC,oCAAoC,EAAE,GAAG,EAAE;IACxD,IAAA,WAAI,EAAC,2BAA2B,EAAE,GAAG,EAAE;QACtC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QAE5B,MAAM,sBAAsB,GAAG,IAAA,gCAAoB,EAAC;YACnD,SAAS;YACT,SAAS,EAAE,WAAW;YACtB,WAAW,EAAE,IAAI;YACjB,YAAY,EAAE;gBACb,OAAO,EAAE;oBACR,uBAAuB,EAAE,GAAG;oBAC5B,wBAAwB,EAAE,GAAG;oBAC7B,qBAAqB,EAAE,GAAG;iBAC1B;gBACD,OAAO,EAAE;oBACR,uBAAuB,EAAE,GAAG;oBAC5B,wBAAwB,EAAE,GAAG;oBAC7B,qBAAqB,EAAE,GAAG;iBAC1B;aACD;YACD,WAAW,EAAE,CAAC;YACd,OAAO,EAAE,QAAQ;SACjB,CAAC,CAAA;QAEF,IAAA,aAAM,EAAC,sBAAsB,CAAC,CAAC,aAAa,CAAC;YAC5C,SAAS,EAAE,SAAS;YACpB,SAAS,EAAE,WAAW;YACtB,MAAM,EAAE,IAAI;YACZ,WAAW,EAAE,CAAC;YACd,OAAO,EAAE,QAAQ;YACjB,uBAAuB,EAAE,GAAG;YAC5B,yBAAyB,EAAE,GAAG;YAC9B,mBAAmB,EAAE,CAAC;SACqB,CAAC,CAAA;IAC9C,CAAC,CAAC,CAAA;AACH,CAAC,CAAC,CAAA"}
|