bingo-testers 0.5.4 → 0.5.5
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/lib/testOptions.d.ts +3 -0
- package/lib/testOptions.d.ts.map +1 -0
- package/lib/testOptions.js +17 -0
- package/lib/testOptions.js.map +1 -0
- package/lib/testOptions.test.d.ts +2 -0
- package/lib/testOptions.test.d.ts.map +1 -0
- package/lib/testOptions.test.js +96 -0
- package/lib/testOptions.test.js.map +1 -0
- package/package.json +3 -2
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { AnyShape, HasOptionsAndMaybePrepare, InferredObject, OptionsContext } from "bingo";
|
|
2
|
+
export declare function testOptions<OptionsShape extends AnyShape>(base: HasOptionsAndMaybePrepare<OptionsShape>, context?: Partial<OptionsContext<InferredObject<OptionsShape>>>): Promise<Partial<InferredObject<OptionsShape>> | import("bingo").AwaitedLazyProperties<import("bingo").LazyOptionalOptions<Partial<InferredObject<OptionsShape>>>> | undefined>;
|
|
3
|
+
//# sourceMappingURL=testOptions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"testOptions.d.ts","sourceRoot":"","sources":["../src/testOptions.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,QAAQ,EAER,yBAAyB,EACzB,cAAc,EACd,cAAc,EACd,MAAM,OAAO,CAAC;AAIf,wBAAsB,WAAW,CAAC,YAAY,SAAS,QAAQ,EAC9D,IAAI,EAAE,yBAAyB,CAAC,YAAY,CAAC,EAC7C,OAAO,GAAE,OAAO,CAAC,cAAc,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,CAAM,kLAenE"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { awaitLazyProperties, } from "bingo";
|
|
2
|
+
import { createFailingFunction } from "./utils.js";
|
|
3
|
+
export async function testOptions(base, context = {}) {
|
|
4
|
+
if (!base.prepare) {
|
|
5
|
+
return context.options;
|
|
6
|
+
}
|
|
7
|
+
return await awaitLazyProperties({
|
|
8
|
+
...base.prepare({
|
|
9
|
+
...context,
|
|
10
|
+
log: context.log ?? createFailingFunction("log", "prepare()"),
|
|
11
|
+
options: context.options ?? {},
|
|
12
|
+
take: context.take ?? createFailingFunction("take", "prepare()"),
|
|
13
|
+
}),
|
|
14
|
+
...context.options,
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=testOptions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"testOptions.js","sourceRoot":"","sources":["../src/testOptions.ts"],"names":[],"mappings":"AAAA,OAAO,EAEN,mBAAmB,GAInB,MAAM,OAAO,CAAC;AAEf,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAEnD,MAAM,CAAC,KAAK,UAAU,WAAW,CAChC,IAA6C,EAC7C,UAAiE,EAAE;IAEnE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QACnB,OAAO,OAAO,CAAC,OAAO,CAAC;IACxB,CAAC;IAED,OAAO,MAAM,mBAAmB,CAAC;QAChC,GAAG,IAAI,CAAC,OAAO,CAAC;YACf,GAAG,OAAO;YACV,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI,qBAAqB,CAAC,KAAK,EAAE,WAAW,CAAC;YAC7D,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,EAAE;YAC9B,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,qBAAqB,CAAC,MAAM,EAAE,WAAW,CAAC;SAChE,CAAC;QACF,GAAG,OAAO,CAAC,OAAO;KAClB,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"testOptions.test.d.ts","sourceRoot":"","sources":["../src/testOptions.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { describe, expect, it, vi } from "vitest";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { testOptions } from "./testOptions.js";
|
|
4
|
+
describe("testOptions", () => {
|
|
5
|
+
it("returns context.options directly when base.prepare is undefined", async () => {
|
|
6
|
+
const options = { value: "abc" };
|
|
7
|
+
const actual = await testOptions({
|
|
8
|
+
options: {
|
|
9
|
+
value: z.string(),
|
|
10
|
+
},
|
|
11
|
+
}, { options });
|
|
12
|
+
expect(actual).toBe(options);
|
|
13
|
+
});
|
|
14
|
+
it("uses an options value from context when prepare also creates a value for it", async () => {
|
|
15
|
+
const value = "provided";
|
|
16
|
+
const getValue = vi.fn().mockResolvedValueOnce("default");
|
|
17
|
+
const actual = await testOptions({
|
|
18
|
+
options: {
|
|
19
|
+
value: z.string(),
|
|
20
|
+
},
|
|
21
|
+
prepare() {
|
|
22
|
+
return {
|
|
23
|
+
value: getValue,
|
|
24
|
+
};
|
|
25
|
+
},
|
|
26
|
+
}, {
|
|
27
|
+
options: { value },
|
|
28
|
+
});
|
|
29
|
+
expect(actual).toEqual({ value });
|
|
30
|
+
expect(getValue).not.toHaveBeenCalled();
|
|
31
|
+
});
|
|
32
|
+
it("passes options to prepare when provided in context", async () => {
|
|
33
|
+
const actual = await testOptions({
|
|
34
|
+
options: {
|
|
35
|
+
first: z.string(),
|
|
36
|
+
second: z.string(),
|
|
37
|
+
},
|
|
38
|
+
prepare({ options }) {
|
|
39
|
+
return {
|
|
40
|
+
second: () => Promise.resolve(String(options.first) + "!"),
|
|
41
|
+
};
|
|
42
|
+
},
|
|
43
|
+
}, {
|
|
44
|
+
options: { first: "abc" },
|
|
45
|
+
});
|
|
46
|
+
expect(actual).toEqual({
|
|
47
|
+
first: "abc",
|
|
48
|
+
second: "abc!",
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
it("throws an error when prepare calls log and log is not provided", async () => {
|
|
52
|
+
const act = async () => await testOptions({
|
|
53
|
+
options: {},
|
|
54
|
+
prepare({ log }) {
|
|
55
|
+
log("message");
|
|
56
|
+
return {};
|
|
57
|
+
},
|
|
58
|
+
});
|
|
59
|
+
await expect(act).rejects.toEqual(new Error(`Context property 'log' was used by prepare() but not provided.`));
|
|
60
|
+
});
|
|
61
|
+
it("calls the provided log when prepare calls log and log is provided", async () => {
|
|
62
|
+
const data = "message";
|
|
63
|
+
const log = vi.fn();
|
|
64
|
+
await testOptions({
|
|
65
|
+
options: {},
|
|
66
|
+
prepare({ log }) {
|
|
67
|
+
log(data);
|
|
68
|
+
return {};
|
|
69
|
+
},
|
|
70
|
+
}, { log });
|
|
71
|
+
expect(log).toHaveBeenCalledWith(data);
|
|
72
|
+
});
|
|
73
|
+
it("throws an error when prepare calls take and take is not provided", async () => {
|
|
74
|
+
const act = async () => await testOptions({
|
|
75
|
+
options: {},
|
|
76
|
+
prepare({ take }) {
|
|
77
|
+
take(vi.fn());
|
|
78
|
+
return {};
|
|
79
|
+
},
|
|
80
|
+
});
|
|
81
|
+
await expect(act).rejects.toEqual(new Error(`Context property 'take' was used by prepare() but not provided.`));
|
|
82
|
+
});
|
|
83
|
+
it("calls the provided take when prepare calls take and take is provided", async () => {
|
|
84
|
+
const input = vi.fn();
|
|
85
|
+
const take = vi.fn();
|
|
86
|
+
await testOptions({
|
|
87
|
+
options: {},
|
|
88
|
+
prepare({ take }) {
|
|
89
|
+
take(input);
|
|
90
|
+
return {};
|
|
91
|
+
},
|
|
92
|
+
}, { take });
|
|
93
|
+
expect(take).toHaveBeenCalledWith(input);
|
|
94
|
+
});
|
|
95
|
+
});
|
|
96
|
+
//# sourceMappingURL=testOptions.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"testOptions.test.js","sourceRoot":"","sources":["../src/testOptions.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "bingo-testers",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.5",
|
|
4
4
|
"description": "Test utilities for composable, testable, type-safe templates. ⚗️",
|
|
5
|
+
"homepage": "https://www.create.bingo/build/packages/bingo-testers",
|
|
5
6
|
"repository": {
|
|
6
7
|
"type": "git",
|
|
7
8
|
"url": "https://github.com/JoshuaKGoldberg/bingo",
|
|
@@ -30,7 +31,7 @@
|
|
|
30
31
|
"zod": "3.24.2"
|
|
31
32
|
},
|
|
32
33
|
"peerDependencies": {
|
|
33
|
-
"bingo": "^0.5.
|
|
34
|
+
"bingo": "^0.5.6",
|
|
34
35
|
"bingo-fs": "^0.5.4",
|
|
35
36
|
"bingo-systems": "^0.5.4"
|
|
36
37
|
},
|