diff --git a/.spectral.yaml b/.spectral.yaml index 2d5df7f..769a33d 100644 --- a/.spectral.yaml +++ b/.spectral.yaml @@ -107,4 +107,11 @@ rules: then: function: length functionOptions: - max: 95 \ No newline at end of file + max: 95 + + must-not-use-base-server-url: + description: "Must not use base server url in spec to be able to generate a single client compatible with multiple environments." + severity: warn + given: $.servers[*].url + then: + function: falsy \ No newline at end of file diff --git a/TestSpecs/must-not-use-base-server-url-invalid.yaml b/TestSpecs/must-not-use-base-server-url-invalid.yaml new file mode 100644 index 0000000..e101d71 --- /dev/null +++ b/TestSpecs/must-not-use-base-server-url-invalid.yaml @@ -0,0 +1,16 @@ +openapi: 3.0.1 +info: + title: V1 API General + version: v1 +servers: + - url: https://api.example.com/v1 +paths: + /buy-item: + post: + tags: + - Shop + summary: Buy an item + operationId: BuyItem + responses: + '200': + description: Success diff --git a/TestSpecs/must-not-use-base-server-url-valid.yaml b/TestSpecs/must-not-use-base-server-url-valid.yaml new file mode 100644 index 0000000..1eec9b5 --- /dev/null +++ b/TestSpecs/must-not-use-base-server-url-valid.yaml @@ -0,0 +1,14 @@ +openapi: 3.0.1 +info: + title: V1 API General + version: v1 +paths: + /buy-item: + post: + tags: + - Shop + summary: Buy an item + operationId: BuyItem + responses: + '200': + description: Success diff --git a/test.ps1 b/test.ps1 index 1805f81..c59bdfc 100644 --- a/test.ps1 +++ b/test.ps1 @@ -12,6 +12,8 @@ $tests = @( @{ rule = "items-must-have-a-type"; expectError = $true; filename = "items-must-have-a-type-invalid.yaml" }, @{ rule = "must-accept-content-types"; expectError = $false; filename = "must-accept-content-types-valid.yaml" }, @{ rule = "must-accept-content-types"; expectError = $true; filename = "must-accept-content-types-invalid.yaml" }, + @{ rule = "must-not-use-base-server-url"; expectError = $false; filename = "must-not-use-base-server-url-valid.yaml" }, + @{ rule = "must-not-use-base-server-url"; expectError = $true; filename = "must-not-use-base-server-url-invalid.yaml" }, @{ rule = "must-return-content-types"; expectError = $false; filename = "must-return-content-types-valid.yaml" }, @{ rule = "must-return-content-types"; expectError = $true; filename = "must-return-content-types-invalid.yaml" }, @{ rule = "must-support-client-credentials-oauth2"; expectError = $false; filename = "must-support-client-credentials-oauth2-valid.yaml" },