@@ -129,4 +129,86 @@ describe('Router Tests', () => {
129129 } > ;
130130 expect ( Array . from ( tasks . values ( ) ) [ 1 ] . item . name ) . to . equal ( 'withName' ) ;
131131 } )
132- } )
132+
133+ it ( 'should preserve exact, parameterized, and fallback routes after use()' , async ( ) => {
134+ const child = new Router < R , S > ( ) ;
135+ const parent = new Router < R , S > ( ) ;
136+ const triggered : string [ ] = [ ] ;
137+
138+ child . route ( 'GET' , '/' , ( _req , res ) => {
139+ triggered . push ( 'root' ) ;
140+ res . body = 'root' ;
141+ } ) ;
142+ child . route ( 'GET' , '/login' , ( _req , res ) => {
143+ triggered . push ( 'login' ) ;
144+ res . body = 'login' ;
145+ } ) ;
146+ child . route ( 'GET' , '/user' , ( _req , res ) => {
147+ triggered . push ( 'user' ) ;
148+ res . body = 'user' ;
149+ } ) ;
150+ child . route ( 'GET' , '/user/:id' , ( req , res ) => {
151+ triggered . push ( `get:${ req . data ( 'id' ) } ` ) ;
152+ res . body = `get:${ req . data ( 'id' ) } ` ;
153+ } ) ;
154+ child . route ( 'PUT' , '/user/:id' , ( req , res ) => {
155+ triggered . push ( `put:${ req . data ( 'id' ) } ` ) ;
156+ res . body = `put:${ req . data ( 'id' ) } ` ;
157+ } ) ;
158+ child . route ( 'DELETE' , '/user/:id' , ( req , res ) => {
159+ triggered . push ( `delete:${ req . data ( 'id' ) } ` ) ;
160+ res . body = `delete:${ req . data ( 'id' ) } ` ;
161+ } ) ;
162+ child . route ( 'ANY' , '/files/**' , ( _req , res ) => {
163+ triggered . push ( 'wildcard' ) ;
164+ res . body = 'fallback' ;
165+ } ) ;
166+
167+ parent . use ( child ) ;
168+
169+ const rootReq = parent . request ( { resource : { path : '/' } } ) ;
170+ const rootRes = parent . response ( { resource : { } } ) ;
171+ await parent . emit ( 'GET /' , rootReq , rootRes ) ;
172+
173+ const loginReq = parent . request ( { resource : { path : '/login' } } ) ;
174+ const loginRes = parent . response ( { resource : { } } ) ;
175+ await parent . emit ( 'GET /login' , loginReq , loginRes ) ;
176+
177+ const userReq = parent . request ( { resource : { path : '/user' } } ) ;
178+ const userRes = parent . response ( { resource : { } } ) ;
179+ await parent . emit ( 'GET /user' , userReq , userRes ) ;
180+
181+ const getReq = parent . request ( { resource : { path : '/user/1' } } ) ;
182+ const getRes = parent . response ( { resource : { } } ) ;
183+ await parent . emit ( 'GET /user/1' , getReq , getRes ) ;
184+
185+ const putReq = parent . request ( { resource : { path : '/user/1' } } ) ;
186+ const putRes = parent . response ( { resource : { } } ) ;
187+ await parent . emit ( 'PUT /user/1' , putReq , putRes ) ;
188+
189+ const deleteReq = parent . request ( { resource : { path : '/user/1' } } ) ;
190+ const deleteRes = parent . response ( { resource : { } } ) ;
191+ await parent . emit ( 'DELETE /user/1' , deleteReq , deleteRes ) ;
192+
193+ const fallbackReq = parent . request ( { resource : { path : '/files/missing/path' } } ) ;
194+ const fallbackRes = parent . response ( { resource : { } } ) ;
195+ await parent . emit ( 'PATCH /files/missing/path' , fallbackReq , fallbackRes ) ;
196+
197+ expect ( triggered ) . to . deep . equal ( [
198+ 'root' ,
199+ 'login' ,
200+ 'user' ,
201+ 'get:1' ,
202+ 'put:1' ,
203+ 'delete:1' ,
204+ 'wildcard'
205+ ] ) ;
206+ expect ( rootRes . body ) . to . equal ( 'root' ) ;
207+ expect ( loginRes . body ) . to . equal ( 'login' ) ;
208+ expect ( userRes . body ) . to . equal ( 'user' ) ;
209+ expect ( getRes . body ) . to . equal ( 'get:1' ) ;
210+ expect ( putRes . body ) . to . equal ( 'put:1' ) ;
211+ expect ( deleteRes . body ) . to . equal ( 'delete:1' ) ;
212+ expect ( fallbackRes . body ) . to . equal ( 'fallback' ) ;
213+ } ) ;
214+ } )
0 commit comments