@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.
Files changed (66) hide show
  1. package/README.md +373 -0
  2. package/dist/buffers.d.ts +13 -0
  3. package/dist/buffers.d.ts.map +1 -0
  4. package/dist/buffers.js +58 -0
  5. package/dist/buffers.js.map +1 -0
  6. package/dist/counts.d.ts +32 -0
  7. package/dist/counts.d.ts.map +1 -0
  8. package/dist/counts.js +66 -0
  9. package/dist/counts.js.map +1 -0
  10. package/dist/index.d.ts +7 -0
  11. package/dist/index.d.ts.map +1 -0
  12. package/dist/index.js +28 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/payload.d.ts +33 -0
  15. package/dist/payload.d.ts.map +1 -0
  16. package/dist/payload.js +87 -0
  17. package/dist/payload.js.map +1 -0
  18. package/dist/payload.test.d.ts +2 -0
  19. package/dist/payload.test.d.ts.map +1 -0
  20. package/dist/payload.test.js +198 -0
  21. package/dist/payload.test.js.map +1 -0
  22. package/dist/reporter.d.ts +47 -0
  23. package/dist/reporter.d.ts.map +1 -0
  24. package/dist/reporter.js +470 -0
  25. package/dist/reporter.js.map +1 -0
  26. package/dist/reporter.test.d.ts +2 -0
  27. package/dist/reporter.test.d.ts.map +1 -0
  28. package/dist/reporter.test.js +216 -0
  29. package/dist/reporter.test.js.map +1 -0
  30. package/dist/schemas.d.ts +485 -0
  31. package/dist/schemas.d.ts.map +1 -0
  32. package/dist/schemas.js +128 -0
  33. package/dist/schemas.js.map +1 -0
  34. package/dist/schemas.test.d.ts +2 -0
  35. package/dist/schemas.test.d.ts.map +1 -0
  36. package/dist/schemas.test.js +313 -0
  37. package/dist/schemas.test.js.map +1 -0
  38. package/dist/storage/api.d.ts +13 -0
  39. package/dist/storage/api.d.ts.map +1 -0
  40. package/dist/storage/api.js +86 -0
  41. package/dist/storage/api.js.map +1 -0
  42. package/dist/storage/api.test.d.ts +2 -0
  43. package/dist/storage/api.test.d.ts.map +1 -0
  44. package/dist/storage/api.test.js +184 -0
  45. package/dist/storage/api.test.js.map +1 -0
  46. package/dist/storage/parquet.d.ts +10 -0
  47. package/dist/storage/parquet.d.ts.map +1 -0
  48. package/dist/storage/parquet.js +157 -0
  49. package/dist/storage/parquet.js.map +1 -0
  50. package/dist/storage/s3.d.ts +35 -0
  51. package/dist/storage/s3.d.ts.map +1 -0
  52. package/dist/storage/s3.js +129 -0
  53. package/dist/storage/s3.js.map +1 -0
  54. package/dist/types.d.ts +36 -0
  55. package/dist/types.d.ts.map +1 -0
  56. package/dist/types.js +26 -0
  57. package/dist/types.js.map +1 -0
  58. package/dist/utils.d.ts +44 -0
  59. package/dist/utils.d.ts.map +1 -0
  60. package/dist/utils.js +195 -0
  61. package/dist/utils.js.map +1 -0
  62. package/dist/utils.test.d.ts +2 -0
  63. package/dist/utils.test.d.ts.map +1 -0
  64. package/dist/utils.test.js +150 -0
  65. package/dist/utils.test.js.map +1 -0
  66. 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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"}