Skip to content

Commit

Permalink
Merge pull request #2404 from captainsafia/safia/support-openapi-builtin
Browse files Browse the repository at this point in the history
Support prebuilt OpenApiOperation in EndpointMetadata
  • Loading branch information
domaindrivendev committed Apr 22, 2022
2 parents 3ee5721 + 287e31e commit 6e23a7b
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,14 @@ private OpenApiPaths GeneratePaths(IEnumerable<ApiDescription> apiDescriptions,

private OpenApiOperation GenerateOperation(ApiDescription apiDescription, SchemaRepository schemaRepository)
{
#if NET6_0_OR_GREATER
var metadata = apiDescription.ActionDescriptor?.EndpointMetadata;
var existingOperation = metadata?.OfType<OpenApiOperation>().SingleOrDefault();
if (existingOperation != null)
{
return existingOperation;
}
#endif
try
{
var operation = new OpenApiOperation
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,44 @@ public void GetSwagger_SetsOperationIdToEndpointName_IfActionHasEndpointNameMeta
Assert.Equal("SomeEndpointName", document.Paths["/resource"].Operations[OperationType.Post].OperationId);
}

[Fact]
public void GetSwagger_UseProvidedOpenApiOperation_IfExistsInMetadata()
{
var methodInfo = typeof(FakeController).GetMethod(nameof(FakeController.ActionWithParameter));
var actionDescriptor = new ActionDescriptor
{
EndpointMetadata = new List<object>()
{
new OpenApiOperation
{
OperationId = "OperationIdSetInMetadata",
Parameters = new List<OpenApiParameter>()
{
new OpenApiParameter
{
Name = "ParameterInMetadata"
}
}
}
},
RouteValues = new Dictionary<string, string>
{
["controller"] = methodInfo.DeclaringType.Name.Replace("Controller", string.Empty)
}
};
var subject = Subject(
apiDescriptions: new[]
{
ApiDescriptionFactory.Create(actionDescriptor, methodInfo, groupName: "v1", httpMethod: "POST", relativePath: "resource"),
}
);

var document = subject.GetSwagger("v1");

Assert.Equal("OperationIdSetInMetadata", document.Paths["/resource"].Operations[OperationType.Post].OperationId);
Assert.Equal("ParameterInMetadata", document.Paths["/resource"].Operations[OperationType.Post].Parameters[0].Name);
}

[Fact]
public void GetSwagger_SetsOperationIdToNull_IfActionHasNoEndpointMetadata()
{
Expand Down

0 comments on commit 6e23a7b

Please sign in to comment.