Skip to content

Commit b873da7

Browse files
authored
Merge pull request #1734 from kanales/kanales/fix-null-pointer-error-CreateFilteredDocument
Fix OpenApiFilterService.CreateFilteredDocument failing when the Components field is missing.
2 parents 6899d5f + 691d99d commit b873da7

File tree

2 files changed

+45
-1
lines changed

2 files changed

+45
-1
lines changed

src/Microsoft.OpenApi/Services/OpenApiFilterService.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,10 @@ public static class OpenApiFilterService
6161
public static OpenApiDocument CreateFilteredDocument(OpenApiDocument source, Func<string, OperationType?, OpenApiOperation, bool> predicate)
6262
{
6363
// Fetch and copy title, graphVersion and server info from OpenApiDoc
64+
var components = source.Components is null
65+
? null
66+
: new OpenApiComponents() { SecuritySchemes = source.Components.SecuritySchemes };
67+
6468
var subset = new OpenApiDocument
6569
{
6670
Info = new()
@@ -74,7 +78,7 @@ public static OpenApiDocument CreateFilteredDocument(OpenApiDocument source, Fun
7478
Extensions = source.Info.Extensions
7579
},
7680

77-
Components = new() { SecuritySchemes = source.Components.SecuritySchemes },
81+
Components = components,
7882
SecurityRequirements = source.SecurityRequirements,
7983
Servers = source.Servers
8084
};

test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,46 @@ public async Task ReturnFilteredOpenApiDocBasedOnOperationIdsAndInputCsdlDocumen
6565
Assert.Equal(expectedPathCount, subsetOpenApiDocument.Paths.Count);
6666
}
6767

68+
[Fact]
69+
public void CreateFilteredDocumentOnMinimalOpenApi()
70+
{
71+
// Arrange
72+
73+
// We create a minimal OpenApiDocument with a single path and operation.
74+
var openApiDoc = new OpenApiDocument
75+
{
76+
Info = new()
77+
{
78+
Title = "Test",
79+
Version = "1.0.0"
80+
},
81+
Paths = new()
82+
{
83+
["/test"] = new OpenApiPathItem()
84+
{
85+
Operations = new Dictionary<OperationType, OpenApiOperation>
86+
{
87+
[OperationType.Get] = new OpenApiOperation()
88+
}
89+
}
90+
}
91+
};
92+
93+
// Act
94+
var requestUrls = new Dictionary<string, List<string>>()
95+
{
96+
{ "/test", ["GET"] }
97+
};
98+
var filterPredicate = OpenApiFilterService.CreatePredicate(null, null, requestUrls, openApiDoc);
99+
var filteredDocument = OpenApiFilterService.CreateFilteredDocument(openApiDoc, filterPredicate);
100+
101+
// Assert
102+
Assert.NotNull(filteredDocument);
103+
Assert.NotNull(filteredDocument.Paths);
104+
Assert.Single(filteredDocument.Paths);
105+
}
106+
107+
68108
[Theory]
69109
[InlineData("UtilityFiles/appsettingstest.json")]
70110
[InlineData(null)]

0 commit comments

Comments
 (0)