@@ -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- / Q u e u e s a r e n o t y e t s u p p o r t e d i n w r a n g l e r d e v r e m o t e m o d e / 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+ / Q u e u e s a r e n o t y e t s u p p o r t e d i n w r a n g l e r d e v r e m o t e m o d e / 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- / A n a l y t i c s E n g i n e i s n o t s u p p o r t e d l o c a l l y w h e n u s i n g t h e s e r v i c e - w o r k e r f o r m a t / 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+ / A n a l y t i c s E n g i n e i s n o t s u p p o r t e d l o c a l l y w h e n u s i n g t h e s e r v i c e - w o r k e r f o r m a t / 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 ( / T h i s w o r k e r i s b o u n d t o l i v e s e r v i c e s / 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+ / T h i s w o r k e r i s b o u n d t o l i v e s e r v i c e s / 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 ( / C o n t a i n e r s a r e o n l y s u p p o r t e d i n l o c a l m o d e / 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+ / S e t t i n g u p s t r e a m - p r o t o c o l t o h t t p i s n o t c u r r e n t l y s u p p o r t e d f o r r e m o t e m o d e / 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- / S e t t i n g u p s t r e a m - p r o t o c o l t o h t t p i s n o t c u r r e n t l y s u p p o r t e d f o r r e m o t e m o d e / g
191- ) || [ ]
192- ) . length ;
193- expect ( warningCount ) . toBe ( 1 ) ;
194-
195- await controller . teardown ( ) ;
196104 } ) ;
197105} ) ;
0 commit comments