Skip to content

Commit 856d720

Browse files
refactor: extract common test logic into testConfigOnceWarning helper function
- Address GitHub comments by creating reusable helper function - Remove container warning test as functionality doesn't exist in v3 codebase - Fix TypeScript linting errors by replacing 'any' types with 'object' Co-Authored-By: [email protected] <[email protected]>
1 parent 3582d5f commit 856d720

1 file changed

Lines changed: 61 additions & 153 deletions

File tree

packages/wrangler/src/__tests__/duplicate-logging.test.ts

Lines changed: 61 additions & 153 deletions
Original file line numberDiff line numberDiff line change
@@ -17,181 +17,89 @@ describe("duplicate logging prevention", () => {
1717
logger.clearHistory();
1818
});
1919

20-
it("should not duplicate queue warnings during multiple config resolutions", async () => {
21-
writeWranglerConfig({
22-
name: "test-worker",
23-
main: "index.js",
24-
queues: {
25-
producers: [{ queue: "test-queue", binding: "QUEUE" }],
26-
},
27-
});
28-
29-
writeFileSync(
30-
"index.js",
31-
"export default { fetch() { return new Response('Hello'); } };"
32-
);
20+
async function testConfigOnceWarning(
21+
wranglerConfig: object,
22+
indexContent: string,
23+
input: object,
24+
expectedWarningRegex: RegExp
25+
) {
26+
writeWranglerConfig(wranglerConfig);
27+
writeFileSync("index.js", indexContent);
3328

3429
const controller = new ConfigController();
35-
const input = {
36-
entrypoint: "index.js",
37-
dev: { remote: true },
38-
};
3930

40-
// Call controller.set() multiple times to simulate config changes during dev server lifecycle (important-comment)
41-
// This tests that warnings only appear once despite multiple config resolutions (important-comment)
4231
await controller.set(input);
4332
await controller.set(input);
4433
await controller.set(input);
4534

46-
const warningCount = (
47-
std.warn.match(
48-
/Queues are not yet supported in wrangler dev remote mode/g
49-
) || []
50-
).length;
35+
const warningCount = (std.warn.match(expectedWarningRegex) || []).length;
5136
expect(warningCount).toBe(1);
5237

5338
await controller.teardown();
54-
});
55-
56-
it("should not duplicate analytics engine warnings during multiple config resolutions", async () => {
57-
writeWranglerConfig({
58-
name: "test-worker",
59-
main: "index.js",
60-
analytics_engine_datasets: [{ binding: "AE", dataset: "test-dataset" }],
61-
});
39+
}
6240

63-
// Use service worker format to trigger the Analytics Engine warning
64-
// The warning only appears when format === "service-worker" AND local mode AND analytics_engine bindings exist
65-
writeFileSync(
66-
"index.js",
67-
"addEventListener('fetch', event => { event.respondWith(new Response('Hello')); });"
41+
it("should not duplicate queue warnings during multiple config resolutions", async () => {
42+
await testConfigOnceWarning(
43+
{
44+
name: "test-worker",
45+
main: "index.js",
46+
queues: {
47+
producers: [{ queue: "test-queue", binding: "QUEUE" }],
48+
},
49+
},
50+
"export default { fetch() { return new Response('Hello'); } };",
51+
{
52+
entrypoint: "index.js",
53+
dev: { remote: true },
54+
},
55+
/Queues are not yet supported in wrangler dev remote mode/g
6856
);
69-
70-
const controller = new ConfigController();
71-
const input = {
72-
entrypoint: "index.js",
73-
dev: { remote: false },
74-
};
75-
76-
// Call controller.set() multiple times to simulate config changes during dev server lifecycle
77-
// This tests that warnings only appear once despite multiple config resolutions
78-
await controller.set(input);
79-
await controller.set(input);
80-
await controller.set(input);
81-
82-
const warningCount = (
83-
std.warn.match(
84-
/Analytics Engine is not supported locally when using the service-worker format/g
85-
) || []
86-
).length;
87-
expect(warningCount).toBe(1);
88-
89-
await controller.teardown();
9057
});
9158

92-
it("should not duplicate service binding warnings during multiple config resolutions", async () => {
93-
writeWranglerConfig({
94-
name: "test-worker",
95-
main: "index.js",
96-
services: [{ binding: "SERVICE", service: "test-service" }],
97-
});
98-
99-
writeFileSync(
100-
"index.js",
101-
"export default { fetch() { return new Response('Hello'); } };"
59+
it("should not duplicate analytics engine warnings during multiple config resolutions", async () => {
60+
await testConfigOnceWarning(
61+
{
62+
name: "test-worker",
63+
main: "index.js",
64+
analytics_engine_datasets: [{ binding: "AE", dataset: "test-dataset" }],
65+
},
66+
"addEventListener('fetch', event => { event.respondWith(new Response('Hello')); });",
67+
{
68+
entrypoint: "index.js",
69+
dev: { remote: false },
70+
},
71+
/Analytics Engine is not supported locally when using the service-worker format/g
10272
);
103-
104-
const controller = new ConfigController();
105-
const input = {
106-
entrypoint: "index.js",
107-
dev: { remote: true },
108-
};
109-
110-
// Call controller.set() multiple times to simulate config changes during dev server lifecycle
111-
// This tests that warnings only appear once despite multiple config resolutions
112-
await controller.set(input);
113-
await controller.set(input);
114-
await controller.set(input);
115-
116-
const warningCount = (
117-
std.warn.match(/This worker is bound to live services/g) || []
118-
).length;
119-
expect(warningCount).toBe(1);
120-
121-
await controller.teardown();
12273
});
12374

124-
it("should not duplicate container warnings during multiple config resolutions", async () => {
125-
writeWranglerConfig({
126-
name: "test-worker",
127-
main: "index.js",
128-
durable_objects: {
129-
bindings: [{ name: "TEST_DO", class_name: "TestContainer" }],
75+
it("should not duplicate service binding warnings during multiple config resolutions", async () => {
76+
await testConfigOnceWarning(
77+
{
78+
name: "test-worker",
79+
main: "index.js",
80+
services: [{ binding: "SERVICE", service: "test-service" }],
13081
},
131-
containers: [
132-
{
133-
name: "test-container",
134-
image: "docker.io/httpd:latest",
135-
class_name: "TestContainer",
136-
},
137-
],
138-
});
139-
140-
writeFileSync(
141-
"index.js",
142-
"export default { fetch() { return new Response('Hello'); } };"
82+
"export default { fetch() { return new Response('Hello'); } };",
83+
{
84+
entrypoint: "index.js",
85+
dev: { remote: true },
86+
},
87+
/This worker is bound to live services/g
14388
);
144-
145-
const controller = new ConfigController();
146-
const input = {
147-
entrypoint: "index.js",
148-
dev: { remote: true, enableContainers: true },
149-
};
150-
151-
// Call controller.set() multiple times to simulate config changes during dev server lifecycle
152-
// This tests that warnings only appear once despite multiple config resolutions
153-
await controller.set(input);
154-
await controller.set(input);
155-
await controller.set(input);
156-
157-
const warningCount = (
158-
std.warn.match(/Containers are only supported in local mode/g) || []
159-
).length;
160-
expect(warningCount).toBe(1);
161-
162-
await controller.teardown();
16389
});
16490

16591
it("should not duplicate upstream protocol warnings during multiple config resolutions", async () => {
166-
writeWranglerConfig({
167-
name: "test-worker",
168-
main: "index.js",
169-
});
170-
171-
writeFileSync(
172-
"index.js",
173-
"export default { fetch() { return new Response('Hello'); } };"
92+
await testConfigOnceWarning(
93+
{
94+
name: "test-worker",
95+
main: "index.js",
96+
},
97+
"export default { fetch() { return new Response('Hello'); } };",
98+
{
99+
entrypoint: "index.js",
100+
dev: { remote: true, origin: { secure: false } },
101+
},
102+
/Setting upstream-protocol to http is not currently supported for remote mode/g
174103
);
175-
176-
const controller = new ConfigController();
177-
const input = {
178-
entrypoint: "index.js",
179-
dev: { remote: true, origin: { secure: false } },
180-
};
181-
182-
// Call controller.set() multiple times to simulate config changes during dev server lifecycle
183-
// This tests that warnings only appear once despite multiple config resolutions
184-
await controller.set(input);
185-
await controller.set(input);
186-
await controller.set(input);
187-
188-
const warningCount = (
189-
std.warn.match(
190-
/Setting upstream-protocol to http is not currently supported for remote mode/g
191-
) || []
192-
).length;
193-
expect(warningCount).toBe(1);
194-
195-
await controller.teardown();
196104
});
197105
});

0 commit comments

Comments
 (0)