|
1 | | -import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from "node:fs"; |
| 1 | +import { existsSync, mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from "node:fs"; |
2 | 2 | import { tmpdir } from "node:os"; |
3 | 3 | import { join } from "node:path"; |
4 | 4 | import type { Browser, Page } from "puppeteer-core"; |
@@ -75,6 +75,55 @@ describe("Lottie capture budget", () => { |
75 | 75 | expect(previewPage.setViewport).not.toHaveBeenCalled(); |
76 | 76 | expect(previewPage.screenshot).not.toHaveBeenCalled(); |
77 | 77 | }); |
| 78 | + |
| 79 | + it("omits a preview path when the budget expires after Lottie readiness", async () => { |
| 80 | + const dir = tempDir(); |
| 81 | + const lottieDir = join(dir, "assets", "lottie"); |
| 82 | + mkdirSync(join(dir, "extracted"), { recursive: true }); |
| 83 | + mkdirSync(lottieDir, { recursive: true }); |
| 84 | + writeFileSync( |
| 85 | + join(lottieDir, "logo.json"), |
| 86 | + JSON.stringify({ |
| 87 | + nm: "Logo", |
| 88 | + w: 100, |
| 89 | + h: 100, |
| 90 | + fr: 30, |
| 91 | + ip: 0, |
| 92 | + op: 30, |
| 93 | + layers: [], |
| 94 | + }), |
| 95 | + ); |
| 96 | + |
| 97 | + const screenshot = vi.fn(async () => undefined); |
| 98 | + const previewPage = { |
| 99 | + setViewport: vi.fn(async () => undefined), |
| 100 | + setContent: vi.fn(async () => undefined), |
| 101 | + evaluate: vi.fn(async () => undefined), |
| 102 | + waitForFunction: vi.fn(async () => undefined), |
| 103 | + screenshot, |
| 104 | + close: vi.fn(async () => undefined), |
| 105 | + }; |
| 106 | + const browser = { newPage: vi.fn(async () => previewPage) } as unknown as Browser; |
| 107 | + let budgetChecks = 0; |
| 108 | + |
| 109 | + await renderLottiePreviews(browser, lottieDir, dir, { |
| 110 | + remainingMs: () => (++budgetChecks < 4 ? 10_000 : 0), |
| 111 | + }); |
| 112 | + |
| 113 | + const manifest = JSON.parse( |
| 114 | + readFileSync(join(dir, "extracted", "lottie-manifest.json"), "utf-8"), |
| 115 | + ); |
| 116 | + expect(screenshot).not.toHaveBeenCalled(); |
| 117 | + expect(manifest).toHaveLength(1); |
| 118 | + expect(manifest[0]).toMatchObject({ |
| 119 | + file: "assets/lottie/logo.json", |
| 120 | + name: "Logo", |
| 121 | + width: 100, |
| 122 | + height: 100, |
| 123 | + }); |
| 124 | + expect(manifest[0]).not.toHaveProperty("preview"); |
| 125 | + expect(existsSync(join(lottieDir, "previews", "logo-preview.png"))).toBe(false); |
| 126 | + }); |
78 | 127 | }); |
79 | 128 |
|
80 | 129 | describe("video capture live budget", () => { |
|
0 commit comments