Skip to content

Commit c05feb6

Browse files
authored
Merge branch 'main' into feature/deep_object_style
2 parents be09cb5 + f6d37bb commit c05feb6

File tree

2 files changed

+62
-9
lines changed

2 files changed

+62
-9
lines changed

Sources/_OpenAPIGeneratorCore/Translator/Operations/OperationDescription.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -312,7 +312,7 @@ extension OperationDescription {
312312
var outcomes = operation.responseOutcomes
313313
// if .default is present and not already last
314314
if let index = outcomes.firstIndex(where: { $0.status == .default }), index != (outcomes.count - 1) {
315-
//then we move it to be last
315+
// then we move it to be last
316316
let defaultResp = outcomes.remove(at: index)
317317
outcomes.append(defaultResp)
318318
}

Tests/OpenAPIGeneratorCoreTests/Translator/Operations/Test_OperationDescription.swift

+61-8
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)