bits-to-dead-trees 2.0.0 → 2.0.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/CHANGELOG.md +7 -0
- package/app.js +2 -2
- package/package.json +4 -4
- package/test/app.test.ts +24 -1
- package/test/smoke.test.js +36 -0
package/CHANGELOG.md
CHANGED
package/app.js
CHANGED
|
@@ -54,10 +54,10 @@ const createPDF = async (
|
|
|
54
54
|
|
|
55
55
|
const response = await page.goto(url, gotoOptions);
|
|
56
56
|
if (response?.ok()) {
|
|
57
|
-
return page.pdf(pdfOptions);
|
|
57
|
+
return await page.pdf(pdfOptions);
|
|
58
58
|
}
|
|
59
59
|
|
|
60
|
-
return Promise.reject({
|
|
60
|
+
return await Promise.reject({
|
|
61
61
|
error: true,
|
|
62
62
|
message: await response?.text(),
|
|
63
63
|
status: response?.status(),
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "bits-to-dead-trees",
|
|
3
3
|
"author": "Robin Mehner <robin@coding-robin.de>",
|
|
4
|
-
"version": "2.0.
|
|
4
|
+
"version": "2.0.1",
|
|
5
5
|
"description": "Turn HTML into PDF files",
|
|
6
6
|
"repository": "github:rmehner/bits-to-dead-trees",
|
|
7
7
|
"license": "Apache-2.0",
|
|
@@ -36,13 +36,13 @@
|
|
|
36
36
|
"devDependencies": {
|
|
37
37
|
"@changesets/cli": "^2.26.0",
|
|
38
38
|
"@types/lodash": "^4.14.191",
|
|
39
|
-
"eslint": "^8.
|
|
39
|
+
"eslint": "^8.33.0",
|
|
40
40
|
"eslint-config-prettier": "^8.6.0",
|
|
41
41
|
"nodemon": "^2.0.20",
|
|
42
42
|
"pino-pretty": "^9.1.1",
|
|
43
43
|
"prettier": "^2.8.3",
|
|
44
|
-
"tslib": "^2.
|
|
44
|
+
"tslib": "^2.5.0",
|
|
45
45
|
"typescript-json-schema": "^0.55.0",
|
|
46
|
-
"vitest": "^0.28.
|
|
46
|
+
"vitest": "^0.28.3"
|
|
47
47
|
}
|
|
48
48
|
}
|
package/test/app.test.ts
CHANGED
|
@@ -50,7 +50,6 @@ describe("POST /pdf", () => {
|
|
|
50
50
|
pdf = vi.fn().mockResolvedValue(Buffer.from("pdf"));
|
|
51
51
|
newPage = vi.fn().mockResolvedValue({ goto: gotoMethod, pdf });
|
|
52
52
|
newContext = vi.fn().mockResolvedValue({ newPage });
|
|
53
|
-
close = vi.fn();
|
|
54
53
|
|
|
55
54
|
(chromium.launch as Mock<any[], any>).mockResolvedValue({
|
|
56
55
|
newContext,
|
|
@@ -223,4 +222,28 @@ describe("POST /pdf", () => {
|
|
|
223
222
|
|
|
224
223
|
expect(close).toHaveBeenCalled();
|
|
225
224
|
});
|
|
225
|
+
|
|
226
|
+
it("generates the pdf before closing the browser", async () => {
|
|
227
|
+
let i = 0;
|
|
228
|
+
|
|
229
|
+
pdf.mockImplementation(async () => {
|
|
230
|
+
await new Promise((r) => setTimeout(r, 100));
|
|
231
|
+
|
|
232
|
+
return i++;
|
|
233
|
+
});
|
|
234
|
+
|
|
235
|
+
close.mockImplementation(() => {
|
|
236
|
+
return i++;
|
|
237
|
+
});
|
|
238
|
+
|
|
239
|
+
await app.inject({
|
|
240
|
+
method: "POST",
|
|
241
|
+
url: "/pdf",
|
|
242
|
+
payload: {
|
|
243
|
+
url: "https://google.com",
|
|
244
|
+
},
|
|
245
|
+
});
|
|
246
|
+
|
|
247
|
+
expect(pdf.mock.results[0].value).toBeLessThan(close.mock.results[0].value);
|
|
248
|
+
});
|
|
226
249
|
});
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
|
|
3
|
+
import build from "../app";
|
|
4
|
+
const app = build();
|
|
5
|
+
|
|
6
|
+
describe("Smoke tests", () => {
|
|
7
|
+
it("sends the PDF on the success case", async () => {
|
|
8
|
+
const response = await app.inject({
|
|
9
|
+
method: "POST",
|
|
10
|
+
url: "/pdf",
|
|
11
|
+
payload: { url: "https://coding-robin.de" },
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
expect(response.payload.startsWith("%PDF")).toBeTruthy();
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
it("returns an error object when the page could not be loaded", async () => {
|
|
18
|
+
const response = await app.inject({
|
|
19
|
+
method: "POST",
|
|
20
|
+
url: "/pdf",
|
|
21
|
+
payload: {
|
|
22
|
+
url: "http://httpbin.org/status/404",
|
|
23
|
+
},
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
expect(response.statusCode).toEqual(404);
|
|
27
|
+
const error = JSON.parse(response.body);
|
|
28
|
+
|
|
29
|
+
expect(error).toMatchObject({
|
|
30
|
+
error: true,
|
|
31
|
+
status: 404,
|
|
32
|
+
statusText: "NOT FOUND",
|
|
33
|
+
message: "",
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
});
|