@@ -10,20 +10,191 @@ import XCTest
1010import OpenAPIKit
1111
1212final class ResponseTests : XCTestCase {
13+ func test_Initialization( ) {
14+ let r1 = OpenAPI . Response ( description: " hello world " ,
15+ content: [ : ] )
16+ XCTAssertEqual ( r1. description, " hello world " )
1317
18+ let content = OpenAPI . Content ( schema: . init( JSONReference < OpenAPI . Components , JSONSchema > . file ( " hello.yml " ) ) )
19+ let r2 = OpenAPI . Response ( description: " " ,
20+ content: [ . json: content] )
21+ XCTAssertEqual ( r2. description, " " )
22+ XCTAssertEqual ( r2. content, [ . json: content] )
23+ }
1424}
1525
1626// MARK: Response Status Code
1727extension ResponseTests {
28+ func test_defaultFromString( ) {
29+ typealias StatusCode = OpenAPI . Response . StatusCode
30+ XCTAssertEqual ( StatusCode ( rawValue: " default " ) , . default)
31+ XCTAssertEqual ( StatusCode ( rawValue: " default " ) ? . rawValue, " default " )
32+ }
1833
34+ func test_codeFromString( ) {
35+ typealias StatusCode = OpenAPI . Response . StatusCode
36+ XCTAssertEqual ( StatusCode ( rawValue: " 123 " ) , . status( code: 123 ) )
37+ XCTAssertEqual ( StatusCode ( rawValue: " 123 " ) ? . rawValue, " 123 " )
38+ XCTAssertEqual ( StatusCode ( rawValue: " 404 " ) , . status( code: 404 ) )
39+ XCTAssertEqual ( StatusCode ( rawValue: " 404 " ) ? . rawValue, " 404 " )
40+ XCTAssertEqual ( StatusCode ( rawValue: " 500 " ) , . status( code: 500 ) )
41+ XCTAssertEqual ( StatusCode ( rawValue: " 500 " ) ? . rawValue, " 500 " )
42+ }
43+
44+ func test_NilForNonIntegerString( ) {
45+ typealias StatusCode = OpenAPI . Response . StatusCode
46+ XCTAssertNil ( StatusCode ( rawValue: " hello " ) )
47+ }
48+
49+ func test_codeFromIntegerLiteral( ) {
50+ typealias StatusCode = OpenAPI . Response . StatusCode
51+ XCTAssertEqual ( 123 , StatusCode . status ( code: 123 ) )
52+ XCTAssertEqual ( 404 , StatusCode . status ( code: 404 ) )
53+ XCTAssertEqual ( 500 , StatusCode . status ( code: 500 ) )
54+ }
1955}
2056
2157// MARK: - Codable
58+ @available ( OSX 10 . 13 , * )
2259extension ResponseTests {
60+ func test_emptyDescriptionEmptyContent_encode( ) {
61+ let response = OpenAPI . Response ( description: " " , content: [ : ] )
62+ let encodedResponse = try ! testStringFromEncoding ( of: response)
63+
64+ XCTAssertEqual ( encodedResponse,
65+ """
66+ {
67+ " description " : " "
68+ }
69+ """
70+ )
71+ }
72+
73+ func test_emptyDescriptionEmptyContent_decode( ) {
74+ let responseData =
75+ """
76+ {
77+ " description " : " "
78+ }
79+ """ . data ( using: . utf8) !
80+ let response = try ! testDecoder. decode ( OpenAPI . Response. self, from: responseData)
81+
82+ XCTAssertEqual ( response, OpenAPI . Response ( description: " " , content: [ : ] ) )
83+
84+ let responseData2 =
85+ """
86+ {
87+ " content " : {},
88+ " description " : " "
89+ }
90+ """ . data ( using: . utf8) !
91+ let response2 = try ! testDecoder. decode ( OpenAPI . Response. self, from: responseData2)
92+
93+ XCTAssertEqual ( response2, OpenAPI . Response ( description: " " , content: [ : ] ) )
94+ }
95+
96+ func test_populatedDescriptionPopulatedContent_encode( ) {
97+ let content = OpenAPI . Content ( schema: . init( . string) )
98+ let response = OpenAPI . Response ( description: " hello world " , content: [ . json: content] )
99+
100+ let encodedResponse = try ! testStringFromEncoding ( of: response)
101+
102+ XCTAssertEqual ( encodedResponse,
103+ """
104+ {
105+ " content " : {
106+ " application \\ /json " : {
107+ " schema " : {
108+ " type " : " string "
109+ }
110+ }
111+ },
112+ " description " : " hello world "
113+ }
114+ """
115+ )
116+ }
117+
118+ func test_populatedDescriptionPopulatedContent_decode( ) {
119+ let responseData =
120+ """
121+ {
122+ " description " : " hello world " ,
123+ " content " : { " application/json " : { " schema " : { " type " : " string " } } }
124+ }
125+ """ . data ( using: . utf8) !
23126
127+ let response = try ! testDecoder. decode ( OpenAPI . Response. self, from: responseData)
128+
129+ let content = OpenAPI . Content ( schema: . init( . string( required: false ) ) )
130+ XCTAssertEqual ( response, OpenAPI . Response ( description: " hello world " , content: [ . json: content] ) )
131+ }
24132}
25133
26134// MARK: Response Status Code
135+ @available ( OSX 10 . 13 , * )
27136extension ResponseTests {
28137
138+ struct StatusCodeWrapper : Codable , Equatable {
139+ let status : OpenAPI . Response . StatusCode
140+ }
141+
142+ func test_defaultStatusCode_encode( ) {
143+ let status = StatusCodeWrapper ( status: . default)
144+ let encodedStatus = try ! testStringFromEncoding ( of: status)
145+
146+ XCTAssertEqual ( encodedStatus,
147+ """
148+ {
149+ " status " : " default "
150+ }
151+ """
152+ )
153+ }
154+
155+ func test_defaultStatusCode_decode( ) {
156+ let statusCodeData =
157+ """
158+ {
159+ " status " : " default "
160+ }
161+ """ . data ( using: . utf8) !
162+
163+ XCTAssertEqual ( try ! testDecoder. decode ( StatusCodeWrapper . self, from: statusCodeData) , StatusCodeWrapper ( status: . default) )
164+ }
165+
166+ func test_numberStatusCode_encode( ) {
167+ let status = StatusCodeWrapper ( status: 123 )
168+ let encodedStatus = try ! testStringFromEncoding ( of: status)
169+
170+ XCTAssertEqual ( encodedStatus,
171+ """
172+ {
173+ " status " : " 123 "
174+ }
175+ """
176+ )
177+ }
178+
179+ func test_numberStatusCode_decode( ) {
180+ let statusCodeData =
181+ """
182+ {
183+ " status " : " 123 "
184+ }
185+ """ . data ( using: . utf8) !
186+
187+ XCTAssertEqual ( try ! testDecoder. decode ( StatusCodeWrapper . self, from: statusCodeData) , StatusCodeWrapper ( status: 123 ) )
188+ }
189+
190+ func test_nonesenseStatusCode_decode_throws( ) {
191+ let statusCodeData =
192+ """
193+ {
194+ " status " : " hello world "
195+ }
196+ """ . data ( using: . utf8) !
197+
198+ XCTAssertThrowsError ( try testDecoder. decode ( StatusCodeWrapper . self, from: statusCodeData) )
199+ }
29200}
0 commit comments