Skip to content

Commit e9d9487

Browse files
committed
fix: missing references to document
Signed-off-by: Vincent Biret <[email protected]>
1 parent 6c21a43 commit e9d9487

32 files changed

+95
-109
lines changed

src/Microsoft.OpenApi.OData.Reader/Common/OpenApiOperationExtensions.cs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,12 @@ public static class OpenApiOperationExtensions
2222
/// <param name="settings">The settings.</param>
2323
/// <param name="addNoContent">Optional: Whether to add a 204 no content response.</param>
2424
/// <param name="schema">Optional: The OpenAPI schema of the response.</param>
25-
public static void AddErrorResponses(this OpenApiOperation operation, OpenApiConvertSettings settings, bool addNoContent = false, OpenApiSchema schema = null)
25+
/// <param name="document">The OpenAPI document to lookup references.</param>
26+
public static void AddErrorResponses(this OpenApiOperation operation, OpenApiConvertSettings settings, OpenApiDocument document, bool addNoContent = false, OpenApiSchema schema = null)
2627
{
2728
Utils.CheckArgumentNull(operation, nameof(operation));
2829
Utils.CheckArgumentNull(settings, nameof(settings));
30+
Utils.CheckArgumentNull(document, nameof(document));
2931

3032
if (operation.Responses == null)
3133
{
@@ -54,22 +56,22 @@ public static void AddErrorResponses(this OpenApiOperation operation, OpenApiCon
5456
}
5557
};
5658
}
57-
operation.Responses.Add(Constants.StatusCodeClass2XX, response ?? Constants.StatusCodeClass2XX.GetResponse());
59+
operation.Responses.Add(Constants.StatusCodeClass2XX, response ?? Constants.StatusCodeClass2XX.GetResponse(document));
5860
}
5961
else
6062
{
61-
operation.Responses.Add(Constants.StatusCode204, Constants.StatusCode204.GetResponse());
63+
operation.Responses.Add(Constants.StatusCode204, Constants.StatusCode204.GetResponse(document));
6264
}
6365
}
6466

6567
if (settings.ErrorResponsesAsDefault)
6668
{
67-
operation.Responses.Add(Constants.StatusCodeDefault, Constants.StatusCodeDefault.GetResponse());
69+
operation.Responses.Add(Constants.StatusCodeDefault, Constants.StatusCodeDefault.GetResponse(document));
6870
}
6971
else
7072
{
71-
operation.Responses.Add(Constants.StatusCodeClass4XX, Constants.StatusCodeClass4XX.GetResponse());
72-
operation.Responses.Add(Constants.StatusCodeClass5XX, Constants.StatusCodeClass5XX.GetResponse());
73+
operation.Responses.Add(Constants.StatusCodeClass4XX, Constants.StatusCodeClass4XX.GetResponse(document));
74+
operation.Responses.Add(Constants.StatusCodeClass5XX, Constants.StatusCodeClass5XX.GetResponse(document));
7375
}
7476
}
7577
}

src/Microsoft.OpenApi.OData.Reader/Generator/OpenApiResponseGenerator.cs

Lines changed: 26 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
// ------------------------------------------------------------
55

66
using System.Collections.Generic;
7+
using System.Diagnostics.CodeAnalysis;
78
using System.Linq;
89
using Microsoft.OData.Edm;
910
using Microsoft.OpenApi.Models;
@@ -19,28 +20,34 @@ namespace Microsoft.OpenApi.OData.Generator
1920
/// </summary>
2021
internal static class OpenApiResponseGenerator
2122
{
22-
private static IDictionary<string, OpenApiResponse> _responses =
23-
new Dictionary<string, OpenApiResponse>
24-
{
25-
{ Constants.StatusCodeDefault,
26-
new OpenApiResponseReference(Constants.Error, null)
27-
},
23+
private static Dictionary<string, OpenApiResponse> _responses;
2824

29-
{ Constants.StatusCode204, new OpenApiResponse { Description = Constants.Success} },
30-
{ Constants.StatusCode201, new OpenApiResponse { Description = Constants.Created} },
31-
{ Constants.StatusCodeClass2XX, new OpenApiResponse { Description = Constants.Success} },
32-
{ Constants.StatusCodeClass4XX, new OpenApiResponseReference(Constants.Error, null)},
33-
{ Constants.StatusCodeClass5XX, new OpenApiResponseReference(Constants.Error, null)}
34-
};
25+
private static Dictionary<string, OpenApiResponse> GetResponses(OpenApiDocument openApiDocument)
26+
{
27+
_responses ??= new()
28+
{
29+
{ Constants.StatusCodeDefault,
30+
new OpenApiResponseReference(Constants.Error, openApiDocument)
31+
},
32+
33+
{ Constants.StatusCode204, new OpenApiResponse { Description = Constants.Success} },
34+
{ Constants.StatusCode201, new OpenApiResponse { Description = Constants.Created} },
35+
{ Constants.StatusCodeClass2XX, new OpenApiResponse { Description = Constants.Success} },
36+
{ Constants.StatusCodeClass4XX, new OpenApiResponseReference(Constants.Error, openApiDocument)},
37+
{ Constants.StatusCodeClass5XX, new OpenApiResponseReference(Constants.Error, openApiDocument)}
38+
};
39+
return _responses;
40+
}
3541

3642
/// <summary>
3743
/// Get the <see cref="OpenApiResponse"/> for the build-in statusCode.
3844
/// </summary>
3945
/// <param name="statusCode">The status code.</param>
46+
/// <param name="document">The OpenApi document to lookup references.</param>
4047
/// <returns>The created <see cref="OpenApiResponse"/>.</returns>
41-
public static OpenApiResponse GetResponse(this string statusCode)
48+
public static OpenApiResponse GetResponse(this string statusCode, OpenApiDocument document)
4249
{
43-
if (_responses.TryGetValue(statusCode, out OpenApiResponse response))
50+
if (GetResponses(document).TryGetValue(statusCode, out OpenApiResponse response))
4451
{
4552
return response;
4653
}
@@ -129,13 +136,13 @@ public static OpenApiResponses CreateResponses(this ODataContext context, IEdmOp
129136

130137
if (operation.IsAction() && operation.ReturnType == null)
131138
{
132-
responses.Add(Constants.StatusCode204, Constants.StatusCode204.GetResponse());
139+
responses.Add(Constants.StatusCode204, Constants.StatusCode204.GetResponse(document));
133140
}
134141
else if (context.Model.OperationTargetsMultiplePaths(operation))
135142
{
136143
responses.Add(
137144
context.Settings.UseSuccessStatusCodeRange ? Constants.StatusCodeClass2XX : Constants.StatusCode200,
138-
new OpenApiResponseReference($"{operation.Name}Response", null)
145+
new OpenApiResponseReference($"{operation.Name}Response", document)
139146
);
140147
}
141148
else
@@ -146,12 +153,12 @@ public static OpenApiResponses CreateResponses(this ODataContext context, IEdmOp
146153

147154
if (context.Settings.ErrorResponsesAsDefault)
148155
{
149-
responses.Add(Constants.StatusCodeDefault, Constants.StatusCodeDefault.GetResponse());
156+
responses.Add(Constants.StatusCodeDefault, Constants.StatusCodeDefault.GetResponse(document));
150157
}
151158
else
152159
{
153-
responses.Add(Constants.StatusCodeClass4XX, Constants.StatusCodeClass4XX.GetResponse());
154-
responses.Add(Constants.StatusCodeClass5XX, Constants.StatusCodeClass5XX.GetResponse());
160+
responses.Add(Constants.StatusCodeClass4XX, Constants.StatusCodeClass4XX.GetResponse(document));
161+
responses.Add(Constants.StatusCodeClass5XX, Constants.StatusCodeClass5XX.GetResponse(document));
155162
}
156163

157164
return responses;

src/Microsoft.OpenApi.OData.Reader/Generator/OpenApiSecurityRequirementGenerator.cs

Lines changed: 4 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -19,41 +19,18 @@ namespace Microsoft.OpenApi.OData.Generator
1919
/// </summary>
2020
internal static class OpenApiSecurityRequirementGenerator
2121
{
22-
/// <summary>
23-
/// Create the list of <see cref="OpenApiSecurityRequirement"/> object.
24-
/// </summary>
25-
/// <param name="context">The OData to Open API context.</param>
26-
/// <param name="securitySchemes">The securitySchemes.</param>
27-
/// <returns>The created <see cref="OpenApiSecurityRequirement"/> collection.</returns>
28-
public static IEnumerable<OpenApiSecurityRequirement> CreateSecurityRequirements(this ODataContext context,
29-
IList<SecurityScheme> securitySchemes)
30-
{
31-
Utils.CheckArgumentNull(context, nameof(context));
32-
33-
if (securitySchemes != null)
34-
{
35-
foreach (var securityScheme in securitySchemes)
36-
{
37-
yield return new OpenApiSecurityRequirement
38-
{
39-
[
40-
new OpenApiSecuritySchemeReference(securityScheme.Authorization, null)
41-
] = new List<string>(securityScheme.RequiredScopes ?? new List<string>())
42-
};
43-
}
44-
}
45-
}
46-
4722
/// <summary>
4823
/// Create the list of <see cref="OpenApiSecurityRequirement"/> object.
4924
/// </summary>
5025
/// <param name="context">The OData to Open API context.</param>
5126
/// <param name="permissions">The permissions.</param>
27+
/// <param name="document">The Open API document to use for references lookup.</param>
5228
/// <returns>The created <see cref="OpenApiSecurityRequirement"/> collection.</returns>
5329
public static IEnumerable<OpenApiSecurityRequirement> CreateSecurityRequirements(this ODataContext context,
54-
IList<PermissionType> permissions)
30+
IList<PermissionType> permissions, OpenApiDocument document)
5531
{
5632
Utils.CheckArgumentNull(context, nameof(context));
33+
Utils.CheckArgumentNull(document, nameof(document));
5734

5835
if (permissions != null)
5936
{
@@ -62,7 +39,7 @@ public static IEnumerable<OpenApiSecurityRequirement> CreateSecurityRequirements
6239
yield return new OpenApiSecurityRequirement
6340
{
6441
[
65-
new OpenApiSecuritySchemeReference(permission.SchemeName, null)
42+
new OpenApiSecuritySchemeReference(permission.SchemeName, document)
6643
] = new List<string>(permission.Scopes?.Select(c => c.Scope) ?? new List<string>())
6744
};
6845
}

src/Microsoft.OpenApi.OData.Reader/Operation/ComplexPropertyGetOperationHandler.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ protected override void SetResponses(OpenApiOperation operation)
163163
SetSingleResponse(operation, schema);
164164
}
165165

166-
operation.AddErrorResponses(Context.Settings, false);
166+
operation.AddErrorResponses(Context.Settings, _document, false);
167167
base.SetResponses(operation);
168168
}
169169

@@ -174,7 +174,7 @@ protected override void SetSecurity(OpenApiOperation operation)
174174
return;
175175
}
176176

177-
operation.Security = Context.CreateSecurityRequirements(_readRestrictions.Permissions).ToList();
177+
operation.Security = Context.CreateSecurityRequirements(_readRestrictions.Permissions, _document).ToList();
178178
}
179179

180180
protected override void AppendCustomParameters(OpenApiOperation operation)

src/Microsoft.OpenApi.OData.Reader/Operation/ComplexPropertyPostOperationHandler.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ protected override void SetRequestBody(OpenApiOperation operation)
101101
/// <inheritdoc/>
102102
protected override void SetResponses(OpenApiOperation operation)
103103
{
104-
operation.AddErrorResponses(Context.Settings, true, GetOpenApiSchema());
104+
operation.AddErrorResponses(Context.Settings, _document, true, GetOpenApiSchema());
105105
base.SetResponses(operation);
106106
}
107107

@@ -112,7 +112,7 @@ protected override void SetSecurity(OpenApiOperation operation)
112112
return;
113113
}
114114

115-
operation.Security = Context.CreateSecurityRequirements(_insertRestrictions.Permissions).ToList();
115+
operation.Security = Context.CreateSecurityRequirements(_insertRestrictions.Permissions, _document).ToList();
116116
}
117117

118118
protected override void AppendCustomParameters(OpenApiOperation operation)

src/Microsoft.OpenApi.OData.Reader/Operation/ComplexPropertyUpdateOperationHandler.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ protected override void SetRequestBody(OpenApiOperation operation)
7878
/// <inheritdoc/>
7979
protected override void SetResponses(OpenApiOperation operation)
8080
{
81-
operation.AddErrorResponses(Context.Settings, true, GetOpenApiSchema());
81+
operation.AddErrorResponses(Context.Settings, _document, true, GetOpenApiSchema());
8282
base.SetResponses(operation);
8383
}
8484
protected override void SetSecurity(OpenApiOperation operation)
@@ -88,7 +88,7 @@ protected override void SetSecurity(OpenApiOperation operation)
8888
return;
8989
}
9090

91-
operation.Security = Context.CreateSecurityRequirements(_updateRestrictions.Permissions).ToList();
91+
operation.Security = Context.CreateSecurityRequirements(_updateRestrictions.Permissions, _document).ToList();
9292
}
9393

9494
protected override void AppendCustomParameters(OpenApiOperation operation)

src/Microsoft.OpenApi.OData.Reader/Operation/DollarCountGetOperationHandler.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -170,10 +170,10 @@ protected override void SetResponses(OpenApiOperation operation)
170170
{
171171
{
172172
Context.Settings.UseSuccessStatusCodeRange ? Constants.StatusCodeClass2XX : Constants.StatusCode200,
173-
new OpenApiResponseReference(Constants.DollarCountSchemaName, null)
173+
new OpenApiResponseReference(Constants.DollarCountSchemaName, _document)
174174
}
175175
};
176-
operation.AddErrorResponses(Context.Settings, false);
176+
operation.AddErrorResponses(Context.Settings, _document, false);
177177

178178
base.SetResponses(operation);
179179
}

src/Microsoft.OpenApi.OData.Reader/Operation/EdmOperationImportOperationHandler.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ protected override void SetSecurity(OpenApiOperation operation)
113113
return;
114114
}
115115

116-
operation.Security = Context.CreateSecurityRequirements(_operationRestriction.Permissions).ToList();
116+
operation.Security = Context.CreateSecurityRequirements(_operationRestriction.Permissions, _document).ToList();
117117
}
118118

119119
/// <inheritdoc/>

src/Microsoft.OpenApi.OData.Reader/Operation/EdmOperationOperationHandler.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -222,7 +222,7 @@ protected override void SetSecurity(OpenApiOperation operation)
222222
return;
223223
}
224224

225-
operation.Security = Context.CreateSecurityRequirements(_operationRestriction.Permissions).ToList();
225+
operation.Security = Context.CreateSecurityRequirements(_operationRestriction.Permissions, _document).ToList();
226226
}
227227

228228
/// <inheritdoc/>

src/Microsoft.OpenApi.OData.Reader/Operation/EntityDeleteOperationHandler.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ protected override void SetResponses(OpenApiOperation operation)
9696
OpenApiConvertSettings settings = Context.Settings.Clone();
9797
settings.UseSuccessStatusCodeRange = false;
9898

99-
operation.AddErrorResponses(settings, true);
99+
operation.AddErrorResponses(settings, _document, true);
100100
base.SetResponses(operation);
101101
}
102102

@@ -107,7 +107,7 @@ protected override void SetSecurity(OpenApiOperation operation)
107107
return;
108108
}
109109

110-
operation.Security = Context.CreateSecurityRequirements(_deleteRestrictions.Permissions).ToList();
110+
operation.Security = Context.CreateSecurityRequirements(_deleteRestrictions.Permissions, _document).ToList();
111111
}
112112

113113
protected override void AppendCustomParameters(OpenApiOperation operation)

0 commit comments

Comments
 (0)