50 lines
2.0 KiB
PowerShell
50 lines
2.0 KiB
PowerShell
$ErrorActionPreference = 'Stop'
|
|
|
|
$root = Split-Path -Parent $PSScriptRoot
|
|
$json = Get-Content -Raw -Encoding UTF8 -LiteralPath (Join-Path $root 'APP.openapi.json') | ConvertFrom-Json
|
|
$yaml = Get-Content -Raw -Encoding UTF8 -LiteralPath (Join-Path $root 'APP.openapi.yaml')
|
|
|
|
$path = '/genealogy/app/feedback'
|
|
$pathProperty = $json.paths.PSObject.Properties[$path]
|
|
if (-not $pathProperty) { throw 'Feedback POST path is missing' }
|
|
$operation = $pathProperty.Value.post
|
|
if (-not $operation) { throw 'Feedback POST operation is missing' }
|
|
if ($operation.requestBody.required -ne $true) { throw 'Feedback request body must be required' }
|
|
if ($operation.requestBody.content.'application/json'.schema.'$ref' -ne '#/components/schemas/FeedbackBody') {
|
|
throw 'Feedback operation must consume FeedbackBody'
|
|
}
|
|
$hasSaToken = $false
|
|
foreach ($securityRequirement in @($operation.security)) {
|
|
if ($securityRequirement.PSObject.Properties.Name -contains 'SaToken') { $hasSaToken = $true }
|
|
}
|
|
if (-not $hasSaToken) { throw 'Feedback operation must require SaToken' }
|
|
|
|
$body = $json.components.schemas.FeedbackBody
|
|
$fields = @($body.properties.PSObject.Properties.Name | Sort-Object)
|
|
if (($fields -join ',') -ne 'contactInfo,feedbackContent,feedbackType') {
|
|
throw "FeedbackBody fields drifted: $($fields -join ',')"
|
|
}
|
|
$required = @($body.required | Sort-Object)
|
|
if (($required -join ',') -ne 'feedbackContent') {
|
|
throw "FeedbackBody required fields drifted: $($required -join ',')"
|
|
}
|
|
foreach ($field in $fields) {
|
|
if ($body.properties.$field.type -ne 'string') {
|
|
throw "FeedbackBody.$field must be a string"
|
|
}
|
|
}
|
|
|
|
foreach ($yamlFact in @(
|
|
' /genealogy/app/feedback:',
|
|
"`$ref: '#/components/schemas/FeedbackBody'",
|
|
' FeedbackBody:',
|
|
' - feedbackContent',
|
|
' feedbackType:',
|
|
' feedbackContent:',
|
|
' contactInfo:'
|
|
)) {
|
|
if (-not $yaml.Contains($yamlFact)) { throw "Feedback YAML fact is missing: $yamlFact" }
|
|
}
|
|
|
|
Write-Output 'FEEDBACK-OPENAPI-CONTRACT PASS'
|