29
29
// SOFTWARE.
30
30
//
31
31
32
+ import Foundation
32
33
import FlyingFox
33
34
import FlyingFoxMacros
34
- import XCTest
35
+ import Testing
35
36
36
- final class HTTPHandlerMacroTests : XCTestCase {
37
+ struct HTTPHandlerMacroTests {
37
38
38
- func testHandler( ) async throws {
39
+ @Test
40
+ func handler( ) async throws {
39
41
let handler = MacroHandler ( )
40
42
41
43
await AsyncAssertEqual (
@@ -55,6 +57,24 @@ final class HTTPHandlerMacroTests: XCTestCase {
55
57
try await handler. handleRequest ( . make( path: " /fish " ) ) . jsonDictionaryBody,
56
58
[ " name " : " Pickles " ]
57
59
)
60
+
61
+ await AsyncAssertEqual (
62
+ try await handler. handleRequest ( . make( path: " /chips " ) ) . jsonDictionaryBody,
63
+ [ " name " : " 🍟 " ]
64
+ )
65
+
66
+ await AsyncAssertEqual (
67
+ try await handler. handleRequest ( . make( path: " /shrimp " ) ) . jsonDictionaryBody,
68
+ [ " name " : " 🦐 " ]
69
+ )
70
+
71
+ await AsyncAssertEqual (
72
+ try await handler. handleRequest ( . make( path: " /all " ) ) . jsonArrayBody,
73
+ [
74
+ [ " name " : " Tyger Tyger " ] ,
75
+ [ " name " : " Burning Bright " ]
76
+ ]
77
+ )
58
78
}
59
79
}
60
80
@@ -79,9 +99,29 @@ private struct MacroHandler {
79
99
Fish ( name: " Pickles " )
80
100
}
81
101
102
+ @JSONRoute ( " /chips " )
103
+ func getFoo( ) -> MacroHandler . Chips {
104
+ MacroHandler . Chips ( name: " 🍟 " )
105
+ }
106
+
107
+ @JSONRoute ( " /shrimp " )
108
+ func getShrimp( ) -> some Encodable {
109
+ MacroHandler . Chips ( name: " 🦐 " )
110
+ }
111
+
112
+ @JSONRoute ( " /all " )
113
+ func getAll( ) -> [ Fish ] {
114
+ [
115
+ Fish ( name: " Tyger Tyger " ) ,
116
+ Fish ( name: " Burning Bright " )
117
+ ]
118
+ }
119
+
82
120
struct Fish : Encodable {
83
121
var name : String
84
122
}
123
+
124
+ typealias Chips = Fish
85
125
}
86
126
87
127
private extension HTTPResponse {
@@ -95,4 +135,14 @@ private extension HTTPResponse {
95
135
return object as? NSDictionary
96
136
}
97
137
}
138
+
139
+ var jsonArrayBody : NSArray ? {
140
+ get async {
141
+ guard let data = try ? await bodyData,
142
+ let object = try ? JSONSerialization . jsonObject ( with: data, options: [ ] ) else {
143
+ return nil
144
+ }
145
+ return object as? NSArray
146
+ }
147
+ }
98
148
}
0 commit comments