@@ -316,6 +316,55 @@ final class FileMiddlewareTests: XCTestCase {
316
316
}
317
317
}
318
318
319
+ func testOnThrow404( ) async throws {
320
+ let router = Router ( )
321
+ router. middlewares. add ( FileMiddleware ( " . " , searchForIndexHtml: true ) )
322
+ router. get { _, _ -> String in
323
+ throw HTTPError ( . notFound)
324
+ }
325
+ let app = Application ( responder: router. buildResponder ( ) )
326
+
327
+ let text = " Test file contents "
328
+ let data = Data ( text. utf8)
329
+ let fileURL = URL ( fileURLWithPath: " index.html " )
330
+ XCTAssertNoThrow ( try data. write ( to: fileURL) )
331
+ defer { XCTAssertNoThrow ( try FileManager . default. removeItem ( at: fileURL) ) }
332
+
333
+ try await app. test ( . router) { client in
334
+ try await client. execute ( uri: " / " , method: . get) { response in
335
+ XCTAssertEqual ( String ( buffer: response. body) , text)
336
+ }
337
+ }
338
+ }
339
+
340
+ func testOnThrowCustom404( ) async throws {
341
+ let router = Router ( )
342
+ router. middlewares. add ( FileMiddleware ( " . " , searchForIndexHtml: true ) )
343
+ struct Custom404Error : HTTPResponseError {
344
+ var status : HTTPResponse . Status { . notFound }
345
+
346
+ func response( from request: Request , context: some RequestContext ) throws -> Response {
347
+ Response ( status: status)
348
+ }
349
+ }
350
+ router. get { _, _ -> String in
351
+ throw Custom404Error ( )
352
+ }
353
+ let app = Application ( responder: router. buildResponder ( ) )
354
+
355
+ let text = " Test file contents "
356
+ let data = Data ( text. utf8)
357
+ let fileURL = URL ( fileURLWithPath: " index.html " )
358
+ XCTAssertNoThrow ( try data. write ( to: fileURL) )
359
+ defer { XCTAssertNoThrow ( try FileManager . default. removeItem ( at: fileURL) ) }
360
+
361
+ try await app. test ( . router) { client in
362
+ try await client. execute ( uri: " / " , method: . get) { response in
363
+ XCTAssertEqual ( String ( buffer: response. body) , text)
364
+ }
365
+ }
366
+ }
367
+
319
368
func testFolder( ) async throws {
320
369
let router = Router ( )
321
370
router. middlewares. add ( FileMiddleware ( " . " , searchForIndexHtml: false ) )
0 commit comments