@midleman/playwright-reporter 0.1.0
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 +373 -0
- package/dist/buffers.d.ts +13 -0
- package/dist/buffers.d.ts.map +1 -0
- package/dist/buffers.js +58 -0
- package/dist/buffers.js.map +1 -0
- package/dist/counts.d.ts +32 -0
- package/dist/counts.d.ts.map +1 -0
- package/dist/counts.js +66 -0
- package/dist/counts.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +28 -0
- package/dist/index.js.map +1 -0
- package/dist/payload.d.ts +33 -0
- package/dist/payload.d.ts.map +1 -0
- package/dist/payload.js +87 -0
- package/dist/payload.js.map +1 -0
- package/dist/payload.test.d.ts +2 -0
- package/dist/payload.test.d.ts.map +1 -0
- package/dist/payload.test.js +198 -0
- package/dist/payload.test.js.map +1 -0
- package/dist/reporter.d.ts +47 -0
- package/dist/reporter.d.ts.map +1 -0
- package/dist/reporter.js +470 -0
- package/dist/reporter.js.map +1 -0
- package/dist/reporter.test.d.ts +2 -0
- package/dist/reporter.test.d.ts.map +1 -0
- package/dist/reporter.test.js +216 -0
- package/dist/reporter.test.js.map +1 -0
- package/dist/schemas.d.ts +485 -0
- package/dist/schemas.d.ts.map +1 -0
- package/dist/schemas.js +128 -0
- package/dist/schemas.js.map +1 -0
- package/dist/schemas.test.d.ts +2 -0
- package/dist/schemas.test.d.ts.map +1 -0
- package/dist/schemas.test.js +313 -0
- package/dist/schemas.test.js.map +1 -0
- package/dist/storage/api.d.ts +13 -0
- package/dist/storage/api.d.ts.map +1 -0
- package/dist/storage/api.js +86 -0
- package/dist/storage/api.js.map +1 -0
- package/dist/storage/api.test.d.ts +2 -0
- package/dist/storage/api.test.d.ts.map +1 -0
- package/dist/storage/api.test.js +184 -0
- package/dist/storage/api.test.js.map +1 -0
- package/dist/storage/parquet.d.ts +10 -0
- package/dist/storage/parquet.d.ts.map +1 -0
- package/dist/storage/parquet.js +157 -0
- package/dist/storage/parquet.js.map +1 -0
- package/dist/storage/s3.d.ts +35 -0
- package/dist/storage/s3.d.ts.map +1 -0
- package/dist/storage/s3.js +129 -0
- package/dist/storage/s3.js.map +1 -0
- package/dist/types.d.ts +36 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +26 -0
- package/dist/types.js.map +1 -0
- package/dist/utils.d.ts +44 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +195 -0
- package/dist/utils.js.map +1 -0
- package/dist/utils.test.d.ts +2 -0
- package/dist/utils.test.d.ts.map +1 -0
- package/dist/utils.test.js +150 -0
- package/dist/utils.test.js.map +1 -0
- package/package.json +41 -0
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const vitest_1 = require("vitest");
|
|
7
|
+
// Mock the API writer module
|
|
8
|
+
vitest_1.vi.mock('./storage/api', () => ({
|
|
9
|
+
createApiWriter: vitest_1.vi.fn(() => ({
|
|
10
|
+
writeResults: vitest_1.vi.fn().mockResolvedValue(true),
|
|
11
|
+
writeRunEvent: vitest_1.vi.fn().mockResolvedValue(true),
|
|
12
|
+
})),
|
|
13
|
+
}));
|
|
14
|
+
// Mock utils to control IDs
|
|
15
|
+
vitest_1.vi.mock('./utils', async (importOriginal) => {
|
|
16
|
+
const actual = await importOriginal();
|
|
17
|
+
return {
|
|
18
|
+
...actual,
|
|
19
|
+
getRunId: () => 'test-run-123',
|
|
20
|
+
getDatePartition: () => '2024-01-15',
|
|
21
|
+
getRepoName: (override) => override || 'test-repo',
|
|
22
|
+
};
|
|
23
|
+
});
|
|
24
|
+
const reporter_1 = __importDefault(require("./reporter"));
|
|
25
|
+
const api_1 = require("./storage/api");
|
|
26
|
+
(0, vitest_1.describe)('ParquetReporter', () => {
|
|
27
|
+
let mockApiWriter;
|
|
28
|
+
(0, vitest_1.beforeEach)(() => {
|
|
29
|
+
vitest_1.vi.clearAllMocks();
|
|
30
|
+
mockApiWriter = {
|
|
31
|
+
writeResults: vitest_1.vi.fn().mockResolvedValue(true),
|
|
32
|
+
writeRunEvent: vitest_1.vi.fn().mockResolvedValue(true),
|
|
33
|
+
};
|
|
34
|
+
vitest_1.vi.mocked(api_1.createApiWriter).mockReturnValue(mockApiWriter);
|
|
35
|
+
});
|
|
36
|
+
const createMockConfig = () => ({
|
|
37
|
+
projects: [{ name: 'chromium', retries: 1 }],
|
|
38
|
+
});
|
|
39
|
+
const createMockSuite = (tests) => ({
|
|
40
|
+
suites: [],
|
|
41
|
+
tests: tests.map((t) => ({
|
|
42
|
+
type: 'test',
|
|
43
|
+
location: { file: t.file },
|
|
44
|
+
title: t.title,
|
|
45
|
+
})),
|
|
46
|
+
});
|
|
47
|
+
const createMockTest = (id, title, file) => ({
|
|
48
|
+
id,
|
|
49
|
+
title,
|
|
50
|
+
location: { file, line: 1, column: 1 },
|
|
51
|
+
titlePath: () => ['chromium', 'Suite', title],
|
|
52
|
+
});
|
|
53
|
+
const createMockResult = (status, duration, retry = 0, error) => ({
|
|
54
|
+
status,
|
|
55
|
+
duration,
|
|
56
|
+
retry,
|
|
57
|
+
startTime: new Date(),
|
|
58
|
+
error,
|
|
59
|
+
});
|
|
60
|
+
(0, vitest_1.describe)('initialization', () => {
|
|
61
|
+
(0, vitest_1.it)('initializes in dev mode', () => {
|
|
62
|
+
const reporter = new reporter_1.default({ mode: 'dev' });
|
|
63
|
+
(0, vitest_1.expect)(api_1.createApiWriter).toHaveBeenCalledWith({ url: 'http://localhost:8000' }, false);
|
|
64
|
+
});
|
|
65
|
+
(0, vitest_1.it)('initializes in prod mode', () => {
|
|
66
|
+
const reporter = new reporter_1.default({ mode: 'prod' });
|
|
67
|
+
(0, vitest_1.expect)(api_1.createApiWriter).toHaveBeenCalledWith({ url: 'https://connect.posit.it/e2e-test-insights-api' }, false);
|
|
68
|
+
});
|
|
69
|
+
(0, vitest_1.it)('initializes with verbose logging', () => {
|
|
70
|
+
const reporter = new reporter_1.default({ mode: 'dev', verbose: true });
|
|
71
|
+
(0, vitest_1.expect)(api_1.createApiWriter).toHaveBeenCalledWith({ url: 'http://localhost:8000' }, true);
|
|
72
|
+
});
|
|
73
|
+
(0, vitest_1.it)('disables when mode is disabled', async () => {
|
|
74
|
+
const reporter = new reporter_1.default({ mode: 'disabled' });
|
|
75
|
+
await reporter.onBegin(createMockConfig(), createMockSuite([]));
|
|
76
|
+
await reporter.onEnd({ status: 'passed' });
|
|
77
|
+
(0, vitest_1.expect)(mockApiWriter.writeRunEvent).not.toHaveBeenCalled();
|
|
78
|
+
(0, vitest_1.expect)(mockApiWriter.writeResults).not.toHaveBeenCalled();
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
(0, vitest_1.describe)('complete test run - all passing', () => {
|
|
82
|
+
(0, vitest_1.it)('sends run.started, results, and run.completed events', async () => {
|
|
83
|
+
const reporter = new reporter_1.default({ mode: 'dev', flushThreshold: 100 });
|
|
84
|
+
const config = createMockConfig();
|
|
85
|
+
const suite = createMockSuite([
|
|
86
|
+
{ file: '/project/tests/a.spec.ts', title: 'test a' },
|
|
87
|
+
{ file: '/project/tests/b.spec.ts', title: 'test b' },
|
|
88
|
+
]);
|
|
89
|
+
// Begin run
|
|
90
|
+
await reporter.onBegin(config, suite);
|
|
91
|
+
// Verify run.started was sent
|
|
92
|
+
(0, vitest_1.expect)(mockApiWriter.writeRunEvent).toHaveBeenCalledTimes(1);
|
|
93
|
+
(0, vitest_1.expect)(mockApiWriter.writeRunEvent.mock.calls[0][0]).toMatchObject({
|
|
94
|
+
type: 'run.started',
|
|
95
|
+
repoName: 'test-repo',
|
|
96
|
+
runId: 'test-run-123',
|
|
97
|
+
});
|
|
98
|
+
// Run tests
|
|
99
|
+
const testA = createMockTest('test-a', 'test a', '/project/tests/a.spec.ts');
|
|
100
|
+
const testB = createMockTest('test-b', 'test b', '/project/tests/b.spec.ts');
|
|
101
|
+
await reporter.onTestEnd(testA, createMockResult('passed', 100));
|
|
102
|
+
await reporter.onTestEnd(testB, createMockResult('passed', 200));
|
|
103
|
+
// End run
|
|
104
|
+
await reporter.onEnd({ status: 'passed' });
|
|
105
|
+
// Verify final events
|
|
106
|
+
const runEventCalls = mockApiWriter.writeRunEvent.mock.calls;
|
|
107
|
+
const lastRunEvent = runEventCalls[runEventCalls.length - 1][0];
|
|
108
|
+
(0, vitest_1.expect)(lastRunEvent).toMatchObject({
|
|
109
|
+
type: 'run.completed',
|
|
110
|
+
status: 'passed',
|
|
111
|
+
counts: { passed: 2, failed: 0, skipped: 0, flaky: 0 },
|
|
112
|
+
});
|
|
113
|
+
// Verify results were sent
|
|
114
|
+
(0, vitest_1.expect)(mockApiWriter.writeResults).toHaveBeenCalled();
|
|
115
|
+
});
|
|
116
|
+
});
|
|
117
|
+
(0, vitest_1.describe)('test run with failures', () => {
|
|
118
|
+
(0, vitest_1.it)('records failed tests correctly', async () => {
|
|
119
|
+
const reporter = new reporter_1.default({ mode: 'dev', flushThreshold: 100 });
|
|
120
|
+
await reporter.onBegin(createMockConfig(), createMockSuite([]));
|
|
121
|
+
const test = createMockTest('test-1', 'failing test', '/project/tests/fail.spec.ts');
|
|
122
|
+
await reporter.onTestEnd(test, createMockResult('failed', 500, 0, { message: 'Expected true to be false' }));
|
|
123
|
+
await reporter.onEnd({ status: 'failed' });
|
|
124
|
+
const runEventCalls = mockApiWriter.writeRunEvent.mock.calls;
|
|
125
|
+
const completedEvent = runEventCalls[runEventCalls.length - 1][0];
|
|
126
|
+
(0, vitest_1.expect)(completedEvent.counts.failed).toBe(1);
|
|
127
|
+
(0, vitest_1.expect)(completedEvent.status).toBe('failed');
|
|
128
|
+
});
|
|
129
|
+
});
|
|
130
|
+
(0, vitest_1.describe)('test run with flaky tests', () => {
|
|
131
|
+
(0, vitest_1.it)('records test as flaky when it fails then passes on retry', async () => {
|
|
132
|
+
const reporter = new reporter_1.default({ mode: 'dev', flushThreshold: 100 });
|
|
133
|
+
await reporter.onBegin(createMockConfig(), createMockSuite([]));
|
|
134
|
+
const test = createMockTest('flaky-test', 'flaky test', '/project/tests/flaky.spec.ts');
|
|
135
|
+
// First attempt fails
|
|
136
|
+
await reporter.onTestEnd(test, createMockResult('failed', 500, 0, { message: 'Flaky failure' }));
|
|
137
|
+
// Retry passes
|
|
138
|
+
await reporter.onTestEnd(test, createMockResult('passed', 300, 1));
|
|
139
|
+
await reporter.onEnd({ status: 'passed' });
|
|
140
|
+
const runEventCalls = mockApiWriter.writeRunEvent.mock.calls;
|
|
141
|
+
const completedEvent = runEventCalls[runEventCalls.length - 1][0];
|
|
142
|
+
(0, vitest_1.expect)(completedEvent.counts.flaky).toBe(1);
|
|
143
|
+
(0, vitest_1.expect)(completedEvent.counts.passed).toBe(0);
|
|
144
|
+
(0, vitest_1.expect)(completedEvent.counts.failed).toBe(0);
|
|
145
|
+
});
|
|
146
|
+
});
|
|
147
|
+
(0, vitest_1.describe)('test run with skipped tests', () => {
|
|
148
|
+
(0, vitest_1.it)('records skipped tests correctly', async () => {
|
|
149
|
+
const reporter = new reporter_1.default({ mode: 'dev', flushThreshold: 100 });
|
|
150
|
+
await reporter.onBegin(createMockConfig(), createMockSuite([]));
|
|
151
|
+
const test = createMockTest('skip-test', 'skipped test', '/project/tests/skip.spec.ts');
|
|
152
|
+
await reporter.onTestEnd(test, createMockResult('skipped', 0));
|
|
153
|
+
await reporter.onEnd({ status: 'passed' });
|
|
154
|
+
const runEventCalls = mockApiWriter.writeRunEvent.mock.calls;
|
|
155
|
+
const completedEvent = runEventCalls[runEventCalls.length - 1][0];
|
|
156
|
+
(0, vitest_1.expect)(completedEvent.counts.skipped).toBe(1);
|
|
157
|
+
});
|
|
158
|
+
});
|
|
159
|
+
(0, vitest_1.describe)('incremental flushing', () => {
|
|
160
|
+
(0, vitest_1.it)('flushes results when threshold is reached', async () => {
|
|
161
|
+
const reporter = new reporter_1.default({
|
|
162
|
+
mode: 'dev',
|
|
163
|
+
flushThreshold: 2,
|
|
164
|
+
flushIntervalMs: 100000, // Long interval so only threshold triggers
|
|
165
|
+
});
|
|
166
|
+
await reporter.onBegin(createMockConfig(), createMockSuite([]));
|
|
167
|
+
// Send 2 results to hit threshold
|
|
168
|
+
await reporter.onTestEnd(createMockTest('t1', 'test 1', '/tests/1.spec.ts'), createMockResult('passed', 100));
|
|
169
|
+
await reporter.onTestEnd(createMockTest('t2', 'test 2', '/tests/2.spec.ts'), createMockResult('passed', 100));
|
|
170
|
+
// Should have flushed once (threshold = 2)
|
|
171
|
+
(0, vitest_1.expect)(mockApiWriter.writeResults).toHaveBeenCalled();
|
|
172
|
+
// Check batch ID is included
|
|
173
|
+
const call = mockApiWriter.writeResults.mock.calls[0];
|
|
174
|
+
(0, vitest_1.expect)(call[4]).toBe('001'); // batchId
|
|
175
|
+
});
|
|
176
|
+
});
|
|
177
|
+
(0, vitest_1.describe)('mixed results scenario', () => {
|
|
178
|
+
(0, vitest_1.it)('handles a realistic test run with mixed results', async () => {
|
|
179
|
+
const reporter = new reporter_1.default({ mode: 'dev', flushThreshold: 100 });
|
|
180
|
+
await reporter.onBegin(createMockConfig(), createMockSuite([]));
|
|
181
|
+
// 3 passing tests
|
|
182
|
+
for (let i = 1; i <= 3; i++) {
|
|
183
|
+
await reporter.onTestEnd(createMockTest(`pass-${i}`, `passing test ${i}`, `/tests/pass${i}.spec.ts`), createMockResult('passed', 100 * i));
|
|
184
|
+
}
|
|
185
|
+
// 1 failing test
|
|
186
|
+
await reporter.onTestEnd(createMockTest('fail-1', 'failing test', '/tests/fail.spec.ts'), createMockResult('failed', 500, 0, { message: 'Assertion error' }));
|
|
187
|
+
// 1 flaky test (fail then pass)
|
|
188
|
+
const flakyTest = createMockTest('flaky-1', 'flaky test', '/tests/flaky.spec.ts');
|
|
189
|
+
await reporter.onTestEnd(flakyTest, createMockResult('failed', 200, 0));
|
|
190
|
+
await reporter.onTestEnd(flakyTest, createMockResult('passed', 150, 1));
|
|
191
|
+
// 1 skipped test
|
|
192
|
+
await reporter.onTestEnd(createMockTest('skip-1', 'skipped test', '/tests/skip.spec.ts'), createMockResult('skipped', 0));
|
|
193
|
+
await reporter.onEnd({ status: 'failed' });
|
|
194
|
+
const runEventCalls = mockApiWriter.writeRunEvent.mock.calls;
|
|
195
|
+
const completedEvent = runEventCalls[runEventCalls.length - 1][0];
|
|
196
|
+
(0, vitest_1.expect)(completedEvent.counts).toEqual({
|
|
197
|
+
passed: 3,
|
|
198
|
+
failed: 1,
|
|
199
|
+
skipped: 1,
|
|
200
|
+
flaky: 1,
|
|
201
|
+
});
|
|
202
|
+
});
|
|
203
|
+
});
|
|
204
|
+
(0, vitest_1.describe)('timed out tests', () => {
|
|
205
|
+
(0, vitest_1.it)('treats timedOut status as failed', async () => {
|
|
206
|
+
const reporter = new reporter_1.default({ mode: 'dev', flushThreshold: 100 });
|
|
207
|
+
await reporter.onBegin(createMockConfig(), createMockSuite([]));
|
|
208
|
+
await reporter.onTestEnd(createMockTest('timeout-1', 'slow test', '/tests/slow.spec.ts'), createMockResult('timedOut', 30000));
|
|
209
|
+
await reporter.onEnd({ status: 'timedOut' });
|
|
210
|
+
const runEventCalls = mockApiWriter.writeRunEvent.mock.calls;
|
|
211
|
+
const completedEvent = runEventCalls[runEventCalls.length - 1][0];
|
|
212
|
+
(0, vitest_1.expect)(completedEvent.counts.failed).toBe(1);
|
|
213
|
+
});
|
|
214
|
+
});
|
|
215
|
+
});
|
|
216
|
+
//# sourceMappingURL=reporter.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reporter.test.js","sourceRoot":"","sources":["../src/reporter.test.ts"],"names":[],"mappings":"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"}
|