@test2doc/playwright 1.3.0 → 1.5.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.
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=DocMeta.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DocMeta.test.d.ts","sourceRoot":"","sources":["../src/DocMeta.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,46 @@
1
+ import { test, expect, describe, vi } from "vitest";
2
+ describe("withDocMeta", () => {
3
+ test("returns title without config data if test2doc is not enabled", async () => {
4
+ const { withDocMeta } = await import("./DocMeta.js");
5
+ const title = withDocMeta("My Test Title", { title: "My Test Title" });
6
+ expect(title).toBe("My Test Title");
7
+ });
8
+ test("returns title with config data if test2doc is enabled", async () => {
9
+ const { activateTest2Doc, withDocMeta } = await import("./DocMeta.js");
10
+ activateTest2Doc();
11
+ const title = withDocMeta("My Test Title", { title: "My Test Title" });
12
+ expect(title).toBe('My Test Title[test2doc_page]:{"title":"My Test Title"}');
13
+ });
14
+ test("returns title with config data when test2doc flag is provided on the command line", async () => {
15
+ vi.resetModules();
16
+ const originalEnv = { ...process.env };
17
+ process.env.TEST2DOC = "true";
18
+ const { withDocMeta } = await import("./DocMeta.js");
19
+ const title = withDocMeta("My Test Title", {
20
+ title: "My Test Title",
21
+ });
22
+ expect(title).toBe('My Test Title[test2doc_page]:{"title":"My Test Title"}');
23
+ process.env = originalEnv;
24
+ });
25
+ });
26
+ describe("withDocCategory", () => {
27
+ test("returns title without category metadata when test2doc is not active", async () => {
28
+ vi.resetModules();
29
+ const { withDocCategory } = await import("./DocMeta.js");
30
+ const title = withDocCategory("My Category", {
31
+ label: "My Label",
32
+ link: { type: "generated-index", title: "Index" },
33
+ });
34
+ expect(title).toBe("My Category");
35
+ });
36
+ test("returns title with category metadata when test2doc is active", async () => {
37
+ const { activateTest2Doc, withDocCategory } = await import("./DocMeta.js");
38
+ activateTest2Doc();
39
+ const title = withDocCategory("My Category", {
40
+ label: "My Label",
41
+ link: { type: "generated-index", title: "Index" },
42
+ });
43
+ expect(title).toBe('My Category[test2doc_category]:{"label":"My Label","link":{"type":"generated-index","title":"Index"}}');
44
+ });
45
+ });
46
+ //# sourceMappingURL=DocMeta.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DocMeta.test.js","sourceRoot":"","sources":["../src/DocMeta.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAEnD,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,IAAI,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;QAC9E,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAA;QACpD,MAAM,KAAK,GAAG,WAAW,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC,CAAA;QACtE,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;IACrC,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;QACvE,MAAM,EAAE,gBAAgB,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAA;QACtE,gBAAgB,EAAE,CAAA;QAClB,MAAM,KAAK,GAAG,WAAW,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC,CAAA;QACtE,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAA;IAC9E,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,mFAAmF,EAAE,KAAK,IAAI,EAAE;QACnG,EAAE,CAAC,YAAY,EAAE,CAAA;QACjB,MAAM,WAAW,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,CAAA;QACtC,OAAO,CAAC,GAAG,CAAC,QAAQ,GAAG,MAAM,CAAA;QAE7B,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAA;QACpD,MAAM,KAAK,GAAG,WAAW,CAAC,eAAe,EAAE;YACzC,KAAK,EAAE,eAAe;SACvB,CAAC,CAAA;QACF,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAA;QAE5E,OAAO,CAAC,GAAG,GAAG,WAAW,CAAA;IAC3B,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,IAAI,CAAC,qEAAqE,EAAE,KAAK,IAAI,EAAE;QACrF,EAAE,CAAC,YAAY,EAAE,CAAA;QACjB,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAA;QACxD,MAAM,KAAK,GAAG,eAAe,CAAC,aAAa,EAAE;YAC3C,KAAK,EAAE,UAAU;YACjB,IAAI,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,OAAO,EAAE;SAClD,CAAC,CAAA;QACF,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;IACnC,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;QAC9E,MAAM,EAAE,gBAAgB,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAA;QAC1E,gBAAgB,EAAE,CAAA;QAClB,MAAM,KAAK,GAAG,eAAe,CAAC,aAAa,EAAE;YAC3C,KAAK,EAAE,UAAU;YACjB,IAAI,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,OAAO,EAAE;SAClD,CAAC,CAAA;QACF,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAChB,uGAAuG,CACxG,CAAA;IACH,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=Test2DocReporter.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Test2DocReporter.test.d.ts","sourceRoot":"","sources":["../src/Test2DocReporter.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,450 @@
1
+ import { describe, it, expect, vi, beforeEach, afterEach, } from "vitest";
2
+ import { mkdirSync, readdirSync, readFileSync, writeFileSync } from "node:fs";
3
+ import { join } from "node:path";
4
+ import { withDocMeta } from "./DocMeta.js";
5
+ import { setup, tempDir, testCleanup, mockSuiteForPages, mockSuiteForCategories, mockTestSuccess, mockTestFail, mockTestPrivacyPolicyLogin, mockTestPrivacyPolicyRegistration, mockStep, baseSuite, mockSuiteWithMultiProjects, mockTestNewUserRegistration, mockTestLoggedInUser, mockTestLoggedOutUser, mockSingleSetupFileSuite, mockSetupTest, mockAuthenticatedTest, } from "./testUtils/index.js";
6
+ const mockFullConfig = {};
7
+ describe("Test2DocReporter", () => {
8
+ let mockLogging;
9
+ beforeEach(() => {
10
+ vi.useFakeTimers();
11
+ vi.setSystemTime(new Date("2024-01-01T00:00:00Z"));
12
+ // Mock print to terminal
13
+ mockLogging = vi
14
+ .spyOn(process.stdout, "write")
15
+ .mockImplementation(() => true);
16
+ });
17
+ afterEach(() => {
18
+ vi.useRealTimers();
19
+ // Clean up the temporary directory
20
+ testCleanup();
21
+ mockLogging.mockRestore();
22
+ });
23
+ // TODO: remove this later
24
+ describe("withDocMeta", () => {
25
+ it("loading the reporter file should enable the withDocMeta JSON stringify for Docusaurus Page Header Data", () => {
26
+ expect(withDocMeta("test title", { title: "Test" })).toBe('test title[test2doc_page]:{"title":"Test"}');
27
+ });
28
+ });
29
+ it("should generate markdown for each root describe block in a file", () => {
30
+ const reporter = setup();
31
+ let bufferCounter = 0;
32
+ const createMockScreenshotBuffer = () => Buffer.from(`mock image data ${bufferCounter++}`);
33
+ writeFileSync(join(tempDir, "test2doc-1704067218000-1.png"), createMockScreenshotBuffer());
34
+ writeFileSync(join(tempDir, "test2doc-old.md"), "# Old Documentation");
35
+ mkdirSync(join(tempDir, "test2doc-old-dir"));
36
+ mkdirSync(join(tempDir, "test2doc-old-category-dir"));
37
+ writeFileSync(join(tempDir, "test2doc-old-category-dir/_category_.json"), JSON.stringify({
38
+ label: "This needs to be cleaned up",
39
+ position: 1,
40
+ }, null, 2));
41
+ reporter.onBegin(mockFullConfig, mockSuiteForPages);
42
+ reporter.onStepBegin(mockTestSuccess, {}, mockStep);
43
+ const mockScreenshotName1 = `test2doc-${Date.now() + 500}-1.png`;
44
+ const mockScreenshotName2 = `test2doc-${Date.now() + 999}-2.png`;
45
+ const mockScreenshotName3WithAltText = `test2doc-${Date.now() + 1001}-3.png:Alt Text`;
46
+ const mockScreenshotName4 = `test2doc-${Date.now() + 1101}-4.png`;
47
+ const mockScreenshotName5 = `test2doc-${Date.now() + 1201}-5.png`;
48
+ const buffer1 = createMockScreenshotBuffer();
49
+ const buffer2 = createMockScreenshotBuffer();
50
+ const buffer3 = createMockScreenshotBuffer();
51
+ const buffer4 = createMockScreenshotBuffer();
52
+ const buffer5 = createMockScreenshotBuffer();
53
+ const mockAttachmentSuccess = [
54
+ {
55
+ name: mockScreenshotName1,
56
+ body: buffer1,
57
+ contentType: "image/png",
58
+ },
59
+ ];
60
+ const mockAttachmentFail = [
61
+ ...mockAttachmentSuccess,
62
+ {
63
+ name: mockScreenshotName2,
64
+ body: buffer2,
65
+ contentType: "image/png",
66
+ },
67
+ {
68
+ name: mockScreenshotName3WithAltText,
69
+ body: buffer3,
70
+ contentType: "image/png",
71
+ },
72
+ ];
73
+ const mockAttachmentPrivacyPolicyLogin = [
74
+ ...mockAttachmentFail,
75
+ {
76
+ name: mockScreenshotName4,
77
+ body: buffer4,
78
+ contentType: "image/png",
79
+ },
80
+ ];
81
+ const mockAttachmentPrivacyPolicyRegistration = [
82
+ ...mockAttachmentPrivacyPolicyLogin,
83
+ {
84
+ name: mockScreenshotName5,
85
+ body: buffer5,
86
+ contentType: "image/png",
87
+ },
88
+ ];
89
+ vi.advanceTimersByTime(600);
90
+ reporter.onStepEnd(mockTestSuccess, {
91
+ attachments: mockAttachmentSuccess,
92
+ }, mockStep);
93
+ reporter.onTestEnd(mockTestSuccess, { status: "passed" });
94
+ vi.advanceTimersByTime(400);
95
+ reporter.onStepBegin(mockTestFail, {}, mockStep);
96
+ reporter.onStepEnd(mockTestFail, {
97
+ attachments: mockAttachmentSuccess,
98
+ }, mockStep);
99
+ reporter.onTestEnd(mockTestFail, { status: "passed" });
100
+ vi.advanceTimersByTime(100);
101
+ reporter.onStepEnd(mockTestFail, {
102
+ attachments: mockAttachmentFail,
103
+ }, mockStep);
104
+ reporter.onStepBegin(mockTestPrivacyPolicyLogin, {}, mockStep);
105
+ vi.advanceTimersByTime(100);
106
+ reporter.onStepEnd(mockTestPrivacyPolicyLogin, {
107
+ attachments: mockAttachmentPrivacyPolicyLogin,
108
+ }, mockStep);
109
+ reporter.onTestEnd(mockTestPrivacyPolicyLogin, {
110
+ status: "passed",
111
+ });
112
+ reporter.onTestEnd(mockTestNewUserRegistration, {
113
+ status: "passed",
114
+ });
115
+ reporter.onStepBegin(mockTestPrivacyPolicyRegistration, {}, mockStep);
116
+ vi.advanceTimersByTime(100);
117
+ reporter.onStepEnd(mockTestPrivacyPolicyRegistration, {
118
+ attachments: mockAttachmentPrivacyPolicyRegistration,
119
+ }, mockStep);
120
+ reporter.onTestEnd(mockTestPrivacyPolicyRegistration, {
121
+ status: "passed",
122
+ });
123
+ reporter.onTestEnd(mockTestLoggedInUser, { status: "passed" });
124
+ reporter.onTestEnd(mockTestLoggedOutUser, {
125
+ status: "passed",
126
+ });
127
+ expect(readdirSync(tempDir)).toHaveLength(4);
128
+ reporter.onEnd();
129
+ expect(readdirSync(tempDir)).toHaveLength(8);
130
+ expect(readFileSync(`${tempDir}/test2doc-registration-page.mdx`, "utf8")).toEqual(`---
131
+ title: Registration Page Documentation
132
+ description: The registration page for new users.
133
+ sidebar_position: 1
134
+ ---
135
+
136
+ # Registration Page
137
+
138
+ ## New User Registration
139
+
140
+ ### should register a new user successfully
141
+
142
+ ## link to privacy policy
143
+
144
+ ### should open privacy policy in new tab
145
+
146
+ Given user is on login page
147
+ ![screenshot](./test2doc-0d5626c46ad3.png)
148
+
149
+ `);
150
+ expect(readFileSync(`${tempDir}/test2doc-login-page.mdx`, "utf8")).toEqual(`---
151
+ title: Login Page Documentation
152
+ keywords:
153
+ - login
154
+ - password
155
+ - username
156
+ description: The different login scenarios for the login page.
157
+ sidebar_position: 1
158
+ parse_number_prefixes: true
159
+ ---
160
+
161
+ # Login Page
162
+
163
+ ## Successful Login
164
+
165
+ ### should redirect to dashboard on successful login
166
+
167
+ Given user is on login page
168
+ ![screenshot](./test2doc-fc6a5aa2918b.png)
169
+
170
+ ## Failed Login
171
+
172
+ ### should display error message on failed login
173
+
174
+ Given user is on login page
175
+ ![screenshot](./test2doc-be826aa977e6.png)
176
+ ![Alt Text](./test2doc-df78fdc04e9c.png)
177
+
178
+ ## link to privacy policy
179
+
180
+ ### should open privacy policy in new tab
181
+
182
+ Given user is on login page
183
+ ![screenshot](./test2doc-89d4efdc31b3.png)
184
+
185
+ `);
186
+ expect(readFileSync(`${tempDir}/test2doc-dashboard-page.mdx`, "utf8")).toEqual(`---
187
+ title: Dashboard Documentation
188
+ description: The dashboard of todo stuff.
189
+ sidebar_position: 2
190
+ ---
191
+
192
+ # Dashboard Page
193
+
194
+ ## Logged In User
195
+
196
+ ### should display a list of todos
197
+
198
+ ## Logged Out User
199
+
200
+ ### should redirect to login page
201
+
202
+ `);
203
+ expect(readFileSync(`${tempDir}/test2doc-fc6a5aa2918b.png`)).toEqual(buffer1);
204
+ expect(readFileSync(`${tempDir}/test2doc-be826aa977e6.png`)).toEqual(buffer2);
205
+ expect(readFileSync(`${tempDir}/test2doc-df78fdc04e9c.png`)).toEqual(buffer3);
206
+ expect(readFileSync(`${tempDir}/test2doc-89d4efdc31b3.png`)).toEqual(buffer4);
207
+ expect(readFileSync(`${tempDir}/test2doc-0d5626c46ad3.png`)).toEqual(buffer5);
208
+ // Logging expectations
209
+ expect(mockLogging).toHaveBeenCalledWith("Starting documentation generation for 7 tests...\n");
210
+ expect(mockLogging).toHaveBeenCalledWith("Found 3 documentation sections\n\n");
211
+ // Progress bar updates
212
+ expect(mockLogging).toHaveBeenCalledWith("\r\x1b[K"); // Clear line
213
+ expect(mockLogging).toHaveBeenCalledWith("[.......] 0/7 (0%)");
214
+ expect(mockLogging).toHaveBeenCalledWith("[P......] 1/7 (14%)");
215
+ expect(mockLogging).toHaveBeenCalledWith("[PP.....] 2/7 (29%)");
216
+ expect(mockLogging).toHaveBeenCalledWith("[PPP....] 3/7 (43%)");
217
+ expect(mockLogging).toHaveBeenCalledWith("[PPPP...] 4/7 (57%)");
218
+ expect(mockLogging).toHaveBeenCalledWith("[PPPPP..] 5/7 (71%)");
219
+ expect(mockLogging).toHaveBeenCalledWith("[PPPPPP.] 6/7 (86%)");
220
+ expect(mockLogging).toHaveBeenCalledWith("[PPPPPPP] 7/7 (100%)");
221
+ expect(mockLogging).toHaveBeenCalledWith("\n\n");
222
+ expect(mockLogging).toHaveBeenCalledWith("Cleaning up old generated files...\n");
223
+ expect(mockLogging).toHaveBeenCalledWith("Generating documentation files...\n");
224
+ expect(mockLogging).toHaveBeenCalledWith("Documentation generation completed.\n");
225
+ expect(mockLogging).toHaveBeenCalledWith(`Output directory: ${tempDir}\n`);
226
+ expect(mockLogging).toHaveBeenCalledWith("Processed 5 screenshots\n");
227
+ });
228
+ it("should generate a directory and a _category_.json, and a page for each describe block child under the category describe", () => {
229
+ const reporter = setup();
230
+ reporter.onBegin(mockFullConfig, mockSuiteForCategories);
231
+ reporter.onStepBegin(mockTestSuccess, {}, mockStep);
232
+ reporter.onStepBegin(mockTestFail, {}, mockStep);
233
+ reporter.onEnd();
234
+ expect(readFileSync(`${tempDir}/test2doc-login-page/_category_.json`, "utf8")).toEqual(JSON.stringify({
235
+ label: "Login Page Documentation Label",
236
+ position: 1,
237
+ className: "login-page",
238
+ link: {
239
+ type: "generated-index",
240
+ title: "Login Page Documentation Title",
241
+ description: "The different login scenarios for the login page.",
242
+ slug: "login-page",
243
+ },
244
+ }, null, 2));
245
+ expect(readFileSync(`${tempDir}/test2doc-login-page/test2doc-successful-login.mdx`, "utf8")).toEqual(`---
246
+ sidebar_position: 1
247
+ ---
248
+
249
+ # Successful Login
250
+
251
+ ## should redirect to dashboard on successful login
252
+
253
+ Given user is on login page
254
+
255
+ `);
256
+ expect(readdirSync(`${tempDir}/test2doc-login-page`)).toHaveLength(3);
257
+ expect(readFileSync(`${tempDir}/test2doc-login-page/test2doc-failed-login.mdx`, "utf8")).toEqual(`# Failed Login
258
+
259
+ ## should display error message on failed login
260
+
261
+ Given user is on login page
262
+
263
+ `);
264
+ });
265
+ it("should generate markdown if there is no root describe block", () => {
266
+ const reporter = setup();
267
+ const mockSuiteWithoutRootDescribe = {
268
+ ...baseSuite,
269
+ title: "", // Root Suite
270
+ type: "root",
271
+ suites: [
272
+ {
273
+ ...baseSuite,
274
+ title: "chromium", // or firefox, webkit, etc.
275
+ type: "project",
276
+ suites: [
277
+ {
278
+ ...baseSuite,
279
+ title: "login.test.ts", // Test file name
280
+ type: "file",
281
+ suites: [],
282
+ tests: [mockTestSuccess, mockTestFail],
283
+ },
284
+ ],
285
+ },
286
+ ],
287
+ };
288
+ reporter.onBegin(mockFullConfig, mockSuiteWithoutRootDescribe);
289
+ reporter.onEnd();
290
+ expect(readFileSync(`${tempDir}/test2doc-login.mdx`, "utf8")).toEqual(`# login
291
+
292
+ ## should redirect to dashboard on successful login
293
+
294
+ ## should display error message on failed login
295
+
296
+ `);
297
+ });
298
+ describe("exit test run", () => {
299
+ let mockExit;
300
+ beforeEach(() => {
301
+ mockExit = vi.spyOn(process, "exit").mockImplementation(() => {
302
+ throw new Error("process.exit called");
303
+ });
304
+ });
305
+ afterEach(() => {
306
+ mockExit.mockRestore();
307
+ });
308
+ it("when there are failed tests", () => {
309
+ const reporter = setup();
310
+ const mockFailedResult = {
311
+ status: "failed",
312
+ };
313
+ expect(() => reporter.onTestEnd(mockTestSuccess, mockFailedResult)).toThrow("process.exit called");
314
+ expect(mockLogging).toHaveBeenCalledWith(`Documentation generation aborted due to test failure: ${mockTestSuccess.title}\n`);
315
+ expect(mockExit).toHaveBeenCalledWith(1);
316
+ expect(mockExit).toHaveBeenCalledTimes(1);
317
+ });
318
+ it("when there are tests that timeout", () => {
319
+ const reporter = setup();
320
+ const mockTimeoutResult = {
321
+ status: "timedOut",
322
+ };
323
+ expect(() => reporter.onTestEnd(mockTestSuccess, mockTimeoutResult)).toThrow("process.exit called");
324
+ expect(mockLogging).toHaveBeenCalledWith(`Documentation generation aborted due to test failure: ${mockTestSuccess.title}\n`);
325
+ expect(mockExit).toHaveBeenCalledWith(1);
326
+ expect(mockExit).toHaveBeenCalledTimes(1);
327
+ });
328
+ it("when there are failed tests but the command flag to ignore is set, we run tests anyway.", () => {
329
+ process.env.IGNORE_TEST_FAILURES = "true";
330
+ const reporter = setup();
331
+ const mockFailedResult = {
332
+ status: "failed",
333
+ };
334
+ expect(() => reporter.onTestEnd(mockTestSuccess, mockFailedResult)).not.toThrow("process.exit called");
335
+ expect(mockLogging).toHaveBeenCalledWith(`Documentation generation aborted due to test failure: ${mockTestSuccess.title}\n`);
336
+ expect(mockExit).toHaveBeenCalledTimes(0);
337
+ delete process.env.IGNORE_TEST_FAILURES;
338
+ });
339
+ });
340
+ it("should generate documentation for each project (except for .setup.ts files)", () => {
341
+ const reporter = setup();
342
+ reporter.onBegin(mockFullConfig, mockSuiteWithMultiProjects);
343
+ reporter.onEnd();
344
+ expect(readdirSync(tempDir)).toHaveLength(2);
345
+ expect(readFileSync(`${tempDir}/test2doc-login.mdx`, "utf8")).toEqual(`# login
346
+
347
+ ## how to login
348
+
349
+ ## how to logout
350
+
351
+ `);
352
+ expect(readFileSync(`${tempDir}/test2doc-authenticated.mdx`, "utf8")).toEqual(`# authenticated
353
+
354
+ ## user name and profile should be visible
355
+
356
+ ## setting button should set
357
+
358
+ `);
359
+ // Progress bar should count the setup file
360
+ expect(mockLogging).toHaveBeenCalledWith("[........] 0/8 (0%)");
361
+ });
362
+ it("progress bar should count setup files towards total tests", () => {
363
+ const reporter = setup();
364
+ reporter.onBegin(mockFullConfig, mockSingleSetupFileSuite);
365
+ reporter.onTestEnd(mockSetupTest, {
366
+ status: "passed",
367
+ });
368
+ reporter.onTestEnd(mockAuthenticatedTest, {
369
+ status: "passed",
370
+ });
371
+ reporter.onEnd();
372
+ expect(mockLogging).toHaveBeenCalledWith("[..] 0/2 (0%)");
373
+ expect(mockLogging).toHaveBeenCalledWith("[P.] 1/2 (50%)");
374
+ expect(mockLogging).toHaveBeenCalledWith("[PP] 2/2 (100%)");
375
+ });
376
+ it("should not clean up user directories with generated files", () => {
377
+ const reporter = setup();
378
+ writeFileSync(join(tempDir, "test2doc-old.md"), "# Old Documentation");
379
+ mkdirSync(join(tempDir, "test2doc-clean-me-up-dir"));
380
+ mkdirSync(join(tempDir, "test2doc-login-page"));
381
+ mkdirSync(join(tempDir, "test2doc-orphan-dir"));
382
+ writeFileSync(join(tempDir, "test2doc-login-page/_category_.json"), JSON.stringify({
383
+ label: "This needs to be cleaned up",
384
+ position: 1,
385
+ }, null, 2));
386
+ const handWrittenContent = "# Hand-Written Documentation\n\nThis is some hand-written documentation for the login feature.";
387
+ writeFileSync(join(tempDir, "test2doc-login-page/hand-written-file.md"), handWrittenContent);
388
+ const anotherHandWrittenContent = "# Another Hand-Written Documentation\n\nThis is some hand-written documentation for the category feature.";
389
+ writeFileSync(join(tempDir, "test2doc-orphan-dir/another-hand-written-file.md"), anotherHandWrittenContent);
390
+ reporter.onBegin(mockFullConfig, mockSuiteForCategories);
391
+ expect(readdirSync(tempDir)).toHaveLength(4);
392
+ reporter.onEnd();
393
+ expect(readdirSync(tempDir)).toHaveLength(2);
394
+ expect(readdirSync(join(tempDir, "test2doc-login-page"))).toHaveLength(4);
395
+ expect(readFileSync(join(tempDir, "test2doc-login-page/hand-written-file.md"), "utf8")).toBe(handWrittenContent);
396
+ expect(readdirSync(join(tempDir, "test2doc-orphan-dir"))).toHaveLength(1);
397
+ expect(readFileSync(join(tempDir, "test2doc-orphan-dir/another-hand-written-file.md"), "utf8")).toBe(anotherHandWrittenContent);
398
+ });
399
+ it("should generate figure and figcaption HTML for screenshots with figure metadata", () => {
400
+ const reporter = setup();
401
+ let bufferCounter = 0;
402
+ const createMockScreenshotBuffer = () => Buffer.from(`mock image data ${bufferCounter++}`);
403
+ reporter.onBegin(mockFullConfig, mockSuiteForPages);
404
+ reporter.onStepBegin(mockTestSuccess, {}, mockStep);
405
+ const mockScreenshotName1 = `test2doc-${Date.now() + 500}-1.png`;
406
+ const mockScreenshotName2WithFigure = `test2doc-${Date.now() + 600}-2.png[test2doc_screenshot]:${JSON.stringify({ figure: true, caption: "User login screen" })}`;
407
+ const mockScreenshotName3FigureNoCaption = `test2doc-${Date.now() + 700}-3.png[test2doc_screenshot]:${JSON.stringify({ figure: true })}`;
408
+ const buffer1 = createMockScreenshotBuffer();
409
+ const buffer2 = createMockScreenshotBuffer();
410
+ const buffer3 = createMockScreenshotBuffer();
411
+ const mockAttachmentWithFigure = [
412
+ {
413
+ name: mockScreenshotName1,
414
+ body: buffer1,
415
+ contentType: "image/png",
416
+ },
417
+ {
418
+ name: mockScreenshotName2WithFigure,
419
+ body: buffer2,
420
+ contentType: "image/png",
421
+ },
422
+ {
423
+ name: mockScreenshotName3FigureNoCaption,
424
+ body: buffer3,
425
+ contentType: "image/png",
426
+ },
427
+ ];
428
+ vi.advanceTimersByTime(800);
429
+ reporter.onStepEnd(mockTestSuccess, {
430
+ attachments: mockAttachmentWithFigure,
431
+ }, mockStep);
432
+ reporter.onTestEnd(mockTestSuccess, { status: "passed" });
433
+ reporter.onEnd();
434
+ const content = readFileSync(`${tempDir}/test2doc-login-page.mdx`, "utf8");
435
+ // Regular screenshot without figure should still work with standard markdown
436
+ expect(content).toContain("![screenshot](./test2doc-b67cfe621cc5.png)");
437
+ // Screenshot with figure and caption should include figcaption
438
+ expect(content).toContain(`<figure>
439
+
440
+ ![User login screen](./test2doc-fc6a5aa2918b.png)
441
+ <figcaption>User login screen</figcaption>
442
+ </figure>`);
443
+ // Screenshot with figure but no caption should not include figcaption
444
+ expect(content).toContain(`<figure>
445
+
446
+ ![screenshot](./test2doc-be826aa977e6.png)
447
+ </figure>`);
448
+ });
449
+ });
450
+ //# sourceMappingURL=Test2DocReporter.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Test2DocReporter.test.js","sourceRoot":"","sources":["../src/Test2DocReporter.test.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -26,11 +26,13 @@ declare class Test2DocReporter implements Reporter {
26
26
  private updateProgressBar;
27
27
  onEnd(): void;
28
28
  private buildDocFiles;
29
+ private generateHashedScreenshotFilename;
29
30
  private generateScreenshots;
30
31
  private cleanupTest2DocFiles;
31
32
  private extractDocMetadata;
32
33
  private generateHeader;
33
34
  private generateTitle;
35
+ private parseScreenshotMetadata;
34
36
  private generateMarkdown;
35
37
  }
36
38
  export default Test2DocReporter;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EACV,QAAQ,EACR,KAAK,EACL,QAAQ,EACR,UAAU,EACV,QAAQ,EACT,MAAM,2BAA2B,CAAA;AAqClC,UAAU,uBAAuB;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAwBD;;;GAGG;AACH,cAAM,gBAAiB,YAAW,QAAQ;IACxC,OAAO,CAAC,IAAI,CAAgB;IAC5B,OAAO,CAAC,MAAM,CAA4C;IAC1D,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,mBAAmB,CAAsB;IACjD,OAAO,CAAC,cAAc,CAAoB;IAC1C,OAAO,CAAC,UAAU,CAAI;IACtB,OAAO,CAAC,cAAc,CAAI;IAC1B,OAAO,CAAC,WAAW,CAAgC;gBAGjD,OAAO,GAAE,uBAER;IAKH,OAAO,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK;IAsBzC,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,aAAa;IAYrB,OAAO,CAAC,YAAY;IAmBpB,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,GAAG,IAAI;IAOtE,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,GAAG,IAAI;IAqBnE,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU;IAkB5C,OAAO,CAAC,iBAAiB;IAYzB,KAAK;IAeL,OAAO,CAAC,aAAa;IA8BrB,OAAO,CAAC,mBAAmB;IAQ3B,OAAO,CAAC,oBAAoB;IAqB5B,OAAO,CAAC,kBAAkB;IAW1B,OAAO,CAAC,cAAc;IAiCtB,OAAO,CAAC,aAAa;IAQrB,OAAO,CAAC,gBAAgB;CA6BzB;AAOD,eAAe,gBAAgB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EACV,QAAQ,EACR,KAAK,EACL,QAAQ,EACR,UAAU,EACV,QAAQ,EACT,MAAM,2BAA2B,CAAA;AAuClC,UAAU,uBAAuB;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAwBD;;;GAGG;AACH,cAAM,gBAAiB,YAAW,QAAQ;IACxC,OAAO,CAAC,IAAI,CAAgB;IAC5B,OAAO,CAAC,MAAM,CAA4C;IAC1D,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,mBAAmB,CAAsB;IACjD,OAAO,CAAC,cAAc,CAAoB;IAC1C,OAAO,CAAC,UAAU,CAAI;IACtB,OAAO,CAAC,cAAc,CAAI;IAC1B,OAAO,CAAC,WAAW,CAAgC;gBAGjD,OAAO,GAAE,uBAER;IAKH,OAAO,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK;IA+BzC,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,aAAa;IAYrB,OAAO,CAAC,YAAY;IAmBpB,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,GAAG,IAAI;IAOtE,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,GAAG,IAAI;IAqBnE,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU;IAqB5C,OAAO,CAAC,iBAAiB;IAczB,KAAK;IAeL,OAAO,CAAC,aAAa;IA8BrB,OAAO,CAAC,gCAAgC;IAIxC,OAAO,CAAC,mBAAmB;IAS3B,OAAO,CAAC,oBAAoB;IAqB5B,OAAO,CAAC,kBAAkB;IAW1B,OAAO,CAAC,cAAc;IAiCtB,OAAO,CAAC,aAAa;IAQrB,OAAO,CAAC,uBAAuB;IAmB/B,OAAO,CAAC,gBAAgB;CAsDzB;AAOD,eAAe,gBAAgB,CAAA"}