1- import XCTest
21import LeafErrorMiddleware
3- import Vapor
42@testable import Logging
3+ import Vapor
4+ import XCTest
55
66struct AContext : Encodable {
77 let trigger : Bool
88}
99
1010class CustomGeneratorTests : XCTestCase {
11-
1211 // MARK: - Properties
12+
1313 var app : Application !
1414 var viewRenderer : ThrowingViewRenderer !
1515 var logger = CapturingLogger ( )
1616 var eventLoopGroup : EventLoopGroup !
1717
1818 // MARK: - Overrides
19+
1920 override func setUpWithError( ) throws {
2021 eventLoopGroup = MultiThreadedEventLoopGroup ( numberOfThreads: 1 )
2122 viewRenderer = ThrowingViewRenderer ( eventLoop: eventLoopGroup. next ( ) )
2223 LoggingSystem . bootstrapInternal { _ in
23- return self . logger
24+ self . logger
2425 }
2526 app = Application ( . testing, . shared( eventLoopGroup) )
2627
2728 app. views. use { _ in
28- return self . viewRenderer
29+ self . viewRenderer
2930 }
3031
3132 func routes( _ router: RoutesBuilder ) throws {
33+ router. get ( " ok " ) { _ in
34+ " ok "
35+ }
3236
33- router. get ( " ok " ) { req in
34- return " ok "
37+ router. get ( " 404 " ) { _ -> HTTPStatus in
38+ . notFound
3539 }
3640
37- router. get ( " 404 " ) { req -> HTTPStatus in
38- return . notFound
41+ router. get ( " 403 " ) { _ -> Response in
42+ throw Abort ( . forbidden )
3943 }
4044
41- router. get ( " serverError " ) { req -> EventLoopFuture < Response > in
45+ router. get ( " serverError " ) { _ -> Response in
4246 throw Abort ( . internalServerError)
4347 }
4448
45- router. get ( " unknownError " ) { req -> EventLoopFuture < Response > in
49+ router. get ( " unknownError " ) { _ -> Response in
4650 throw TestError ( )
4751 }
4852
49- router. get ( " unauthorized " ) { req -> EventLoopFuture < Response > in
53+ router. get ( " unauthorized " ) { _ -> Response in
5054 throw Abort ( . unauthorized)
5155 }
5256
53- router. get ( " future404 " ) { req -> EventLoopFuture < Response > in
54- return req. eventLoop. future ( error: Abort ( . notFound) )
55- }
56-
57- router. get ( " future403 " ) { req -> EventLoopFuture < Response > in
58- return req. eventLoop. future ( error: Abort ( . forbidden) )
59- }
60-
61- router. get ( " future303 " ) { req -> EventLoopFuture < Response > in
62- return req. eventLoop. future ( error: Abort . redirect ( to: " ok " ) )
63- }
64-
65- router. get ( " future404NoAbort " ) { req -> EventLoopFuture < HTTPStatus > in
66- return req. eventLoop. future ( . notFound)
57+ router. get ( " 303 " ) { _ -> Response in
58+ throw Abort . redirect ( to: " ok " )
6759 }
6860
69- router. get ( " 404withReason " ) { req -> HTTPStatus in
61+ router. get ( " 404withReason " ) { _ -> HTTPStatus in
7062 throw Abort ( . notFound, reason: " Could not find it " )
7163 }
7264
73- router. get ( " 500withReason " ) { req -> HTTPStatus in
65+ router. get ( " 500withReason " ) { _ -> HTTPStatus in
7466 throw Abort ( . badGateway, reason: " I messed up " )
7567 }
7668 }
7769
7870 try routes ( app)
7971
80- let leafMiddleware = LeafErrorMiddleware ( ) { status, error, req -> EventLoopFuture < AContext > in
81- return req . eventLoop . future ( AContext ( trigger: true ) )
72+ let leafMiddleware = LeafErrorMiddleware { status, error, req async throws -> AContext in
73+ AContext ( trigger: true )
8274 }
8375 app. middleware. use ( leafMiddleware)
8476 }
@@ -139,36 +131,24 @@ class CustomGeneratorTests: XCTestCase {
139131 XCTAssertEqual ( viewRenderer. leafPath, " serverError " )
140132 }
141133
142- func testNonAbort404IsCaughtCorrectly( ) throws {
143- let response = try app. getResponse ( to: " /404 " )
144- XCTAssertEqual ( response. status, . notFound)
145- XCTAssertEqual ( viewRenderer. leafPath, " 404 " )
146- }
147-
148- func testThatFuture404IsCaughtCorrectly( ) throws {
149- let response = try app. getResponse ( to: " /future404 " )
150- XCTAssertEqual ( response. status, . notFound)
151- XCTAssertEqual ( viewRenderer. leafPath, " 404 " )
134+ func testThatRedirectIsNotCaught( ) throws {
135+ let response = try app. getResponse ( to: " /303 " )
136+ XCTAssertEqual ( response. status, . seeOther)
137+ XCTAssertEqual ( response. headers [ . location] . first, " ok " )
152138 }
153139
154- func testFutureNonAbort404IsCaughtCorrectly ( ) throws {
155- let response = try app. getResponse ( to: " /future404NoAbort " )
140+ func testNonAbort404IsCaughtCorrectly ( ) throws {
141+ let response = try app. getResponse ( to: " /404 " )
156142 XCTAssertEqual ( response. status, . notFound)
157143 XCTAssertEqual ( viewRenderer. leafPath, " 404 " )
158144 }
159145
160- func testThatFuture403IsCaughtCorrectly ( ) throws {
161- let response = try app. getResponse ( to: " /future403 " )
146+ func testThat403IsCaughtCorrectly ( ) throws {
147+ let response = try app. getResponse ( to: " /403 " )
162148 XCTAssertEqual ( response. status, . forbidden)
163149 XCTAssertEqual ( viewRenderer. leafPath, " serverError " )
164150 }
165151
166- func testThatRedirectIsNotCaught( ) throws {
167- let response = try app. getResponse ( to: " /future303 " )
168- XCTAssertEqual ( response. status, . seeOther)
169- XCTAssertEqual ( response. headers [ . location] . first, " ok " )
170- }
171-
172152 func testContextGeneratedOn404Page( ) throws {
173153 let response = try app. getResponse ( to: " /404 " )
174154 XCTAssertEqual ( response. status, . notFound)
@@ -189,20 +169,19 @@ class CustomGeneratorTests: XCTestCase {
189169 app. shutdown ( )
190170 app = Application ( . testing, . shared( eventLoopGroup) )
191171 app. views. use { _ in
192- return self . viewRenderer
172+ self . viewRenderer
193173 }
194- let leafErrorMiddleware = LeafErrorMiddleware ( ) { status, error, req -> EventLoopFuture < AContext > in
195- return req. eventLoop. future ( error: Abort ( . internalServerError) )
196-
174+ let leafErrorMiddleware = LeafErrorMiddleware { _, _, _ -> AContext in
175+ throw Abort ( . internalServerError)
197176 }
198177 app. middleware = . init( )
199178 app. middleware. use ( leafErrorMiddleware)
200179
201- app. get ( " 404 " ) { req -> EventLoopFuture < Response > in
202- req . eventLoop . makeFailedFuture ( Abort ( . notFound) )
180+ app. get ( " 404 " ) { _ async throws -> Response in
181+ throw Abort ( . notFound)
203182 }
204- app. get ( " 500 " ) { req -> EventLoopFuture < Response > in
205- req . eventLoop . makeFailedFuture ( Abort ( . internalServerError) )
183+ app. get ( " 500 " ) { _ async throws -> Response in
184+ throw Abort ( . internalServerError)
206185 }
207186
208187 let response404 = try app. getResponse ( to: " 404 " )
@@ -213,6 +192,4 @@ class CustomGeneratorTests: XCTestCase {
213192 XCTAssertEqual ( response500. status, . internalServerError)
214193 XCTAssertNil ( viewRenderer. leafPath)
215194 }
216-
217-
218195}
0 commit comments