2
2
// Licensed under the MIT license.
3
3
4
4
using System . Linq ;
5
+ using System . Text . RegularExpressions ;
5
6
using Microsoft . OpenApi . Models ;
6
- using Microsoft . OpenApi . Properties ;
7
7
8
8
namespace Microsoft . OpenApi . Validations . Rules
9
9
{
@@ -14,16 +14,44 @@ namespace Microsoft.OpenApi.Validations.Rules
14
14
public static class OpenApiResponsesRules
15
15
{
16
16
/// <summary>
17
- /// An OpenAPI operation must contain at least one successful response
17
+ /// An OpenAPI operation must contain at least one response
18
18
/// </summary>
19
- public static ValidationRule < OpenApiResponses > ResponsesMustContainSuccessResponse =>
19
+ public static ValidationRule < OpenApiResponses > ResponsesMustContainAtLeastOneResponse =>
20
20
new ValidationRule < OpenApiResponses > (
21
- ( context , item ) =>
21
+ ( context , responses ) =>
22
22
{
23
- if ( ! item . Keys . Any ( k => k . StartsWith ( "2" ) ) ) {
24
- context . AddError ( new ValidationError ( ErrorReason . Required , context . PathString , "Responses must contain success response" ) ) ;
23
+ if ( ! responses . Keys . Any ( ) )
24
+ {
25
+ context . AddError (
26
+ new ValidationError (
27
+ ErrorReason . Required ,
28
+ context . PathString ,
29
+ "Responses must contain at least one response" ) ) ;
25
30
}
26
31
} ) ;
27
32
33
+ /// <summary>
34
+ /// The response key must either be "default" or an HTTP status code (1xx, 2xx, 3xx, 4xx, 5xx)
35
+ /// </summary>
36
+ public static ValidationRule < OpenApiResponses > ResponsesMustBeIdentifiedByDefaultOrStatusCode =>
37
+ new ValidationRule < OpenApiResponses > (
38
+ ( context , responses ) =>
39
+ {
40
+ foreach ( var key in responses . Keys )
41
+ {
42
+ context . Enter ( key ) ;
43
+
44
+ if ( key != "default" && ! Regex . IsMatch ( key , "^[1-5][0-9][0-9]$" ) )
45
+ {
46
+ context . AddError (
47
+ new ValidationError (
48
+ ErrorReason . Format ,
49
+ context . PathString ,
50
+ "Responses key must be 'default' or an HTTP status code" ) ) ;
51
+ }
52
+
53
+ context . Exit ( ) ;
54
+ }
55
+ } ) ;
28
56
}
29
57
}
0 commit comments