diff --git a/.config/dotnet-tools.json b/.config/dotnet-tools.json
index 227f59ad8a..846414bf49 100644
--- a/.config/dotnet-tools.json
+++ b/.config/dotnet-tools.json
@@ -3,7 +3,7 @@
"isRoot": true,
"tools": {
"swashbuckle.aspnetcore.cli": {
- "version": "9.0.4",
+ "version": "10.1.0",
"commands": ["swagger"]
},
"dotnet-ef": {
diff --git a/src/Api/Api.csproj b/src/Api/Api.csproj
index c4a286f33c..07dc066227 100644
--- a/src/Api/Api.csproj
+++ b/src/Api/Api.csproj
@@ -38,7 +38,7 @@
-
+
diff --git a/src/Api/Startup.cs b/src/Api/Startup.cs
index acbc4a68fa..5b9015b71a 100644
--- a/src/Api/Startup.cs
+++ b/src/Api/Startup.cs
@@ -14,7 +14,7 @@ using Bit.Api.Tools.Models.Request;
using Bit.Api.Vault.Models.Request;
using Bit.Core.Auth.Entities;
using Bit.SharedWeb.Health;
-using Microsoft.OpenApi.Models;
+using Microsoft.OpenApi;
using Bit.SharedWeb.Utilities;
using Microsoft.AspNetCore.Diagnostics.HealthChecks;
using Microsoft.Extensions.DependencyInjection.Extensions;
@@ -301,44 +301,43 @@ public class Startup
// Remove all Bitwarden cloud servers and only register the local server
config.PreSerializeFilters.Add((swaggerDoc, httpReq) =>
{
- swaggerDoc.Servers.Clear();
- swaggerDoc.Servers.Add(new OpenApiServer
- {
- Url = globalSettings.BaseServiceUri.Api,
- });
+ swaggerDoc.Servers =
+ [
+ new() {
+ Url = globalSettings.BaseServiceUri.Api,
+ }
+ ];
- swaggerDoc.Components.SecuritySchemes.Clear();
- swaggerDoc.Components.SecuritySchemes.Add("oauth2-client-credentials", new OpenApiSecurityScheme
+ swaggerDoc.Components ??= new OpenApiComponents();
+ swaggerDoc.Components.SecuritySchemes = new Dictionary
{
- Type = SecuritySchemeType.OAuth2,
- Flows = new OpenApiOAuthFlows
{
- ClientCredentials = new OpenApiOAuthFlow
+ "oauth2-client-credentials",
+ new OpenApiSecurityScheme
{
- TokenUrl = new Uri($"{globalSettings.BaseServiceUri.Identity}/connect/token"),
- Scopes = new Dictionary
+ Type = SecuritySchemeType.OAuth2,
+ Flows = new OpenApiOAuthFlows
+ {
+ ClientCredentials = new OpenApiOAuthFlow
+ {
+ TokenUrl = new Uri($"{globalSettings.BaseServiceUri.Identity}/connect/token"),
+ Scopes = new Dictionary
{
{ ApiScopes.ApiOrganization, "Organization APIs" }
}
+ }
+ }
}
}
- });
+ };
- swaggerDoc.SecurityRequirements.Clear();
- swaggerDoc.SecurityRequirements.Add(new OpenApiSecurityRequirement
- {
+ swaggerDoc.Security =
+ [
+ new OpenApiSecurityRequirement
{
- new OpenApiSecurityScheme
- {
- Reference = new OpenApiReference
- {
- Type = ReferenceType.SecurityScheme,
- Id = "oauth2-client-credentials"
- }
- },
- [ApiScopes.ApiOrganization]
- }
- });
+ [new OpenApiSecuritySchemeReference("oauth2-client-credentials")] = [ApiScopes.ApiOrganization]
+ },
+ ];
});
});
diff --git a/src/Api/Utilities/ServiceCollectionExtensions.cs b/src/Api/Utilities/ServiceCollectionExtensions.cs
index b773abf6ef..38d0bf4407 100644
--- a/src/Api/Utilities/ServiceCollectionExtensions.cs
+++ b/src/Api/Utilities/ServiceCollectionExtensions.cs
@@ -7,7 +7,7 @@ using Bit.SharedWeb.Health;
using Bit.SharedWeb.Swagger;
using Bit.SharedWeb.Utilities;
using Microsoft.AspNetCore.Authorization;
-using Microsoft.OpenApi.Models;
+using Microsoft.OpenApi;
namespace Bit.Api.Utilities;
diff --git a/src/Billing/Billing.csproj b/src/Billing/Billing.csproj
index 27ee9a7ce3..dee50af0bb 100644
--- a/src/Billing/Billing.csproj
+++ b/src/Billing/Billing.csproj
@@ -21,7 +21,7 @@
-
+
diff --git a/src/Identity/Startup.cs b/src/Identity/Startup.cs
index c6d21b59ad..bb1a974d82 100644
--- a/src/Identity/Startup.cs
+++ b/src/Identity/Startup.cs
@@ -14,7 +14,7 @@ using Bit.SharedWeb.Swagger;
using Bit.SharedWeb.Utilities;
using Duende.IdentityServer.Services;
using Microsoft.Extensions.DependencyInjection.Extensions;
-using Microsoft.OpenApi.Models;
+using Microsoft.OpenApi;
namespace Bit.Identity;
diff --git a/src/SharedWeb/SharedWeb.csproj b/src/SharedWeb/SharedWeb.csproj
index b6036845b0..17121913c1 100644
--- a/src/SharedWeb/SharedWeb.csproj
+++ b/src/SharedWeb/SharedWeb.csproj
@@ -13,7 +13,7 @@
-
+
diff --git a/src/SharedWeb/Swagger/ActionNameOperationFilter.cs b/src/SharedWeb/Swagger/ActionNameOperationFilter.cs
index b76e8864ba..23602ca495 100644
--- a/src/SharedWeb/Swagger/ActionNameOperationFilter.cs
+++ b/src/SharedWeb/Swagger/ActionNameOperationFilter.cs
@@ -1,6 +1,5 @@
using System.Text.Json;
-using Microsoft.OpenApi.Any;
-using Microsoft.OpenApi.Models;
+using Microsoft.OpenApi;
using Swashbuckle.AspNetCore.SwaggerGen;
namespace Bit.SharedWeb.Swagger;
@@ -18,8 +17,9 @@ public class ActionNameOperationFilter : IOperationFilter
if (!context.ApiDescription.ActionDescriptor.RouteValues.TryGetValue("action", out var action)) return;
if (string.IsNullOrEmpty(action)) return;
- operation.Extensions.Add("x-action-name", new OpenApiString(action));
+ operation.Extensions ??= new Dictionary();
+ operation.Extensions.Add("x-action-name", new JsonNodeExtension(action));
// We can't do case changes in the codegen templates, so we also add the snake_case version of the action name
- operation.Extensions.Add("x-action-name-snake-case", new OpenApiString(JsonNamingPolicy.SnakeCaseLower.ConvertName(action)));
+ operation.Extensions.Add("x-action-name-snake-case", new JsonNodeExtension(JsonNamingPolicy.SnakeCaseLower.ConvertName(action)));
}
}
diff --git a/src/SharedWeb/Swagger/CheckDuplicateOperationIdsDocumentFilter.cs b/src/SharedWeb/Swagger/CheckDuplicateOperationIdsDocumentFilter.cs
index 3079a9171a..97cd04ac43 100644
--- a/src/SharedWeb/Swagger/CheckDuplicateOperationIdsDocumentFilter.cs
+++ b/src/SharedWeb/Swagger/CheckDuplicateOperationIdsDocumentFilter.cs
@@ -1,4 +1,4 @@
-using Microsoft.OpenApi.Models;
+using Microsoft.OpenApi;
using Swashbuckle.AspNetCore.SwaggerGen;
namespace Bit.SharedWeb.Swagger;
@@ -15,19 +15,22 @@ public class CheckDuplicateOperationIdsDocumentFilter(bool printDuplicates = tru
public void Apply(OpenApiDocument swaggerDoc, DocumentFilterContext context)
{
- var operationIdMap = new Dictionary>();
+ var operationIdMap = new Dictionary>();
foreach (var (path, pathItem) in swaggerDoc.Paths)
{
- foreach (var operation in pathItem.Operations)
+ if (pathItem.Operations is null) continue;
+
+ foreach (var (method, operation) in pathItem.Operations)
{
- if (!operationIdMap.TryGetValue(operation.Value.OperationId, out var list))
+ var operationId = operation.OperationId ?? string.Empty;
+ if (!operationIdMap.TryGetValue(operationId, out var list))
{
list = [];
- operationIdMap[operation.Value.OperationId] = list;
+ operationIdMap[operationId] = list;
}
- list.Add((path, pathItem, operation.Key, operation.Value));
+ list.Add((path, pathItem, method, operation));
}
}
@@ -57,11 +60,15 @@ public class CheckDuplicateOperationIdsDocumentFilter(bool printDuplicates = tru
{
Console.Write($" {method.ToString().ToUpper()} {path}");
+ if (operation.Extensions is null) continue;
- if (operation.Extensions.TryGetValue("x-source-file", out var sourceFile) && operation.Extensions.TryGetValue("x-source-line", out var sourceLine))
+ if (operation.Extensions.TryGetValue("x-source-file", out var sourceFile)
+ && operation.Extensions.TryGetValue("x-source-line", out var sourceLine)
+ && sourceFile is JsonNodeExtension sourceFileNodeExt
+ && sourceLine is JsonNodeExtension sourceLineNodeExt)
{
- var sourceFileString = ((Microsoft.OpenApi.Any.OpenApiString)sourceFile).Value;
- var sourceLineString = ((Microsoft.OpenApi.Any.OpenApiInteger)sourceLine).Value;
+ var sourceFileString = sourceFileNodeExt.Node.ToString();
+ var sourceLineString = sourceLineNodeExt.Node.ToString();
Console.WriteLine($" {sourceFileString}:{sourceLineString}");
}
diff --git a/src/SharedWeb/Swagger/EncryptedStringSchemaFilter.cs b/src/SharedWeb/Swagger/EncryptedStringSchemaFilter.cs
index d26ae58e59..aade750205 100644
--- a/src/SharedWeb/Swagger/EncryptedStringSchemaFilter.cs
+++ b/src/SharedWeb/Swagger/EncryptedStringSchemaFilter.cs
@@ -2,7 +2,7 @@
using System.Text.Json;
using Bit.Core.Utilities;
-using Microsoft.OpenApi.Models;
+using Microsoft.OpenApi;
using Swashbuckle.AspNetCore.SwaggerGen;
namespace Bit.SharedWeb.Swagger;
@@ -13,7 +13,7 @@ namespace Bit.SharedWeb.Swagger;
///
public class EncryptedStringSchemaFilter : ISchemaFilter
{
- public void Apply(OpenApiSchema schema, SchemaFilterContext context)
+ public void Apply(IOpenApiSchema schema, SchemaFilterContext context)
{
if (context.Type == null || schema.Properties == null)
return;
@@ -30,9 +30,9 @@ public class EncryptedStringSchemaFilter : ISchemaFilter
// Convert prop.Name to camelCase for JSON schema property lookup
var jsonPropName = JsonNamingPolicy.CamelCase.ConvertName(prop.Name);
- if (schema.Properties.TryGetValue(jsonPropName, out var value))
+ if (schema.Properties.TryGetValue(jsonPropName, out var value) && value is OpenApiSchema innerSchema)
{
- value.Format = "x-enc-string";
+ innerSchema.Format = "x-enc-string";
}
}
}
diff --git a/src/SharedWeb/Swagger/EnumSchemaFilter.cs b/src/SharedWeb/Swagger/EnumSchemaFilter.cs
index 301fbfeca8..1b6fd6df57 100644
--- a/src/SharedWeb/Swagger/EnumSchemaFilter.cs
+++ b/src/SharedWeb/Swagger/EnumSchemaFilter.cs
@@ -1,5 +1,5 @@
-using Microsoft.OpenApi.Any;
-using Microsoft.OpenApi.Models;
+using System.Text.Json.Nodes;
+using Microsoft.OpenApi;
using Swashbuckle.AspNetCore.SwaggerGen;
namespace Bit.SharedWeb.Swagger;
@@ -14,13 +14,15 @@ namespace Bit.SharedWeb.Swagger;
///
public class EnumSchemaFilter : ISchemaFilter
{
- public void Apply(OpenApiSchema schema, SchemaFilterContext context)
+ public void Apply(IOpenApiSchema schema, SchemaFilterContext context)
{
- if (context.Type.IsEnum)
+ if (context.Type.IsEnum && schema is OpenApiSchema openApiSchema)
{
- var array = new OpenApiArray();
- array.AddRange(Enum.GetNames(context.Type).Select(n => new OpenApiString(n)));
- schema.Extensions.Add("x-enum-varnames", array);
+ var array = new JsonArray();
+ foreach (var name in Enum.GetNames(context.Type)) array.Add(name);
+
+ openApiSchema.Extensions ??= new Dictionary();
+ openApiSchema.Extensions.Add("x-enum-varnames", new JsonNodeExtension(array));
}
}
}
diff --git a/src/SharedWeb/Swagger/GitCommitDocumentFilter.cs b/src/SharedWeb/Swagger/GitCommitDocumentFilter.cs
index 86678722ce..fe51c5e588 100644
--- a/src/SharedWeb/Swagger/GitCommitDocumentFilter.cs
+++ b/src/SharedWeb/Swagger/GitCommitDocumentFilter.cs
@@ -1,7 +1,7 @@
#nullable enable
using System.Diagnostics;
-using Microsoft.OpenApi.Models;
+using Microsoft.OpenApi;
using Swashbuckle.AspNetCore.SwaggerGen;
namespace Bit.SharedWeb.Swagger;
@@ -16,7 +16,8 @@ public class GitCommitDocumentFilter : IDocumentFilter
{
if (!string.IsNullOrEmpty(GitCommit))
{
- swaggerDoc.Extensions.Add("x-git-commit", new Microsoft.OpenApi.Any.OpenApiString(GitCommit));
+ swaggerDoc.Extensions ??= new Dictionary();
+ swaggerDoc.Extensions.Add("x-git-commit", new JsonNodeExtension(GitCommit));
}
}
diff --git a/src/SharedWeb/Swagger/SourceFileLineOperationFilter.cs b/src/SharedWeb/Swagger/SourceFileLineOperationFilter.cs
index 68c0b5145a..b88744028f 100644
--- a/src/SharedWeb/Swagger/SourceFileLineOperationFilter.cs
+++ b/src/SharedWeb/Swagger/SourceFileLineOperationFilter.cs
@@ -4,8 +4,7 @@ using System.Reflection;
using System.Reflection.Metadata;
using System.Reflection.Metadata.Ecma335;
using System.Runtime.CompilerServices;
-using Microsoft.OpenApi.Any;
-using Microsoft.OpenApi.Models;
+using Microsoft.OpenApi;
using Swashbuckle.AspNetCore.SwaggerGen;
namespace Bit.SharedWeb.Swagger;
@@ -24,8 +23,9 @@ public class SourceFileLineOperationFilter : IOperationFilter
if (fileName != null && lineNumber > 0)
{
// Also add the information as extensions, so other tools can use it in the future
- operation.Extensions.Add("x-source-file", new OpenApiString(fileName));
- operation.Extensions.Add("x-source-line", new OpenApiInteger(lineNumber));
+ operation.Extensions ??= new Dictionary();
+ operation.Extensions.Add("x-source-file", new JsonNodeExtension(fileName));
+ operation.Extensions.Add("x-source-line", new JsonNodeExtension(lineNumber));
}
}
diff --git a/src/SharedWeb/Utilities/ServiceCollectionExtensions.cs b/src/SharedWeb/Utilities/ServiceCollectionExtensions.cs
index 2e0f2f96ca..4139b59fa5 100644
--- a/src/SharedWeb/Utilities/ServiceCollectionExtensions.cs
+++ b/src/SharedWeb/Utilities/ServiceCollectionExtensions.cs
@@ -80,7 +80,7 @@ using Microsoft.Extensions.DependencyInjection.Extensions;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
-using Microsoft.OpenApi.Models;
+using Microsoft.OpenApi;
using StackExchange.Redis;
using Swashbuckle.AspNetCore.SwaggerGen;
using NoopRepos = Bit.Core.Repositories.Noop;
@@ -847,19 +847,9 @@ public static class ServiceCollectionExtensions
});
// Add security requirement
- config.AddSecurityRequirement(new OpenApiSecurityRequirement
+ config.AddSecurityRequirement((document) => new OpenApiSecurityRequirement
{
- {
- new OpenApiSecurityScheme
- {
- Reference = new OpenApiReference
- {
- Type = ReferenceType.SecurityScheme,
- Id = serverId
- },
- },
- [ApiScopes.ApiOrganization]
- }
+ [new OpenApiSecuritySchemeReference(serverId, document)] = [ApiScopes.ApiOrganization]
});
}
}
diff --git a/test/SharedWeb.Test/ActionNameOperationFilterTest.cs b/test/SharedWeb.Test/ActionNameOperationFilterTest.cs
index c798adea8c..89ab7e327a 100644
--- a/test/SharedWeb.Test/ActionNameOperationFilterTest.cs
+++ b/test/SharedWeb.Test/ActionNameOperationFilterTest.cs
@@ -1,8 +1,7 @@
using Bit.SharedWeb.Swagger;
using Microsoft.AspNetCore.Mvc.Abstractions;
using Microsoft.AspNetCore.Mvc.ApiExplorer;
-using Microsoft.OpenApi.Any;
-using Microsoft.OpenApi.Models;
+using Microsoft.OpenApi;
using Swashbuckle.AspNetCore.SwaggerGen;
namespace SharedWeb.Test;
@@ -13,7 +12,10 @@ public class ActionNameOperationFilterTest
public void WithValidActionNameAddsActionNameExtensions()
{
// Arrange
- var operation = new OpenApiOperation();
+ var operation = new OpenApiOperation
+ {
+ Extensions = new Dictionary()
+ };
var actionDescriptor = new ActionDescriptor();
actionDescriptor.RouteValues["action"] = "GetUsers";
@@ -22,7 +24,7 @@ public class ActionNameOperationFilterTest
ActionDescriptor = actionDescriptor
};
- var context = new OperationFilterContext(apiDescription, null, null, null);
+ var context = new OperationFilterContext(apiDescription, null, null, null, null);
var filter = new ActionNameOperationFilter();
// Act
@@ -32,20 +34,23 @@ public class ActionNameOperationFilterTest
Assert.True(operation.Extensions.ContainsKey("x-action-name"));
Assert.True(operation.Extensions.ContainsKey("x-action-name-snake-case"));
- var actionNameExt = operation.Extensions["x-action-name"] as OpenApiString;
- var actionNameSnakeCaseExt = operation.Extensions["x-action-name-snake-case"] as OpenApiString;
+ var actionNameExt = operation.Extensions["x-action-name"] as JsonNodeExtension;
+ var actionNameSnakeCaseExt = operation.Extensions["x-action-name-snake-case"] as JsonNodeExtension;
Assert.NotNull(actionNameExt);
Assert.NotNull(actionNameSnakeCaseExt);
- Assert.Equal("GetUsers", actionNameExt.Value);
- Assert.Equal("get_users", actionNameSnakeCaseExt.Value);
+ Assert.Equal("GetUsers", actionNameExt.Node.ToString());
+ Assert.Equal("get_users", actionNameSnakeCaseExt.Node.ToString());
}
[Fact]
public void WithMissingActionRouteValueDoesNotAddExtensions()
{
// Arrange
- var operation = new OpenApiOperation();
+ var operation = new OpenApiOperation
+ {
+ Extensions = new Dictionary()
+ };
var actionDescriptor = new ActionDescriptor();
// Not setting the "action" route value at all
@@ -54,7 +59,7 @@ public class ActionNameOperationFilterTest
ActionDescriptor = actionDescriptor
};
- var context = new OperationFilterContext(apiDescription, null, null, null);
+ var context = new OperationFilterContext(apiDescription, null, null, null, null);
var filter = new ActionNameOperationFilter();
// Act
diff --git a/test/SharedWeb.Test/CheckDuplicateOperationIdsDocumentFilterTest.cs b/test/SharedWeb.Test/CheckDuplicateOperationIdsDocumentFilterTest.cs
index 7b7c5771d3..5b6bd3606d 100644
--- a/test/SharedWeb.Test/CheckDuplicateOperationIdsDocumentFilterTest.cs
+++ b/test/SharedWeb.Test/CheckDuplicateOperationIdsDocumentFilterTest.cs
@@ -1,6 +1,6 @@
using Bit.SharedWeb.Swagger;
using Microsoft.AspNetCore.Mvc;
-using Microsoft.OpenApi.Models;
+using Microsoft.OpenApi;
using Swashbuckle.AspNetCore.SwaggerGen;
namespace SharedWeb.Test;
diff --git a/test/SharedWeb.Test/EncryptedStringSchemaFilterTest.cs b/test/SharedWeb.Test/EncryptedStringSchemaFilterTest.cs
index 172ddf5ee5..4cadf2f408 100644
--- a/test/SharedWeb.Test/EncryptedStringSchemaFilterTest.cs
+++ b/test/SharedWeb.Test/EncryptedStringSchemaFilterTest.cs
@@ -1,6 +1,6 @@
using Bit.Core.Utilities;
using Bit.SharedWeb.Swagger;
-using Microsoft.OpenApi.Models;
+using Microsoft.OpenApi;
using Swashbuckle.AspNetCore.SwaggerGen;
@@ -24,7 +24,7 @@ public class EncryptedStringSchemaFilterTest
{
var schema = new OpenApiSchema
{
- Properties = new Dictionary { { "secretKey", new() } }
+ Properties = new Dictionary { { "secretKey", new OpenApiSchema() } }
};
var context = new SchemaFilterContext(typeof(TestClass), null, null, null);
var filter = new EncryptedStringSchemaFilter();
@@ -37,7 +37,7 @@ public class EncryptedStringSchemaFilterTest
{
var schema = new OpenApiSchema
{
- Properties = new Dictionary { { "username", new() } }
+ Properties = new Dictionary { { "username", new OpenApiSchema() } }
};
var context = new SchemaFilterContext(typeof(TestClass), null, null, null);
var filter = new EncryptedStringSchemaFilter();
@@ -50,7 +50,7 @@ public class EncryptedStringSchemaFilterTest
{
var schema = new OpenApiSchema
{
- Properties = new Dictionary { { "wrong", new() } }
+ Properties = new Dictionary { { "wrong", new OpenApiSchema() } }
};
var context = new SchemaFilterContext(typeof(TestClass), null, null, null);
var filter = new EncryptedStringSchemaFilter();
diff --git a/test/SharedWeb.Test/EnumSchemaFilterTest.cs b/test/SharedWeb.Test/EnumSchemaFilterTest.cs
index b0c14437c1..1c258f3da4 100644
--- a/test/SharedWeb.Test/EnumSchemaFilterTest.cs
+++ b/test/SharedWeb.Test/EnumSchemaFilterTest.cs
@@ -1,6 +1,5 @@
using Bit.SharedWeb.Swagger;
-using Microsoft.OpenApi.Any;
-using Microsoft.OpenApi.Models;
+using Microsoft.OpenApi;
using Swashbuckle.AspNetCore.SwaggerGen;
namespace SharedWeb.Test;
@@ -17,21 +16,27 @@ public class EnumSchemaFilterTest
[Fact]
public void SetsEnumVarNamesExtension()
{
- var schema = new OpenApiSchema();
+ var schema = new OpenApiSchema
+ {
+ Extensions = new Dictionary()
+ };
var context = new SchemaFilterContext(typeof(TestEnum), null, null, null);
var filter = new EnumSchemaFilter();
filter.Apply(schema, context);
Assert.True(schema.Extensions.ContainsKey("x-enum-varnames"));
- var extensions = schema.Extensions["x-enum-varnames"] as OpenApiArray;
+ var extensions = (schema.Extensions["x-enum-varnames"] as JsonNodeExtension).Node.AsArray();
Assert.NotNull(extensions);
- Assert.Equal(["First", "Second", "Third"], extensions.Select(x => ((OpenApiString)x).Value));
+ Assert.Equal(["First", "Second", "Third"], extensions.GetValues().Select(x => x));
}
[Fact]
public void DoesNotSetExtensionForNonEnum()
{
- var schema = new OpenApiSchema();
+ var schema = new OpenApiSchema
+ {
+ Extensions = new Dictionary()
+ };
var context = new SchemaFilterContext(typeof(string), null, null, null);
var filter = new EnumSchemaFilter();
filter.Apply(schema, context);
diff --git a/test/SharedWeb.Test/GitCommitDocumentFilterTest.cs b/test/SharedWeb.Test/GitCommitDocumentFilterTest.cs
index 542ef888f9..9deeb6d116 100644
--- a/test/SharedWeb.Test/GitCommitDocumentFilterTest.cs
+++ b/test/SharedWeb.Test/GitCommitDocumentFilterTest.cs
@@ -1,5 +1,5 @@
using Bit.SharedWeb.Swagger;
-using Microsoft.OpenApi.Models;
+using Microsoft.OpenApi;
using Swashbuckle.AspNetCore.SwaggerGen;
namespace SharedWeb.Test;
@@ -9,15 +9,18 @@ public class GitCommitDocumentFilterTest
[Fact]
public void AddsGitCommitExtensionIfAvailable()
{
- var doc = new OpenApiDocument();
+ var doc = new OpenApiDocument
+ {
+ Extensions = new Dictionary()
+ };
var context = new DocumentFilterContext(null, null, null);
var filter = new GitCommitDocumentFilter();
filter.Apply(doc, context);
Assert.True(doc.Extensions.ContainsKey("x-git-commit"));
- var ext = doc.Extensions["x-git-commit"] as Microsoft.OpenApi.Any.OpenApiString;
+ var ext = doc.Extensions["x-git-commit"] as JsonNodeExtension;
Assert.NotNull(ext);
- Assert.False(string.IsNullOrEmpty(ext.Value));
+ Assert.False(string.IsNullOrEmpty(ext.Node.ToString()));
}
}
diff --git a/test/SharedWeb.Test/SourceFileLineOperationFilterTest.cs b/test/SharedWeb.Test/SourceFileLineOperationFilterTest.cs
index 98da92c8c1..3ab573a0ec 100644
--- a/test/SharedWeb.Test/SourceFileLineOperationFilterTest.cs
+++ b/test/SharedWeb.Test/SourceFileLineOperationFilterTest.cs
@@ -1,5 +1,5 @@
using Bit.SharedWeb.Swagger;
-using Microsoft.OpenApi.Models;
+using Microsoft.OpenApi;
using Swashbuckle.AspNetCore.SwaggerGen;
namespace SharedWeb.Test;
@@ -16,18 +16,18 @@ public class SourceFileLineOperationFilterTest
{
var methodInfo = typeof(DummyController).GetMethod(nameof(DummyController.DummyMethod));
var operation = new OpenApiOperation();
- var context = new OperationFilterContext(null, null, null, methodInfo);
+ var context = new OperationFilterContext(null, null, null, null, methodInfo);
var filter = new SourceFileLineOperationFilter();
filter.Apply(operation, context);
Assert.True(operation.Extensions.ContainsKey("x-source-file"));
Assert.True(operation.Extensions.ContainsKey("x-source-line"));
- var fileExt = operation.Extensions["x-source-file"] as Microsoft.OpenApi.Any.OpenApiString;
- var lineExt = operation.Extensions["x-source-line"] as Microsoft.OpenApi.Any.OpenApiInteger;
+ var fileExt = operation.Extensions["x-source-file"] as JsonNodeExtension;
+ var lineExt = operation.Extensions["x-source-line"] as JsonNodeExtension;
Assert.NotNull(fileExt);
Assert.NotNull(lineExt);
- Assert.Equal(11, lineExt.Value);
- Assert.StartsWith("test/SharedWeb.Test/", fileExt.Value);
+ Assert.Equal(11, (int)lineExt.Node);
+ Assert.StartsWith("test/SharedWeb.Test/", fileExt.Node.ToString());
}
}
diff --git a/test/SharedWeb.Test/SwaggerDocUtil.cs b/test/SharedWeb.Test/SwaggerDocUtil.cs
index 45a3033dec..67779ac447 100644
--- a/test/SharedWeb.Test/SwaggerDocUtil.cs
+++ b/test/SharedWeb.Test/SwaggerDocUtil.cs
@@ -5,7 +5,7 @@ using Microsoft.AspNetCore.Mvc.ApiExplorer;
using Microsoft.AspNetCore.Mvc.ApplicationParts;
using Microsoft.AspNetCore.Mvc.Controllers;
using Microsoft.Extensions.DependencyInjection;
-using Microsoft.OpenApi.Models;
+using Microsoft.OpenApi;
using NSubstitute;
using Swashbuckle.AspNetCore.Swagger;
using Swashbuckle.AspNetCore.SwaggerGen;