@@ -30,7 +30,7 @@ final class Test_OperationDescription: Test_Core {
3030 get: . init( parameters: [ operationLevelParameter] , requestBody: . b( . init( content: [ : ] ) ) , responses: [ : ] ) ,
3131 vendorExtensions: [ : ]
3232 )
33- let allParameters = try _test ( pathItem)
33+ let allParameters = try makeOperationDescription ( pathItem) ? . allParameters
3434
3535 XCTAssertEqual ( allParameters, [ operationLevelParameter] )
3636 }
@@ -48,7 +48,7 @@ final class Test_OperationDescription: Test_Core {
4848 get: . init( parameters: [ operationLevelParameter] , requestBody: . b( . init( content: [ : ] ) ) , responses: [ : ] ) ,
4949 vendorExtensions: [ : ]
5050 )
51- let allParameters = try _test ( pathItem)
51+ let allParameters = try makeOperationDescription ( pathItem) ? . allParameters
5252
5353 XCTAssertEqual ( allParameters, [ pathLevelParameter, operationLevelParameter] )
5454 }
@@ -73,25 +73,78 @@ final class Test_OperationDescription: Test_Core {
7373 ) ,
7474 vendorExtensions: [ : ]
7575 )
76- let allParameters = try _test ( pathItem)
76+ let allParameters = try makeOperationDescription ( pathItem) ? . allParameters
7777
7878 XCTAssertEqual ( allParameters, [ pathLevelParameter, duplicatedParameter, operationLevelParameter] )
7979 }
8080
81- private func _test( _ pathItem: OpenAPI . PathItem ) throws -> [ UnresolvedParameter ] {
81+ func testResponseOutcomes_without_default_response( ) {
82+ let responses : OpenAPI . Response . Map = [
83+ . status( code: 200 ) : . b( . init( description: " 200 " ) ) , . status( code: 404 ) : . b( . init( description: " 404 " ) ) ,
84+ ]
85+
86+ let pathItem = OpenAPI . PathItem ( get: . init( requestBody: . b( . init( content: [ : ] ) ) , responses: responses) )
87+ let responseOutcomes = makeOperationDescription ( pathItem) ? . responseOutcomes
88+
89+ XCTAssertEqual (
90+ responseOutcomes,
91+ [
92+ OpenAPI . Operation. ResponseOutcome ( status: responses [ 0 ] . key, response: responses [ 0 ] . value) ,
93+ OpenAPI . Operation. ResponseOutcome ( status: responses [ 1 ] . key, response: responses [ 1 ] . value) ,
94+ ]
95+ )
96+ }
97+
98+ func testResponseOutcomes_with_default_response_on_last( ) {
99+ let responses : OpenAPI . Response . Map = [
100+ . status( code: 200 ) : . b( . init( description: " 200 " ) ) , . status( code: 404 ) : . b( . init( description: " 404 " ) ) ,
101+ . default: . b( . init( description: " default " ) ) ,
102+ ]
103+
104+ let pathItem = OpenAPI . PathItem ( get: . init( requestBody: . b( . init( content: [ : ] ) ) , responses: responses) )
105+ let responseOutcomes = makeOperationDescription ( pathItem) ? . responseOutcomes
106+
107+ XCTAssertEqual (
108+ responseOutcomes,
109+ [
110+ OpenAPI . Operation. ResponseOutcome ( status: responses [ 0 ] . key, response: responses [ 0 ] . value) ,
111+ OpenAPI . Operation. ResponseOutcome ( status: responses [ 1 ] . key, response: responses [ 1 ] . value) ,
112+ OpenAPI . Operation. ResponseOutcome ( status: responses [ 2 ] . key, response: responses [ 2 ] . value) ,
113+ ]
114+ )
115+ }
116+
117+ func testResponseOutcomes_with_default_response_on_first( ) {
118+ let responses : OpenAPI . Response . Map = [
119+ . default: . b( . init( description: " default " ) ) , . status( code: 200 ) : . b( . init( description: " 200 " ) ) ,
120+ . status( code: 404 ) : . b( . init( description: " 404 " ) ) ,
121+ ]
122+
123+ let pathItem = OpenAPI . PathItem ( get: . init( requestBody: . b( . init( content: [ : ] ) ) , responses: responses) )
124+ let responseOutcomes = makeOperationDescription ( pathItem) ? . responseOutcomes
125+
126+ XCTAssertEqual (
127+ responseOutcomes,
128+ [
129+ OpenAPI . Operation. ResponseOutcome ( status: responses [ 1 ] . key, response: responses [ 1 ] . value) ,
130+ OpenAPI . Operation. ResponseOutcome ( status: responses [ 2 ] . key, response: responses [ 2 ] . value) ,
131+ OpenAPI . Operation. ResponseOutcome ( status: responses [ 0 ] . key, response: responses [ 0 ] . value) ,
132+ ]
133+ )
134+ }
135+
136+ private func makeOperationDescription( _ pathItem: OpenAPI . PathItem ) -> OperationDescription ? {
82137 guard let endpoint = pathItem. endpoints. first else {
83138 XCTFail ( " Unable to retrieve the path item first endpoint. " )
84- return [ ]
139+ return nil
85140 }
86141
87- let operationDescription = OperationDescription (
142+ return OperationDescription (
88143 path: . init( [ " /test " ] ) ,
89144 endpoint: endpoint,
90145 pathParameters: pathItem. parameters,
91146 components: . init( ) ,
92147 asSwiftSafeName: { $0 }
93148 )
94-
95- return try operationDescription. allParameters
96149 }
97150}
0 commit comments