Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 25 additions & 1 deletion Sources/_OpenAPIGeneratorCore/Parser/validateDoc.swift
Original file line number Diff line number Diff line change
Expand Up @@ -303,7 +303,7 @@ func validateDoc(_ doc: ParsedOpenAPIRepresentation, config: Config) throws -> [
// block the generator from running.
// Validation errors continue to be fatal, such as
// structural issues, like non-unique operationIds, etc.
let warnings = try doc.validate(using: Validator().validating(.operationsContainResponses), strict: false)
let warnings = try doc.validate(using: .swiftOpenAPICustomValidator, strict: false)
let diagnostics: [Diagnostic] = warnings.map { warning in
.warning(
message: "Validation warning: \(warning.description)",
Expand All @@ -315,3 +315,27 @@ func validateDoc(_ doc: ParsedOpenAPIRepresentation, config: Config) throws -> [
}
return typeOverrideDiagnostics + diagnostics
}

extension OpenAPIKit.Validator {
static var swiftOpenAPICustomValidator: Validator {
// Start with blank.
.blank
// Add defaults as of OpenAPIKit 6.0.0
// https://github.com/mattpolzin/OpenAPIKit/blob/118d039/Sources/OpenAPIKit/Validator/Validator.swift#L184-L186
.validating(.documentTagNamesAreUnique).validating(.documentServerNamesAreUnique)
.validating(.pathItemParametersAreUnique).validating(.operationParametersAreUnique)
.validating(.querystringParametersAreCompatible).validating(.operationIdsAreUnique)
.validating(.serverVariableEnumIsValid).validating(.serverVariableDefaultExistsInEnum)
// Without this one to be backwards compatible with previous versions of Swift OpenAPI Generator.
// Even when run with strict=false, this one will cause OpenAPIKit to throw an error. Previous verions were more
// lenient and Swift OpenAPI Generator would later emit a warning that it's unsupported.
// .validating(.parameterStyleAndLocationAreCompatible)
.validating(.schemaReferencesAreValid).validating(.jsonSchemaReferencesAreValid)
.validating(.responseReferencesAreValid).validating(.parameterReferencesAreValid)
.validating(.exampleReferencesAreValid).validating(.requestReferencesAreValid)
.validating(.headerReferencesAreValid).validating(.linkReferencesAreValid)
.validating(.callbacksReferencesAreValid).validating(.pathItemReferencesAreValid)
// And also add in this one.
.validating(.operationsContainResponses)
}
}
32 changes: 32 additions & 0 deletions Tests/OpenAPIGeneratorCoreTests/Parser/Test_validateDoc.swift
Original file line number Diff line number Diff line change
Expand Up @@ -480,6 +480,38 @@ final class Test_validateDoc: Test_Core {
)
}
}
func testParameterStyleLocationMismatchIsNotFatal() throws {
let yaml = """
openapi: "3.0.0"
info:
title: "Test"
version: "1.0.0"
paths:
/foo:
parameters:
- name: foo
in: query
style: simple
explode: false
schema:
type: string
"""
let doc = try YamsParser.parseOpenAPIDocument(
.init(absolutePath: URL(fileURLWithPath: "/foo.yaml"), contents: Data(yaml.utf8)),
diagnostics: PrintingDiagnosticCollector()
)
XCTAssertNoThrow(
try validateDoc(
doc,
config: .init(
mode: .types,
access: Config.defaultAccessModifier,
namingStrategy: Config.defaultNamingStrategy
)
)
)
}

func testValidateTypeOverrides() throws {
let schema = try loadSchemaFromYAML(
#"""
Expand Down
Loading