From 30ee6ed9ac8e6a6a7d1931bed9da22e0116ec9af Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Fri, 27 Dec 2024 12:17:14 -0500 Subject: [PATCH 01/90] fix: single copy and maintain for references Signed-off-by: Vincent Biret --- .../Models/References/OpenApiSchemaReference.cs | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/Microsoft.OpenApi/Models/References/OpenApiSchemaReference.cs b/src/Microsoft.OpenApi/Models/References/OpenApiSchemaReference.cs index 011e0b930..ad8f5e88e 100644 --- a/src/Microsoft.OpenApi/Models/References/OpenApiSchemaReference.cs +++ b/src/Microsoft.OpenApi/Models/References/OpenApiSchemaReference.cs @@ -21,14 +21,21 @@ public class OpenApiSchemaReference : OpenApiSchema private JsonNode _example; private IList _examples; + #nullable enable + private OpenApiSchema? _targetProxy; + #nullable restore + private OpenApiSchema Target { get { _target ??= Reference.HostDocument?.ResolveReferenceTo(_reference); - OpenApiSchema resolved = new OpenApiSchema(_target); - if (!string.IsNullOrEmpty(_description)) resolved.Description = _description; - return resolved; + if (_targetProxy is null) + { + _targetProxy = new OpenApiSchema(_target); + if (!string.IsNullOrEmpty(_description)) _targetProxy.Description = _description; + } + return _targetProxy; } } From 6f4e7a245376cb816367ff86c497cbba023b6faf Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Fri, 27 Dec 2024 15:30:40 -0500 Subject: [PATCH 02/90] fix: uses backing fields instead of schema copy Signed-off-by: Vincent Biret --- .../References/OpenApiSchemaReference.cs | 171 +++++++++++------- 1 file changed, 105 insertions(+), 66 deletions(-) diff --git a/src/Microsoft.OpenApi/Models/References/OpenApiSchemaReference.cs b/src/Microsoft.OpenApi/Models/References/OpenApiSchemaReference.cs index ad8f5e88e..adb3a5162 100644 --- a/src/Microsoft.OpenApi/Models/References/OpenApiSchemaReference.cs +++ b/src/Microsoft.OpenApi/Models/References/OpenApiSchemaReference.cs @@ -14,28 +14,68 @@ namespace Microsoft.OpenApi.Models.References /// public class OpenApiSchemaReference : OpenApiSchema { - internal OpenApiSchema _target; + #nullable enable + private OpenApiSchema? _target; private readonly OpenApiReference _reference; - private string _description; - private JsonNode _default; - private JsonNode _example; - private IList _examples; + private string? _description; + private JsonNode? _default; + private JsonNode? _example; + private IList? _examples; + private bool? _nullable; + private IDictionary? _properties; + private string? _title; + private string? _schema; + private string? _comment; + private string? _id; + private string? _dynamicRef; + private string? _dynamicAnchor; + private IDictionary? _vocabulary; + private IDictionary? _definitions; + private decimal? _v31ExclusiveMaximum; + private decimal? _v31ExclusiveMinimum; + private bool? _unEvaluatedProperties; + private JsonSchemaType? _type; + private string? _const; + private string? _format; + private decimal? _maximum; + private bool? _exclusiveMaximum; + private decimal? _minimum; + private bool? _exclusiveMinimum; + private int? _maxLength; + private int? _minLength; + private string? _pattern; + private decimal? _multipleOf; + private bool? _readOnly; + private bool? _writeOnly; + private IList? _allOf; + private IList? _oneOf; + private IList? _anyOf; + private OpenApiSchema? _not; + private ISet? _required; + private OpenApiSchema _items; + private int? _maxItems; + private int? _minItems; + private bool? _uniqueItems; + private IDictionary? _patternProperties; + private int? _maxProperties; + private int? _minProperties; + private bool? _additionalPropertiesAllowed; + private OpenApiSchema? _additionalProperties; + private OpenApiDiscriminator? _discriminator; + private OpenApiExternalDocs? _externalDocs; + private bool? _deprecated; + private OpenApiXml? _xml; + private IDictionary? _extensions; + private bool? _unevaluatedProperties; + private IList? _enum; - #nullable enable - private OpenApiSchema? _targetProxy; + private OpenApiSchema? Target #nullable restore - - private OpenApiSchema Target { get { _target ??= Reference.HostDocument?.ResolveReferenceTo(_reference); - if (_targetProxy is null) - { - _targetProxy = new OpenApiSchema(_target); - if (!string.IsNullOrEmpty(_description)) _targetProxy.Description = _description; - } - return _targetProxy; + return _target; } } @@ -76,33 +116,33 @@ internal OpenApiSchemaReference(OpenApiSchema target, string referenceId) } /// - public override string Title { get => Target.Title; set => Target.Title = value; } + public override string Title { get => string.IsNullOrEmpty(_title) ? Target.Title : _title; set => _title = value; } /// - public override string Schema { get => Target.Schema; set => Target.Schema = value; } + public override string Schema { get => string.IsNullOrEmpty(_schema) ? Target.Schema : _schema; set => _schema = value; } /// - public override string Id { get => Target.Id; set => Target.Id = value; } + public override string Id { get => string.IsNullOrEmpty(_id) ? Target.Id : _id; set => _id = value; } /// - public override string Comment { get => Target.Comment; set => Target.Comment = value; } + public override string Comment { get => string.IsNullOrEmpty(_comment) ? Target.Comment : _comment; set => _comment = value; } /// - public override IDictionary Vocabulary { get => Target.Vocabulary; set => Target.Vocabulary = value; } + public override IDictionary Vocabulary { get => _vocabulary is not null ? _vocabulary : Target.Vocabulary; set => _vocabulary = value; } /// - public override string DynamicRef { get => Target.DynamicRef; set => Target.DynamicRef = value; } + public override string DynamicRef { get => string.IsNullOrEmpty(_dynamicRef) ? Target.DynamicRef : _dynamicRef; set => _dynamicRef = value; } /// - public override string DynamicAnchor { get => Target.DynamicAnchor; set => Target.DynamicAnchor = value; } + public override string DynamicAnchor { get => string.IsNullOrEmpty(_dynamicAnchor) ? Target.DynamicAnchor : _dynamicAnchor; set => _dynamicAnchor = value; } /// - public override IDictionary Definitions { get => Target.Definitions; set => Target.Definitions = value; } + public override IDictionary Definitions { get => _definitions is not null ? _definitions : Target.Definitions; set => _definitions = value; } /// - public override decimal? V31ExclusiveMaximum { get => Target.V31ExclusiveMaximum; set => Target.V31ExclusiveMaximum = value; } + public override decimal? V31ExclusiveMaximum { get => _v31ExclusiveMaximum is not null ? _v31ExclusiveMaximum.Value : Target.V31ExclusiveMaximum; set => _v31ExclusiveMaximum = value; } /// - public override decimal? V31ExclusiveMinimum { get => Target.V31ExclusiveMinimum; set => Target.V31ExclusiveMinimum = value; } + public override decimal? V31ExclusiveMinimum { get => _v31ExclusiveMinimum is not null ? _v31ExclusiveMinimum.Value : Target.V31ExclusiveMinimum; set => _v31ExclusiveMinimum = value; } /// - public override bool UnEvaluatedProperties { get => Target.UnEvaluatedProperties; set => Target.UnEvaluatedProperties = value; } + public override bool UnEvaluatedProperties { get => _unEvaluatedProperties is not null ? _unEvaluatedProperties.Value : Target.UnEvaluatedProperties; set => _unEvaluatedProperties = value; } /// - public override JsonSchemaType? Type { get => Target.Type; set => Target.Type = value; } + public override JsonSchemaType? Type { get => _type is not null ? _type.Value : Target.Type; set => _type = value; } /// - public override string Const { get => Target.Const; set => Target.Const = value; } + public override string Const { get => string.IsNullOrEmpty(_const) ? Target.Const : _const; set => _const = value; } /// - public override string Format { get => Target.Format; set => Target.Format = value; } + public override string Format { get => string.IsNullOrEmpty(_format) ? Target.Format : _format; set => _format = value; } /// public override string Description { @@ -110,89 +150,89 @@ public override string Description set => _description = value; } /// - public override decimal? Maximum { get => Target.Maximum; set => Target.Maximum = value; } + public override decimal? Maximum { get => _maximum is not null ? _maximum : Target.Maximum; set => _maximum = value; } /// - public override bool? ExclusiveMaximum { get => Target.ExclusiveMaximum; set => Target.ExclusiveMaximum = value; } + public override bool? ExclusiveMaximum { get => _exclusiveMaximum is not null ? _exclusiveMaximum : Target.ExclusiveMaximum; set => _exclusiveMaximum = value; } /// - public override decimal? Minimum { get => Target.Minimum; set => Target.Minimum = value; } + public override decimal? Minimum { get => _minimum is not null ? _minimum : Target.Minimum; set => _minimum = value; } /// - public override bool? ExclusiveMinimum { get => Target.ExclusiveMinimum; set => Target.ExclusiveMinimum = value; } + public override bool? ExclusiveMinimum { get => _exclusiveMinimum is not null ? _exclusiveMinimum : Target.ExclusiveMinimum; set => _exclusiveMinimum = value; } /// - public override int? MaxLength { get => Target.MaxLength; set => Target.MaxLength = value; } + public override int? MaxLength { get => _maxLength is not null ? _maxLength : Target.MaxLength; set => _maxLength = value; } /// - public override int? MinLength { get => Target.MinLength; set => Target.MinLength = value; } + public override int? MinLength { get => _minLength is not null ? _minLength : Target.MinLength; set => _minLength = value; } /// - public override string Pattern { get => Target.Pattern; set => Target.Pattern = value; } + public override string Pattern { get => string.IsNullOrEmpty(_pattern) ? Target.Pattern : _pattern; set => _pattern = value; } /// - public override decimal? MultipleOf { get => Target.MultipleOf; set => Target.MultipleOf = value; } + public override decimal? MultipleOf { get => _multipleOf is not null ? _multipleOf : Target.MultipleOf; set => _multipleOf = value; } /// public override JsonNode Default { - get => _default ??= Target.Default; + get => _default ??= Target.Default; //TODO normalize like other properties set => _default = value; } /// - public override bool ReadOnly { get => Target.ReadOnly; set => Target.ReadOnly = value; } + public override bool ReadOnly { get => _readOnly is not null ? _readOnly.Value : Target.ReadOnly; set => _readOnly = value; } /// - public override bool WriteOnly { get => Target.WriteOnly; set => Target.WriteOnly = value; } + public override bool WriteOnly { get => _writeOnly is not null ? _writeOnly.Value : Target.WriteOnly; set => _writeOnly = value; } /// - public override IList AllOf { get => Target.AllOf; set => Target.AllOf = value; } + public override IList AllOf { get => _allOf is not null ? _allOf : Target.AllOf; set => _allOf = value; } /// - public override IList OneOf { get => Target.OneOf; set => Target.OneOf = value; } + public override IList OneOf { get => _oneOf is not null ? _oneOf : Target.OneOf; set => _oneOf = value; } /// - public override IList AnyOf { get => Target.AnyOf; set => Target.AnyOf = value; } + public override IList AnyOf { get => _anyOf is not null ? _anyOf : Target.AnyOf; set => _anyOf = value; } /// - public override OpenApiSchema Not { get => Target.Not; set => Target.Not = value; } + public override OpenApiSchema Not { get => _not is not null ? _not : Target.Not; set => _not = value; } /// - public override ISet Required { get => Target.Required; set => Target.Required = value; } + public override ISet Required { get => _required is not null ? _required : Target.Required; set => _required = value; } /// - public override OpenApiSchema Items { get => Target.Items; set => Target.Items = value; } + public override OpenApiSchema Items { get => _items is not null ? _items : Target.Items; set => _items = value; } /// - public override int? MaxItems { get => Target.MaxItems; set => Target.MaxItems = value; } + public override int? MaxItems { get => _maxItems is not null ? _maxItems : Target.MaxItems; set => _maxItems = value; } /// - public override int? MinItems { get => Target.MinItems; set => Target.MinItems = value; } + public override int? MinItems { get => _minItems is not null ? _minItems : Target.MinItems; set => _minItems = value; } /// - public override bool? UniqueItems { get => Target.UniqueItems; set => Target.UniqueItems = value; } + public override bool? UniqueItems { get => _uniqueItems is not null ? _uniqueItems : Target.UniqueItems; set => _uniqueItems = value; } /// - public override IDictionary Properties { get => Target.Properties; set => Target.Properties = value; } + public override IDictionary Properties { get => _properties is not null ? _properties : Target.Properties ; set => _properties = value; } /// - public override IDictionary PatternProperties { get => Target.PatternProperties; set => Target.PatternProperties = value; } + public override IDictionary PatternProperties { get => _patternProperties is not null ? _patternProperties : Target.PatternProperties; set => _patternProperties = value; } /// - public override int? MaxProperties { get => Target.MaxProperties; set => Target.MaxProperties = value; } + public override int? MaxProperties { get => _maxProperties is not null ? _maxProperties : Target.MaxProperties; set => _maxProperties = value; } /// - public override int? MinProperties { get => Target.MinProperties; set => Target.MinProperties = value; } + public override int? MinProperties { get => _minProperties is not null ? _minProperties : Target.MinProperties; set => _minProperties = value; } /// - public override bool AdditionalPropertiesAllowed { get => Target.AdditionalPropertiesAllowed; set => Target.AdditionalPropertiesAllowed = value; } + public override bool AdditionalPropertiesAllowed { get => _additionalPropertiesAllowed is not null ? _additionalPropertiesAllowed.Value : Target.AdditionalPropertiesAllowed; set => _additionalPropertiesAllowed = value; } /// - public override OpenApiSchema AdditionalProperties { get => Target.AdditionalProperties; set => Target.AdditionalProperties = value; } + public override OpenApiSchema AdditionalProperties { get => _additionalProperties is not null ? _additionalProperties : Target.AdditionalProperties; set => _additionalProperties = value; } /// - public override OpenApiDiscriminator Discriminator { get => Target.Discriminator; set => Target.Discriminator = value; } + public override OpenApiDiscriminator Discriminator { get => _discriminator is not null ? _discriminator : Target.Discriminator; set => _discriminator = value; } /// public override JsonNode Example { - get => _example ??= Target.Example; + get => _example ??= Target.Example; //TODO normalize like other properties set => _example = value; } /// public override IList Examples { - get => _examples ??= Target.Examples; + get => _examples ??= Target.Examples; //TODO normalize like other properties set => Target.Examples = value; } /// - public override IList Enum { get => Target.Enum; set => Target.Enum = value; } + public override IList Enum { get => _enum is not null ? _enum : Target.Enum; set => _enum = value; } /// - public override bool Nullable { get => Target.Nullable; set => Target.Nullable = value; } + public override bool Nullable { get => _nullable is null ? Target.Nullable : _nullable.Value; set => _nullable = value; } /// - public override bool UnevaluatedProperties { get => Target.UnevaluatedProperties; set => Target.UnevaluatedProperties = value; } + public override bool UnevaluatedProperties { get => _unevaluatedProperties is not null ? _unevaluatedProperties.Value : Target.UnevaluatedProperties; set => _unevaluatedProperties = value; } /// - public override OpenApiExternalDocs ExternalDocs { get => Target.ExternalDocs; set => Target.ExternalDocs = value; } + public override OpenApiExternalDocs ExternalDocs { get => _externalDocs is not null ? _externalDocs : Target.ExternalDocs; set => _externalDocs = value; } /// - public override bool Deprecated { get => Target.Deprecated; set => Target.Deprecated = value; } + public override bool Deprecated { get => _deprecated is not null ? _deprecated.Value : Target.Deprecated; set => _deprecated = value; } /// - public override OpenApiXml Xml { get => Target.Xml; set => Target.Xml = value; } + public override OpenApiXml Xml { get => _xml is not null ? _xml : Target.Xml; set => _xml = value; } /// - public override IDictionary Extensions { get => Target.Extensions; set => Target.Extensions = value; } + public override IDictionary Extensions { get => _extensions is not null ? _extensions : Target.Extensions; set => _extensions = value; } /// public override void SerializeAsV31(IOpenApiWriter writer) @@ -240,7 +280,6 @@ public override void SerializeAsV2(IOpenApiWriter writer) if (!writer.GetSettings().ShouldInlineReference(_reference)) { _reference.SerializeAsV2(writer); - return; } else { From 0a7b4f6a8265f390ea452fc6bc9ab528c33bd2de Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Mon, 30 Dec 2024 09:29:57 -0500 Subject: [PATCH 03/90] chore: linting Signed-off-by: Vincent Biret --- .../Services/OpenApiWorkspace.cs | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/src/Microsoft.OpenApi/Services/OpenApiWorkspace.cs b/src/Microsoft.OpenApi/Services/OpenApiWorkspace.cs index b227b06e9..813a2296b 100644 --- a/src/Microsoft.OpenApi/Services/OpenApiWorkspace.cs +++ b/src/Microsoft.OpenApi/Services/OpenApiWorkspace.cs @@ -54,6 +54,7 @@ public int ComponentsCount() { return _IOpenApiReferenceableRegistry.Count + _artifactsRegistry.Count; } + private const string ComponentSegmentSeparator = "/"; /// /// Registers a document's components into the workspace @@ -69,7 +70,7 @@ public void RegisterComponents(OpenApiDocument document) // Register Schema foreach (var item in document.Components.Schemas) { - location = item.Value.Id ?? baseUri + ReferenceType.Schema.GetDisplayName() + "/" + item.Key; + location = item.Value.Id ?? baseUri + ReferenceType.Schema.GetDisplayName() + ComponentSegmentSeparator + item.Key; RegisterComponent(location, item.Value); } @@ -77,63 +78,63 @@ public void RegisterComponents(OpenApiDocument document) // Register Parameters foreach (var item in document.Components.Parameters) { - location = baseUri + ReferenceType.Parameter.GetDisplayName() + "/" + item.Key; + location = baseUri + ReferenceType.Parameter.GetDisplayName() + ComponentSegmentSeparator + item.Key; RegisterComponent(location, item.Value); } // Register Responses foreach (var item in document.Components.Responses) { - location = baseUri + ReferenceType.Response.GetDisplayName() + "/" + item.Key; + location = baseUri + ReferenceType.Response.GetDisplayName() + ComponentSegmentSeparator + item.Key; RegisterComponent(location, item.Value); } // Register RequestBodies foreach (var item in document.Components.RequestBodies) { - location = baseUri + ReferenceType.RequestBody.GetDisplayName() + "/" + item.Key; + location = baseUri + ReferenceType.RequestBody.GetDisplayName() + ComponentSegmentSeparator + item.Key; RegisterComponent(location, item.Value); } // Register Links foreach (var item in document.Components.Links) { - location = baseUri + ReferenceType.Link.GetDisplayName() + "/" + item.Key; + location = baseUri + ReferenceType.Link.GetDisplayName() + ComponentSegmentSeparator + item.Key; RegisterComponent(location, item.Value); } // Register Callbacks foreach (var item in document.Components.Callbacks) { - location = baseUri + ReferenceType.Callback.GetDisplayName() + "/" + item.Key; + location = baseUri + ReferenceType.Callback.GetDisplayName() + ComponentSegmentSeparator + item.Key; RegisterComponent(location, item.Value); } // Register PathItems foreach (var item in document.Components.PathItems) { - location = baseUri + ReferenceType.PathItem.GetDisplayName() + "/" + item.Key; + location = baseUri + ReferenceType.PathItem.GetDisplayName() + ComponentSegmentSeparator + item.Key; RegisterComponent(location, item.Value); } // Register Examples foreach (var item in document.Components.Examples) { - location = baseUri + ReferenceType.Example.GetDisplayName() + "/" + item.Key; + location = baseUri + ReferenceType.Example.GetDisplayName() + ComponentSegmentSeparator + item.Key; RegisterComponent(location, item.Value); } // Register Headers foreach (var item in document.Components.Headers) { - location = baseUri + ReferenceType.Header.GetDisplayName() + "/" + item.Key; + location = baseUri + ReferenceType.Header.GetDisplayName() + ComponentSegmentSeparator + item.Key; RegisterComponent(location, item.Value); } // Register SecuritySchemes foreach (var item in document.Components.SecuritySchemes) { - location = baseUri + ReferenceType.SecurityScheme.GetDisplayName() + "/" + item.Key; + location = baseUri + ReferenceType.SecurityScheme.GetDisplayName() + ComponentSegmentSeparator + item.Key; RegisterComponent(location, item.Value); } } From 10e548ac943d6e87b132a2fcd3784c21d320346d Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Mon, 30 Dec 2024 10:51:11 -0500 Subject: [PATCH 04/90] feat: adds components registration method for schemas Signed-off-by: Vincent Biret --- .../Services/OpenApiWorkspace.cs | 29 ++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi/Services/OpenApiWorkspace.cs b/src/Microsoft.OpenApi/Services/OpenApiWorkspace.cs index 813a2296b..1d8aa2799 100644 --- a/src/Microsoft.OpenApi/Services/OpenApiWorkspace.cs +++ b/src/Microsoft.OpenApi/Services/OpenApiWorkspace.cs @@ -64,7 +64,7 @@ public void RegisterComponents(OpenApiDocument document) { if (document?.Components == null) return; - string baseUri = document.BaseUri + OpenApiConstants.ComponentsSegment; + string baseUri = getBaseUri(document); string location; // Register Schema @@ -139,6 +139,33 @@ public void RegisterComponents(OpenApiDocument document) } } + private string getBaseUri(OpenApiDocument openApiDocument) + { + return openApiDocument.BaseUri + OpenApiConstants.ComponentsSegment; + } + + /// + /// Registers a schema for a document in the workspace + /// + /// The document to register the schema for. + /// The schema to register. + /// The id of the schema. + /// true if the schema is successfully registered; otherwise false. + /// openApiDocument is null + /// openApiSchema is null + /// id is null or empty + public bool RegisterSchemaForDocument(OpenApiDocument openApiDocument, OpenApiSchema openApiSchema, string id) + { + Utils.CheckArgumentNull(openApiDocument); + Utils.CheckArgumentNull(openApiSchema); + Utils.CheckArgumentNullOrEmpty(id); + + var baseUri = getBaseUri(openApiDocument); + + var location = baseUri + ReferenceType.Schema.GetDisplayName() + ComponentSegmentSeparator + id; + + return RegisterComponent(location, openApiSchema); + } /// /// Registers a component in the component registry. From 72db982037a45ebed212357b7926431a47d730c7 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Mon, 30 Dec 2024 11:55:13 -0500 Subject: [PATCH 05/90] chore: linting Signed-off-by: Vincent Biret --- src/Microsoft.OpenApi/Models/OpenApiComponents.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Microsoft.OpenApi/Models/OpenApiComponents.cs b/src/Microsoft.OpenApi/Models/OpenApiComponents.cs index f672b7dd1..0db85ed77 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiComponents.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiComponents.cs @@ -3,7 +3,6 @@ using System; using System.Collections.Generic; -using System.Linq; using Microsoft.OpenApi.Interfaces; using Microsoft.OpenApi.Models.References; using Microsoft.OpenApi.Writers; From efd2bfba4368a68bb09741ac9983efc09172d1e2 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Mon, 30 Dec 2024 11:56:06 -0500 Subject: [PATCH 06/90] feat; adds a method to register and add the component schemas Signed-off-by: Vincent Biret --- src/Microsoft.OpenApi/Models/OpenApiDocument.cs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/Microsoft.OpenApi/Models/OpenApiDocument.cs b/src/Microsoft.OpenApi/Models/OpenApiDocument.cs index 268007141..d680495c8 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiDocument.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiDocument.cs @@ -587,6 +587,21 @@ public static ReadResult Parse(string input, { return OpenApiModelFactory.Parse(input, format, settings); } + /// + /// Adds a schema to the components object of the current document. + /// + /// The schema to add + /// The id for the component + /// Whether the schema was added to the components. + public bool AddComponentSchema(string id, OpenApiSchema openApiSchema) + { + Utils.CheckArgumentNull(openApiSchema); + Utils.CheckArgumentNullOrEmpty(id); + Components ??= new(); + Components.Schemas ??= new Dictionary(); + Components.Schemas.Add(id, openApiSchema); + return Workspace?.RegisterSchemaForDocument(this, openApiSchema, id) ?? false; + } } internal class FindSchemaReferences : OpenApiVisitorBase From 7994691db279c23e3ac120a54b5d96cc7f88ae3f Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Mon, 30 Dec 2024 13:58:38 -0500 Subject: [PATCH 07/90] fix: null propagation for most failed reference lookup Signed-off-by: Vincent Biret --- .../References/OpenApiSchemaReference.cs | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/Microsoft.OpenApi/Models/References/OpenApiSchemaReference.cs b/src/Microsoft.OpenApi/Models/References/OpenApiSchemaReference.cs index adb3a5162..5c4bb8ff0 100644 --- a/src/Microsoft.OpenApi/Models/References/OpenApiSchemaReference.cs +++ b/src/Microsoft.OpenApi/Models/References/OpenApiSchemaReference.cs @@ -116,7 +116,7 @@ internal OpenApiSchemaReference(OpenApiSchema target, string referenceId) } /// - public override string Title { get => string.IsNullOrEmpty(_title) ? Target.Title : _title; set => _title = value; } + public override string Title { get => string.IsNullOrEmpty(_title) ? Target?.Title : _title; set => _title = value; } /// public override string Schema { get => string.IsNullOrEmpty(_schema) ? Target.Schema : _schema; set => _schema = value; } /// @@ -124,13 +124,13 @@ internal OpenApiSchemaReference(OpenApiSchema target, string referenceId) /// public override string Comment { get => string.IsNullOrEmpty(_comment) ? Target.Comment : _comment; set => _comment = value; } /// - public override IDictionary Vocabulary { get => _vocabulary is not null ? _vocabulary : Target.Vocabulary; set => _vocabulary = value; } + public override IDictionary Vocabulary { get => _vocabulary is not null ? _vocabulary : Target?.Vocabulary; set => _vocabulary = value; } /// public override string DynamicRef { get => string.IsNullOrEmpty(_dynamicRef) ? Target.DynamicRef : _dynamicRef; set => _dynamicRef = value; } /// public override string DynamicAnchor { get => string.IsNullOrEmpty(_dynamicAnchor) ? Target.DynamicAnchor : _dynamicAnchor; set => _dynamicAnchor = value; } /// - public override IDictionary Definitions { get => _definitions is not null ? _definitions : Target.Definitions; set => _definitions = value; } + public override IDictionary Definitions { get => _definitions is not null ? _definitions : Target?.Definitions; set => _definitions = value; } /// public override decimal? V31ExclusiveMaximum { get => _v31ExclusiveMaximum is not null ? _v31ExclusiveMaximum.Value : Target.V31ExclusiveMaximum; set => _v31ExclusiveMaximum = value; } /// @@ -176,15 +176,15 @@ public override JsonNode Default /// public override bool WriteOnly { get => _writeOnly is not null ? _writeOnly.Value : Target.WriteOnly; set => _writeOnly = value; } /// - public override IList AllOf { get => _allOf is not null ? _allOf : Target.AllOf; set => _allOf = value; } + public override IList AllOf { get => _allOf is not null ? _allOf : Target?.AllOf; set => _allOf = value; } /// - public override IList OneOf { get => _oneOf is not null ? _oneOf : Target.OneOf; set => _oneOf = value; } + public override IList OneOf { get => _oneOf is not null ? _oneOf : Target?.OneOf; set => _oneOf = value; } /// - public override IList AnyOf { get => _anyOf is not null ? _anyOf : Target.AnyOf; set => _anyOf = value; } + public override IList AnyOf { get => _anyOf is not null ? _anyOf : Target?.AnyOf; set => _anyOf = value; } /// public override OpenApiSchema Not { get => _not is not null ? _not : Target.Not; set => _not = value; } /// - public override ISet Required { get => _required is not null ? _required : Target.Required; set => _required = value; } + public override ISet Required { get => _required is not null ? _required : Target?.Required; set => _required = value; } /// public override OpenApiSchema Items { get => _items is not null ? _items : Target.Items; set => _items = value; } /// @@ -194,9 +194,9 @@ public override JsonNode Default /// public override bool? UniqueItems { get => _uniqueItems is not null ? _uniqueItems : Target.UniqueItems; set => _uniqueItems = value; } /// - public override IDictionary Properties { get => _properties is not null ? _properties : Target.Properties ; set => _properties = value; } + public override IDictionary Properties { get => _properties is not null ? _properties : Target?.Properties ; set => _properties = value; } /// - public override IDictionary PatternProperties { get => _patternProperties is not null ? _patternProperties : Target.PatternProperties; set => _patternProperties = value; } + public override IDictionary PatternProperties { get => _patternProperties is not null ? _patternProperties : Target?.PatternProperties; set => _patternProperties = value; } /// public override int? MaxProperties { get => _maxProperties is not null ? _maxProperties : Target.MaxProperties; set => _maxProperties = value; } /// @@ -220,7 +220,7 @@ public override IList Examples set => Target.Examples = value; } /// - public override IList Enum { get => _enum is not null ? _enum : Target.Enum; set => _enum = value; } + public override IList Enum { get => _enum is not null ? _enum : Target?.Enum; set => _enum = value; } /// public override bool Nullable { get => _nullable is null ? Target.Nullable : _nullable.Value; set => _nullable = value; } /// @@ -232,7 +232,7 @@ public override IList Examples /// public override OpenApiXml Xml { get => _xml is not null ? _xml : Target.Xml; set => _xml = value; } /// - public override IDictionary Extensions { get => _extensions is not null ? _extensions : Target.Extensions; set => _extensions = value; } + public override IDictionary Extensions { get => _extensions is not null ? _extensions : Target?.Extensions; set => _extensions = value; } /// public override void SerializeAsV31(IOpenApiWriter writer) From e3325b9d4cedee6a9734899906e938888f023506 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Tue, 31 Dec 2024 08:26:27 -0500 Subject: [PATCH 08/90] fix: aligns missing properties for override Signed-off-by: Vincent Biret --- .../References/OpenApiSchemaReference.cs | 26 +++++-------------- 1 file changed, 7 insertions(+), 19 deletions(-) diff --git a/src/Microsoft.OpenApi/Models/References/OpenApiSchemaReference.cs b/src/Microsoft.OpenApi/Models/References/OpenApiSchemaReference.cs index 5c4bb8ff0..44a86bb01 100644 --- a/src/Microsoft.OpenApi/Models/References/OpenApiSchemaReference.cs +++ b/src/Microsoft.OpenApi/Models/References/OpenApiSchemaReference.cs @@ -166,11 +166,7 @@ public override string Description /// public override decimal? MultipleOf { get => _multipleOf is not null ? _multipleOf : Target.MultipleOf; set => _multipleOf = value; } /// - public override JsonNode Default - { - get => _default ??= Target.Default; //TODO normalize like other properties - set => _default = value; - } + public override JsonNode Default { get => _default is not null ? _default : Target.Default; set => _default = value; } /// public override bool ReadOnly { get => _readOnly is not null ? _readOnly.Value : Target.ReadOnly; set => _readOnly = value; } /// @@ -182,11 +178,11 @@ public override JsonNode Default /// public override IList AnyOf { get => _anyOf is not null ? _anyOf : Target?.AnyOf; set => _anyOf = value; } /// - public override OpenApiSchema Not { get => _not is not null ? _not : Target.Not; set => _not = value; } + public override OpenApiSchema Not { get => _not is not null ? _not : Target?.Not; set => _not = value; } /// public override ISet Required { get => _required is not null ? _required : Target?.Required; set => _required = value; } /// - public override OpenApiSchema Items { get => _items is not null ? _items : Target.Items; set => _items = value; } + public override OpenApiSchema Items { get => _items is not null ? _items : Target?.Items; set => _items = value; } /// public override int? MaxItems { get => _maxItems is not null ? _maxItems : Target.MaxItems; set => _maxItems = value; } /// @@ -204,21 +200,13 @@ public override JsonNode Default /// public override bool AdditionalPropertiesAllowed { get => _additionalPropertiesAllowed is not null ? _additionalPropertiesAllowed.Value : Target.AdditionalPropertiesAllowed; set => _additionalPropertiesAllowed = value; } /// - public override OpenApiSchema AdditionalProperties { get => _additionalProperties is not null ? _additionalProperties : Target.AdditionalProperties; set => _additionalProperties = value; } + public override OpenApiSchema AdditionalProperties { get => _additionalProperties is not null ? _additionalProperties : Target?.AdditionalProperties; set => _additionalProperties = value; } /// public override OpenApiDiscriminator Discriminator { get => _discriminator is not null ? _discriminator : Target.Discriminator; set => _discriminator = value; } /// - public override JsonNode Example - { - get => _example ??= Target.Example; //TODO normalize like other properties - set => _example = value; - } + public override JsonNode Example { get => _example is not null ? _example : Target.Example; set => _example = value; } /// - public override IList Examples - { - get => _examples ??= Target.Examples; //TODO normalize like other properties - set => Target.Examples = value; - } + public override IList Examples { get => _examples is not null ? _examples : Target?.Examples; set => _examples = value; } /// public override IList Enum { get => _enum is not null ? _enum : Target?.Enum; set => _enum = value; } /// @@ -226,7 +214,7 @@ public override IList Examples /// public override bool UnevaluatedProperties { get => _unevaluatedProperties is not null ? _unevaluatedProperties.Value : Target.UnevaluatedProperties; set => _unevaluatedProperties = value; } /// - public override OpenApiExternalDocs ExternalDocs { get => _externalDocs is not null ? _externalDocs : Target.ExternalDocs; set => _externalDocs = value; } + public override OpenApiExternalDocs ExternalDocs { get => _externalDocs is not null ? _externalDocs : Target?.ExternalDocs; set => _externalDocs = value; } /// public override bool Deprecated { get => _deprecated is not null ? _deprecated.Value : Target.Deprecated; set => _deprecated = value; } /// From 8d57b81d7122c9ffad4f1c348879cc6df971617c Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Tue, 31 Dec 2024 08:29:53 -0500 Subject: [PATCH 09/90] fix: aligns to null propagation operator Signed-off-by: Vincent Biret --- .../References/OpenApiSchemaReference.cs | 70 +++++++++---------- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/src/Microsoft.OpenApi/Models/References/OpenApiSchemaReference.cs b/src/Microsoft.OpenApi/Models/References/OpenApiSchemaReference.cs index 44a86bb01..d8890efb1 100644 --- a/src/Microsoft.OpenApi/Models/References/OpenApiSchemaReference.cs +++ b/src/Microsoft.OpenApi/Models/References/OpenApiSchemaReference.cs @@ -118,59 +118,59 @@ internal OpenApiSchemaReference(OpenApiSchema target, string referenceId) /// public override string Title { get => string.IsNullOrEmpty(_title) ? Target?.Title : _title; set => _title = value; } /// - public override string Schema { get => string.IsNullOrEmpty(_schema) ? Target.Schema : _schema; set => _schema = value; } + public override string Schema { get => string.IsNullOrEmpty(_schema) ? Target?.Schema : _schema; set => _schema = value; } /// - public override string Id { get => string.IsNullOrEmpty(_id) ? Target.Id : _id; set => _id = value; } + public override string Id { get => string.IsNullOrEmpty(_id) ? Target?.Id : _id; set => _id = value; } /// - public override string Comment { get => string.IsNullOrEmpty(_comment) ? Target.Comment : _comment; set => _comment = value; } + public override string Comment { get => string.IsNullOrEmpty(_comment) ? Target?.Comment : _comment; set => _comment = value; } /// public override IDictionary Vocabulary { get => _vocabulary is not null ? _vocabulary : Target?.Vocabulary; set => _vocabulary = value; } /// - public override string DynamicRef { get => string.IsNullOrEmpty(_dynamicRef) ? Target.DynamicRef : _dynamicRef; set => _dynamicRef = value; } + public override string DynamicRef { get => string.IsNullOrEmpty(_dynamicRef) ? Target?.DynamicRef : _dynamicRef; set => _dynamicRef = value; } /// - public override string DynamicAnchor { get => string.IsNullOrEmpty(_dynamicAnchor) ? Target.DynamicAnchor : _dynamicAnchor; set => _dynamicAnchor = value; } + public override string DynamicAnchor { get => string.IsNullOrEmpty(_dynamicAnchor) ? Target?.DynamicAnchor : _dynamicAnchor; set => _dynamicAnchor = value; } /// public override IDictionary Definitions { get => _definitions is not null ? _definitions : Target?.Definitions; set => _definitions = value; } /// - public override decimal? V31ExclusiveMaximum { get => _v31ExclusiveMaximum is not null ? _v31ExclusiveMaximum.Value : Target.V31ExclusiveMaximum; set => _v31ExclusiveMaximum = value; } + public override decimal? V31ExclusiveMaximum { get => _v31ExclusiveMaximum is not null ? _v31ExclusiveMaximum.Value : Target?.V31ExclusiveMaximum; set => _v31ExclusiveMaximum = value; } /// - public override decimal? V31ExclusiveMinimum { get => _v31ExclusiveMinimum is not null ? _v31ExclusiveMinimum.Value : Target.V31ExclusiveMinimum; set => _v31ExclusiveMinimum = value; } + public override decimal? V31ExclusiveMinimum { get => _v31ExclusiveMinimum is not null ? _v31ExclusiveMinimum.Value : Target?.V31ExclusiveMinimum; set => _v31ExclusiveMinimum = value; } /// - public override bool UnEvaluatedProperties { get => _unEvaluatedProperties is not null ? _unEvaluatedProperties.Value : Target.UnEvaluatedProperties; set => _unEvaluatedProperties = value; } + public override bool UnEvaluatedProperties { get => _unEvaluatedProperties is not null ? _unEvaluatedProperties.Value : Target?.UnEvaluatedProperties ?? false; set => _unEvaluatedProperties = value; } /// - public override JsonSchemaType? Type { get => _type is not null ? _type.Value : Target.Type; set => _type = value; } + public override JsonSchemaType? Type { get => _type is not null ? _type.Value : Target?.Type; set => _type = value; } /// - public override string Const { get => string.IsNullOrEmpty(_const) ? Target.Const : _const; set => _const = value; } + public override string Const { get => string.IsNullOrEmpty(_const) ? Target?.Const : _const; set => _const = value; } /// - public override string Format { get => string.IsNullOrEmpty(_format) ? Target.Format : _format; set => _format = value; } + public override string Format { get => string.IsNullOrEmpty(_format) ? Target?.Format : _format; set => _format = value; } /// public override string Description { - get => string.IsNullOrEmpty(_description) ? Target.Description : _description; + get => string.IsNullOrEmpty(_description) ? Target?.Description : _description; set => _description = value; } /// - public override decimal? Maximum { get => _maximum is not null ? _maximum : Target.Maximum; set => _maximum = value; } + public override decimal? Maximum { get => _maximum is not null ? _maximum : Target?.Maximum; set => _maximum = value; } /// - public override bool? ExclusiveMaximum { get => _exclusiveMaximum is not null ? _exclusiveMaximum : Target.ExclusiveMaximum; set => _exclusiveMaximum = value; } + public override bool? ExclusiveMaximum { get => _exclusiveMaximum is not null ? _exclusiveMaximum : Target?.ExclusiveMaximum; set => _exclusiveMaximum = value; } /// - public override decimal? Minimum { get => _minimum is not null ? _minimum : Target.Minimum; set => _minimum = value; } + public override decimal? Minimum { get => _minimum is not null ? _minimum : Target?.Minimum; set => _minimum = value; } /// - public override bool? ExclusiveMinimum { get => _exclusiveMinimum is not null ? _exclusiveMinimum : Target.ExclusiveMinimum; set => _exclusiveMinimum = value; } + public override bool? ExclusiveMinimum { get => _exclusiveMinimum is not null ? _exclusiveMinimum : Target?.ExclusiveMinimum; set => _exclusiveMinimum = value; } /// - public override int? MaxLength { get => _maxLength is not null ? _maxLength : Target.MaxLength; set => _maxLength = value; } + public override int? MaxLength { get => _maxLength is not null ? _maxLength : Target?.MaxLength; set => _maxLength = value; } /// - public override int? MinLength { get => _minLength is not null ? _minLength : Target.MinLength; set => _minLength = value; } + public override int? MinLength { get => _minLength is not null ? _minLength : Target?.MinLength; set => _minLength = value; } /// - public override string Pattern { get => string.IsNullOrEmpty(_pattern) ? Target.Pattern : _pattern; set => _pattern = value; } + public override string Pattern { get => string.IsNullOrEmpty(_pattern) ? Target?.Pattern : _pattern; set => _pattern = value; } /// - public override decimal? MultipleOf { get => _multipleOf is not null ? _multipleOf : Target.MultipleOf; set => _multipleOf = value; } + public override decimal? MultipleOf { get => _multipleOf is not null ? _multipleOf : Target?.MultipleOf; set => _multipleOf = value; } /// - public override JsonNode Default { get => _default is not null ? _default : Target.Default; set => _default = value; } + public override JsonNode Default { get => _default is not null ? _default : Target?.Default; set => _default = value; } /// - public override bool ReadOnly { get => _readOnly is not null ? _readOnly.Value : Target.ReadOnly; set => _readOnly = value; } + public override bool ReadOnly { get => _readOnly is not null ? _readOnly.Value : Target?.ReadOnly ?? false; set => _readOnly = value; } /// - public override bool WriteOnly { get => _writeOnly is not null ? _writeOnly.Value : Target.WriteOnly; set => _writeOnly = value; } + public override bool WriteOnly { get => _writeOnly is not null ? _writeOnly.Value : Target?.WriteOnly ?? false; set => _writeOnly = value; } /// public override IList AllOf { get => _allOf is not null ? _allOf : Target?.AllOf; set => _allOf = value; } /// @@ -184,41 +184,41 @@ public override string Description /// public override OpenApiSchema Items { get => _items is not null ? _items : Target?.Items; set => _items = value; } /// - public override int? MaxItems { get => _maxItems is not null ? _maxItems : Target.MaxItems; set => _maxItems = value; } + public override int? MaxItems { get => _maxItems is not null ? _maxItems : Target?.MaxItems; set => _maxItems = value; } /// - public override int? MinItems { get => _minItems is not null ? _minItems : Target.MinItems; set => _minItems = value; } + public override int? MinItems { get => _minItems is not null ? _minItems : Target?.MinItems; set => _minItems = value; } /// - public override bool? UniqueItems { get => _uniqueItems is not null ? _uniqueItems : Target.UniqueItems; set => _uniqueItems = value; } + public override bool? UniqueItems { get => _uniqueItems is not null ? _uniqueItems : Target?.UniqueItems; set => _uniqueItems = value; } /// public override IDictionary Properties { get => _properties is not null ? _properties : Target?.Properties ; set => _properties = value; } /// public override IDictionary PatternProperties { get => _patternProperties is not null ? _patternProperties : Target?.PatternProperties; set => _patternProperties = value; } /// - public override int? MaxProperties { get => _maxProperties is not null ? _maxProperties : Target.MaxProperties; set => _maxProperties = value; } + public override int? MaxProperties { get => _maxProperties is not null ? _maxProperties : Target?.MaxProperties; set => _maxProperties = value; } /// - public override int? MinProperties { get => _minProperties is not null ? _minProperties : Target.MinProperties; set => _minProperties = value; } + public override int? MinProperties { get => _minProperties is not null ? _minProperties : Target?.MinProperties; set => _minProperties = value; } /// - public override bool AdditionalPropertiesAllowed { get => _additionalPropertiesAllowed is not null ? _additionalPropertiesAllowed.Value : Target.AdditionalPropertiesAllowed; set => _additionalPropertiesAllowed = value; } + public override bool AdditionalPropertiesAllowed { get => _additionalPropertiesAllowed is not null ? _additionalPropertiesAllowed.Value : Target?.AdditionalPropertiesAllowed ?? true; set => _additionalPropertiesAllowed = value; } /// public override OpenApiSchema AdditionalProperties { get => _additionalProperties is not null ? _additionalProperties : Target?.AdditionalProperties; set => _additionalProperties = value; } /// - public override OpenApiDiscriminator Discriminator { get => _discriminator is not null ? _discriminator : Target.Discriminator; set => _discriminator = value; } + public override OpenApiDiscriminator Discriminator { get => _discriminator is not null ? _discriminator : Target?.Discriminator; set => _discriminator = value; } /// - public override JsonNode Example { get => _example is not null ? _example : Target.Example; set => _example = value; } + public override JsonNode Example { get => _example is not null ? _example : Target?.Example; set => _example = value; } /// public override IList Examples { get => _examples is not null ? _examples : Target?.Examples; set => _examples = value; } /// public override IList Enum { get => _enum is not null ? _enum : Target?.Enum; set => _enum = value; } /// - public override bool Nullable { get => _nullable is null ? Target.Nullable : _nullable.Value; set => _nullable = value; } + public override bool Nullable { get => _nullable is not null ? _nullable.Value : Target?.Nullable ?? false; set => _nullable = value; } /// - public override bool UnevaluatedProperties { get => _unevaluatedProperties is not null ? _unevaluatedProperties.Value : Target.UnevaluatedProperties; set => _unevaluatedProperties = value; } + public override bool UnevaluatedProperties { get => _unevaluatedProperties is not null ? _unevaluatedProperties.Value : Target?.UnevaluatedProperties ?? false; set => _unevaluatedProperties = value; } /// public override OpenApiExternalDocs ExternalDocs { get => _externalDocs is not null ? _externalDocs : Target?.ExternalDocs; set => _externalDocs = value; } /// - public override bool Deprecated { get => _deprecated is not null ? _deprecated.Value : Target.Deprecated; set => _deprecated = value; } + public override bool Deprecated { get => _deprecated is not null ? _deprecated.Value : Target?.Deprecated ?? false; set => _deprecated = value; } /// - public override OpenApiXml Xml { get => _xml is not null ? _xml : Target.Xml; set => _xml = value; } + public override OpenApiXml Xml { get => _xml is not null ? _xml : Target?.Xml; set => _xml = value; } /// public override IDictionary Extensions { get => _extensions is not null ? _extensions : Target?.Extensions; set => _extensions = value; } From b727581d6fd1d814b5c1887400cb48f06dd96362 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Tue, 31 Dec 2024 08:30:38 -0500 Subject: [PATCH 10/90] fix: updates public api file Signed-off-by: Vincent Biret --- test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt b/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt index 642dd0b82..f18916ab0 100644 --- a/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt +++ b/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt @@ -571,6 +571,7 @@ namespace Microsoft.OpenApi.Models public System.Collections.Generic.IList? Tags { get; set; } public System.Collections.Generic.IDictionary? Webhooks { get; set; } public Microsoft.OpenApi.Services.OpenApiWorkspace? Workspace { get; set; } + public bool AddComponentSchema(string id, Microsoft.OpenApi.Models.OpenApiSchema openApiSchema) { } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } @@ -1534,6 +1535,7 @@ namespace Microsoft.OpenApi.Services public System.Uri GetDocumentId(string key) { } public bool RegisterComponent(string location, T component) { } public void RegisterComponents(Microsoft.OpenApi.Models.OpenApiDocument document) { } + public bool RegisterSchemaForDocument(Microsoft.OpenApi.Models.OpenApiDocument openApiDocument, Microsoft.OpenApi.Models.OpenApiSchema openApiSchema, string id) { } public T? ResolveReference(string location) { } } public class OperationSearch : Microsoft.OpenApi.Services.OpenApiVisitorBase From 5b4c94e71bff02202fddda6ae4b8c00f8b7b1b6f Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Tue, 31 Dec 2024 09:10:57 -0500 Subject: [PATCH 11/90] chore: linting Signed-off-by: Vincent Biret --- .../Models/References/OpenApiTagReference.cs | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/Microsoft.OpenApi/Models/References/OpenApiTagReference.cs b/src/Microsoft.OpenApi/Models/References/OpenApiTagReference.cs index 664f784f3..64b815fd4 100644 --- a/src/Microsoft.OpenApi/Models/References/OpenApiTagReference.cs +++ b/src/Microsoft.OpenApi/Models/References/OpenApiTagReference.cs @@ -80,7 +80,6 @@ public override void SerializeAsV3(IOpenApiWriter writer) if (!writer.GetSettings().ShouldInlineReference(_reference)) { _reference.SerializeAsV3(writer); - return; } else { @@ -94,7 +93,6 @@ public override void SerializeAsV31(IOpenApiWriter writer) if (!writer.GetSettings().ShouldInlineReference(_reference)) { _reference.SerializeAsV31(writer); - return; } else { @@ -108,7 +106,6 @@ public override void SerializeAsV2(IOpenApiWriter writer) if (!writer.GetSettings().ShouldInlineReference(_reference)) { _reference.SerializeAsV2(writer); - return; } else { @@ -119,7 +116,7 @@ public override void SerializeAsV2(IOpenApiWriter writer) /// private void SerializeInternal(IOpenApiWriter writer) { - Utils.CheckArgumentNull(writer);; + Utils.CheckArgumentNull(writer); writer.WriteValue(Name); } } From e366566865ade9e6ada41033459ee9de9709ab29 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Tue, 31 Dec 2024 09:25:37 -0500 Subject: [PATCH 12/90] chore: linting Signed-off-by: Vincent Biret --- src/Microsoft.OpenApi/Interfaces/IOpenApiReferenceable.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Microsoft.OpenApi/Interfaces/IOpenApiReferenceable.cs b/src/Microsoft.OpenApi/Interfaces/IOpenApiReferenceable.cs index 0920fb1ef..43088bf6b 100644 --- a/src/Microsoft.OpenApi/Interfaces/IOpenApiReferenceable.cs +++ b/src/Microsoft.OpenApi/Interfaces/IOpenApiReferenceable.cs @@ -2,7 +2,6 @@ // Licensed under the MIT license. using Microsoft.OpenApi.Models; -using Microsoft.OpenApi.Writers; namespace Microsoft.OpenApi.Interfaces { From a2317480250129c7091ef7a90e2eb2a95d9ac48b Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Tue, 31 Dec 2024 14:02:30 -0500 Subject: [PATCH 13/90] chore: linting Signed-off-by: Vincent Biret --- .../Workspaces/OpenApiReferencableTests.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Tests/Workspaces/OpenApiReferencableTests.cs b/test/Microsoft.OpenApi.Tests/Workspaces/OpenApiReferencableTests.cs index e015da4f4..ecadc2017 100644 --- a/test/Microsoft.OpenApi.Tests/Workspaces/OpenApiReferencableTests.cs +++ b/test/Microsoft.OpenApi.Tests/Workspaces/OpenApiReferencableTests.cs @@ -45,7 +45,6 @@ public class OpenApiReferencableTests { "link1", new OpenApiLink() } } }; - private static readonly OpenApiSchema _schemaFragment = new OpenApiSchema(); private static readonly OpenApiSecurityScheme _securitySchemeFragment = new OpenApiSecurityScheme(); private static readonly OpenApiTag _tagFragment = new OpenApiTag(); From 878593b7a7e6ff1f2adc6965608c46e5f8ce8f38 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Tue, 31 Dec 2024 15:16:16 -0500 Subject: [PATCH 14/90] fix: side effects in tag references Signed-off-by: Vincent Biret --- .../OpenApiYamlReader.cs | 7 +- .../Interfaces/IOpenApiReader.cs | 4 +- .../Interfaces/IOpenApiVersionService.cs | 2 +- .../Models/OpenApiDocument.cs | 15 -- .../Models/OpenApiOperation.cs | 4 +- src/Microsoft.OpenApi/Models/OpenApiTag.cs | 8 +- .../Models/References/OpenApiTagReference.cs | 70 +++---- .../Reader/OpenApiJsonReader.cs | 9 +- .../Reader/OpenApiModelFactory.cs | 21 +- .../Reader/ParseNodes/ListNode.cs | 5 +- .../Reader/ParseNodes/ParseNode.cs | 3 +- .../Reader/ParsingContext.cs | 9 +- .../Reader/V2/OpenApiDocumentDeserializer.cs | 12 +- .../Reader/V2/OpenApiOperationDeserializer.cs | 14 +- .../Reader/V2/OpenApiSchemaDeserializer.cs | 2 +- .../OpenApiSecurityRequirementDeserializer.cs | 4 +- .../Reader/V3/OpenApiDocumentDeserializer.cs | 11 +- .../Reader/V3/OpenApiOperationDeserializer.cs | 6 +- .../Reader/V3/OpenApiSchemaDeserializer.cs | 2 +- .../OpenApiSecurityRequirementDeserializer.cs | 4 +- .../V3/OpenApiServerVariableDeserializer.cs | 2 +- .../Reader/V31/OpenApiDocumentDeserializer.cs | 11 +- .../V31/OpenApiOperationDeserializer.cs | 4 +- .../Reader/V31/OpenApiSchemaDeserializer.cs | 6 +- .../OpenApiSecurityRequirementDeserializer.cs | 4 +- .../V31/OpenApiServerVariableDeserializer.cs | 4 +- .../Services/OpenApiVisitorBase.cs | 15 ++ .../Services/OpenApiWalker.cs | 39 +++- .../UtilityFiles/OpenApiDocumentMock.cs | 198 ++++++++---------- .../V2Tests/OpenApiContactTests.cs | 2 +- .../V31Tests/OpenApiSchemaTests.cs | 28 +-- .../V3Tests/OpenApiCallbackTests.cs | 2 +- .../V3Tests/OpenApiContactTests.cs | 2 +- .../V3Tests/OpenApiDiscriminatorTests.cs | 2 +- .../V3Tests/OpenApiDocumentTests.cs | 51 ++--- .../V3Tests/OpenApiEncodingTests.cs | 4 +- .../V3Tests/OpenApiExampleTests.cs | 2 +- .../V3Tests/OpenApiInfoTests.cs | 6 +- .../V3Tests/OpenApiMediaTypeTests.cs | 4 +- .../V3Tests/OpenApiOperationTests.cs | 15 +- .../V3Tests/OpenApiParameterTests.cs | 20 +- .../V3Tests/OpenApiSchemaTests.cs | 6 +- .../V3Tests/OpenApiSecuritySchemeTests.cs | 10 +- .../V3Tests/OpenApiXmlTests.cs | 2 +- .../petStoreWithTagAndSecurity.yaml | 2 + .../Models/OpenApiOperationTests.cs | 4 +- .../References/OpenApiTagReferenceTest.cs | 9 +- .../PublicApi/PublicApi.approved.txt | 28 +-- .../Walkers/WalkerLocationTests.cs | 4 + .../Workspaces/OpenApiReferencableTests.cs | 3 - 50 files changed, 342 insertions(+), 359 deletions(-) diff --git a/src/Microsoft.OpenApi.Readers/OpenApiYamlReader.cs b/src/Microsoft.OpenApi.Readers/OpenApiYamlReader.cs index 217db91b3..488f497c9 100644 --- a/src/Microsoft.OpenApi.Readers/OpenApiYamlReader.cs +++ b/src/Microsoft.OpenApi.Readers/OpenApiYamlReader.cs @@ -86,6 +86,7 @@ public static ReadResult Read(JsonNode jsonNode, OpenApiReaderSettings settings, /// public T ReadFragment(MemoryStream input, OpenApiSpecVersion version, + OpenApiDocument openApiDocument, out OpenApiDiagnostic diagnostic, OpenApiReaderSettings settings = null) where T : IOpenApiElement { @@ -105,13 +106,13 @@ public T ReadFragment(MemoryStream input, return default; } - return ReadFragment(jsonNode, version, out diagnostic, settings); + return ReadFragment(jsonNode, version, openApiDocument, out diagnostic, settings); } /// - public static T ReadFragment(JsonNode input, OpenApiSpecVersion version, out OpenApiDiagnostic diagnostic, OpenApiReaderSettings settings = null) where T : IOpenApiElement + public static T ReadFragment(JsonNode input, OpenApiSpecVersion version, OpenApiDocument openApiDocument, out OpenApiDiagnostic diagnostic, OpenApiReaderSettings settings = null) where T : IOpenApiElement { - return _jsonReader.ReadFragment(input, version, out diagnostic, settings); + return _jsonReader.ReadFragment(input, version, openApiDocument, out diagnostic, settings); } /// diff --git a/src/Microsoft.OpenApi/Interfaces/IOpenApiReader.cs b/src/Microsoft.OpenApi/Interfaces/IOpenApiReader.cs index 9398551dd..82a064478 100644 --- a/src/Microsoft.OpenApi/Interfaces/IOpenApiReader.cs +++ b/src/Microsoft.OpenApi/Interfaces/IOpenApiReader.cs @@ -5,6 +5,7 @@ using System.Text.Json.Nodes; using System.Threading; using System.Threading.Tasks; +using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Reader; namespace Microsoft.OpenApi.Interfaces @@ -36,9 +37,10 @@ public interface IOpenApiReader /// /// Memory stream containing OpenAPI description to parse. /// Version of the OpenAPI specification that the fragment conforms to. + /// The OpenApiDocument object to which the fragment belongs, used to lookup references. /// Returns diagnostic object containing errors detected during parsing. /// The OpenApiReader settings. /// Instance of newly created IOpenApiElement. - T ReadFragment(MemoryStream input, OpenApiSpecVersion version, out OpenApiDiagnostic diagnostic, OpenApiReaderSettings settings = null) where T : IOpenApiElement; + T ReadFragment(MemoryStream input, OpenApiSpecVersion version, OpenApiDocument openApiDocument, out OpenApiDiagnostic diagnostic, OpenApiReaderSettings settings = null) where T : IOpenApiElement; } } diff --git a/src/Microsoft.OpenApi/Interfaces/IOpenApiVersionService.cs b/src/Microsoft.OpenApi/Interfaces/IOpenApiVersionService.cs index 97d1d3c9b..073962a35 100644 --- a/src/Microsoft.OpenApi/Interfaces/IOpenApiVersionService.cs +++ b/src/Microsoft.OpenApi/Interfaces/IOpenApiVersionService.cs @@ -28,7 +28,7 @@ internal interface IOpenApiVersionService /// document fragment node /// A host document instance. /// Instance of OpenAPIElement - T LoadElement(ParseNode node, OpenApiDocument doc = null) where T : IOpenApiElement; + T LoadElement(ParseNode node, OpenApiDocument doc) where T : IOpenApiElement; /// /// Converts a generic RootNode instance into a strongly typed OpenApiDocument diff --git a/src/Microsoft.OpenApi/Models/OpenApiDocument.cs b/src/Microsoft.OpenApi/Models/OpenApiDocument.cs index 268007141..42409db8e 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiDocument.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiDocument.cs @@ -503,21 +503,6 @@ private static string ConvertByteArrayToString(byte[] hash) throw new ArgumentException(Properties.SRResource.LocalReferenceRequiresType); } - // Special case for Tag - if (reference.Type == ReferenceType.Tag) - { - foreach (var tag in this.Tags ?? Enumerable.Empty()) - { - if (tag.Name == reference.Id) - { - tag.Reference = reference; - return tag; - } - } - - return null; - } - string uriLocation; if (reference.Id.Contains("/")) // this means its a URL reference { diff --git a/src/Microsoft.OpenApi/Models/OpenApiOperation.cs b/src/Microsoft.OpenApi/Models/OpenApiOperation.cs index 6e54cd894..4906d1f76 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiOperation.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiOperation.cs @@ -26,7 +26,7 @@ public class OpenApiOperation : IOpenApiSerializable, IOpenApiExtensible, IOpenA /// A list of tags for API documentation control. /// Tags can be used for logical grouping of operations by resources or any other qualifier. /// - public IList? Tags { get; set; } = new List(); + public IList? Tags { get; set; } = []; /// /// A short summary of what the operation does. @@ -121,7 +121,7 @@ public OpenApiOperation() { } /// public OpenApiOperation(OpenApiOperation? operation) { - Tags = operation?.Tags != null ? new List(operation.Tags) : null; + Tags = operation?.Tags != null ? new List(operation.Tags) : null; Summary = operation?.Summary ?? Summary; Description = operation?.Description ?? Description; ExternalDocs = operation?.ExternalDocs != null ? new(operation?.ExternalDocs) : null; diff --git a/src/Microsoft.OpenApi/Models/OpenApiTag.cs b/src/Microsoft.OpenApi/Models/OpenApiTag.cs index 8e9321fe8..58fa99694 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiTag.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiTag.cs @@ -11,7 +11,7 @@ namespace Microsoft.OpenApi.Models /// /// Tag Object. /// - public class OpenApiTag : IOpenApiReferenceable, IOpenApiExtensible + public class OpenApiTag : IOpenApiSerializable, IOpenApiExtensible { /// /// The name of the tag. @@ -38,11 +38,6 @@ public class OpenApiTag : IOpenApiReferenceable, IOpenApiExtensible /// public bool UnresolvedReference { get; set; } - /// - /// Reference. - /// - public OpenApiReference Reference { get; set; } - /// /// Parameterless constructor /// @@ -58,7 +53,6 @@ public OpenApiTag(OpenApiTag tag) ExternalDocs = tag?.ExternalDocs != null ? new(tag.ExternalDocs) : null; Extensions = tag?.Extensions != null ? new Dictionary(tag.Extensions) : null; UnresolvedReference = tag?.UnresolvedReference ?? UnresolvedReference; - Reference = tag?.Reference != null ? new(tag.Reference) : null; } /// diff --git a/src/Microsoft.OpenApi/Models/References/OpenApiTagReference.cs b/src/Microsoft.OpenApi/Models/References/OpenApiTagReference.cs index 664f784f3..50017c4f9 100644 --- a/src/Microsoft.OpenApi/Models/References/OpenApiTagReference.cs +++ b/src/Microsoft.OpenApi/Models/References/OpenApiTagReference.cs @@ -1,7 +1,9 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. +using System; using System.Collections.Generic; +using System.Linq; using Microsoft.OpenApi.Interfaces; using Microsoft.OpenApi.Writers; @@ -10,21 +12,24 @@ namespace Microsoft.OpenApi.Models.References /// /// Tag Object Reference /// - public class OpenApiTagReference : OpenApiTag + public class OpenApiTagReference : OpenApiTag, IOpenApiReferenceable { internal OpenApiTag _target; - private readonly OpenApiReference _reference; - private string _description; - private OpenApiTag Target + /// + /// Reference. + /// + public OpenApiReference Reference { get; set; } + + /// + /// Resolved target of the reference. + /// + public OpenApiTag Target { get { - _target ??= Reference.HostDocument?.ResolveReferenceTo(_reference); - _target ??= new OpenApiTag() { Name = _reference.Id }; - OpenApiTag resolved = new OpenApiTag(_target); - if (!string.IsNullOrEmpty(_description)) resolved.Description = _description; - return resolved; + _target ??= Reference.HostDocument?.Tags.FirstOrDefault(t => StringComparer.Ordinal.Equals(t.Name, Reference.Id)); + return _target; } } @@ -37,50 +42,43 @@ public OpenApiTagReference(string referenceId, OpenApiDocument hostDocument) { Utils.CheckArgumentNullOrEmpty(referenceId); - _reference = new OpenApiReference() + Reference = new OpenApiReference() { Id = referenceId, HostDocument = hostDocument, Type = ReferenceType.Tag }; - - Reference = _reference; } - internal OpenApiTagReference(OpenApiTag target, string referenceId) + /// + /// Copy Constructor + /// + /// The source to copy information from. + public OpenApiTagReference(OpenApiTagReference source):base() { - _target = target; - - _reference = new OpenApiReference() - { - Id = referenceId, - Type = ReferenceType.Tag, - }; + Reference = source?.Reference != null ? new(source.Reference) : null; + _target = source._target; } + private const string ReferenceErrorMessage = "Setting the value from the reference is not supported, use the target property instead."; /// - public override string Description - { - get => string.IsNullOrEmpty(_description) ? Target?.Description : _description; - set => _description = value; - } + public override string Description { get => Target.Description; set => throw new InvalidOperationException(ReferenceErrorMessage); } /// - public override OpenApiExternalDocs ExternalDocs { get => Target?.ExternalDocs; set => Target.ExternalDocs = value; } + public override OpenApiExternalDocs ExternalDocs { get => Target.ExternalDocs; set => throw new InvalidOperationException(ReferenceErrorMessage); } /// - public override IDictionary Extensions { get => Target?.Extensions; set => Target.Extensions = value; } + public override IDictionary Extensions { get => Target.Extensions; set => throw new InvalidOperationException(ReferenceErrorMessage); } /// - public override string Name { get => Target?.Name; set => Target.Name = value; } + public override string Name { get => Target.Name; set => throw new InvalidOperationException(ReferenceErrorMessage); } /// public override void SerializeAsV3(IOpenApiWriter writer) { - if (!writer.GetSettings().ShouldInlineReference(_reference)) + if (!writer.GetSettings().ShouldInlineReference(Reference)) { - _reference.SerializeAsV3(writer); - return; + Reference.SerializeAsV3(writer); } else { @@ -91,10 +89,9 @@ public override void SerializeAsV3(IOpenApiWriter writer) /// public override void SerializeAsV31(IOpenApiWriter writer) { - if (!writer.GetSettings().ShouldInlineReference(_reference)) + if (!writer.GetSettings().ShouldInlineReference(Reference)) { - _reference.SerializeAsV31(writer); - return; + Reference.SerializeAsV31(writer); } else { @@ -105,10 +102,9 @@ public override void SerializeAsV31(IOpenApiWriter writer) /// public override void SerializeAsV2(IOpenApiWriter writer) { - if (!writer.GetSettings().ShouldInlineReference(_reference)) + if (!writer.GetSettings().ShouldInlineReference(Reference)) { - _reference.SerializeAsV2(writer); - return; + Reference.SerializeAsV2(writer); } else { diff --git a/src/Microsoft.OpenApi/Reader/OpenApiJsonReader.cs b/src/Microsoft.OpenApi/Reader/OpenApiJsonReader.cs index 71cf3f8c3..4aad45278 100644 --- a/src/Microsoft.OpenApi/Reader/OpenApiJsonReader.cs +++ b/src/Microsoft.OpenApi/Reader/OpenApiJsonReader.cs @@ -148,10 +148,12 @@ public async Task ReadAsync(Stream input, /// public T ReadFragment(MemoryStream input, OpenApiSpecVersion version, + OpenApiDocument openApiDocument, out OpenApiDiagnostic diagnostic, OpenApiReaderSettings settings = null) where T : IOpenApiElement { - if (input is null) throw new ArgumentNullException(nameof(input)); + Utils.CheckArgumentNull(input); + Utils.CheckArgumentNull(openApiDocument); JsonNode jsonNode; @@ -167,12 +169,13 @@ public T ReadFragment(MemoryStream input, return default; } - return ReadFragment(jsonNode, version, out diagnostic); + return ReadFragment(jsonNode, version, openApiDocument, out diagnostic); } /// public T ReadFragment(JsonNode input, OpenApiSpecVersion version, + OpenApiDocument openApiDocument, out OpenApiDiagnostic diagnostic, OpenApiReaderSettings settings = null) where T : IOpenApiElement { @@ -187,7 +190,7 @@ public T ReadFragment(JsonNode input, try { // Parse the OpenAPI element - element = context.ParseFragment(input, version); + element = context.ParseFragment(input, version, openApiDocument); } catch (OpenApiException ex) { diff --git a/src/Microsoft.OpenApi/Reader/OpenApiModelFactory.cs b/src/Microsoft.OpenApi/Reader/OpenApiModelFactory.cs index 31b939548..0d7960f92 100644 --- a/src/Microsoft.OpenApi/Reader/OpenApiModelFactory.cs +++ b/src/Microsoft.OpenApi/Reader/OpenApiModelFactory.cs @@ -61,14 +61,15 @@ public static ReadResult Load(MemoryStream stream, /// Stream containing OpenAPI description to parse. /// Version of the OpenAPI specification that the fragment conforms to. /// + /// The OpenApiDocument object to which the fragment belongs, used to lookup references. /// Returns diagnostic object containing errors detected during parsing. /// The OpenApiReader settings. /// Instance of newly created IOpenApiElement. /// The OpenAPI element. - public static T Load(MemoryStream input, OpenApiSpecVersion version, string format, out OpenApiDiagnostic diagnostic, OpenApiReaderSettings settings = null) where T : IOpenApiElement + public static T Load(MemoryStream input, OpenApiSpecVersion version, string format, OpenApiDocument openApiDocument, out OpenApiDiagnostic diagnostic, OpenApiReaderSettings settings = null) where T : IOpenApiElement { format ??= InspectStreamFormat(input); - return OpenApiReaderRegistry.GetReader(format).ReadFragment(input, version, out diagnostic, settings); + return OpenApiReaderRegistry.GetReader(format).ReadFragment(input, version, openApiDocument, out diagnostic, settings); } /// @@ -91,13 +92,14 @@ public static async Task LoadAsync(string url, OpenApiReaderSettings /// The path to the OpenAPI file /// Version of the OpenAPI specification that the fragment conforms to. /// The OpenApiReader settings. + /// The OpenApiDocument object to which the fragment belongs, used to lookup references. /// /// Instance of newly created IOpenApiElement. /// The OpenAPI element. - public static async Task LoadAsync(string url, OpenApiSpecVersion version, OpenApiReaderSettings settings = null, CancellationToken token = default) where T : IOpenApiElement + public static async Task LoadAsync(string url, OpenApiSpecVersion version, OpenApiDocument openApiDocument, OpenApiReaderSettings settings = null, CancellationToken token = default) where T : IOpenApiElement { var (stream, format) = await RetrieveStreamAndFormatAsync(url, token).ConfigureAwait(false); - return await LoadAsync(stream, version, format, settings, token); + return await LoadAsync(stream, version, openApiDocument, format, settings, token); } /// @@ -141,27 +143,30 @@ public static async Task LoadAsync(Stream input, string format = nul /// /// /// + /// The document used to lookup tag or schema references. /// /// /// /// public static async Task LoadAsync(Stream input, OpenApiSpecVersion version, + OpenApiDocument openApiDocument, string format = null, OpenApiReaderSettings settings = null, CancellationToken token = default) where T : IOpenApiElement { + Utils.CheckArgumentNull(openApiDocument); if (input is null) throw new ArgumentNullException(nameof(input)); if (input is MemoryStream memoryStream) { - return Load(memoryStream, version, format, out var _, settings); + return Load(memoryStream, version, format, openApiDocument, out var _, settings); } else { memoryStream = new MemoryStream(); await input.CopyToAsync(memoryStream, 81920, token).ConfigureAwait(false); memoryStream.Position = 0; - return Load(memoryStream, version, format, out var _, settings); + return Load(memoryStream, version, format, openApiDocument, out var _, settings); } } @@ -191,12 +196,14 @@ public static ReadResult Parse(string input, /// /// The input string. /// + /// The OpenApiDocument object to which the fragment belongs, used to lookup references. /// The diagnostic entity containing information from the reading process. /// The Open API format /// The OpenApi reader settings. /// An OpenAPI document instance. public static T Parse(string input, OpenApiSpecVersion version, + OpenApiDocument openApiDocument, out OpenApiDiagnostic diagnostic, string format = null, OpenApiReaderSettings settings = null) where T : IOpenApiElement @@ -205,7 +212,7 @@ public static T Parse(string input, format ??= InspectInputFormat(input); settings ??= new OpenApiReaderSettings(); using var stream = new MemoryStream(Encoding.UTF8.GetBytes(input)); - return Load(stream, version, format, out diagnostic, settings); + return Load(stream, version, format, openApiDocument, out diagnostic, settings); } private static readonly OpenApiReaderSettings DefaultReaderSettings = new(); diff --git a/src/Microsoft.OpenApi/Reader/ParseNodes/ListNode.cs b/src/Microsoft.OpenApi/Reader/ParseNodes/ListNode.cs index 6654344cd..f07d93745 100644 --- a/src/Microsoft.OpenApi/Reader/ParseNodes/ListNode.cs +++ b/src/Microsoft.OpenApi/Reader/ParseNodes/ListNode.cs @@ -6,7 +6,6 @@ using System.Collections.Generic; using System.Linq; using System.Text.Json.Nodes; -using Microsoft.OpenApi.Any; using Microsoft.OpenApi.Exceptions; using Microsoft.OpenApi.Models; @@ -44,14 +43,14 @@ public override List CreateListOfAny() return list; } - public override List CreateSimpleList(Func map) + public override List CreateSimpleList(Func map, OpenApiDocument openApiDocument) { if (_nodeList == null) { throw new OpenApiReaderException($"Expected list while parsing {typeof(T).Name}", _nodeList); } - return _nodeList.Select(n => map(new(Context, n), null)).ToList(); + return _nodeList.Select(n => map(new(Context, n), openApiDocument)).ToList(); } public IEnumerator GetEnumerator() diff --git a/src/Microsoft.OpenApi/Reader/ParseNodes/ParseNode.cs b/src/Microsoft.OpenApi/Reader/ParseNodes/ParseNode.cs index 44d626f35..4b2523901 100644 --- a/src/Microsoft.OpenApi/Reader/ParseNodes/ParseNode.cs +++ b/src/Microsoft.OpenApi/Reader/ParseNodes/ParseNode.cs @@ -4,7 +4,6 @@ using System; using System.Collections.Generic; using System.Text.Json.Nodes; -using Microsoft.OpenApi.Any; using Microsoft.OpenApi.Exceptions; using Microsoft.OpenApi.Models; @@ -57,7 +56,7 @@ public virtual Dictionary CreateMap(Func CreateSimpleList(Func map) + public virtual List CreateSimpleList(Func map, OpenApiDocument openApiDocument) { throw new OpenApiReaderException("Cannot create simple list from this type of node.", Context); } diff --git a/src/Microsoft.OpenApi/Reader/ParsingContext.cs b/src/Microsoft.OpenApi/Reader/ParsingContext.cs index 7a8b07244..184760c17 100644 --- a/src/Microsoft.OpenApi/Reader/ParsingContext.cs +++ b/src/Microsoft.OpenApi/Reader/ParsingContext.cs @@ -105,8 +105,9 @@ public OpenApiDocument Parse(JsonNode jsonNode) /// /// /// OpenAPI version of the fragment + /// The OpenApiDocument object to which the fragment belongs, used to lookup references. /// An OpenApiDocument populated based on the passed yamlDocument - public T ParseFragment(JsonNode jsonNode, OpenApiSpecVersion version) where T : IOpenApiElement + public T ParseFragment(JsonNode jsonNode, OpenApiSpecVersion version, OpenApiDocument openApiDocument) where T : IOpenApiElement { var node = ParseNode.Create(this, jsonNode); @@ -116,16 +117,16 @@ public T ParseFragment(JsonNode jsonNode, OpenApiSpecVersion version) where T { case OpenApiSpecVersion.OpenApi2_0: VersionService = new OpenApiV2VersionService(Diagnostic); - element = this.VersionService.LoadElement(node); + element = this.VersionService.LoadElement(node, openApiDocument); break; case OpenApiSpecVersion.OpenApi3_0: this.VersionService = new OpenApiV3VersionService(Diagnostic); - element = this.VersionService.LoadElement(node); + element = this.VersionService.LoadElement(node, openApiDocument); break; case OpenApiSpecVersion.OpenApi3_1: this.VersionService = new OpenApiV31VersionService(Diagnostic); - element = this.VersionService.LoadElement(node); + element = this.VersionService.LoadElement(node, openApiDocument); break; } diff --git a/src/Microsoft.OpenApi/Reader/V2/OpenApiDocumentDeserializer.cs b/src/Microsoft.OpenApi/Reader/V2/OpenApiDocumentDeserializer.cs index f33d98465..95d26845d 100644 --- a/src/Microsoft.OpenApi/Reader/V2/OpenApiDocumentDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V2/OpenApiDocumentDeserializer.cs @@ -28,16 +28,16 @@ internal static partial class OpenApiV2Deserializer {"host", (_, n, _) => n.Context.SetTempStorage("host", n.GetScalarValue())}, {"basePath", (_, n, _) => n.Context.SetTempStorage("basePath", n.GetScalarValue())}, { - "schemes", (_, n, _) => n.Context.SetTempStorage( + "schemes", (_, n, doc) => n.Context.SetTempStorage( "schemes", n.CreateSimpleList( - (s, p) => s.GetScalarValue())) + (s, p) => s.GetScalarValue(), doc)) }, { "consumes", - (_, n, _) => + (_, n, doc) => { - var consumes = n.CreateSimpleList((s, p) => s.GetScalarValue()); + var consumes = n.CreateSimpleList((s, p) => s.GetScalarValue(), doc); if (consumes.Count > 0) { n.Context.SetTempStorage(TempStorageKeys.GlobalConsumes, consumes); @@ -45,8 +45,8 @@ internal static partial class OpenApiV2Deserializer } }, { - "produces", (_, n, _) => { - var produces = n.CreateSimpleList((s, p) => s.GetScalarValue()); + "produces", (_, n, doc) => { + var produces = n.CreateSimpleList((s, p) => s.GetScalarValue(), doc); if (produces.Count > 0) { n.Context.SetTempStorage(TempStorageKeys.GlobalProduces, produces); diff --git a/src/Microsoft.OpenApi/Reader/V2/OpenApiOperationDeserializer.cs b/src/Microsoft.OpenApi/Reader/V2/OpenApiOperationDeserializer.cs index d65f7a16b..d1f894407 100644 --- a/src/Microsoft.OpenApi/Reader/V2/OpenApiOperationDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V2/OpenApiOperationDeserializer.cs @@ -24,8 +24,7 @@ internal static partial class OpenApiV2Deserializer "tags", (o, n, doc) => o.Tags = n.CreateSimpleList( (valueNode, doc) => LoadTagByReference( - valueNode.Context, - valueNode.GetScalarValue(), doc)) + valueNode.GetScalarValue(), doc), doc) }, { "summary", @@ -48,16 +47,16 @@ internal static partial class OpenApiV2Deserializer (o, n, t) => o.Parameters = n.CreateList(LoadParameter, t) }, { - "consumes", (_, n, _) => { - var consumes = n.CreateSimpleList((s, p) => s.GetScalarValue()); + "consumes", (_, n, doc) => { + var consumes = n.CreateSimpleList((s, p) => s.GetScalarValue(), doc); if (consumes.Count > 0) { n.Context.SetTempStorage(TempStorageKeys.OperationConsumes,consumes); } } }, { - "produces", (_, n, _) => { - var produces = n.CreateSimpleList((s, p) => s.GetScalarValue()); + "produces", (_, n, doc) => { + var produces = n.CreateSimpleList((s, p) => s.GetScalarValue(), doc); if (produces.Count > 0) { n.Context.SetTempStorage(TempStorageKeys.OperationProduces, produces); } @@ -205,8 +204,7 @@ internal static OpenApiRequestBody CreateRequestBody( return requestBody; } - private static OpenApiTag LoadTagByReference( - ParsingContext context, + private static OpenApiTagReference LoadTagByReference( string tagName, OpenApiDocument hostDocument = null) { return new OpenApiTagReference(tagName, hostDocument); diff --git a/src/Microsoft.OpenApi/Reader/V2/OpenApiSchemaDeserializer.cs b/src/Microsoft.OpenApi/Reader/V2/OpenApiSchemaDeserializer.cs index 53208fd40..7c5ab3d2d 100644 --- a/src/Microsoft.OpenApi/Reader/V2/OpenApiSchemaDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V2/OpenApiSchemaDeserializer.cs @@ -76,7 +76,7 @@ internal static partial class OpenApiV2Deserializer }, { "required", - (o, n, _) => o.Required = new HashSet(n.CreateSimpleList((n2, p) => n2.GetScalarValue())) + (o, n, doc) => o.Required = new HashSet(n.CreateSimpleList((n2, p) => n2.GetScalarValue(), doc)) }, { "enum", diff --git a/src/Microsoft.OpenApi/Reader/V2/OpenApiSecurityRequirementDeserializer.cs b/src/Microsoft.OpenApi/Reader/V2/OpenApiSecurityRequirementDeserializer.cs index 5e430206c..4dfdbba16 100644 --- a/src/Microsoft.OpenApi/Reader/V2/OpenApiSecurityRequirementDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V2/OpenApiSecurityRequirementDeserializer.cs @@ -12,7 +12,7 @@ namespace Microsoft.OpenApi.Reader.V2 /// internal static partial class OpenApiV2Deserializer { - public static OpenApiSecurityRequirement LoadSecurityRequirement(ParseNode node, OpenApiDocument hostDocument = null) + public static OpenApiSecurityRequirement LoadSecurityRequirement(ParseNode node, OpenApiDocument hostDocument) { var mapNode = node.CheckMapNode("security"); @@ -24,7 +24,7 @@ public static OpenApiSecurityRequirement LoadSecurityRequirement(ParseNode node, mapNode.Context, property.Name); - var scopes = property.Value.CreateSimpleList((n2, p) => n2.GetScalarValue()); + var scopes = property.Value.CreateSimpleList((n2, p) => n2.GetScalarValue(), hostDocument); if (scheme != null) { diff --git a/src/Microsoft.OpenApi/Reader/V3/OpenApiDocumentDeserializer.cs b/src/Microsoft.OpenApi/Reader/V3/OpenApiDocumentDeserializer.cs index 3fcdb9af7..f349250b6 100644 --- a/src/Microsoft.OpenApi/Reader/V3/OpenApiDocumentDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V3/OpenApiDocumentDeserializer.cs @@ -26,16 +26,7 @@ internal static partial class OpenApiV3Deserializer {"servers", (o, n, _) => o.Servers = n.CreateList(LoadServer, o)}, {"paths", (o, n, _) => o.Paths = LoadPaths(n, o)}, {"components", (o, n, _) => o.Components = LoadComponents(n, o)}, - {"tags", (o, n, _) => {o.Tags = n.CreateList(LoadTag, o); - foreach (var tag in o.Tags) - { - tag.Reference = new() - { - Id = tag.Name, - Type = ReferenceType.Tag - }; - } - } }, + {"tags", (o, n, _) => o.Tags = n.CreateList(LoadTag, o) }, {"externalDocs", (o, n, _) => o.ExternalDocs = LoadExternalDocs(n, o)}, {"security", (o, n, _) => o.SecurityRequirements = n.CreateList(LoadSecurityRequirement, o)} }; diff --git a/src/Microsoft.OpenApi/Reader/V3/OpenApiOperationDeserializer.cs b/src/Microsoft.OpenApi/Reader/V3/OpenApiOperationDeserializer.cs index 33aadc141..72ce13d58 100644 --- a/src/Microsoft.OpenApi/Reader/V3/OpenApiOperationDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V3/OpenApiOperationDeserializer.cs @@ -21,8 +21,7 @@ internal static partial class OpenApiV3Deserializer "tags", (o, n, doc) => o.Tags = n.CreateSimpleList( (valueNode, doc) => LoadTagByReference( - valueNode.Context, - valueNode.GetScalarValue(), doc)) + valueNode.GetScalarValue(), doc), doc) }, { "summary", @@ -87,8 +86,7 @@ internal static OpenApiOperation LoadOperation(ParseNode node, OpenApiDocument h return operation; } - private static OpenApiTag LoadTagByReference( - ParsingContext context, + private static OpenApiTagReference LoadTagByReference( string tagName, OpenApiDocument hostDocument) { return new OpenApiTagReference(tagName, hostDocument); diff --git a/src/Microsoft.OpenApi/Reader/V3/OpenApiSchemaDeserializer.cs b/src/Microsoft.OpenApi/Reader/V3/OpenApiSchemaDeserializer.cs index f3c02a6c8..9faafca12 100644 --- a/src/Microsoft.OpenApi/Reader/V3/OpenApiSchemaDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V3/OpenApiSchemaDeserializer.cs @@ -76,7 +76,7 @@ internal static partial class OpenApiV3Deserializer }, { "required", - (o, n, _) => o.Required = new HashSet(n.CreateSimpleList((n2, p) => n2.GetScalarValue())) + (o, n, doc) => o.Required = new HashSet(n.CreateSimpleList((n2, p) => n2.GetScalarValue(), doc)) }, { "enum", diff --git a/src/Microsoft.OpenApi/Reader/V3/OpenApiSecurityRequirementDeserializer.cs b/src/Microsoft.OpenApi/Reader/V3/OpenApiSecurityRequirementDeserializer.cs index e1d4ddc2f..73610713c 100644 --- a/src/Microsoft.OpenApi/Reader/V3/OpenApiSecurityRequirementDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V3/OpenApiSecurityRequirementDeserializer.cs @@ -13,7 +13,7 @@ namespace Microsoft.OpenApi.Reader.V3 /// internal static partial class OpenApiV3Deserializer { - public static OpenApiSecurityRequirement LoadSecurityRequirement(ParseNode node, OpenApiDocument hostDocument = null) + public static OpenApiSecurityRequirement LoadSecurityRequirement(ParseNode node, OpenApiDocument hostDocument) { var mapNode = node.CheckMapNode("security"); @@ -23,7 +23,7 @@ public static OpenApiSecurityRequirement LoadSecurityRequirement(ParseNode node, { var scheme = LoadSecuritySchemeByReference(mapNode.Context, property.Name); - var scopes = property.Value.CreateSimpleList((value, p) => value.GetScalarValue()); + var scopes = property.Value.CreateSimpleList((value, p) => value.GetScalarValue(), hostDocument); if (scheme != null) { diff --git a/src/Microsoft.OpenApi/Reader/V3/OpenApiServerVariableDeserializer.cs b/src/Microsoft.OpenApi/Reader/V3/OpenApiServerVariableDeserializer.cs index 1bfa4fe04..dc04b9e4a 100644 --- a/src/Microsoft.OpenApi/Reader/V3/OpenApiServerVariableDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V3/OpenApiServerVariableDeserializer.cs @@ -18,7 +18,7 @@ internal static partial class OpenApiV3Deserializer { { "enum", - (o, n, _) => o.Enum = n.CreateSimpleList((s, p) => s.GetScalarValue()) + (o, n, doc) => o.Enum = n.CreateSimpleList((s, p) => s.GetScalarValue(), doc) }, { "default", diff --git a/src/Microsoft.OpenApi/Reader/V31/OpenApiDocumentDeserializer.cs b/src/Microsoft.OpenApi/Reader/V31/OpenApiDocumentDeserializer.cs index 8137fb460..2ce56486e 100644 --- a/src/Microsoft.OpenApi/Reader/V31/OpenApiDocumentDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V31/OpenApiDocumentDeserializer.cs @@ -25,16 +25,7 @@ internal static partial class OpenApiV31Deserializer {"paths", (o, n, _) => o.Paths = LoadPaths(n, o)}, {"webhooks", (o, n, _) => o.Webhooks = n.CreateMap(LoadPathItem, o)}, {"components", (o, n, _) => o.Components = LoadComponents(n, o)}, - {"tags", (o, n, _) => {o.Tags = n.CreateList(LoadTag, o); - foreach (var tag in o.Tags) - { - tag.Reference = new OpenApiReference() - { - Id = tag.Name, - Type = ReferenceType.Tag - }; - } - } }, + {"tags", (o, n, _) => o.Tags = n.CreateList(LoadTag, o) }, {"externalDocs", (o, n, _) => o.ExternalDocs = LoadExternalDocs(n, o)}, {"security", (o, n, _) => o.SecurityRequirements = n.CreateList(LoadSecurityRequirement, o)} }; diff --git a/src/Microsoft.OpenApi/Reader/V31/OpenApiOperationDeserializer.cs b/src/Microsoft.OpenApi/Reader/V31/OpenApiOperationDeserializer.cs index fb143e4c6..b2946fab5 100644 --- a/src/Microsoft.OpenApi/Reader/V31/OpenApiOperationDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V31/OpenApiOperationDeserializer.cs @@ -17,7 +17,7 @@ internal static partial class OpenApiV31Deserializer { "tags", (o, n, doc) => o.Tags = n.CreateSimpleList( (valueNode, doc) => - LoadTagByReference(valueNode.GetScalarValue(), doc)) + LoadTagByReference(valueNode.GetScalarValue(), doc), doc) }, { "summary", (o, n, _) => @@ -104,7 +104,7 @@ internal static OpenApiOperation LoadOperation(ParseNode node, OpenApiDocument h return operation; } - private static OpenApiTag LoadTagByReference(string tagName, OpenApiDocument hostDocument = null) + private static OpenApiTagReference LoadTagByReference(string tagName, OpenApiDocument hostDocument = null) { var tagObject = new OpenApiTagReference(tagName, hostDocument); return tagObject; diff --git a/src/Microsoft.OpenApi/Reader/V31/OpenApiSchemaDeserializer.cs b/src/Microsoft.OpenApi/Reader/V31/OpenApiSchemaDeserializer.cs index ad943dce4..83be6f773 100644 --- a/src/Microsoft.OpenApi/Reader/V31/OpenApiSchemaDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V31/OpenApiSchemaDeserializer.cs @@ -106,7 +106,7 @@ internal static partial class OpenApiV31Deserializer }, { "required", - (o, n, _) => o.Required = new HashSet(n.CreateSimpleList((n2, p) => n2.GetScalarValue())) + (o, n, doc) => o.Required = new HashSet(n.CreateSimpleList((n2, p) => n2.GetScalarValue(), doc)) }, { "enum", @@ -114,7 +114,7 @@ internal static partial class OpenApiV31Deserializer }, { "type", - (o, n, _) => + (o, n, doc) => { if (n is ValueNode) { @@ -122,7 +122,7 @@ internal static partial class OpenApiV31Deserializer } else { - var list = n.CreateSimpleList((n2, p) => n2.GetScalarValue()); + var list = n.CreateSimpleList((n2, p) => n2.GetScalarValue(), doc); JsonSchemaType combinedType = 0; foreach(var type in list) { diff --git a/src/Microsoft.OpenApi/Reader/V31/OpenApiSecurityRequirementDeserializer.cs b/src/Microsoft.OpenApi/Reader/V31/OpenApiSecurityRequirementDeserializer.cs index 94753dafa..b204c83d4 100644 --- a/src/Microsoft.OpenApi/Reader/V31/OpenApiSecurityRequirementDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V31/OpenApiSecurityRequirementDeserializer.cs @@ -13,7 +13,7 @@ namespace Microsoft.OpenApi.Reader.V31 /// internal static partial class OpenApiV31Deserializer { - public static OpenApiSecurityRequirement LoadSecurityRequirement(ParseNode node, OpenApiDocument hostDocument = null) + public static OpenApiSecurityRequirement LoadSecurityRequirement(ParseNode node, OpenApiDocument hostDocument) { var mapNode = node.CheckMapNode("security"); @@ -23,7 +23,7 @@ public static OpenApiSecurityRequirement LoadSecurityRequirement(ParseNode node, { var scheme = LoadSecuritySchemeByReference(property.Name, hostDocument); - var scopes = property.Value.CreateSimpleList((value, p) => value.GetScalarValue()); + var scopes = property.Value.CreateSimpleList((value, p) => value.GetScalarValue(), hostDocument); if (scheme != null) { diff --git a/src/Microsoft.OpenApi/Reader/V31/OpenApiServerVariableDeserializer.cs b/src/Microsoft.OpenApi/Reader/V31/OpenApiServerVariableDeserializer.cs index e5344554d..74dc1c504 100644 --- a/src/Microsoft.OpenApi/Reader/V31/OpenApiServerVariableDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V31/OpenApiServerVariableDeserializer.cs @@ -17,9 +17,9 @@ internal static partial class OpenApiV31Deserializer new() { { - "enum", (o, n, _) => + "enum", (o, n, doc) => { - o.Enum = n.CreateSimpleList((s, p) => s.GetScalarValue()); + o.Enum = n.CreateSimpleList((s, p) => s.GetScalarValue(), doc); } }, { diff --git a/src/Microsoft.OpenApi/Services/OpenApiVisitorBase.cs b/src/Microsoft.OpenApi/Services/OpenApiVisitorBase.cs index c731d4d8b..a889628b3 100644 --- a/src/Microsoft.OpenApi/Services/OpenApiVisitorBase.cs +++ b/src/Microsoft.OpenApi/Services/OpenApiVisitorBase.cs @@ -7,6 +7,7 @@ using System.Text.Json.Nodes; using Microsoft.OpenApi.Interfaces; using Microsoft.OpenApi.Models; +using Microsoft.OpenApi.Models.References; namespace Microsoft.OpenApi.Services { @@ -262,6 +263,13 @@ public virtual void Visit(OpenApiTag tag) { } + /// + /// Visits + /// + public virtual void Visit(OpenApiTagReference tag) + { + } + /// /// Visits /// @@ -304,6 +312,13 @@ public virtual void Visit(IList openApiTags) { } + /// + /// Visits list of + /// + public virtual void Visit(IList openApiTags) + { + } + /// /// Visits list of /// diff --git a/src/Microsoft.OpenApi/Services/OpenApiWalker.cs b/src/Microsoft.OpenApi/Services/OpenApiWalker.cs index 2dd882ce7..9321b3b17 100644 --- a/src/Microsoft.OpenApi/Services/OpenApiWalker.cs +++ b/src/Microsoft.OpenApi/Services/OpenApiWalker.cs @@ -80,6 +80,28 @@ internal void Walk(IList tags) } } + /// + /// Visits list of and child objects + /// + internal void Walk(IList tags) + { + if (tags == null) + { + return; + } + + _visitor.Visit(tags); + + // Visit tags + if (tags != null) + { + for (var i = 0; i < tags.Count; i++) + { + Walk(i.ToString(), () => Walk(tags[i])); + } + } + } + /// /// Visits and child objects /// @@ -424,15 +446,22 @@ internal void Walk(OpenApiTag tag) return; } - if (tag is OpenApiTagReference) + _visitor.Visit(tag); + _visitor.Visit(tag.ExternalDocs); + _visitor.Visit(tag as IOpenApiExtensible); + } + + /// + /// Visits and child objects + /// + internal void Walk(OpenApiTagReference tag) + { + if (tag == null) { - Walk(tag as IOpenApiReferenceable); return; } - _visitor.Visit(tag); - _visitor.Visit(tag.ExternalDocs); - _visitor.Visit(tag as IOpenApiExtensible); + Walk(tag as IOpenApiReferenceable); } /// diff --git a/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs index 91dd59919..edbf143fe 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs @@ -4,6 +4,7 @@ using Microsoft.OpenApi.Any; using Microsoft.OpenApi.Interfaces; using Microsoft.OpenApi.Models; +using Microsoft.OpenApi.Models.References; namespace Microsoft.OpenApi.Tests.UtilityFiles { @@ -19,6 +20,17 @@ public static class OpenApiDocumentMock public static OpenApiDocument CreateOpenApiDocument() { var applicationJsonMediaType = "application/json"; + const string getTeamsActivityByPeriodPath = "/reports/microsoft.graph.getTeamsUserActivityCounts(period={period})"; + const string getTeamsActivityByDatePath = "/reports/microsoft.graph.getTeamsUserActivityUserDetail(date={date})"; + const string usersPath = "/users"; + const string usersByIdPath = "/users/{user-id}"; + const string messagesByIdPath = "/users/{user-id}/messages/{message-id}"; + const string administrativeUnitRestorePath = "/administrativeUnits/{administrativeUnit-id}/microsoft.graph.restore"; + const string logoPath = "/applications/{application-id}/logo"; + const string securityProfilesPath = "/security/hostSecurityProfiles"; + const string communicationsCallsKeepAlivePath = "/communications/calls/{call-id}/microsoft.graph.keepAlive"; + const string eventsDeltaPath = "/groups/{group-id}/events/{event-id}/calendar/events/microsoft.graph.delta"; + const string refPath = "/applications/{application-id}/createdOnBehalfOf/$ref"; var document = new OpenApiDocument { @@ -57,22 +69,13 @@ public static OpenApiDocument CreateOpenApiDocument() } } }, - ["/reports/microsoft.graph.getTeamsUserActivityCounts(period={period})"] = new() + [getTeamsActivityByPeriodPath] = new() { Operations = new Dictionary { { OperationType.Get, new OpenApiOperation { - Tags = new List - { - { - new() - { - Name = "reports.Functions" - } - } - }, OperationId = "reports.getTeamsUserActivityCounts", Summary = "Invoke function getTeamsUserActivityUserCounts", Parameters = new List @@ -131,22 +134,13 @@ public static OpenApiDocument CreateOpenApiDocument() } } }, - ["/reports/microsoft.graph.getTeamsUserActivityUserDetail(date={date})"] = new() + [getTeamsActivityByDatePath] = new() { Operations = new Dictionary { { OperationType.Get, new OpenApiOperation { - Tags = new List - { - { - new() - { - Name = "reports.Functions" - } - } - }, OperationId = "reports.getTeamsUserActivityUserDetail-a3f1", Summary = "Invoke function getTeamsUserActivityUserDetail", Parameters = new List @@ -203,22 +197,13 @@ public static OpenApiDocument CreateOpenApiDocument() } } }, - ["/users"] = new() + [usersPath] = new() { Operations = new Dictionary { { OperationType.Get, new OpenApiOperation { - Tags = new List - { - { - new() - { - Name = "users.user" - } - } - }, OperationId = "users.user.ListUser", Summary = "Get entities from users", Responses = new() @@ -266,22 +251,13 @@ public static OpenApiDocument CreateOpenApiDocument() } } }, - ["/users/{user-id}"] = new() + [usersByIdPath] = new() { Operations = new Dictionary { { OperationType.Get, new OpenApiOperation { - Tags = new List - { - { - new() - { - Name = "users.user" - } - } - }, OperationId = "users.user.GetUser", Summary = "Get entity from users by key", Responses = new() @@ -315,15 +291,6 @@ public static OpenApiDocument CreateOpenApiDocument() { OperationType.Patch, new OpenApiOperation { - Tags = new List - { - { - new() - { - Name = "users.user" - } - } - }, OperationId = "users.user.UpdateUser", Summary = "Update entity in users", Responses = new() @@ -339,22 +306,13 @@ public static OpenApiDocument CreateOpenApiDocument() } } }, - ["/users/{user-id}/messages/{message-id}"] = new() + [messagesByIdPath] = new() { Operations = new Dictionary { { OperationType.Get, new OpenApiOperation { - Tags = new List - { - { - new() - { - Name = "users.message" - } - } - }, OperationId = "users.GetMessages", Summary = "Get messages from users", Description = "The messages in a mailbox or folder. Read-only. Nullable.", @@ -403,22 +361,13 @@ public static OpenApiDocument CreateOpenApiDocument() } } }, - ["/administrativeUnits/{administrativeUnit-id}/microsoft.graph.restore"] = new() + [administrativeUnitRestorePath] = new() { Operations = new Dictionary { { OperationType.Post, new OpenApiOperation { - Tags = new List - { - { - new() - { - Name = "administrativeUnits.Actions" - } - } - }, OperationId = "administrativeUnits.restore", Summary = "Invoke action restore", Parameters = new List @@ -470,22 +419,13 @@ public static OpenApiDocument CreateOpenApiDocument() } } }, - ["/applications/{application-id}/logo"] = new() + [logoPath] = new() { Operations = new Dictionary { { OperationType.Put, new OpenApiOperation { - Tags = new List - { - { - new() - { - Name = "applications.application" - } - } - }, OperationId = "applications.application.UpdateLogo", Summary = "Update media content for application in applications", Responses = new() @@ -501,22 +441,13 @@ public static OpenApiDocument CreateOpenApiDocument() } } }, - ["/security/hostSecurityProfiles"] = new() + [securityProfilesPath] = new() { Operations = new Dictionary { { OperationType.Get, new OpenApiOperation { - Tags = new List - { - { - new() - { - Name = "security.hostSecurityProfile" - } - } - }, OperationId = "security.ListHostSecurityProfiles", Summary = "Get hostSecurityProfiles from security", Responses = new() @@ -564,22 +495,13 @@ public static OpenApiDocument CreateOpenApiDocument() } } }, - ["/communications/calls/{call-id}/microsoft.graph.keepAlive"] = new() + [communicationsCallsKeepAlivePath] = new() { Operations = new Dictionary { { OperationType.Post, new OpenApiOperation { - Tags = new List - { - { - new() - { - Name = "communications.Actions" - } - } - }, OperationId = "communications.calls.call.keepAlive", Summary = "Invoke action keepAlive", Parameters = new List @@ -621,20 +543,13 @@ public static OpenApiDocument CreateOpenApiDocument() } } }, - ["/groups/{group-id}/events/{event-id}/calendar/events/microsoft.graph.delta"] = new() + [eventsDeltaPath] = new() { Operations = new Dictionary { { OperationType.Get, new OpenApiOperation { - Tags = new List - { - new() - { - Name = "groups.Functions" - } - }, OperationId = "groups.group.events.event.calendar.events.delta", Summary = "Invoke function delta", Parameters = new List @@ -711,20 +626,13 @@ public static OpenApiDocument CreateOpenApiDocument() } } }, - ["/applications/{application-id}/createdOnBehalfOf/$ref"] = new() + [refPath] = new() { Operations = new Dictionary { { OperationType.Get, new OpenApiOperation { - Tags = new List - { - new() - { - Name = "applications.directoryObject" - } - }, OperationId = "applications.GetRefCreatedOnBehalfOf", Summary = "Get ref of createdOnBehalfOf from applications" } @@ -755,8 +663,68 @@ public static OpenApiDocument CreateOpenApiDocument() } } } + }, + Tags = new List + { + new() + { + Name = "reports.Functions", + Description = "The reports.Functions operations" + }, + new() + { + Name = "users.user", + Description = "The users.user operations" + }, + new() + { + Name = "users.message", + Description = "The users.message operations" + }, + new() + { + Name = "administrativeUnits.Actions", + Description = "The administrativeUnits.Actions operations" + }, + new() + { + Name = "applications.application", + Description = "The applications.application operations" + }, + new() + { + Name = "security.hostSecurityProfile", + Description = "The security.hostSecurityProfile operations" + }, + new() + { + Name = "communications.Actions", + Description = "The communications.Actions operations" + }, + new() + { + Name = "groups.Functions", + Description = "The groups.Functions operations" + }, + new() + { + Name = "applications.directoryObject", + Description = "The applications.directoryObject operations" + } } }; + document.Paths[getTeamsActivityByPeriodPath].Operations[OperationType.Get].Tags!.Add(new OpenApiTagReference("reports.Functions", document)); + document.Paths[getTeamsActivityByDatePath].Operations[OperationType.Get].Tags!.Add(new OpenApiTagReference("reports.Functions", document)); + document.Paths[usersPath].Operations[OperationType.Get].Tags!.Add(new OpenApiTagReference("users.user", document)); + document.Paths[usersByIdPath].Operations[OperationType.Get].Tags!.Add(new OpenApiTagReference("users.user", document)); + document.Paths[usersByIdPath].Operations[OperationType.Patch].Tags!.Add(new OpenApiTagReference("users.user", document)); + document.Paths[messagesByIdPath].Operations[OperationType.Get].Tags!.Add(new OpenApiTagReference("users.message", document)); + document.Paths[administrativeUnitRestorePath].Operations[OperationType.Post].Tags!.Add(new OpenApiTagReference("administrativeUnits.Actions", document)); + document.Paths[logoPath].Operations[OperationType.Put].Tags!.Add(new OpenApiTagReference("applications.application", document)); + document.Paths[securityProfilesPath].Operations[OperationType.Get].Tags!.Add(new OpenApiTagReference("security.hostSecurityProfile", document)); + document.Paths[communicationsCallsKeepAlivePath].Operations[OperationType.Post].Tags!.Add(new OpenApiTagReference("communications.Actions", document)); + document.Paths[eventsDeltaPath].Operations[OperationType.Get].Tags!.Add(new OpenApiTagReference("groups.Functions", document)); + document.Paths[refPath].Operations[OperationType.Get].Tags!.Add(new OpenApiTagReference("applications.directoryObject", document)); return document; } } diff --git a/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiContactTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiContactTests.cs index 413d3ee7b..8bbc7ffdb 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiContactTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiContactTests.cs @@ -23,7 +23,7 @@ public void ParseStringContactFragmentShouldSucceed() """; // Act - var contact = OpenApiModelFactory.Parse(input, OpenApiSpecVersion.OpenApi2_0, out var diagnostic); + var contact = OpenApiModelFactory.Parse(input, OpenApiSpecVersion.OpenApi2_0, new(), out var diagnostic); // Assert diagnostic.Should().BeEquivalentTo(new OpenApiDiagnostic()); diff --git a/test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiSchemaTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiSchemaTests.cs index 312353ba8..e01c8645d 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiSchemaTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiSchemaTests.cs @@ -86,7 +86,7 @@ public async Task ParseBasicV31SchemaShouldSucceed() // Act var schema = await OpenApiModelFactory.LoadAsync( - System.IO.Path.Combine(SampleFolderPath, "jsonSchema.json"), OpenApiSpecVersion.OpenApi3_1); + Path.Combine(SampleFolderPath, "jsonSchema.json"), OpenApiSpecVersion.OpenApi3_1, new()); // Assert schema.Should().BeEquivalentTo(expectedObject); @@ -112,7 +112,7 @@ public void ParseSchemaWithTypeArrayWorks() }; // Act - var actual = OpenApiModelFactory.Parse(schema, OpenApiSpecVersion.OpenApi3_1, out _); + var actual = OpenApiModelFactory.Parse(schema, OpenApiSpecVersion.OpenApi3_1, new(), out _); // Assert actual.Should().BeEquivalentTo(expected); @@ -161,7 +161,7 @@ public async Task ParseV31SchemaShouldSucceed() var path = Path.Combine(SampleFolderPath, "schema.yaml"); // Act - var schema = await OpenApiModelFactory.LoadAsync(path, OpenApiSpecVersion.OpenApi3_1); + var schema = await OpenApiModelFactory.LoadAsync(path, OpenApiSpecVersion.OpenApi3_1, new()); var expectedSchema = new OpenApiSchema { Type = JsonSchemaType.Object, @@ -184,7 +184,7 @@ public async Task ParseAdvancedV31SchemaShouldSucceed() { // Arrange and Act var path = Path.Combine(SampleFolderPath, "advancedSchema.yaml"); - var schema = await OpenApiModelFactory.LoadAsync(path, OpenApiSpecVersion.OpenApi3_1); + var schema = await OpenApiModelFactory.LoadAsync(path, OpenApiSpecVersion.OpenApi3_1, new()); var expectedSchema = new OpenApiSchema { @@ -275,7 +275,7 @@ public void ParseSchemaWithExamplesShouldSucceed() - ubuntu "; // Act - var schema = OpenApiModelFactory.Parse(input, OpenApiSpecVersion.OpenApi3_1, out _, "yaml"); + var schema = OpenApiModelFactory.Parse(input, OpenApiSpecVersion.OpenApi3_1, new(), out _, "yaml"); // Assert schema.Examples.Should().HaveCount(2); @@ -314,7 +314,7 @@ public async Task SerializeV31SchemaWithMultipleTypesAsV3Works() var path = Path.Combine(SampleFolderPath, "schemaWithTypeArray.yaml"); // Act - var schema = await OpenApiModelFactory.LoadAsync(path, OpenApiSpecVersion.OpenApi3_1); + var schema = await OpenApiModelFactory.LoadAsync(path, OpenApiSpecVersion.OpenApi3_1, new()); var writer = new StringWriter(); schema.SerializeAsV3(new OpenApiYamlWriter(writer)); @@ -333,7 +333,7 @@ public async Task SerializeV31SchemaWithMultipleTypesAsV2Works() var path = Path.Combine(SampleFolderPath, "schemaWithTypeArray.yaml"); // Act - var schema = await OpenApiModelFactory.LoadAsync(path, OpenApiSpecVersion.OpenApi3_1); + var schema = await OpenApiModelFactory.LoadAsync(path, OpenApiSpecVersion.OpenApi3_1, new()); var writer = new StringWriter(); schema.SerializeAsV2(new OpenApiYamlWriter(writer)); @@ -353,7 +353,7 @@ public async Task SerializeV3SchemaWithNullableAsV31Works() var path = Path.Combine(SampleFolderPath, "schemaWithNullable.yaml"); // Act - var schema = await OpenApiModelFactory.LoadAsync(path, OpenApiSpecVersion.OpenApi3_0); + var schema = await OpenApiModelFactory.LoadAsync(path, OpenApiSpecVersion.OpenApi3_0, new()); var writer = new StringWriter(); schema.SerializeAsV31(new OpenApiYamlWriter(writer)); @@ -374,7 +374,7 @@ public async Task SerializeV2SchemaWithNullableExtensionAsV31Works() var path = Path.Combine(SampleFolderPath, "schemaWithNullableExtension.yaml"); // Act - var schema = await OpenApiModelFactory.LoadAsync(path, OpenApiSpecVersion.OpenApi2_0); + var schema = await OpenApiModelFactory.LoadAsync(path, OpenApiSpecVersion.OpenApi2_0, new()); var writer = new StringWriter(); schema.SerializeAsV31(new OpenApiYamlWriter(writer)); @@ -393,7 +393,7 @@ public void SerializeSchemaWithTypeArrayAndNullableDoesntEmitType() var expected = @"{ }"; - var schema = OpenApiModelFactory.Parse(input, OpenApiSpecVersion.OpenApi3_1, out _, "yaml"); + var schema = OpenApiModelFactory.Parse(input, OpenApiSpecVersion.OpenApi3_1, new(), out _, "yaml"); var writer = new StringWriter(); schema.SerializeAsV2(new OpenApiYamlWriter(writer)); @@ -411,7 +411,7 @@ public async Task LoadSchemaWithNullableExtensionAsV31Works(string filePath) var path = Path.Combine(SampleFolderPath, filePath); // Act - var schema = await OpenApiModelFactory.LoadAsync(path, OpenApiSpecVersion.OpenApi3_1); + var schema = await OpenApiModelFactory.LoadAsync(path, OpenApiSpecVersion.OpenApi3_1, new()); // Assert schema.Type.Should().Be(JsonSchemaType.String | JsonSchemaType.Null); @@ -451,7 +451,7 @@ public async Task SerializeSchemaWithJsonSchemaKeywordsWorks() var path = Path.Combine(SampleFolderPath, "schemaWithJsonSchemaKeywords.yaml"); // Act - var schema = await OpenApiModelFactory.LoadAsync(path, OpenApiSpecVersion.OpenApi3_1); + var schema = await OpenApiModelFactory.LoadAsync(path, OpenApiSpecVersion.OpenApi3_1, new()); // serialization var writer = new StringWriter(); @@ -495,7 +495,7 @@ public async Task ParseSchemaWithConstWorks() var path = Path.Combine(SampleFolderPath, "schemaWithConst.json"); // Act - var schema = await OpenApiModelFactory.LoadAsync(path, OpenApiSpecVersion.OpenApi3_1); + var schema = await OpenApiModelFactory.LoadAsync(path, OpenApiSpecVersion.OpenApi3_1, new()); schema.Properties["status"].Const.Should().Be("active"); schema.Properties["user"].Properties["role"].Const.Should().Be("admin"); @@ -517,7 +517,7 @@ public void ParseSchemaWithUnrecognizedKeywordsWorks() ""x-test"": ""test"" } "; - var schema = OpenApiModelFactory.Parse(input, OpenApiSpecVersion.OpenApi3_1, out _, "json"); + var schema = OpenApiModelFactory.Parse(input, OpenApiSpecVersion.OpenApi3_1, new(), out _, "json"); schema.UnrecognizedKeywords.Should().HaveCount(2); } diff --git a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiCallbackTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiCallbackTests.cs index 1e50ca6e0..d7ed66049 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiCallbackTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiCallbackTests.cs @@ -25,7 +25,7 @@ public OpenApiCallbackTests() public async Task ParseBasicCallbackShouldSucceed() { // Act - var callback = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "basicCallback.yaml"), OpenApiSpecVersion.OpenApi3_0); + var callback = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "basicCallback.yaml"), OpenApiSpecVersion.OpenApi3_0, new()); // Assert callback.Should().BeEquivalentTo( diff --git a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiContactTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiContactTests.cs index d6d0422c4..d230d33d2 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiContactTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiContactTests.cs @@ -23,7 +23,7 @@ public void ParseStringContactFragmentShouldSucceed() """; // Act - var contact = OpenApiModelFactory.Parse(input, OpenApiSpecVersion.OpenApi3_0, out var diagnostic, OpenApiConstants.Json); + var contact = OpenApiModelFactory.Parse(input, OpenApiSpecVersion.OpenApi3_0, new(), out var diagnostic, OpenApiConstants.Json); // Assert diagnostic.Should().BeEquivalentTo(new OpenApiDiagnostic()); diff --git a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDiscriminatorTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDiscriminatorTests.cs index ba62c7f33..78196ee87 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDiscriminatorTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDiscriminatorTests.cs @@ -31,7 +31,7 @@ public async Task ParseBasicDiscriminatorShouldSucceed() memoryStream.Position = 0; // Act - var discriminator = OpenApiModelFactory.Load(memoryStream, OpenApiSpecVersion.OpenApi3_0, OpenApiConstants.Yaml, out var diagnostic); + var discriminator = OpenApiModelFactory.Load(memoryStream, OpenApiSpecVersion.OpenApi3_0, OpenApiConstants.Yaml, new(), out var diagnostic); // Assert discriminator.Should().BeEquivalentTo( diff --git a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDocumentTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDocumentTests.cs index c281206e3..dba7b73d0 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDocumentTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDocumentTests.cs @@ -46,7 +46,7 @@ private static T Clone(T element) where T : IOpenApiSerializable using var streamReader = new StreamReader(stream); var result = streamReader.ReadToEnd(); - return OpenApiModelFactory.Parse(result, OpenApiSpecVersion.OpenApi3_0, out var _); + return OpenApiModelFactory.Parse(result, OpenApiSpecVersion.OpenApi3_0, new(), out var _); } private static OpenApiSecurityScheme CloneSecurityScheme(OpenApiSecurityScheme element) @@ -63,7 +63,7 @@ private static OpenApiSecurityScheme CloneSecurityScheme(OpenApiSecurityScheme e using var streamReader = new StreamReader(stream); var result = streamReader.ReadToEnd(); - return OpenApiModelFactory.Parse(result, OpenApiSpecVersion.OpenApi3_0, out var _); + return OpenApiModelFactory.Parse(result, OpenApiSpecVersion.OpenApi3_0, new(), out var _); } [Fact] @@ -707,27 +707,9 @@ public async Task ParseModifiedPetStoreDocumentWithTagAndSecurityShouldSucceed() HostDocument = actual.Document }; - var tag1 = new OpenApiTag - { - Name = "tagName1", - Description = "tagDescription1", - Reference = new OpenApiReference - { - Id = "tagName1", - Type = ReferenceType.Tag - } - }; + var tagReference1 = new OpenApiTagReference("tagName1", null); - - var tag2 = new OpenApiTag - { - Name = "tagName2", - Reference = new OpenApiReference - { - Id = "tagName2", - Type = ReferenceType.Tag - } - }; + var tagReference2 = new OpenApiTagReference("tagName2", null); var securityScheme1 = CloneSecurityScheme(components.SecuritySchemes["securitySchemeName1"]); @@ -781,10 +763,10 @@ public async Task ParseModifiedPetStoreDocumentWithTagAndSecurityShouldSucceed() { [OperationType.Get] = new OpenApiOperation { - Tags = new List + Tags = new List { - tag1, - tag2 + tagReference1, + tagReference2 }, Description = "Returns all pets from the system that the user has access to", OperationId = "findPets", @@ -869,10 +851,10 @@ public async Task ParseModifiedPetStoreDocumentWithTagAndSecurityShouldSucceed() }, [OperationType.Post] = new OpenApiOperation { - Tags = new List + Tags = new List { - tag1, - tag2 + tagReference1, + tagReference2 }, Description = "Creates a new pet in the store. Duplicates are allowed", OperationId = "addPet", @@ -1063,6 +1045,11 @@ public async Task ParseModifiedPetStoreDocumentWithTagAndSecurityShouldSucceed() { Name = "tagName1", Description = "tagDescription1" + }, + new OpenApiTag + { + Name = "tagName2", + Description = "tagDescription2" } }, SecurityRequirements = new List @@ -1080,14 +1067,20 @@ public async Task ParseModifiedPetStoreDocumentWithTagAndSecurityShouldSucceed() } }; + tagReference1.Reference.HostDocument = expected; + tagReference2.Reference.HostDocument = expected; + actual.Document.Should().BeEquivalentTo(expected, options => options .Excluding(x => x.HashCode) - .Excluding(m => m.Tags[0].Reference) .Excluding(x => x.Paths["/pets"].Operations[OperationType.Get].Tags[0].Reference) .Excluding(x => x.Paths["/pets"].Operations[OperationType.Get].Tags[0].Reference.HostDocument) + .Excluding(x => x.Paths["/pets"].Operations[OperationType.Get].Tags[0].Target) .Excluding(x => x.Paths["/pets"].Operations[OperationType.Post].Tags[0].Reference.HostDocument) + .Excluding(x => x.Paths["/pets"].Operations[OperationType.Post].Tags[0].Target) .Excluding(x => x.Paths["/pets"].Operations[OperationType.Get].Tags[1].Reference.HostDocument) + .Excluding(x => x.Paths["/pets"].Operations[OperationType.Get].Tags[1].Target) .Excluding(x => x.Paths["/pets"].Operations[OperationType.Post].Tags[1].Reference.HostDocument) + .Excluding(x => x.Paths["/pets"].Operations[OperationType.Post].Tags[1].Target) .Excluding(x => x.Workspace) .Excluding(y => y.BaseUri)); diff --git a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiEncodingTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiEncodingTests.cs index 91e428c49..8a9f2fe4f 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiEncodingTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiEncodingTests.cs @@ -24,7 +24,7 @@ public OpenApiEncodingTests() public async Task ParseBasicEncodingShouldSucceed() { // Act - var encoding = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "basicEncoding.yaml"), OpenApiSpecVersion.OpenApi3_0); + var encoding = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "basicEncoding.yaml"), OpenApiSpecVersion.OpenApi3_0, new()); // Assert encoding.Should().BeEquivalentTo( @@ -40,7 +40,7 @@ public async Task ParseAdvancedEncodingShouldSucceed() using var stream = Resources.GetStream(Path.Combine(SampleFolderPath, "advancedEncoding.yaml")); // Act - var encoding = await OpenApiModelFactory.LoadAsync(stream, OpenApiSpecVersion.OpenApi3_0); + var encoding = await OpenApiModelFactory.LoadAsync(stream, OpenApiSpecVersion.OpenApi3_0, new()); // Assert encoding.Should().BeEquivalentTo( diff --git a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiExampleTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiExampleTests.cs index 633a0f688..5bb83a9fc 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiExampleTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiExampleTests.cs @@ -25,7 +25,7 @@ public OpenApiExampleTests() [Fact] public async Task ParseAdvancedExampleShouldSucceed() { - var example = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "advancedExample.yaml"), OpenApiSpecVersion.OpenApi3_0); + var example = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "advancedExample.yaml"), OpenApiSpecVersion.OpenApi3_0, new()); var expected = new OpenApiExample { Value = new JsonObject diff --git a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiInfoTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiInfoTests.cs index fdd5ae8ee..db59dad32 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiInfoTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiInfoTests.cs @@ -27,7 +27,7 @@ public OpenApiInfoTests() public async Task ParseAdvancedInfoShouldSucceed() { // Act - var openApiInfo = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "advancedInfo.yaml"), OpenApiSpecVersion.OpenApi3_0); + var openApiInfo = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "advancedInfo.yaml"), OpenApiSpecVersion.OpenApi3_0, new()); // Assert openApiInfo.Should().BeEquivalentTo( @@ -84,7 +84,7 @@ public async Task ParseAdvancedInfoShouldSucceed() public async Task ParseBasicInfoShouldSucceed() { // Act - var openApiInfo = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "basicInfo.yaml"), OpenApiSpecVersion.OpenApi3_0); + var openApiInfo = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "basicInfo.yaml"), OpenApiSpecVersion.OpenApi3_0, new()); // Assert openApiInfo.Should().BeEquivalentTo( @@ -114,7 +114,7 @@ public async Task ParseMinimalInfoShouldSucceed() using var stream = Resources.GetStream(Path.Combine(SampleFolderPath, "minimalInfo.yaml")); // Act - var openApiInfo = await OpenApiModelFactory.LoadAsync(stream, OpenApiSpecVersion.OpenApi3_0); + var openApiInfo = await OpenApiModelFactory.LoadAsync(stream, OpenApiSpecVersion.OpenApi3_0, new()); // Assert openApiInfo.Should().BeEquivalentTo( diff --git a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiMediaTypeTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiMediaTypeTests.cs index 6197cca71..36710f6ca 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiMediaTypeTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiMediaTypeTests.cs @@ -28,7 +28,7 @@ public OpenApiMediaTypeTests() public async Task ParseMediaTypeWithExampleShouldSucceed() { // Act - var mediaType = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "mediaTypeWithExample.yaml"), OpenApiSpecVersion.OpenApi3_0); + var mediaType = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "mediaTypeWithExample.yaml"), OpenApiSpecVersion.OpenApi3_0, new()); // Assert mediaType.Should().BeEquivalentTo( @@ -49,7 +49,7 @@ public async Task ParseMediaTypeWithExampleShouldSucceed() public async Task ParseMediaTypeWithExamplesShouldSucceed() { // Act - var mediaType = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "mediaTypeWithExamples.yaml"), OpenApiSpecVersion.OpenApi3_0); + var mediaType = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "mediaTypeWithExamples.yaml"), OpenApiSpecVersion.OpenApi3_0, new()); // Assert mediaType.Should().BeEquivalentTo( diff --git a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiOperationTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiOperationTests.cs index 7dcb5e28a..22167e0ee 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiOperationTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiOperationTests.cs @@ -34,13 +34,17 @@ public async Task OperationWithSecurityRequirementShouldReferenceSecurityScheme( [Fact] public async Task ParseOperationWithParameterWithNoLocationShouldSucceed() { + var openApiDocument = new OpenApiDocument + { + Tags = { new OpenApiTag() { Name = "user" } } + }; // Act - var operation = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "operationWithParameterWithNoLocation.json"), OpenApiSpecVersion.OpenApi3_0); + var operation = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "operationWithParameterWithNoLocation.json"), OpenApiSpecVersion.OpenApi3_0, openApiDocument); var expectedOp = new OpenApiOperation { Tags = { - new OpenApiTagReference("user", null) + new OpenApiTagReference("user", openApiDocument) }, Summary = "Logs user into the system", Description = "", @@ -73,8 +77,11 @@ public async Task ParseOperationWithParameterWithNoLocationShouldSucceed() // Assert expectedOp.Should().BeEquivalentTo(operation, - options => options.Excluding(x => x.Tags[0].Reference.HostDocument) - .Excluding(x => x.Tags[0].Extensions)); + options => + options.Excluding(x => x.Tags[0].Reference.HostDocument) + .Excluding(x => x.Tags[0].Reference) + .Excluding(x => x.Tags[0].Target) + .Excluding(x => x.Tags[0].Extensions)); } } } diff --git a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiParameterTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiParameterTests.cs index a40cb4144..a2c127728 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiParameterTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiParameterTests.cs @@ -32,7 +32,7 @@ public async Task ParsePathParameterShouldSucceed() using var stream = Resources.GetStream(Path.Combine(SampleFolderPath, "pathParameter.yaml")); // Act - var parameter = await OpenApiModelFactory.LoadAsync(stream, OpenApiSpecVersion.OpenApi3_0); + var parameter = await OpenApiModelFactory.LoadAsync(stream, OpenApiSpecVersion.OpenApi3_0, new()); // Assert parameter.Should().BeEquivalentTo( @@ -53,7 +53,7 @@ public async Task ParsePathParameterShouldSucceed() public async Task ParseQueryParameterShouldSucceed() { // Act - var parameter = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "queryParameter.yaml"), OpenApiSpecVersion.OpenApi3_0); + var parameter = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "queryParameter.yaml"), OpenApiSpecVersion.OpenApi3_0, new()); // Assert parameter.Should().BeEquivalentTo( @@ -80,7 +80,7 @@ public async Task ParseQueryParameterShouldSucceed() public async Task ParseQueryParameterWithObjectTypeShouldSucceed() { // Act - var parameter = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "queryParameterWithObjectType.yaml"), OpenApiSpecVersion.OpenApi3_0); + var parameter = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "queryParameterWithObjectType.yaml"), OpenApiSpecVersion.OpenApi3_0, new()); // Assert parameter.Should().BeEquivalentTo( @@ -107,7 +107,7 @@ public async Task ParseQueryParameterWithObjectTypeAndContentShouldSucceed() using var stream = Resources.GetStream(Path.Combine(SampleFolderPath, "queryParameterWithObjectTypeAndContent.yaml")); // Act - var parameter = await OpenApiModelFactory.LoadAsync(stream, OpenApiSpecVersion.OpenApi3_0); + var parameter = await OpenApiModelFactory.LoadAsync(stream, OpenApiSpecVersion.OpenApi3_0, new()); // Assert parameter.Should().BeEquivalentTo( @@ -148,7 +148,7 @@ public async Task ParseQueryParameterWithObjectTypeAndContentShouldSucceed() public async Task ParseHeaderParameterShouldSucceed() { // Act - var parameter = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "headerParameter.yaml"), OpenApiSpecVersion.OpenApi3_0); + var parameter = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "headerParameter.yaml"), OpenApiSpecVersion.OpenApi3_0, new()); // Assert parameter.Should().BeEquivalentTo( @@ -176,7 +176,7 @@ public async Task ParseHeaderParameterShouldSucceed() public async Task ParseParameterWithNullLocationShouldSucceed() { // Act - var parameter = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "parameterWithNullLocation.yaml"), OpenApiSpecVersion.OpenApi3_0); + var parameter = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "parameterWithNullLocation.yaml"), OpenApiSpecVersion.OpenApi3_0, new()); // Assert parameter.Should().BeEquivalentTo( @@ -200,7 +200,7 @@ public async Task ParseParameterWithNoLocationShouldSucceed() using var stream = Resources.GetStream(Path.Combine(SampleFolderPath, "parameterWithNoLocation.yaml")); // Act - var parameter = await OpenApiModelFactory.LoadAsync(stream, OpenApiSpecVersion.OpenApi3_0); + var parameter = await OpenApiModelFactory.LoadAsync(stream, OpenApiSpecVersion.OpenApi3_0, new()); // Assert parameter.Should().BeEquivalentTo( @@ -224,7 +224,7 @@ public async Task ParseParameterWithUnknownLocationShouldSucceed() using var stream = Resources.GetStream(Path.Combine(SampleFolderPath, "parameterWithUnknownLocation.yaml")); // Act - var parameter = await OpenApiModelFactory.LoadAsync(stream, OpenApiSpecVersion.OpenApi3_0); + var parameter = await OpenApiModelFactory.LoadAsync(stream, OpenApiSpecVersion.OpenApi3_0, new()); // Assert parameter.Should().BeEquivalentTo( @@ -245,7 +245,7 @@ public async Task ParseParameterWithUnknownLocationShouldSucceed() public async Task ParseParameterWithExampleShouldSucceed() { // Act - var parameter = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "parameterWithExample.yaml"), OpenApiSpecVersion.OpenApi3_0); + var parameter = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "parameterWithExample.yaml"), OpenApiSpecVersion.OpenApi3_0, new()); // Assert parameter.Should().BeEquivalentTo( @@ -268,7 +268,7 @@ public async Task ParseParameterWithExampleShouldSucceed() public async Task ParseParameterWithExamplesShouldSucceed() { // Act - var parameter = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "parameterWithExamples.yaml"), OpenApiSpecVersion.OpenApi3_0); + var parameter = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "parameterWithExamples.yaml"), OpenApiSpecVersion.OpenApi3_0, new()); // Assert parameter.Should().BeEquivalentTo( diff --git a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiSchemaTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiSchemaTests.cs index 8e52ad6aa..5a1f2b70b 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiSchemaTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiSchemaTests.cs @@ -68,7 +68,7 @@ public void ParseExampleStringFragmentShouldSucceed() }"; // Act - var openApiAny = OpenApiModelFactory.Parse(input, OpenApiSpecVersion.OpenApi3_0, out var diagnostic); + var openApiAny = OpenApiModelFactory.Parse(input, OpenApiSpecVersion.OpenApi3_0, new(), out var diagnostic); // Assert diagnostic.Should().BeEquivalentTo(new OpenApiDiagnostic()); @@ -91,7 +91,7 @@ public void ParseEnumFragmentShouldSucceed() ]"; // Act - var openApiAny = OpenApiModelFactory.Parse(input, OpenApiSpecVersion.OpenApi3_0, out var diagnostic); + var openApiAny = OpenApiModelFactory.Parse(input, OpenApiSpecVersion.OpenApi3_0, new(), out var diagnostic); // Assert diagnostic.Should().BeEquivalentTo(new OpenApiDiagnostic()); @@ -116,7 +116,7 @@ public void ParsePathFragmentShouldSucceed() "; // Act - var openApiAny = OpenApiModelFactory.Parse(input, OpenApiSpecVersion.OpenApi3_0, out var diagnostic, "yaml"); + var openApiAny = OpenApiModelFactory.Parse(input, OpenApiSpecVersion.OpenApi3_0, new(), out var diagnostic, "yaml"); // Assert diagnostic.Should().BeEquivalentTo(new OpenApiDiagnostic()); diff --git a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiSecuritySchemeTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiSecuritySchemeTests.cs index 3f99bb2c5..5ff92fb0a 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiSecuritySchemeTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiSecuritySchemeTests.cs @@ -24,7 +24,7 @@ public OpenApiSecuritySchemeTests() public async Task ParseHttpSecuritySchemeShouldSucceed() { // Act - var securityScheme = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "httpSecurityScheme.yaml"), OpenApiSpecVersion.OpenApi3_0); + var securityScheme = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "httpSecurityScheme.yaml"), OpenApiSpecVersion.OpenApi3_0, new()); // Assert securityScheme.Should().BeEquivalentTo( @@ -39,7 +39,7 @@ public async Task ParseHttpSecuritySchemeShouldSucceed() public async Task ParseApiKeySecuritySchemeShouldSucceed() { // Act - var securityScheme = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "apiKeySecurityScheme.yaml"), OpenApiSpecVersion.OpenApi3_0); + var securityScheme = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "apiKeySecurityScheme.yaml"), OpenApiSpecVersion.OpenApi3_0, new()); // Assert securityScheme.Should().BeEquivalentTo( @@ -55,7 +55,7 @@ public async Task ParseApiKeySecuritySchemeShouldSucceed() public async Task ParseBearerSecuritySchemeShouldSucceed() { // Act - var securityScheme = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "bearerSecurityScheme.yaml"), OpenApiSpecVersion.OpenApi3_0); + var securityScheme = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "bearerSecurityScheme.yaml"), OpenApiSpecVersion.OpenApi3_0, new()); // Assert securityScheme.Should().BeEquivalentTo( @@ -71,7 +71,7 @@ public async Task ParseBearerSecuritySchemeShouldSucceed() public async Task ParseOAuth2SecuritySchemeShouldSucceed() { // Act - var securityScheme = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "oauth2SecurityScheme.yaml"), OpenApiSpecVersion.OpenApi3_0); + var securityScheme = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "oauth2SecurityScheme.yaml"), OpenApiSpecVersion.OpenApi3_0, new()); // Assert securityScheme.Should().BeEquivalentTo( @@ -97,7 +97,7 @@ public async Task ParseOAuth2SecuritySchemeShouldSucceed() public async Task ParseOpenIdConnectSecuritySchemeShouldSucceed() { // Act - var securityScheme = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "openIdConnectSecurityScheme.yaml"), OpenApiSpecVersion.OpenApi3_0); + var securityScheme = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "openIdConnectSecurityScheme.yaml"), OpenApiSpecVersion.OpenApi3_0, new()); // Assert securityScheme.Should().BeEquivalentTo( diff --git a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiXmlTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiXmlTests.cs index fc23865ba..c9864642d 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiXmlTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiXmlTests.cs @@ -25,7 +25,7 @@ public OpenApiXmlTests() public async Task ParseBasicXmlShouldSucceed() { // Act - var xml = await OpenApiModelFactory.LoadAsync(Resources.GetStream(Path.Combine(SampleFolderPath, "basicXml.yaml")), OpenApiSpecVersion.OpenApi3_0); + var xml = await OpenApiModelFactory.LoadAsync(Resources.GetStream(Path.Combine(SampleFolderPath, "basicXml.yaml")), OpenApiSpecVersion.OpenApi3_0, new()); // Assert xml.Should().BeEquivalentTo( diff --git a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/Samples/OpenApiDocument/petStoreWithTagAndSecurity.yaml b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/Samples/OpenApiDocument/petStoreWithTagAndSecurity.yaml index 528804491..78a85fae6 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/Samples/OpenApiDocument/petStoreWithTagAndSecurity.yaml +++ b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/Samples/OpenApiDocument/petStoreWithTagAndSecurity.yaml @@ -210,6 +210,8 @@ components: tags: - name: tagName1 description: tagDescription1 + - name: tagName2 + description: tagDescription2 security: - securitySchemeName1: [] securitySchemeName2: diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiOperationTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiOperationTests.cs index 5f6b5f4e7..01b79ec02 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiOperationTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiOperationTests.cs @@ -87,9 +87,9 @@ public class OpenApiOperationTests private static readonly OpenApiOperation _advancedOperationWithTagsAndSecurity = new() { - Tags = new List + Tags = new List { - new OpenApiTagReference("tagId1", null) + new OpenApiTagReference("tagId1", new OpenApiDocument{ Tags = new List() { new OpenApiTag{Name = "tagId1"}} }) }, Summary = "summary1", Description = "operationDescription", diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiTagReferenceTest.cs b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiTagReferenceTest.cs index 8ec0e1373..edf28f9f2 100644 --- a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiTagReferenceTest.cs +++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiTagReferenceTest.cs @@ -1,6 +1,7 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. +using System; using System.Globalization; using System.IO; using System.Threading.Tasks; @@ -64,10 +65,7 @@ public OpenApiTagReferenceTest() { OpenApiReaderRegistry.RegisterReader(OpenApiConstants.Yaml, new OpenApiYamlReader()); var result = OpenApiDocument.Parse(OpenApi, "yaml"); - _openApiTagReference = new("user", result.Document) - { - Description = "Users operations" - }; + _openApiTagReference = new("user", result.Document); } [Fact] @@ -75,7 +73,8 @@ public void TagReferenceResolutionWorks() { // Assert Assert.Equal("user", _openApiTagReference.Name); - Assert.Equal("Users operations", _openApiTagReference.Description); + Assert.Equal("Operations about users.", _openApiTagReference.Description); + Assert.Throws(() => _openApiTagReference.Description = "New Description"); } [Theory] diff --git a/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt b/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt index 642dd0b82..2373b65c9 100644 --- a/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt +++ b/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt @@ -221,7 +221,7 @@ namespace Microsoft.OpenApi.Interfaces { Microsoft.OpenApi.Reader.ReadResult Read(System.IO.MemoryStream input, Microsoft.OpenApi.Reader.OpenApiReaderSettings settings); System.Threading.Tasks.Task ReadAsync(System.IO.Stream input, Microsoft.OpenApi.Reader.OpenApiReaderSettings settings, System.Threading.CancellationToken cancellationToken = default); - T ReadFragment(System.IO.MemoryStream input, Microsoft.OpenApi.OpenApiSpecVersion version, out Microsoft.OpenApi.Reader.OpenApiDiagnostic diagnostic, Microsoft.OpenApi.Reader.OpenApiReaderSettings settings = null) + T ReadFragment(System.IO.MemoryStream input, Microsoft.OpenApi.OpenApiSpecVersion version, Microsoft.OpenApi.Models.OpenApiDocument openApiDocument, out Microsoft.OpenApi.Reader.OpenApiDiagnostic diagnostic, Microsoft.OpenApi.Reader.OpenApiReaderSettings settings = null) where T : Microsoft.OpenApi.Interfaces.IOpenApiElement; } public interface IOpenApiReferenceable : Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiSerializable @@ -765,7 +765,7 @@ namespace Microsoft.OpenApi.Models public System.Collections.Generic.IList? Security { get; set; } public System.Collections.Generic.IList? Servers { get; set; } public string? Summary { get; set; } - public System.Collections.Generic.IList? Tags { get; set; } + public System.Collections.Generic.IList? Tags { get; set; } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } @@ -983,11 +983,10 @@ namespace Microsoft.OpenApi.Models public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } } - public class OpenApiTag : Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiExtensible, Microsoft.OpenApi.Interfaces.IOpenApiReferenceable, Microsoft.OpenApi.Interfaces.IOpenApiSerializable + public class OpenApiTag : Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiExtensible, Microsoft.OpenApi.Interfaces.IOpenApiSerializable { public OpenApiTag() { } public OpenApiTag(Microsoft.OpenApi.Models.OpenApiTag tag) { } - public Microsoft.OpenApi.Models.OpenApiReference Reference { get; set; } public bool UnresolvedReference { get; set; } public virtual string Description { get; set; } public virtual System.Collections.Generic.IDictionary Extensions { get; set; } @@ -1284,9 +1283,12 @@ namespace Microsoft.OpenApi.Models.References public override void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public override void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } } - public class OpenApiTagReference : Microsoft.OpenApi.Models.OpenApiTag + public class OpenApiTagReference : Microsoft.OpenApi.Models.OpenApiTag, Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiReferenceable, Microsoft.OpenApi.Interfaces.IOpenApiSerializable { + public OpenApiTagReference(Microsoft.OpenApi.Models.References.OpenApiTagReference source) { } public OpenApiTagReference(string referenceId, Microsoft.OpenApi.Models.OpenApiDocument hostDocument) { } + public Microsoft.OpenApi.Models.OpenApiReference Reference { get; set; } + public Microsoft.OpenApi.Models.OpenApiTag Target { get; } public override string Description { get; set; } public override System.Collections.Generic.IDictionary Extensions { get; set; } public override Microsoft.OpenApi.Models.OpenApiExternalDocs ExternalDocs { get; set; } @@ -1312,24 +1314,24 @@ namespace Microsoft.OpenApi.Reader public Microsoft.OpenApi.Reader.ReadResult Read(System.IO.MemoryStream input, Microsoft.OpenApi.Reader.OpenApiReaderSettings settings) { } public Microsoft.OpenApi.Reader.ReadResult Read(System.Text.Json.Nodes.JsonNode jsonNode, Microsoft.OpenApi.Reader.OpenApiReaderSettings settings, string format = null) { } public System.Threading.Tasks.Task ReadAsync(System.IO.Stream input, Microsoft.OpenApi.Reader.OpenApiReaderSettings settings, System.Threading.CancellationToken cancellationToken = default) { } - public T ReadFragment(System.IO.MemoryStream input, Microsoft.OpenApi.OpenApiSpecVersion version, out Microsoft.OpenApi.Reader.OpenApiDiagnostic diagnostic, Microsoft.OpenApi.Reader.OpenApiReaderSettings settings = null) + public T ReadFragment(System.IO.MemoryStream input, Microsoft.OpenApi.OpenApiSpecVersion version, Microsoft.OpenApi.Models.OpenApiDocument openApiDocument, out Microsoft.OpenApi.Reader.OpenApiDiagnostic diagnostic, Microsoft.OpenApi.Reader.OpenApiReaderSettings settings = null) where T : Microsoft.OpenApi.Interfaces.IOpenApiElement { } - public T ReadFragment(System.Text.Json.Nodes.JsonNode input, Microsoft.OpenApi.OpenApiSpecVersion version, out Microsoft.OpenApi.Reader.OpenApiDiagnostic diagnostic, Microsoft.OpenApi.Reader.OpenApiReaderSettings settings = null) + public T ReadFragment(System.Text.Json.Nodes.JsonNode input, Microsoft.OpenApi.OpenApiSpecVersion version, Microsoft.OpenApi.Models.OpenApiDocument openApiDocument, out Microsoft.OpenApi.Reader.OpenApiDiagnostic diagnostic, Microsoft.OpenApi.Reader.OpenApiReaderSettings settings = null) where T : Microsoft.OpenApi.Interfaces.IOpenApiElement { } } public static class OpenApiModelFactory { public static Microsoft.OpenApi.Reader.ReadResult Load(System.IO.MemoryStream stream, string format = null, Microsoft.OpenApi.Reader.OpenApiReaderSettings settings = null) { } - public static T Load(System.IO.MemoryStream input, Microsoft.OpenApi.OpenApiSpecVersion version, string format, out Microsoft.OpenApi.Reader.OpenApiDiagnostic diagnostic, Microsoft.OpenApi.Reader.OpenApiReaderSettings settings = null) + public static T Load(System.IO.MemoryStream input, Microsoft.OpenApi.OpenApiSpecVersion version, string format, Microsoft.OpenApi.Models.OpenApiDocument openApiDocument, out Microsoft.OpenApi.Reader.OpenApiDiagnostic diagnostic, Microsoft.OpenApi.Reader.OpenApiReaderSettings settings = null) where T : Microsoft.OpenApi.Interfaces.IOpenApiElement { } public static System.Threading.Tasks.Task LoadAsync(string url, Microsoft.OpenApi.Reader.OpenApiReaderSettings settings = null, System.Threading.CancellationToken token = default) { } public static System.Threading.Tasks.Task LoadAsync(System.IO.Stream input, string format = null, Microsoft.OpenApi.Reader.OpenApiReaderSettings settings = null, System.Threading.CancellationToken cancellationToken = default) { } - public static System.Threading.Tasks.Task LoadAsync(string url, Microsoft.OpenApi.OpenApiSpecVersion version, Microsoft.OpenApi.Reader.OpenApiReaderSettings settings = null, System.Threading.CancellationToken token = default) + public static System.Threading.Tasks.Task LoadAsync(string url, Microsoft.OpenApi.OpenApiSpecVersion version, Microsoft.OpenApi.Models.OpenApiDocument openApiDocument, Microsoft.OpenApi.Reader.OpenApiReaderSettings settings = null, System.Threading.CancellationToken token = default) where T : Microsoft.OpenApi.Interfaces.IOpenApiElement { } - public static System.Threading.Tasks.Task LoadAsync(System.IO.Stream input, Microsoft.OpenApi.OpenApiSpecVersion version, string format = null, Microsoft.OpenApi.Reader.OpenApiReaderSettings settings = null, System.Threading.CancellationToken token = default) + public static System.Threading.Tasks.Task LoadAsync(System.IO.Stream input, Microsoft.OpenApi.OpenApiSpecVersion version, Microsoft.OpenApi.Models.OpenApiDocument openApiDocument, string format = null, Microsoft.OpenApi.Reader.OpenApiReaderSettings settings = null, System.Threading.CancellationToken token = default) where T : Microsoft.OpenApi.Interfaces.IOpenApiElement { } public static Microsoft.OpenApi.Reader.ReadResult Parse(string input, string format = null, Microsoft.OpenApi.Reader.OpenApiReaderSettings settings = null) { } - public static T Parse(string input, Microsoft.OpenApi.OpenApiSpecVersion version, out Microsoft.OpenApi.Reader.OpenApiDiagnostic diagnostic, string format = null, Microsoft.OpenApi.Reader.OpenApiReaderSettings settings = null) + public static T Parse(string input, Microsoft.OpenApi.OpenApiSpecVersion version, Microsoft.OpenApi.Models.OpenApiDocument openApiDocument, out Microsoft.OpenApi.Reader.OpenApiDiagnostic diagnostic, string format = null, Microsoft.OpenApi.Reader.OpenApiReaderSettings settings = null) where T : Microsoft.OpenApi.Interfaces.IOpenApiElement { } } public static class OpenApiReaderRegistry @@ -1368,7 +1370,7 @@ namespace Microsoft.OpenApi.Reader public T GetFromTempStorage(string key, object scope = null) { } public string GetLocation() { } public Microsoft.OpenApi.Models.OpenApiDocument Parse(System.Text.Json.Nodes.JsonNode jsonNode) { } - public T ParseFragment(System.Text.Json.Nodes.JsonNode jsonNode, Microsoft.OpenApi.OpenApiSpecVersion version) + public T ParseFragment(System.Text.Json.Nodes.JsonNode jsonNode, Microsoft.OpenApi.OpenApiSpecVersion version, Microsoft.OpenApi.Models.OpenApiDocument openApiDocument) where T : Microsoft.OpenApi.Interfaces.IOpenApiElement { } public void PopLoop(string loopid) { } public bool PushLoop(string loopId, string key) { } @@ -1501,6 +1503,7 @@ namespace Microsoft.OpenApi.Services public virtual void Visit(Microsoft.OpenApi.Models.OpenApiServer server) { } public virtual void Visit(Microsoft.OpenApi.Models.OpenApiServerVariable serverVariable) { } public virtual void Visit(Microsoft.OpenApi.Models.OpenApiTag tag) { } + public virtual void Visit(Microsoft.OpenApi.Models.References.OpenApiTagReference tag) { } public virtual void Visit(System.Collections.Generic.IDictionary operations) { } public virtual void Visit(System.Collections.Generic.IDictionary callbacks) { } public virtual void Visit(System.Collections.Generic.IDictionary encodings) { } @@ -1515,6 +1518,7 @@ namespace Microsoft.OpenApi.Services public virtual void Visit(System.Collections.Generic.IList openApiSecurityRequirements) { } public virtual void Visit(System.Collections.Generic.IList servers) { } public virtual void Visit(System.Collections.Generic.IList openApiTags) { } + public virtual void Visit(System.Collections.Generic.IList openApiTags) { } public virtual void Visit(System.Text.Json.Nodes.JsonNode node) { } } public class OpenApiWalker diff --git a/test/Microsoft.OpenApi.Tests/Walkers/WalkerLocationTests.cs b/test/Microsoft.OpenApi.Tests/Walkers/WalkerLocationTests.cs index bec1f3602..7e12ad766 100644 --- a/test/Microsoft.OpenApi.Tests/Walkers/WalkerLocationTests.cs +++ b/test/Microsoft.OpenApi.Tests/Walkers/WalkerLocationTests.cs @@ -328,5 +328,9 @@ public override void Visit(OpenApiServer server) { Locations.Add(this.PathString); } + public override void Visit(IList openApiTags) + { + Locations.Add(this.PathString); + } } } diff --git a/test/Microsoft.OpenApi.Tests/Workspaces/OpenApiReferencableTests.cs b/test/Microsoft.OpenApi.Tests/Workspaces/OpenApiReferencableTests.cs index e015da4f4..3712b0662 100644 --- a/test/Microsoft.OpenApi.Tests/Workspaces/OpenApiReferencableTests.cs +++ b/test/Microsoft.OpenApi.Tests/Workspaces/OpenApiReferencableTests.cs @@ -47,8 +47,6 @@ public class OpenApiReferencableTests }; private static readonly OpenApiSchema _schemaFragment = new OpenApiSchema(); private static readonly OpenApiSecurityScheme _securitySchemeFragment = new OpenApiSecurityScheme(); - private static readonly OpenApiTag _tagFragment = new OpenApiTag(); - public static IEnumerable ResolveReferenceCanResolveValidJsonPointersTestData => new List { @@ -64,7 +62,6 @@ public class OpenApiReferencableTests new object[] { _responseFragment, "/headers/header1", _responseFragment.Headers["header1"] }, new object[] { _responseFragment, "/links/link1", _responseFragment.Links["link1"] }, new object[] { _securitySchemeFragment, "/", _securitySchemeFragment}, - new object[] { _tagFragment, "/", _tagFragment} }; [Theory] From 9db6e2d3ce9043ff6b702060eda75290aa37b401 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Tue, 31 Dec 2024 15:22:58 -0500 Subject: [PATCH 15/90] fix: potential NRT Signed-off-by: Vincent Biret --- src/Microsoft.OpenApi/Models/References/OpenApiTagReference.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi/Models/References/OpenApiTagReference.cs b/src/Microsoft.OpenApi/Models/References/OpenApiTagReference.cs index 50017c4f9..1fcaf62f3 100644 --- a/src/Microsoft.OpenApi/Models/References/OpenApiTagReference.cs +++ b/src/Microsoft.OpenApi/Models/References/OpenApiTagReference.cs @@ -57,7 +57,7 @@ public OpenApiTagReference(string referenceId, OpenApiDocument hostDocument) public OpenApiTagReference(OpenApiTagReference source):base() { Reference = source?.Reference != null ? new(source.Reference) : null; - _target = source._target; + _target = source?._target; } private const string ReferenceErrorMessage = "Setting the value from the reference is not supported, use the target property instead."; From ff1406c60082727851d22003211faaa4e876d2e8 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Tue, 31 Dec 2024 15:50:41 -0500 Subject: [PATCH 16/90] fix: passes missing host document references to all layers --- .../Reader/ParseNodes/ListNode.cs | 2 +- .../Reader/ParseNodes/MapNode.cs | 2 +- .../Reader/ParseNodes/ParseNode.cs | 4 ++-- .../Reader/ParseNodes/PropertyNode.cs | 2 +- .../Reader/V2/OpenApiContactDeserializer.cs | 2 +- .../Reader/V2/OpenApiDocumentDeserializer.cs | 10 ++++----- .../V2/OpenApiExternalDocsDeserializer.cs | 2 +- .../Reader/V2/OpenApiHeaderDeserializer.cs | 6 ++--- .../Reader/V2/OpenApiInfoDeserializer.cs | 2 +- .../Reader/V2/OpenApiLicenseDeserializer.cs | 2 +- .../Reader/V2/OpenApiOperationDeserializer.cs | 6 ++--- .../Reader/V2/OpenApiParameterDeserializer.cs | 10 ++++----- .../Reader/V2/OpenApiPathItemDeserializer.cs | 6 ++--- .../Reader/V2/OpenApiPathsDeserializer.cs | 2 +- .../Reader/V2/OpenApiResponseDeserializer.cs | 8 +++---- .../Reader/V2/OpenApiSchemaDeserializer.cs | 14 ++++++------ .../V2/OpenApiSecuritySchemeDeserializer.cs | 4 ++-- .../Reader/V2/OpenApiTagDeserializer.cs | 4 ++-- .../Reader/V2/OpenApiV2Deserializer.cs | 2 +- .../Reader/V2/OpenApiXmlDeserializer.cs | 4 ++-- .../Reader/V3/OpenApiCallbackDeserializer.cs | 2 +- .../V3/OpenApiComponentsDeserializer.cs | 2 +- .../Reader/V3/OpenApiContactDeserializer.cs | 2 +- .../V3/OpenApiDiscriminatorDeserializer.cs | 4 ++-- .../Reader/V3/OpenApiEncodingDeserializer.cs | 4 ++-- .../Reader/V3/OpenApiExampleDeserializer.cs | 4 ++-- .../V3/OpenApiExternalDocsDeserializer.cs | 2 +- .../Reader/V3/OpenApiHeaderDeserializer.cs | 4 ++-- .../Reader/V3/OpenApiInfoDeserializer.cs | 2 +- .../Reader/V3/OpenApiLicenseDeserializer.cs | 2 +- .../Reader/V3/OpenApiLinkDeserializer.cs | 2 +- .../Reader/V3/OpenApiMediaTypeDeserializer.cs | 2 +- .../Reader/V3/OpenApiOAuthFlowDeserializer.cs | 4 ++-- .../V3/OpenApiOAuthFlowsDeserializer.cs | 4 ++-- .../Reader/V3/OpenApiOperationDeserializer.cs | 4 ++-- .../Reader/V3/OpenApiParameterDeserializer.cs | 2 +- .../Reader/V3/OpenApiPathItemDeserializer.cs | 2 +- .../Reader/V3/OpenApiPathsDeserializer.cs | 2 +- .../V3/OpenApiRequestBodyDeserializer.cs | 4 ++-- .../Reader/V3/OpenApiResponseDeserializer.cs | 2 +- .../Reader/V3/OpenApiResponsesDeserializer.cs | 2 +- .../Reader/V3/OpenApiSchemaDeserializer.cs | 20 ++++++++--------- .../V3/OpenApiSecuritySchemeDeserializer.cs | 4 ++-- .../Reader/V3/OpenApiServerDeserializer.cs | 2 +- .../V3/OpenApiServerVariableDeserializer.cs | 2 +- .../Reader/V3/OpenApiTagDeserializer.cs | 4 ++-- .../Reader/V3/OpenApiV3Deserializer.cs | 4 ++-- .../Reader/V3/OpenApiXmlDeserializer.cs | 4 ++-- .../Reader/V31/OpenApiCallbackDeserializer.cs | 2 +- .../V31/OpenApiComponentsDeserializer.cs | 2 +- .../Reader/V31/OpenApiContactDeserializer.cs | 2 +- .../V31/OpenApiDiscriminatorDeserializer.cs | 4 ++-- .../Reader/V31/OpenApiEncodingDeserializer.cs | 4 ++-- .../Reader/V31/OpenApiExampleDeserializer.cs | 4 ++-- .../V31/OpenApiExternalDocsDeserializer.cs | 2 +- .../Reader/V31/OpenApiHeaderDeserializer.cs | 4 ++-- .../Reader/V31/OpenApiInfoDeserializer.cs | 2 +- .../Reader/V31/OpenApiLicenseDeserializer.cs | 2 +- .../Reader/V31/OpenApiLinkDeserializer.cs | 2 +- .../V31/OpenApiMediaTypeDeserializer.cs | 2 +- .../V31/OpenApiOAuthFlowDeserializer.cs | 4 ++-- .../V31/OpenApiOAuthFlowsDeserializer.cs | 6 ++--- .../V31/OpenApiOperationDeserializer.cs | 4 ++-- .../V31/OpenApiParameterDeserializer.cs | 2 +- .../Reader/V31/OpenApiPathItemDeserializer.cs | 2 +- .../Reader/V31/OpenApiPathsDeserializer.cs | 2 +- .../V31/OpenApiRequestBodyDeserializer.cs | 4 ++-- .../Reader/V31/OpenApiResponseDeserializer.cs | 2 +- .../V31/OpenApiResponsesDeserializer.cs | 2 +- .../Reader/V31/OpenApiSchemaDeserializer.cs | 18 +++++++-------- .../V31/OpenApiSecuritySchemeDeserializer.cs | 4 ++-- .../Reader/V31/OpenApiServerDeserializer.cs | 2 +- .../V31/OpenApiServerVariableDeserializer.cs | 2 +- .../Reader/V31/OpenApiTagDeserializer.cs | 4 ++-- .../Reader/V31/OpenApiV31Deserializer.cs | 2 +- .../Reader/V31/OpenApiXmlDeserializer.cs | 4 ++-- .../V2Tests/OpenApiHeaderTests.cs | 4 ++-- .../V2Tests/OpenApiOperationTests.cs | 22 +++++++++---------- .../V2Tests/OpenApiParameterTests.cs | 18 +++++++-------- .../V2Tests/OpenApiPathItemTests.cs | 6 ++--- .../V2Tests/OpenApiSchemaTests.cs | 6 ++--- .../V2Tests/OpenApiSecuritySchemeTests.cs | 12 +++++----- .../V31Tests/OpenApiInfoTests.cs | 2 +- .../V31Tests/OpenApiLicenseTests.cs | 2 +- .../V3Tests/OpenApiMediaTypeTests.cs | 2 +- .../V3Tests/OpenApiSchemaTests.cs | 6 ++--- 86 files changed, 183 insertions(+), 185 deletions(-) diff --git a/src/Microsoft.OpenApi/Reader/ParseNodes/ListNode.cs b/src/Microsoft.OpenApi/Reader/ParseNodes/ListNode.cs index f07d93745..96235271e 100644 --- a/src/Microsoft.OpenApi/Reader/ParseNodes/ListNode.cs +++ b/src/Microsoft.OpenApi/Reader/ParseNodes/ListNode.cs @@ -21,7 +21,7 @@ public ListNode(ParsingContext context, JsonArray jsonArray) : base( _nodeList = jsonArray; } - public override List CreateList(Func map, OpenApiDocument hostDocument = null) + public override List CreateList(Func map, OpenApiDocument hostDocument) { if (_nodeList == null) { diff --git a/src/Microsoft.OpenApi/Reader/ParseNodes/MapNode.cs b/src/Microsoft.OpenApi/Reader/ParseNodes/MapNode.cs index 919f1d85c..ddaef6b6a 100644 --- a/src/Microsoft.OpenApi/Reader/ParseNodes/MapNode.cs +++ b/src/Microsoft.OpenApi/Reader/ParseNodes/MapNode.cs @@ -48,7 +48,7 @@ public PropertyNode this[string key] } } - public override Dictionary CreateMap(Func map, OpenApiDocument hostDocument = null) + public override Dictionary CreateMap(Func map, OpenApiDocument hostDocument) { var jsonMap = _node ?? throw new OpenApiReaderException($"Expected map while parsing {typeof(T).Name}", Context); var nodes = jsonMap.Select( diff --git a/src/Microsoft.OpenApi/Reader/ParseNodes/ParseNode.cs b/src/Microsoft.OpenApi/Reader/ParseNodes/ParseNode.cs index 4b2523901..9fbf3f47a 100644 --- a/src/Microsoft.OpenApi/Reader/ParseNodes/ParseNode.cs +++ b/src/Microsoft.OpenApi/Reader/ParseNodes/ParseNode.cs @@ -46,12 +46,12 @@ public static ParseNode Create(ParsingContext context, JsonNode node) return new ValueNode(context, node as JsonValue); } - public virtual List CreateList(Func map, OpenApiDocument hostDocument = null) + public virtual List CreateList(Func map, OpenApiDocument hostDocument) { throw new OpenApiReaderException("Cannot create list from this type of node.", Context); } - public virtual Dictionary CreateMap(Func map, OpenApiDocument hostDocument = null) + public virtual Dictionary CreateMap(Func map, OpenApiDocument hostDocument) { throw new OpenApiReaderException("Cannot create map from this type of node.", Context); } diff --git a/src/Microsoft.OpenApi/Reader/ParseNodes/PropertyNode.cs b/src/Microsoft.OpenApi/Reader/ParseNodes/PropertyNode.cs index 5f8031e87..b285df130 100644 --- a/src/Microsoft.OpenApi/Reader/ParseNodes/PropertyNode.cs +++ b/src/Microsoft.OpenApi/Reader/ParseNodes/PropertyNode.cs @@ -28,7 +28,7 @@ public void ParseField( T parentInstance, IDictionary> fixedFields, IDictionary, Action> patternFields, - OpenApiDocument hostDocument = null) + OpenApiDocument hostDocument) { if (fixedFields.TryGetValue(Name, out var fixedFieldMap)) { diff --git a/src/Microsoft.OpenApi/Reader/V2/OpenApiContactDeserializer.cs b/src/Microsoft.OpenApi/Reader/V2/OpenApiContactDeserializer.cs index 2cb8dea9c..d225899cc 100644 --- a/src/Microsoft.OpenApi/Reader/V2/OpenApiContactDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V2/OpenApiContactDeserializer.cs @@ -35,7 +35,7 @@ internal static partial class OpenApiV2Deserializer {s => s.StartsWith("x-"), (o, p, n, _) => o.AddExtension(p, LoadExtension(p, n))} }; - public static OpenApiContact LoadContact(ParseNode node, OpenApiDocument hostDocument = null) + public static OpenApiContact LoadContact(ParseNode node, OpenApiDocument hostDocument) { var mapNode = node as MapNode; var contact = new OpenApiContact(); diff --git a/src/Microsoft.OpenApi/Reader/V2/OpenApiDocumentDeserializer.cs b/src/Microsoft.OpenApi/Reader/V2/OpenApiDocumentDeserializer.cs index 95d26845d..37e146793 100644 --- a/src/Microsoft.OpenApi/Reader/V2/OpenApiDocumentDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V2/OpenApiDocumentDeserializer.cs @@ -64,12 +64,9 @@ internal static partial class OpenApiV2Deserializer }, { "parameters", - (o, n, _) => + (o, n, doc) => { - if (o.Components == null) - { - o.Components = new(); - } + o.Components ??= new(); o.Components.Parameters = n.CreateMap(LoadParameter, o); @@ -77,7 +74,8 @@ internal static partial class OpenApiV2Deserializer { var parameter = LoadParameter(node: p, loadRequestBody: true, hostDocument: d); return parameter != null ? CreateRequestBody(p.Context, parameter) : null; - } + }, + doc ); } }, diff --git a/src/Microsoft.OpenApi/Reader/V2/OpenApiExternalDocsDeserializer.cs b/src/Microsoft.OpenApi/Reader/V2/OpenApiExternalDocsDeserializer.cs index 8e90fb4e7..6fc438542 100644 --- a/src/Microsoft.OpenApi/Reader/V2/OpenApiExternalDocsDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V2/OpenApiExternalDocsDeserializer.cs @@ -33,7 +33,7 @@ internal static partial class OpenApiV2Deserializer {s => s.StartsWith("x-"), (o, p, n, _) => o.AddExtension(p, LoadExtension(p, n))} }; - public static OpenApiExternalDocs LoadExternalDocs(ParseNode node, OpenApiDocument hostDocument = null) + public static OpenApiExternalDocs LoadExternalDocs(ParseNode node, OpenApiDocument hostDocument) { var mapNode = node.CheckMapNode("externalDocs"); diff --git a/src/Microsoft.OpenApi/Reader/V2/OpenApiHeaderDeserializer.cs b/src/Microsoft.OpenApi/Reader/V2/OpenApiHeaderDeserializer.cs index b4ddf7300..4a994bdc5 100644 --- a/src/Microsoft.OpenApi/Reader/V2/OpenApiHeaderDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V2/OpenApiHeaderDeserializer.cs @@ -32,7 +32,7 @@ internal static partial class OpenApiV2Deserializer }, { "items", - (o, n, _) => GetOrCreateSchema(o).Items = LoadSchema(n) + (o, n, doc) => GetOrCreateSchema(o).Items = LoadSchema(n, doc) }, { "collectionFormat", @@ -102,14 +102,14 @@ private static OpenApiSchema GetOrCreateSchema(OpenApiHeader p) return p.Schema ??= new(); } - public static OpenApiHeader LoadHeader(ParseNode node, OpenApiDocument hostDocument = null) + public static OpenApiHeader LoadHeader(ParseNode node, OpenApiDocument hostDocument) { var mapNode = node.CheckMapNode("header"); var header = new OpenApiHeader(); foreach (var property in mapNode) { - property.ParseField(header, _headerFixedFields, _headerPatternFields); + property.ParseField(header, _headerFixedFields, _headerPatternFields, hostDocument); } var schema = node.Context.GetFromTempStorage("schema"); diff --git a/src/Microsoft.OpenApi/Reader/V2/OpenApiInfoDeserializer.cs b/src/Microsoft.OpenApi/Reader/V2/OpenApiInfoDeserializer.cs index 90a8535b1..74c3ac917 100644 --- a/src/Microsoft.OpenApi/Reader/V2/OpenApiInfoDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V2/OpenApiInfoDeserializer.cs @@ -47,7 +47,7 @@ internal static partial class OpenApiV2Deserializer {s => s.StartsWith("x-"), (o, p, n, _) => o.AddExtension(p, LoadExtension(p, n))} }; - public static OpenApiInfo LoadInfo(ParseNode node, OpenApiDocument hostDocument = null) + public static OpenApiInfo LoadInfo(ParseNode node, OpenApiDocument hostDocument) { var mapNode = node.CheckMapNode("Info"); diff --git a/src/Microsoft.OpenApi/Reader/V2/OpenApiLicenseDeserializer.cs b/src/Microsoft.OpenApi/Reader/V2/OpenApiLicenseDeserializer.cs index f1f7a7b93..8eae690ed 100644 --- a/src/Microsoft.OpenApi/Reader/V2/OpenApiLicenseDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V2/OpenApiLicenseDeserializer.cs @@ -31,7 +31,7 @@ internal static partial class OpenApiV2Deserializer {s => s.StartsWith("x-"), (o, p, n, _) => o.AddExtension(p, LoadExtension(p, n))} }; - public static OpenApiLicense LoadLicense(ParseNode node, OpenApiDocument hostDocument = null) + public static OpenApiLicense LoadLicense(ParseNode node, OpenApiDocument hostDocument) { var mapNode = node.CheckMapNode("OpenApiLicense"); diff --git a/src/Microsoft.OpenApi/Reader/V2/OpenApiOperationDeserializer.cs b/src/Microsoft.OpenApi/Reader/V2/OpenApiOperationDeserializer.cs index d1f894407..35d20ca4a 100644 --- a/src/Microsoft.OpenApi/Reader/V2/OpenApiOperationDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V2/OpenApiOperationDeserializer.cs @@ -91,7 +91,7 @@ internal static partial class OpenApiV2Deserializer {s => s.StartsWith("x-"), (o, p, n, _) => o.AddExtension(p, LoadExtension(p, n))} }; - internal static OpenApiOperation LoadOperation(ParseNode node, OpenApiDocument hostDocument = null) + internal static OpenApiOperation LoadOperation(ParseNode node, OpenApiDocument hostDocument) { // Reset these temp storage parameters for each operation. node.Context.SetTempStorage(TempStorageKeys.BodyParameter, null); @@ -131,7 +131,7 @@ internal static OpenApiOperation LoadOperation(ParseNode node, OpenApiDocument h return operation; } - public static OpenApiResponses LoadResponses(ParseNode node, OpenApiDocument hostDocument = null) + public static OpenApiResponses LoadResponses(ParseNode node, OpenApiDocument hostDocument) { var mapNode = node.CheckMapNode("Responses"); @@ -205,7 +205,7 @@ internal static OpenApiRequestBody CreateRequestBody( } private static OpenApiTagReference LoadTagByReference( - string tagName, OpenApiDocument hostDocument = null) + string tagName, OpenApiDocument hostDocument) { return new OpenApiTagReference(tagName, hostDocument); } diff --git a/src/Microsoft.OpenApi/Reader/V2/OpenApiParameterDeserializer.cs b/src/Microsoft.OpenApi/Reader/V2/OpenApiParameterDeserializer.cs index 149c00fd3..7b6901f9c 100644 --- a/src/Microsoft.OpenApi/Reader/V2/OpenApiParameterDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V2/OpenApiParameterDeserializer.cs @@ -50,7 +50,7 @@ internal static partial class OpenApiV2Deserializer }, { "items", - (o, n, t) => GetOrCreateSchema(o).Items = LoadSchema(n) + (o, n, t) => GetOrCreateSchema(o).Items = LoadSchema(n, t) }, { "collectionFormat", @@ -138,7 +138,7 @@ private static void LoadStyle(OpenApiParameter p, string v) } } - private static void LoadParameterExamplesExtension(OpenApiParameter parameter, ParseNode node, OpenApiDocument hostDocument = null) + private static void LoadParameterExamplesExtension(OpenApiParameter parameter, ParseNode node, OpenApiDocument hostDocument) { var examples = LoadExamplesExtension(node); node.Context.SetTempStorage(TempStorageKeys.Examples, examples, parameter); @@ -149,7 +149,7 @@ private static OpenApiSchema GetOrCreateSchema(OpenApiParameter p) return p.Schema ??= new(); } - private static void ProcessIn(OpenApiParameter o, ParseNode n, OpenApiDocument hostDocument = null) + private static void ProcessIn(OpenApiParameter o, ParseNode n, OpenApiDocument hostDocument) { var value = n.GetScalarValue(); switch (value) @@ -180,12 +180,12 @@ private static void ProcessIn(OpenApiParameter o, ParseNode n, OpenApiDocument h } } - public static OpenApiParameter LoadParameter(ParseNode node, OpenApiDocument hostDocument = null) + public static OpenApiParameter LoadParameter(ParseNode node, OpenApiDocument hostDocument) { return LoadParameter(node, false, hostDocument); } - public static OpenApiParameter LoadParameter(ParseNode node, bool loadRequestBody, OpenApiDocument hostDocument = null) + public static OpenApiParameter LoadParameter(ParseNode node, bool loadRequestBody, OpenApiDocument hostDocument) { // Reset the local variables every time this method is called. node.Context.SetTempStorage(TempStorageKeys.ParameterIsBodyOrFormData, false); diff --git a/src/Microsoft.OpenApi/Reader/V2/OpenApiPathItemDeserializer.cs b/src/Microsoft.OpenApi/Reader/V2/OpenApiPathItemDeserializer.cs index 71fd2e736..bc1eb8da6 100644 --- a/src/Microsoft.OpenApi/Reader/V2/OpenApiPathItemDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V2/OpenApiPathItemDeserializer.cs @@ -43,7 +43,7 @@ internal static partial class OpenApiV2Deserializer {s => s.StartsWith("x-"), (o, p, n, _) => o.AddExtension(p, LoadExtension(p, n))}, }; - public static OpenApiPathItem LoadPathItem(ParseNode node, OpenApiDocument hostDocument = null) + public static OpenApiPathItem LoadPathItem(ParseNode node, OpenApiDocument hostDocument) { var mapNode = node.CheckMapNode("PathItem"); @@ -54,12 +54,12 @@ public static OpenApiPathItem LoadPathItem(ParseNode node, OpenApiDocument hostD return pathItem; } - private static void LoadPathParameters(OpenApiPathItem pathItem, ParseNode node, OpenApiDocument hostDocument = null) + private static void LoadPathParameters(OpenApiPathItem pathItem, ParseNode node, OpenApiDocument hostDocument) { node.Context.SetTempStorage(TempStorageKeys.BodyParameter, null); node.Context.SetTempStorage(TempStorageKeys.FormParameters, null); - pathItem.Parameters = node.CreateList(LoadParameter); + pathItem.Parameters = node.CreateList(LoadParameter, hostDocument); // Build request body based on information determined while parsing OpenApiOperation var bodyParameter = node.Context.GetFromTempStorage(TempStorageKeys.BodyParameter); diff --git a/src/Microsoft.OpenApi/Reader/V2/OpenApiPathsDeserializer.cs b/src/Microsoft.OpenApi/Reader/V2/OpenApiPathsDeserializer.cs index 9e0c0f08b..a048316d5 100644 --- a/src/Microsoft.OpenApi/Reader/V2/OpenApiPathsDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V2/OpenApiPathsDeserializer.cs @@ -21,7 +21,7 @@ internal static partial class OpenApiV2Deserializer {s => s.StartsWith("x-"), (o, p, n, _) => o.AddExtension(p, LoadExtension(p, n))} }; - public static OpenApiPaths LoadPaths(ParseNode node, OpenApiDocument hostDocument = null) + public static OpenApiPaths LoadPaths(ParseNode node, OpenApiDocument hostDocument) { var mapNode = node.CheckMapNode("Paths"); diff --git a/src/Microsoft.OpenApi/Reader/V2/OpenApiResponseDeserializer.cs b/src/Microsoft.OpenApi/Reader/V2/OpenApiResponseDeserializer.cs index 8436a09cd..11b12e8f8 100644 --- a/src/Microsoft.OpenApi/Reader/V2/OpenApiResponseDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V2/OpenApiResponseDeserializer.cs @@ -104,7 +104,7 @@ private static void ProcessProduces(MapNode mapNode, OpenApiResponse response, P context.SetTempStorage(TempStorageKeys.ResponseProducesSet, true, response); } - private static void LoadResponseExamplesExtension(OpenApiResponse response, ParseNode node, OpenApiDocument hostDocument = null) + private static void LoadResponseExamplesExtension(OpenApiResponse response, ParseNode node, OpenApiDocument hostDocument) { var examples = LoadExamplesExtension(node); node.Context.SetTempStorage(TempStorageKeys.Examples, examples, response); @@ -145,7 +145,7 @@ private static Dictionary LoadExamplesExtension(ParseNod return examples; } - private static void LoadExamples(OpenApiResponse response, ParseNode node, OpenApiDocument hostDocument = null) + private static void LoadExamples(OpenApiResponse response, ParseNode node, OpenApiDocument hostDocument) { var mapNode = node.CheckMapNode("examples"); @@ -178,7 +178,7 @@ private static void LoadExample(OpenApiResponse response, string mediaType, Pars mediaTypeObject.Example = exampleNode; } - public static OpenApiResponse LoadResponse(ParseNode node, OpenApiDocument hostDocument = null) + public static OpenApiResponse LoadResponse(ParseNode node, OpenApiDocument hostDocument) { var mapNode = node.CheckMapNode("response"); @@ -193,7 +193,7 @@ public static OpenApiResponse LoadResponse(ParseNode node, OpenApiDocument hostD foreach (var property in mapNode) { - property.ParseField(response, _responseFixedFields, _responsePatternFields); + property.ParseField(response, _responseFixedFields, _responsePatternFields, hostDocument); } foreach (var mediaType in response.Content.Values) diff --git a/src/Microsoft.OpenApi/Reader/V2/OpenApiSchemaDeserializer.cs b/src/Microsoft.OpenApi/Reader/V2/OpenApiSchemaDeserializer.cs index 7c5ab3d2d..78453f9d2 100644 --- a/src/Microsoft.OpenApi/Reader/V2/OpenApiSchemaDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V2/OpenApiSchemaDeserializer.cs @@ -93,14 +93,14 @@ internal static partial class OpenApiV2Deserializer }, { "items", - (o, n, _) => o.Items = LoadSchema(n) + (o, n, doc) => o.Items = LoadSchema(n, doc) }, { "properties", (o, n, t) => o.Properties = n.CreateMap(LoadSchema, t) }, { - "additionalProperties", (o, n, _) => + "additionalProperties", (o, n, doc) => { if (n is ValueNode) { @@ -108,7 +108,7 @@ internal static partial class OpenApiV2Deserializer } else { - o.AdditionalProperties = LoadSchema(n); + o.AdditionalProperties = LoadSchema(n, doc); } } }, @@ -139,11 +139,11 @@ internal static partial class OpenApiV2Deserializer }, { "xml", - (o, n, _) => o.Xml = LoadXml(n) + (o, n, doc) => o.Xml = LoadXml(n, doc) }, { "externalDocs", - (o, n, _) => o.ExternalDocs = LoadExternalDocs(n) + (o, n, doc) => o.ExternalDocs = LoadExternalDocs(n, doc) }, { "example", @@ -156,7 +156,7 @@ internal static partial class OpenApiV2Deserializer {s => s.StartsWith("x-"), (o, p, n, _) => o.AddExtension(p, LoadExtension(p, n))} }; - public static OpenApiSchema LoadSchema(ParseNode node, OpenApiDocument hostDocument = null) + public static OpenApiSchema LoadSchema(ParseNode node, OpenApiDocument hostDocument) { var mapNode = node.CheckMapNode("schema"); @@ -171,7 +171,7 @@ public static OpenApiSchema LoadSchema(ParseNode node, OpenApiDocument hostDocum foreach (var propertyNode in mapNode) { - propertyNode.ParseField(schema, _openApiSchemaFixedFields, _openApiSchemaPatternFields); + propertyNode.ParseField(schema, _openApiSchemaFixedFields, _openApiSchemaPatternFields, hostDocument); } return schema; diff --git a/src/Microsoft.OpenApi/Reader/V2/OpenApiSecuritySchemeDeserializer.cs b/src/Microsoft.OpenApi/Reader/V2/OpenApiSecuritySchemeDeserializer.cs index 4e142b479..65d8fe155 100644 --- a/src/Microsoft.OpenApi/Reader/V2/OpenApiSecuritySchemeDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V2/OpenApiSecuritySchemeDeserializer.cs @@ -68,7 +68,7 @@ internal static partial class OpenApiV2Deserializer {s => s.StartsWith("x-"), (o, p, n, _) => o.AddExtension(p, LoadExtension(p, n))} }; - public static OpenApiSecurityScheme LoadSecurityScheme(ParseNode node, OpenApiDocument hostDocument = null) + public static OpenApiSecurityScheme LoadSecurityScheme(ParseNode node, OpenApiDocument hostDocument) { // Reset the local variables every time this method is called. // TODO: Change _flow to a tempStorage variable to make the deserializer thread-safe. @@ -80,7 +80,7 @@ public static OpenApiSecurityScheme LoadSecurityScheme(ParseNode node, OpenApiDo var securityScheme = new OpenApiSecurityScheme(); foreach (var property in mapNode) { - property.ParseField(securityScheme, _securitySchemeFixedFields, _securitySchemePatternFields); + property.ParseField(securityScheme, _securitySchemeFixedFields, _securitySchemePatternFields, hostDocument); } // Put the Flow object in the right Flows property based on the string in "flow" diff --git a/src/Microsoft.OpenApi/Reader/V2/OpenApiTagDeserializer.cs b/src/Microsoft.OpenApi/Reader/V2/OpenApiTagDeserializer.cs index 47c3c6a40..23614029a 100644 --- a/src/Microsoft.OpenApi/Reader/V2/OpenApiTagDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V2/OpenApiTagDeserializer.cs @@ -34,7 +34,7 @@ internal static partial class OpenApiV2Deserializer {s => s.StartsWith("x-"), (o, p, n, _) => o.AddExtension(p, LoadExtension(p, n))} }; - public static OpenApiTag LoadTag(ParseNode n, OpenApiDocument hostDocument = null) + public static OpenApiTag LoadTag(ParseNode n, OpenApiDocument hostDocument) { var mapNode = n.CheckMapNode("tag"); @@ -42,7 +42,7 @@ public static OpenApiTag LoadTag(ParseNode n, OpenApiDocument hostDocument = nul foreach (var propertyNode in mapNode) { - propertyNode.ParseField(domainObject, _tagFixedFields, _tagPatternFields); + propertyNode.ParseField(domainObject, _tagFixedFields, _tagPatternFields, hostDocument); } return domainObject; diff --git a/src/Microsoft.OpenApi/Reader/V2/OpenApiV2Deserializer.cs b/src/Microsoft.OpenApi/Reader/V2/OpenApiV2Deserializer.cs index 0bafab857..0e90a4633 100644 --- a/src/Microsoft.OpenApi/Reader/V2/OpenApiV2Deserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V2/OpenApiV2Deserializer.cs @@ -72,7 +72,7 @@ private static void ProcessAnyFields( } } - public static JsonNode LoadAny(ParseNode node, OpenApiDocument hostDocument = null) + public static JsonNode LoadAny(ParseNode node, OpenApiDocument hostDocument) { return node.CreateAny(); } diff --git a/src/Microsoft.OpenApi/Reader/V2/OpenApiXmlDeserializer.cs b/src/Microsoft.OpenApi/Reader/V2/OpenApiXmlDeserializer.cs index c630bd941..21c9be0fe 100644 --- a/src/Microsoft.OpenApi/Reader/V2/OpenApiXmlDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V2/OpenApiXmlDeserializer.cs @@ -54,14 +54,14 @@ internal static partial class OpenApiV2Deserializer {s => s.StartsWith("x-"), (o, p, n, _) => o.AddExtension(p, LoadExtension(p,n))} }; - public static OpenApiXml LoadXml(ParseNode node, OpenApiDocument hostDocument = null) + public static OpenApiXml LoadXml(ParseNode node, OpenApiDocument hostDocument) { var mapNode = node.CheckMapNode("xml"); var xml = new OpenApiXml(); foreach (var property in mapNode) { - property.ParseField(xml, _xmlFixedFields, _xmlPatternFields); + property.ParseField(xml, _xmlFixedFields, _xmlPatternFields, hostDocument); } return xml; diff --git a/src/Microsoft.OpenApi/Reader/V3/OpenApiCallbackDeserializer.cs b/src/Microsoft.OpenApi/Reader/V3/OpenApiCallbackDeserializer.cs index faf50ebb1..ca4a353a5 100644 --- a/src/Microsoft.OpenApi/Reader/V3/OpenApiCallbackDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V3/OpenApiCallbackDeserializer.cs @@ -25,7 +25,7 @@ internal static partial class OpenApiV3Deserializer {s => s.StartsWith("x-"), (o, p, n, _) => o.AddExtension(p, LoadExtension(p,n))}, }; - public static OpenApiCallback LoadCallback(ParseNode node, OpenApiDocument hostDocument = null) + public static OpenApiCallback LoadCallback(ParseNode node, OpenApiDocument hostDocument) { var mapNode = node.CheckMapNode("callback"); diff --git a/src/Microsoft.OpenApi/Reader/V3/OpenApiComponentsDeserializer.cs b/src/Microsoft.OpenApi/Reader/V3/OpenApiComponentsDeserializer.cs index cc51187d2..a5e3d082b 100644 --- a/src/Microsoft.OpenApi/Reader/V3/OpenApiComponentsDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V3/OpenApiComponentsDeserializer.cs @@ -32,7 +32,7 @@ internal static partial class OpenApiV3Deserializer {s => s.StartsWith("x-"), (o, p, n, _) => o.AddExtension(p, LoadExtension(p, n))} }; - public static OpenApiComponents LoadComponents(ParseNode node, OpenApiDocument hostDocument = null) + public static OpenApiComponents LoadComponents(ParseNode node, OpenApiDocument hostDocument) { var mapNode = node.CheckMapNode("components"); var components = new OpenApiComponents(); diff --git a/src/Microsoft.OpenApi/Reader/V3/OpenApiContactDeserializer.cs b/src/Microsoft.OpenApi/Reader/V3/OpenApiContactDeserializer.cs index e4d98de64..cc5058b52 100644 --- a/src/Microsoft.OpenApi/Reader/V3/OpenApiContactDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V3/OpenApiContactDeserializer.cs @@ -35,7 +35,7 @@ internal static partial class OpenApiV3Deserializer {s => s.StartsWith("x-"), (o, p, n, _) => o.AddExtension(p, LoadExtension(p,n))} }; - public static OpenApiContact LoadContact(ParseNode node, OpenApiDocument hostDocument = null) + public static OpenApiContact LoadContact(ParseNode node, OpenApiDocument hostDocument) { var mapNode = node as MapNode; var contact = new OpenApiContact(); diff --git a/src/Microsoft.OpenApi/Reader/V3/OpenApiDiscriminatorDeserializer.cs b/src/Microsoft.OpenApi/Reader/V3/OpenApiDiscriminatorDeserializer.cs index c10532c2c..5f9db648e 100644 --- a/src/Microsoft.OpenApi/Reader/V3/OpenApiDiscriminatorDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V3/OpenApiDiscriminatorDeserializer.cs @@ -27,14 +27,14 @@ internal static partial class OpenApiV3Deserializer private static readonly PatternFieldMap _discriminatorPatternFields = new(); - public static OpenApiDiscriminator LoadDiscriminator(ParseNode node, OpenApiDocument hostDocument = null) + public static OpenApiDiscriminator LoadDiscriminator(ParseNode node, OpenApiDocument hostDocument) { var mapNode = node.CheckMapNode("discriminator"); var discriminator = new OpenApiDiscriminator(); foreach (var property in mapNode) { - property.ParseField(discriminator, _discriminatorFixedFields, _discriminatorPatternFields); + property.ParseField(discriminator, _discriminatorFixedFields, _discriminatorPatternFields, hostDocument); } return discriminator; diff --git a/src/Microsoft.OpenApi/Reader/V3/OpenApiEncodingDeserializer.cs b/src/Microsoft.OpenApi/Reader/V3/OpenApiEncodingDeserializer.cs index 67cb19ecb..9f9b57fa8 100644 --- a/src/Microsoft.OpenApi/Reader/V3/OpenApiEncodingDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V3/OpenApiEncodingDeserializer.cs @@ -43,14 +43,14 @@ internal static partial class OpenApiV3Deserializer {s => s.StartsWith("x-"), (o, p, n, _) => o.AddExtension(p, LoadExtension(p,n))} }; - public static OpenApiEncoding LoadEncoding(ParseNode node, OpenApiDocument hostDocument = null) + public static OpenApiEncoding LoadEncoding(ParseNode node, OpenApiDocument hostDocument) { var mapNode = node.CheckMapNode("encoding"); var encoding = new OpenApiEncoding(); foreach (var property in mapNode) { - property.ParseField(encoding, _encodingFixedFields, _encodingPatternFields); + property.ParseField(encoding, _encodingFixedFields, _encodingPatternFields, hostDocument); } return encoding; diff --git a/src/Microsoft.OpenApi/Reader/V3/OpenApiExampleDeserializer.cs b/src/Microsoft.OpenApi/Reader/V3/OpenApiExampleDeserializer.cs index a73ee02b1..f6f6b6a6c 100644 --- a/src/Microsoft.OpenApi/Reader/V3/OpenApiExampleDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V3/OpenApiExampleDeserializer.cs @@ -41,7 +41,7 @@ internal static partial class OpenApiV3Deserializer {s => s.StartsWith("x-"), (o, p, n, _) => o.AddExtension(p, LoadExtension(p,n))} }; - public static OpenApiExample LoadExample(ParseNode node, OpenApiDocument hostDocument = null) + public static OpenApiExample LoadExample(ParseNode node, OpenApiDocument hostDocument) { var mapNode = node.CheckMapNode("example"); @@ -55,7 +55,7 @@ public static OpenApiExample LoadExample(ParseNode node, OpenApiDocument hostDoc var example = new OpenApiExample(); foreach (var property in mapNode) { - property.ParseField(example, _exampleFixedFields, _examplePatternFields); + property.ParseField(example, _exampleFixedFields, _examplePatternFields, hostDocument); } return example; diff --git a/src/Microsoft.OpenApi/Reader/V3/OpenApiExternalDocsDeserializer.cs b/src/Microsoft.OpenApi/Reader/V3/OpenApiExternalDocsDeserializer.cs index 39712494c..a3f20bad0 100644 --- a/src/Microsoft.OpenApi/Reader/V3/OpenApiExternalDocsDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V3/OpenApiExternalDocsDeserializer.cs @@ -34,7 +34,7 @@ internal static partial class OpenApiV3Deserializer {s => s.StartsWith("x-"), (o, p, n, _) => o.AddExtension(p, LoadExtension(p, n))} }; - public static OpenApiExternalDocs LoadExternalDocs(ParseNode node, OpenApiDocument hostDocument = null) + public static OpenApiExternalDocs LoadExternalDocs(ParseNode node, OpenApiDocument hostDocument) { var mapNode = node.CheckMapNode("externalDocs"); diff --git a/src/Microsoft.OpenApi/Reader/V3/OpenApiHeaderDeserializer.cs b/src/Microsoft.OpenApi/Reader/V3/OpenApiHeaderDeserializer.cs index bc09b9b10..edb76f4e6 100644 --- a/src/Microsoft.OpenApi/Reader/V3/OpenApiHeaderDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V3/OpenApiHeaderDeserializer.cs @@ -64,7 +64,7 @@ internal static partial class OpenApiV3Deserializer {s => s.StartsWith("x-"), (o, p, n, _) => o.AddExtension(p, LoadExtension(p,n))} }; - public static OpenApiHeader LoadHeader(ParseNode node, OpenApiDocument hostDocument = null) + public static OpenApiHeader LoadHeader(ParseNode node, OpenApiDocument hostDocument) { var mapNode = node.CheckMapNode("header"); @@ -78,7 +78,7 @@ public static OpenApiHeader LoadHeader(ParseNode node, OpenApiDocument hostDocum var header = new OpenApiHeader(); foreach (var property in mapNode) { - property.ParseField(header, _headerFixedFields, _headerPatternFields); + property.ParseField(header, _headerFixedFields, _headerPatternFields, hostDocument); } return header; diff --git a/src/Microsoft.OpenApi/Reader/V3/OpenApiInfoDeserializer.cs b/src/Microsoft.OpenApi/Reader/V3/OpenApiInfoDeserializer.cs index dcbf5ba4b..dbe3a554c 100644 --- a/src/Microsoft.OpenApi/Reader/V3/OpenApiInfoDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V3/OpenApiInfoDeserializer.cs @@ -47,7 +47,7 @@ internal static partial class OpenApiV3Deserializer {s => s.StartsWith("x-"), (o, k, n, _) => o.AddExtension(k,LoadExtension(k, n))} }; - public static OpenApiInfo LoadInfo(ParseNode node, OpenApiDocument hostDocument = null) + public static OpenApiInfo LoadInfo(ParseNode node, OpenApiDocument hostDocument) { var mapNode = node.CheckMapNode("Info"); var info = new OpenApiInfo(); diff --git a/src/Microsoft.OpenApi/Reader/V3/OpenApiLicenseDeserializer.cs b/src/Microsoft.OpenApi/Reader/V3/OpenApiLicenseDeserializer.cs index e9054a0dd..d836c6e0f 100644 --- a/src/Microsoft.OpenApi/Reader/V3/OpenApiLicenseDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V3/OpenApiLicenseDeserializer.cs @@ -31,7 +31,7 @@ internal static partial class OpenApiV3Deserializer {s => s.StartsWith("x-"), (o, p, n, _) => o.AddExtension(p, LoadExtension(p,n))} }; - internal static OpenApiLicense LoadLicense(ParseNode node, OpenApiDocument hostDocument = null) + internal static OpenApiLicense LoadLicense(ParseNode node, OpenApiDocument hostDocument) { var mapNode = node.CheckMapNode("License"); diff --git a/src/Microsoft.OpenApi/Reader/V3/OpenApiLinkDeserializer.cs b/src/Microsoft.OpenApi/Reader/V3/OpenApiLinkDeserializer.cs index a95b6ebf8..f0b62c361 100644 --- a/src/Microsoft.OpenApi/Reader/V3/OpenApiLinkDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V3/OpenApiLinkDeserializer.cs @@ -45,7 +45,7 @@ internal static partial class OpenApiV3Deserializer {s => s.StartsWith("x-"), (o, p, n, _) => o.AddExtension(p, LoadExtension(p,n))}, }; - public static OpenApiLink LoadLink(ParseNode node, OpenApiDocument hostDocument = null) + public static OpenApiLink LoadLink(ParseNode node, OpenApiDocument hostDocument) { var mapNode = node.CheckMapNode("link"); var link = new OpenApiLink(); diff --git a/src/Microsoft.OpenApi/Reader/V3/OpenApiMediaTypeDeserializer.cs b/src/Microsoft.OpenApi/Reader/V3/OpenApiMediaTypeDeserializer.cs index 1c055293a..69fc53179 100644 --- a/src/Microsoft.OpenApi/Reader/V3/OpenApiMediaTypeDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V3/OpenApiMediaTypeDeserializer.cs @@ -64,7 +64,7 @@ internal static partial class OpenApiV3Deserializer } }; - public static OpenApiMediaType LoadMediaType(ParseNode node, OpenApiDocument hostDocument = null) + public static OpenApiMediaType LoadMediaType(ParseNode node, OpenApiDocument hostDocument) { var mapNode = node.CheckMapNode(OpenApiConstants.Content); diff --git a/src/Microsoft.OpenApi/Reader/V3/OpenApiOAuthFlowDeserializer.cs b/src/Microsoft.OpenApi/Reader/V3/OpenApiOAuthFlowDeserializer.cs index 8e8783efa..1a7f40c15 100644 --- a/src/Microsoft.OpenApi/Reader/V3/OpenApiOAuthFlowDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V3/OpenApiOAuthFlowDeserializer.cs @@ -38,14 +38,14 @@ internal static partial class OpenApiV3Deserializer {s => s.StartsWith("x-"), (o, p, n, _) => o.AddExtension(p, LoadExtension(p,n))} }; - public static OpenApiOAuthFlow LoadOAuthFlow(ParseNode node, OpenApiDocument hostDocument = null) + public static OpenApiOAuthFlow LoadOAuthFlow(ParseNode node, OpenApiDocument hostDocument) { var mapNode = node.CheckMapNode("OAuthFlow"); var oauthFlow = new OpenApiOAuthFlow(); foreach (var property in mapNode) { - property.ParseField(oauthFlow, _oAuthFlowFixedFields, _oAuthFlowPatternFields); + property.ParseField(oauthFlow, _oAuthFlowFixedFields, _oAuthFlowPatternFields, hostDocument); } return oauthFlow; diff --git a/src/Microsoft.OpenApi/Reader/V3/OpenApiOAuthFlowsDeserializer.cs b/src/Microsoft.OpenApi/Reader/V3/OpenApiOAuthFlowsDeserializer.cs index 2856be979..e4e003f9c 100644 --- a/src/Microsoft.OpenApi/Reader/V3/OpenApiOAuthFlowsDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V3/OpenApiOAuthFlowsDeserializer.cs @@ -28,14 +28,14 @@ internal static partial class OpenApiV3Deserializer {s => s.StartsWith("x-"), (o, p, n, _) => o.AddExtension(p, LoadExtension(p,n))} }; - public static OpenApiOAuthFlows LoadOAuthFlows(ParseNode node, OpenApiDocument hostDocument = null) + public static OpenApiOAuthFlows LoadOAuthFlows(ParseNode node, OpenApiDocument hostDocument) { var mapNode = node.CheckMapNode("OAuthFlows"); var oAuthFlows = new OpenApiOAuthFlows(); foreach (var property in mapNode) { - property.ParseField(oAuthFlows, _oAuthFlowsFixedFields, _oAuthFlowsPatternFields); + property.ParseField(oAuthFlows, _oAuthFlowsFixedFields, _oAuthFlowsPatternFields, hostDocument); } return oAuthFlows; diff --git a/src/Microsoft.OpenApi/Reader/V3/OpenApiOperationDeserializer.cs b/src/Microsoft.OpenApi/Reader/V3/OpenApiOperationDeserializer.cs index 72ce13d58..1ebb57880 100644 --- a/src/Microsoft.OpenApi/Reader/V3/OpenApiOperationDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V3/OpenApiOperationDeserializer.cs @@ -33,7 +33,7 @@ internal static partial class OpenApiV3Deserializer }, { "externalDocs", - (o, n, _) => o.ExternalDocs = LoadExternalDocs(n) + (o, n, doc) => o.ExternalDocs = LoadExternalDocs(n, doc) }, { "operationId", @@ -75,7 +75,7 @@ internal static partial class OpenApiV3Deserializer {s => s.StartsWith("x-"), (o, p, n, _) => o.AddExtension(p, LoadExtension(p,n))}, }; - internal static OpenApiOperation LoadOperation(ParseNode node, OpenApiDocument hostDocument = null) + internal static OpenApiOperation LoadOperation(ParseNode node, OpenApiDocument hostDocument) { var mapNode = node.CheckMapNode("Operation"); diff --git a/src/Microsoft.OpenApi/Reader/V3/OpenApiParameterDeserializer.cs b/src/Microsoft.OpenApi/Reader/V3/OpenApiParameterDeserializer.cs index 0446c52b7..1c1a5ff71 100644 --- a/src/Microsoft.OpenApi/Reader/V3/OpenApiParameterDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V3/OpenApiParameterDeserializer.cs @@ -109,7 +109,7 @@ internal static partial class OpenApiV3Deserializer } }; - public static OpenApiParameter LoadParameter(ParseNode node, OpenApiDocument hostDocument = null) + public static OpenApiParameter LoadParameter(ParseNode node, OpenApiDocument hostDocument) { var mapNode = node.CheckMapNode("parameter"); diff --git a/src/Microsoft.OpenApi/Reader/V3/OpenApiPathItemDeserializer.cs b/src/Microsoft.OpenApi/Reader/V3/OpenApiPathItemDeserializer.cs index afcee89b5..f0c4051c3 100644 --- a/src/Microsoft.OpenApi/Reader/V3/OpenApiPathItemDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V3/OpenApiPathItemDeserializer.cs @@ -49,7 +49,7 @@ internal static partial class OpenApiV3Deserializer {s => s.StartsWith("x-"), (o, p, n, _) => o.AddExtension(p, LoadExtension(p,n))} }; - public static OpenApiPathItem LoadPathItem(ParseNode node, OpenApiDocument hostDocument = null) + public static OpenApiPathItem LoadPathItem(ParseNode node, OpenApiDocument hostDocument) { var mapNode = node.CheckMapNode("PathItem"); diff --git a/src/Microsoft.OpenApi/Reader/V3/OpenApiPathsDeserializer.cs b/src/Microsoft.OpenApi/Reader/V3/OpenApiPathsDeserializer.cs index d4343973c..e28a9d569 100644 --- a/src/Microsoft.OpenApi/Reader/V3/OpenApiPathsDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V3/OpenApiPathsDeserializer.cs @@ -21,7 +21,7 @@ internal static partial class OpenApiV3Deserializer {s => s.StartsWith("x-"), (o, p, n, _) => o.AddExtension(p, LoadExtension(p,n))} }; - public static OpenApiPaths LoadPaths(ParseNode node, OpenApiDocument hostDocument = null) + public static OpenApiPaths LoadPaths(ParseNode node, OpenApiDocument hostDocument) { var mapNode = node.CheckMapNode("Paths"); diff --git a/src/Microsoft.OpenApi/Reader/V3/OpenApiRequestBodyDeserializer.cs b/src/Microsoft.OpenApi/Reader/V3/OpenApiRequestBodyDeserializer.cs index 435b576e1..f982a18ce 100644 --- a/src/Microsoft.OpenApi/Reader/V3/OpenApiRequestBodyDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V3/OpenApiRequestBodyDeserializer.cs @@ -38,7 +38,7 @@ internal static partial class OpenApiV3Deserializer {s => s.StartsWith("x-"), (o, p, n, _) => o.AddExtension(p, LoadExtension(p,n))} }; - public static OpenApiRequestBody LoadRequestBody(ParseNode node, OpenApiDocument hostDocument= null) + public static OpenApiRequestBody LoadRequestBody(ParseNode node, OpenApiDocument hostDocument) { var mapNode = node.CheckMapNode("requestBody"); @@ -52,7 +52,7 @@ public static OpenApiRequestBody LoadRequestBody(ParseNode node, OpenApiDocument var requestBody = new OpenApiRequestBody(); foreach (var property in mapNode) { - property.ParseField(requestBody, _requestBodyFixedFields, _requestBodyPatternFields); + property.ParseField(requestBody, _requestBodyFixedFields, _requestBodyPatternFields, hostDocument); } return requestBody; diff --git a/src/Microsoft.OpenApi/Reader/V3/OpenApiResponseDeserializer.cs b/src/Microsoft.OpenApi/Reader/V3/OpenApiResponseDeserializer.cs index e65a1aafe..4aaee1187 100644 --- a/src/Microsoft.OpenApi/Reader/V3/OpenApiResponseDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V3/OpenApiResponseDeserializer.cs @@ -41,7 +41,7 @@ internal static partial class OpenApiV3Deserializer {s => s.StartsWith("x-"), (o, p, n, _) => o.AddExtension(p, LoadExtension(p,n))} }; - public static OpenApiResponse LoadResponse(ParseNode node, OpenApiDocument hostDocument = null) + public static OpenApiResponse LoadResponse(ParseNode node, OpenApiDocument hostDocument) { var mapNode = node.CheckMapNode("response"); diff --git a/src/Microsoft.OpenApi/Reader/V3/OpenApiResponsesDeserializer.cs b/src/Microsoft.OpenApi/Reader/V3/OpenApiResponsesDeserializer.cs index 817cdcbf6..7288c04b1 100644 --- a/src/Microsoft.OpenApi/Reader/V3/OpenApiResponsesDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V3/OpenApiResponsesDeserializer.cs @@ -21,7 +21,7 @@ internal static partial class OpenApiV3Deserializer {s => s.StartsWith("x-"), (o, p, n, _) => o.AddExtension(p, LoadExtension(p,n))} }; - public static OpenApiResponses LoadResponses(ParseNode node, OpenApiDocument hostDocument = null) + public static OpenApiResponses LoadResponses(ParseNode node, OpenApiDocument hostDocument) { var mapNode = node.CheckMapNode("Responses"); diff --git a/src/Microsoft.OpenApi/Reader/V3/OpenApiSchemaDeserializer.cs b/src/Microsoft.OpenApi/Reader/V3/OpenApiSchemaDeserializer.cs index 9faafca12..bad6d04b8 100644 --- a/src/Microsoft.OpenApi/Reader/V3/OpenApiSchemaDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V3/OpenApiSchemaDeserializer.cs @@ -92,7 +92,7 @@ internal static partial class OpenApiV3Deserializer }, { "oneOf", - (o, n, _) => o.OneOf = n.CreateList(LoadSchema) + (o, n, doc) => o.OneOf = n.CreateList(LoadSchema, doc) }, { "anyOf", @@ -100,18 +100,18 @@ internal static partial class OpenApiV3Deserializer }, { "not", - (o, n, _) => o.Not = LoadSchema(n) + (o, n, doc) => o.Not = LoadSchema(n, doc) }, { "items", - (o, n, _) => o.Items = LoadSchema(n) + (o, n, doc) => o.Items = LoadSchema(n, doc) }, { "properties", (o, n, t) => o.Properties = n.CreateMap(LoadSchema, t) }, { - "additionalProperties", (o, n, _) => + "additionalProperties", (o, n, doc) => { if (n is ValueNode) { @@ -119,7 +119,7 @@ internal static partial class OpenApiV3Deserializer } else { - o.AdditionalProperties = LoadSchema(n); + o.AdditionalProperties = LoadSchema(n, doc); } } }, @@ -141,7 +141,7 @@ internal static partial class OpenApiV3Deserializer }, { "discriminator", - (o, n, _) => o.Discriminator = LoadDiscriminator(n) + (o, n, doc) => o.Discriminator = LoadDiscriminator(n, doc) }, { "readOnly", @@ -153,11 +153,11 @@ internal static partial class OpenApiV3Deserializer }, { "xml", - (o, n, _) => o.Xml = LoadXml(n) + (o, n, doc) => o.Xml = LoadXml(n, doc) }, { "externalDocs", - (o, n, _) => o.ExternalDocs = LoadExternalDocs(n) + (o, n, doc) => o.ExternalDocs = LoadExternalDocs(n, doc) }, { "example", @@ -174,7 +174,7 @@ internal static partial class OpenApiV3Deserializer {s => s.StartsWith("x-"), (o, p, n, _) => o.AddExtension(p, LoadExtension(p,n))} }; - public static OpenApiSchema LoadSchema(ParseNode node, OpenApiDocument hostDocument = null) + public static OpenApiSchema LoadSchema(ParseNode node, OpenApiDocument hostDocument) { var mapNode = node.CheckMapNode(OpenApiConstants.Schema); @@ -190,7 +190,7 @@ public static OpenApiSchema LoadSchema(ParseNode node, OpenApiDocument hostDocum foreach (var propertyNode in mapNode) { - propertyNode.ParseField(schema, _openApiSchemaFixedFields, _openApiSchemaPatternFields); + propertyNode.ParseField(schema, _openApiSchemaFixedFields, _openApiSchemaPatternFields, hostDocument); } return schema; diff --git a/src/Microsoft.OpenApi/Reader/V3/OpenApiSecuritySchemeDeserializer.cs b/src/Microsoft.OpenApi/Reader/V3/OpenApiSecuritySchemeDeserializer.cs index 4a794408a..113cc2031 100644 --- a/src/Microsoft.OpenApi/Reader/V3/OpenApiSecuritySchemeDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V3/OpenApiSecuritySchemeDeserializer.cs @@ -59,7 +59,7 @@ internal static partial class OpenApiV3Deserializer {s => s.StartsWith("x-"), (o, p, n, _) => o.AddExtension(p, LoadExtension(p,n))} }; - public static OpenApiSecurityScheme LoadSecurityScheme(ParseNode node, OpenApiDocument hostDocument = null) + public static OpenApiSecurityScheme LoadSecurityScheme(ParseNode node, OpenApiDocument hostDocument) { var mapNode = node.CheckMapNode("securityScheme"); var pointer = mapNode.GetReferencePointer(); @@ -72,7 +72,7 @@ public static OpenApiSecurityScheme LoadSecurityScheme(ParseNode node, OpenApiDo var securityScheme = new OpenApiSecurityScheme(); foreach (var property in mapNode) { - property.ParseField(securityScheme, _securitySchemeFixedFields, _securitySchemePatternFields); + property.ParseField(securityScheme, _securitySchemeFixedFields, _securitySchemePatternFields, hostDocument); } return securityScheme; diff --git a/src/Microsoft.OpenApi/Reader/V3/OpenApiServerDeserializer.cs b/src/Microsoft.OpenApi/Reader/V3/OpenApiServerDeserializer.cs index 9f56f764c..52ee335c0 100644 --- a/src/Microsoft.OpenApi/Reader/V3/OpenApiServerDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V3/OpenApiServerDeserializer.cs @@ -34,7 +34,7 @@ internal static partial class OpenApiV3Deserializer {s => s.StartsWith("x-"), (o, p, n, _) => o.AddExtension(p, LoadExtension(p,n))} }; - public static OpenApiServer LoadServer(ParseNode node, OpenApiDocument hostDocument = null) + public static OpenApiServer LoadServer(ParseNode node, OpenApiDocument hostDocument) { var mapNode = node.CheckMapNode("server"); diff --git a/src/Microsoft.OpenApi/Reader/V3/OpenApiServerVariableDeserializer.cs b/src/Microsoft.OpenApi/Reader/V3/OpenApiServerVariableDeserializer.cs index dc04b9e4a..9436e62fe 100644 --- a/src/Microsoft.OpenApi/Reader/V3/OpenApiServerVariableDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V3/OpenApiServerVariableDeserializer.cs @@ -36,7 +36,7 @@ internal static partial class OpenApiV3Deserializer {s => s.StartsWith("x-"), (o, p, n, _) => o.AddExtension(p, LoadExtension(p,n))} }; - public static OpenApiServerVariable LoadServerVariable(ParseNode node, OpenApiDocument hostDocument = null) + public static OpenApiServerVariable LoadServerVariable(ParseNode node, OpenApiDocument hostDocument) { var mapNode = node.CheckMapNode("serverVariable"); diff --git a/src/Microsoft.OpenApi/Reader/V3/OpenApiTagDeserializer.cs b/src/Microsoft.OpenApi/Reader/V3/OpenApiTagDeserializer.cs index 218399cbb..e6efafae7 100644 --- a/src/Microsoft.OpenApi/Reader/V3/OpenApiTagDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V3/OpenApiTagDeserializer.cs @@ -34,7 +34,7 @@ internal static partial class OpenApiV3Deserializer {s => s.StartsWith("x-"), (o, p, n, _) => o.AddExtension(p, LoadExtension(p,n))} }; - public static OpenApiTag LoadTag(ParseNode n, OpenApiDocument hostDocument = null) + public static OpenApiTag LoadTag(ParseNode n, OpenApiDocument hostDocument) { var mapNode = n.CheckMapNode("tag"); @@ -42,7 +42,7 @@ public static OpenApiTag LoadTag(ParseNode n, OpenApiDocument hostDocument = nul foreach (var propertyNode in mapNode) { - propertyNode.ParseField(domainObject, _tagFixedFields, _tagPatternFields); + propertyNode.ParseField(domainObject, _tagFixedFields, _tagPatternFields, hostDocument); } return domainObject; diff --git a/src/Microsoft.OpenApi/Reader/V3/OpenApiV3Deserializer.cs b/src/Microsoft.OpenApi/Reader/V3/OpenApiV3Deserializer.cs index 6fa8406bf..cad424c50 100644 --- a/src/Microsoft.OpenApi/Reader/V3/OpenApiV3Deserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V3/OpenApiV3Deserializer.cs @@ -24,7 +24,7 @@ private static void ParseMap( T domainObject, FixedFieldMap fixedFieldMap, PatternFieldMap patternFieldMap, - OpenApiDocument hostDocument = null) + OpenApiDocument hostDocument) { if (mapNode == null) { @@ -163,7 +163,7 @@ private static RuntimeExpressionAnyWrapper LoadRuntimeExpressionAnyWrapper(Parse }; } - public static OpenApiAny LoadAny(ParseNode node, OpenApiDocument hostDocument = null) + public static OpenApiAny LoadAny(ParseNode node, OpenApiDocument hostDocument) { return new OpenApiAny(node.CreateAny()); } diff --git a/src/Microsoft.OpenApi/Reader/V3/OpenApiXmlDeserializer.cs b/src/Microsoft.OpenApi/Reader/V3/OpenApiXmlDeserializer.cs index b57b641c4..51b66d348 100644 --- a/src/Microsoft.OpenApi/Reader/V3/OpenApiXmlDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V3/OpenApiXmlDeserializer.cs @@ -44,14 +44,14 @@ internal static partial class OpenApiV3Deserializer {s => s.StartsWith("x-"), (o, p, n, _) => o.AddExtension(p, LoadExtension(p,n))} }; - public static OpenApiXml LoadXml(ParseNode node, OpenApiDocument hostDocument = null) + public static OpenApiXml LoadXml(ParseNode node, OpenApiDocument hostDocument) { var mapNode = node.CheckMapNode("xml"); var xml = new OpenApiXml(); foreach (var property in mapNode) { - property.ParseField(xml, _xmlFixedFields, _xmlPatternFields); + property.ParseField(xml, _xmlFixedFields, _xmlPatternFields, hostDocument); } return xml; diff --git a/src/Microsoft.OpenApi/Reader/V31/OpenApiCallbackDeserializer.cs b/src/Microsoft.OpenApi/Reader/V31/OpenApiCallbackDeserializer.cs index 580ce1356..2f7a3e5c6 100644 --- a/src/Microsoft.OpenApi/Reader/V31/OpenApiCallbackDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V31/OpenApiCallbackDeserializer.cs @@ -24,7 +24,7 @@ internal static partial class OpenApiV31Deserializer {s => s.StartsWith("x-", StringComparison.OrdinalIgnoreCase), (o, p, n, _) => o.AddExtension(p, LoadExtension(p,n))}, }; - public static OpenApiCallback LoadCallback(ParseNode node, OpenApiDocument hostDocument = null) + public static OpenApiCallback LoadCallback(ParseNode node, OpenApiDocument hostDocument) { var mapNode = node.CheckMapNode("callback"); diff --git a/src/Microsoft.OpenApi/Reader/V31/OpenApiComponentsDeserializer.cs b/src/Microsoft.OpenApi/Reader/V31/OpenApiComponentsDeserializer.cs index e70087d4b..c9dccde5d 100644 --- a/src/Microsoft.OpenApi/Reader/V31/OpenApiComponentsDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V31/OpenApiComponentsDeserializer.cs @@ -34,7 +34,7 @@ internal static partial class OpenApiV31Deserializer {s => s.StartsWith("x-", StringComparison.OrdinalIgnoreCase), (o, p, n, _) => o.AddExtension(p, LoadExtension(p, n))} }; - public static OpenApiComponents LoadComponents(ParseNode node, OpenApiDocument hostDocument = null) + public static OpenApiComponents LoadComponents(ParseNode node, OpenApiDocument hostDocument) { var mapNode = node.CheckMapNode("components"); var components = new OpenApiComponents(); diff --git a/src/Microsoft.OpenApi/Reader/V31/OpenApiContactDeserializer.cs b/src/Microsoft.OpenApi/Reader/V31/OpenApiContactDeserializer.cs index 7434deeec..801eb2de9 100644 --- a/src/Microsoft.OpenApi/Reader/V31/OpenApiContactDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V31/OpenApiContactDeserializer.cs @@ -38,7 +38,7 @@ internal static partial class OpenApiV31Deserializer {s => s.StartsWith("x-"), (o, p, n, _) => o.AddExtension(p, LoadExtension(p,n))} }; - public static OpenApiContact LoadContact(ParseNode node, OpenApiDocument hostDocument = null) + public static OpenApiContact LoadContact(ParseNode node, OpenApiDocument hostDocument) { var mapNode = node as MapNode; var contact = new OpenApiContact(); diff --git a/src/Microsoft.OpenApi/Reader/V31/OpenApiDiscriminatorDeserializer.cs b/src/Microsoft.OpenApi/Reader/V31/OpenApiDiscriminatorDeserializer.cs index 51122a9c8..90e904f60 100644 --- a/src/Microsoft.OpenApi/Reader/V31/OpenApiDiscriminatorDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V31/OpenApiDiscriminatorDeserializer.cs @@ -33,14 +33,14 @@ internal static partial class OpenApiV31Deserializer {s => s.StartsWith("x-"), (o, p, n, _) => o.AddExtension(p, LoadExtension(p,n))} }; - public static OpenApiDiscriminator LoadDiscriminator(ParseNode node, OpenApiDocument hostDocument = null) + public static OpenApiDiscriminator LoadDiscriminator(ParseNode node, OpenApiDocument hostDocument) { var mapNode = node.CheckMapNode("discriminator"); var discriminator = new OpenApiDiscriminator(); foreach (var property in mapNode) { - property.ParseField(discriminator, _discriminatorFixedFields, _discriminatorPatternFields); + property.ParseField(discriminator, _discriminatorFixedFields, _discriminatorPatternFields, hostDocument); } return discriminator; diff --git a/src/Microsoft.OpenApi/Reader/V31/OpenApiEncodingDeserializer.cs b/src/Microsoft.OpenApi/Reader/V31/OpenApiEncodingDeserializer.cs index b54c5e75b..a555b7f00 100644 --- a/src/Microsoft.OpenApi/Reader/V31/OpenApiEncodingDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V31/OpenApiEncodingDeserializer.cs @@ -50,14 +50,14 @@ internal static partial class OpenApiV31Deserializer {s => s.StartsWith("x-"), (o, p, n, _) => o.AddExtension(p, LoadExtension(p,n))} }; - public static OpenApiEncoding LoadEncoding(ParseNode node, OpenApiDocument hostDocument = null) + public static OpenApiEncoding LoadEncoding(ParseNode node, OpenApiDocument hostDocument) { var mapNode = node.CheckMapNode("encoding"); var encoding = new OpenApiEncoding(); foreach (var property in mapNode) { - property.ParseField(encoding, _encodingFixedFields, _encodingPatternFields); + property.ParseField(encoding, _encodingFixedFields, _encodingPatternFields, hostDocument); } return encoding; diff --git a/src/Microsoft.OpenApi/Reader/V31/OpenApiExampleDeserializer.cs b/src/Microsoft.OpenApi/Reader/V31/OpenApiExampleDeserializer.cs index 0035360d5..f7038e595 100644 --- a/src/Microsoft.OpenApi/Reader/V31/OpenApiExampleDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V31/OpenApiExampleDeserializer.cs @@ -47,7 +47,7 @@ internal static partial class OpenApiV31Deserializer {s => s.StartsWith("x-"), (o, p, n, _) => o.AddExtension(p, LoadExtension(p,n))} }; - public static OpenApiExample LoadExample(ParseNode node, OpenApiDocument hostDocument = null) + public static OpenApiExample LoadExample(ParseNode node, OpenApiDocument hostDocument) { var mapNode = node.CheckMapNode("example"); @@ -61,7 +61,7 @@ public static OpenApiExample LoadExample(ParseNode node, OpenApiDocument hostDoc var example = new OpenApiExample(); foreach (var property in mapNode) { - property.ParseField(example, _exampleFixedFields, _examplePatternFields); + property.ParseField(example, _exampleFixedFields, _examplePatternFields, hostDocument); } return example; diff --git a/src/Microsoft.OpenApi/Reader/V31/OpenApiExternalDocsDeserializer.cs b/src/Microsoft.OpenApi/Reader/V31/OpenApiExternalDocsDeserializer.cs index f42288fcf..56dd2bc77 100644 --- a/src/Microsoft.OpenApi/Reader/V31/OpenApiExternalDocsDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V31/OpenApiExternalDocsDeserializer.cs @@ -36,7 +36,7 @@ internal static partial class OpenApiV31Deserializer {s => s.StartsWith("x-"), (o, p, n, _) => o.AddExtension(p, LoadExtension(p, n))} }; - public static OpenApiExternalDocs LoadExternalDocs(ParseNode node, OpenApiDocument hostDocument = null) + public static OpenApiExternalDocs LoadExternalDocs(ParseNode node, OpenApiDocument hostDocument) { var mapNode = node.CheckMapNode("externalDocs"); diff --git a/src/Microsoft.OpenApi/Reader/V31/OpenApiHeaderDeserializer.cs b/src/Microsoft.OpenApi/Reader/V31/OpenApiHeaderDeserializer.cs index d3657db02..c89ff90f7 100644 --- a/src/Microsoft.OpenApi/Reader/V31/OpenApiHeaderDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V31/OpenApiHeaderDeserializer.cs @@ -81,7 +81,7 @@ internal static partial class OpenApiV31Deserializer {s => s.StartsWith("x-"), (o, p, n, _) => o.AddExtension(p, LoadExtension(p,n))} }; - public static OpenApiHeader LoadHeader(ParseNode node, OpenApiDocument hostDocument = null) + public static OpenApiHeader LoadHeader(ParseNode node, OpenApiDocument hostDocument) { var mapNode = node.CheckMapNode("header"); @@ -95,7 +95,7 @@ public static OpenApiHeader LoadHeader(ParseNode node, OpenApiDocument hostDocum var header = new OpenApiHeader(); foreach (var property in mapNode) { - property.ParseField(header, _headerFixedFields, _headerPatternFields); + property.ParseField(header, _headerFixedFields, _headerPatternFields, hostDocument); } return header; diff --git a/src/Microsoft.OpenApi/Reader/V31/OpenApiInfoDeserializer.cs b/src/Microsoft.OpenApi/Reader/V31/OpenApiInfoDeserializer.cs index 6476e1acc..d3aed5511 100644 --- a/src/Microsoft.OpenApi/Reader/V31/OpenApiInfoDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V31/OpenApiInfoDeserializer.cs @@ -62,7 +62,7 @@ internal static partial class OpenApiV31Deserializer {s => s.StartsWith("x-"), (o, k, n, _) => o.AddExtension(k,LoadExtension(k, n))} }; - public static OpenApiInfo LoadInfo(ParseNode node, OpenApiDocument hostDocument = null) + public static OpenApiInfo LoadInfo(ParseNode node, OpenApiDocument hostDocument) { var mapNode = node.CheckMapNode("Info"); var info = new OpenApiInfo(); diff --git a/src/Microsoft.OpenApi/Reader/V31/OpenApiLicenseDeserializer.cs b/src/Microsoft.OpenApi/Reader/V31/OpenApiLicenseDeserializer.cs index efddbc2b1..303f2f65a 100644 --- a/src/Microsoft.OpenApi/Reader/V31/OpenApiLicenseDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V31/OpenApiLicenseDeserializer.cs @@ -38,7 +38,7 @@ internal static partial class OpenApiV31Deserializer {s => s.StartsWith("x-"), (o, p, n, _) => o.AddExtension(p, LoadExtension(p,n))} }; - internal static OpenApiLicense LoadLicense(ParseNode node, OpenApiDocument hostDocument = null) + internal static OpenApiLicense LoadLicense(ParseNode node, OpenApiDocument hostDocument) { var mapNode = node.CheckMapNode("License"); diff --git a/src/Microsoft.OpenApi/Reader/V31/OpenApiLinkDeserializer.cs b/src/Microsoft.OpenApi/Reader/V31/OpenApiLinkDeserializer.cs index aa1e26ea1..8ec6387fc 100644 --- a/src/Microsoft.OpenApi/Reader/V31/OpenApiLinkDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V31/OpenApiLinkDeserializer.cs @@ -52,7 +52,7 @@ internal static partial class OpenApiV31Deserializer {s => s.StartsWith("x-"), (o, p, n, _) => o.AddExtension(p, LoadExtension(p,n))}, }; - public static OpenApiLink LoadLink(ParseNode node, OpenApiDocument hostDocument = null) + public static OpenApiLink LoadLink(ParseNode node, OpenApiDocument hostDocument) { var mapNode = node.CheckMapNode("link"); var link = new OpenApiLink(); diff --git a/src/Microsoft.OpenApi/Reader/V31/OpenApiMediaTypeDeserializer.cs b/src/Microsoft.OpenApi/Reader/V31/OpenApiMediaTypeDeserializer.cs index c0ce9b843..36f90383c 100644 --- a/src/Microsoft.OpenApi/Reader/V31/OpenApiMediaTypeDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V31/OpenApiMediaTypeDeserializer.cs @@ -70,7 +70,7 @@ internal static partial class OpenApiV31Deserializer } }; - public static OpenApiMediaType LoadMediaType(ParseNode node, OpenApiDocument hostDocument = null) + public static OpenApiMediaType LoadMediaType(ParseNode node, OpenApiDocument hostDocument) { var mapNode = node.CheckMapNode(OpenApiConstants.Content); diff --git a/src/Microsoft.OpenApi/Reader/V31/OpenApiOAuthFlowDeserializer.cs b/src/Microsoft.OpenApi/Reader/V31/OpenApiOAuthFlowDeserializer.cs index 199cf14e7..5b18caecf 100644 --- a/src/Microsoft.OpenApi/Reader/V31/OpenApiOAuthFlowDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V31/OpenApiOAuthFlowDeserializer.cs @@ -41,14 +41,14 @@ internal static partial class OpenApiV31Deserializer {s => s.StartsWith("x-"), (o, p, n, _) => o.AddExtension(p, LoadExtension(p,n))} }; - public static OpenApiOAuthFlow LoadOAuthFlow(ParseNode node, OpenApiDocument hostDocument = null) + public static OpenApiOAuthFlow LoadOAuthFlow(ParseNode node, OpenApiDocument hostDocument) { var mapNode = node.CheckMapNode("OAuthFlow"); var oauthFlow = new OpenApiOAuthFlow(); foreach (var property in mapNode) { - property.ParseField(oauthFlow, _oAuthFlowFixedFileds, _oAuthFlowPatternFields); + property.ParseField(oauthFlow, _oAuthFlowFixedFileds, _oAuthFlowPatternFields, hostDocument); } return oauthFlow; diff --git a/src/Microsoft.OpenApi/Reader/V31/OpenApiOAuthFlowsDeserializer.cs b/src/Microsoft.OpenApi/Reader/V31/OpenApiOAuthFlowsDeserializer.cs index 28316ec9b..b20b96775 100644 --- a/src/Microsoft.OpenApi/Reader/V31/OpenApiOAuthFlowsDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V31/OpenApiOAuthFlowsDeserializer.cs @@ -10,7 +10,7 @@ namespace Microsoft.OpenApi.Reader.V31 /// internal static partial class OpenApiV31Deserializer { - private static readonly FixedFieldMap _oAuthFlowsFixedFileds = + private static readonly FixedFieldMap _oAuthFlowsFixedFields = new() { {"implicit", (o, n, t) => o.Implicit = LoadOAuthFlow(n, t)}, @@ -25,14 +25,14 @@ internal static partial class OpenApiV31Deserializer {s => s.StartsWith("x-"), (o, p, n, _) => o.AddExtension(p, LoadExtension(p,n))} }; - public static OpenApiOAuthFlows LoadOAuthFlows(ParseNode node, OpenApiDocument hostDocument = null) + public static OpenApiOAuthFlows LoadOAuthFlows(ParseNode node, OpenApiDocument hostDocument) { var mapNode = node.CheckMapNode("OAuthFlows"); var oAuthFlows = new OpenApiOAuthFlows(); foreach (var property in mapNode) { - property.ParseField(oAuthFlows, _oAuthFlowsFixedFileds, _oAuthFlowsPatternFields); + property.ParseField(oAuthFlows, _oAuthFlowsFixedFields, _oAuthFlowsPatternFields, hostDocument); } return oAuthFlows; diff --git a/src/Microsoft.OpenApi/Reader/V31/OpenApiOperationDeserializer.cs b/src/Microsoft.OpenApi/Reader/V31/OpenApiOperationDeserializer.cs index b2946fab5..2d6c831e3 100644 --- a/src/Microsoft.OpenApi/Reader/V31/OpenApiOperationDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V31/OpenApiOperationDeserializer.cs @@ -93,7 +93,7 @@ internal static partial class OpenApiV31Deserializer {s => s.StartsWith("x-"), (o, p, n, _) => o.AddExtension(p, LoadExtension(p,n))}, }; - internal static OpenApiOperation LoadOperation(ParseNode node, OpenApiDocument hostDocument = null) + internal static OpenApiOperation LoadOperation(ParseNode node, OpenApiDocument hostDocument) { var mapNode = node.CheckMapNode("Operation"); @@ -104,7 +104,7 @@ internal static OpenApiOperation LoadOperation(ParseNode node, OpenApiDocument h return operation; } - private static OpenApiTagReference LoadTagByReference(string tagName, OpenApiDocument hostDocument = null) + private static OpenApiTagReference LoadTagByReference(string tagName, OpenApiDocument hostDocument) { var tagObject = new OpenApiTagReference(tagName, hostDocument); return tagObject; diff --git a/src/Microsoft.OpenApi/Reader/V31/OpenApiParameterDeserializer.cs b/src/Microsoft.OpenApi/Reader/V31/OpenApiParameterDeserializer.cs index e8f4e5a93..3e7bca079 100644 --- a/src/Microsoft.OpenApi/Reader/V31/OpenApiParameterDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V31/OpenApiParameterDeserializer.cs @@ -130,7 +130,7 @@ internal static partial class OpenApiV31Deserializer } }; - public static OpenApiParameter LoadParameter(ParseNode node, OpenApiDocument hostDocument = null) + public static OpenApiParameter LoadParameter(ParseNode node, OpenApiDocument hostDocument) { var mapNode = node.CheckMapNode("parameter"); diff --git a/src/Microsoft.OpenApi/Reader/V31/OpenApiPathItemDeserializer.cs b/src/Microsoft.OpenApi/Reader/V31/OpenApiPathItemDeserializer.cs index 8797b03e6..22a0030b0 100644 --- a/src/Microsoft.OpenApi/Reader/V31/OpenApiPathItemDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V31/OpenApiPathItemDeserializer.cs @@ -51,7 +51,7 @@ internal static partial class OpenApiV31Deserializer {s => s.StartsWith("x-"), (o, p, n, _) => o.AddExtension(p, LoadExtension(p,n))} }; - public static OpenApiPathItem LoadPathItem(ParseNode node, OpenApiDocument hostDocument = null) + public static OpenApiPathItem LoadPathItem(ParseNode node, OpenApiDocument hostDocument) { var mapNode = node.CheckMapNode("PathItem"); diff --git a/src/Microsoft.OpenApi/Reader/V31/OpenApiPathsDeserializer.cs b/src/Microsoft.OpenApi/Reader/V31/OpenApiPathsDeserializer.cs index e9fef44a8..c72394bf2 100644 --- a/src/Microsoft.OpenApi/Reader/V31/OpenApiPathsDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V31/OpenApiPathsDeserializer.cs @@ -18,7 +18,7 @@ internal static partial class OpenApiV31Deserializer {s => s.StartsWith("x-"), (o, p, n, _) => o.AddExtension(p, LoadExtension(p,n))} }; - public static OpenApiPaths LoadPaths(ParseNode node, OpenApiDocument hostDocument = null) + public static OpenApiPaths LoadPaths(ParseNode node, OpenApiDocument hostDocument) { var mapNode = node.CheckMapNode("Paths"); diff --git a/src/Microsoft.OpenApi/Reader/V31/OpenApiRequestBodyDeserializer.cs b/src/Microsoft.OpenApi/Reader/V31/OpenApiRequestBodyDeserializer.cs index 7acea65c0..faa61eed2 100644 --- a/src/Microsoft.OpenApi/Reader/V31/OpenApiRequestBodyDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V31/OpenApiRequestBodyDeserializer.cs @@ -41,7 +41,7 @@ internal static partial class OpenApiV31Deserializer {s => s.StartsWith("x-"), (o, p, n, _) => o.AddExtension(p, LoadExtension(p,n))} }; - public static OpenApiRequestBody LoadRequestBody(ParseNode node, OpenApiDocument hostDocument = null) + public static OpenApiRequestBody LoadRequestBody(ParseNode node, OpenApiDocument hostDocument) { var mapNode = node.CheckMapNode("requestBody"); @@ -55,7 +55,7 @@ public static OpenApiRequestBody LoadRequestBody(ParseNode node, OpenApiDocument var requestBody = new OpenApiRequestBody(); foreach (var property in mapNode) { - property.ParseField(requestBody, _requestBodyFixedFields, _requestBodyPatternFields); + property.ParseField(requestBody, _requestBodyFixedFields, _requestBodyPatternFields, hostDocument); } return requestBody; diff --git a/src/Microsoft.OpenApi/Reader/V31/OpenApiResponseDeserializer.cs b/src/Microsoft.OpenApi/Reader/V31/OpenApiResponseDeserializer.cs index 611574bf2..4edb5e14d 100644 --- a/src/Microsoft.OpenApi/Reader/V31/OpenApiResponseDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V31/OpenApiResponseDeserializer.cs @@ -46,7 +46,7 @@ internal static partial class OpenApiV31Deserializer {s => s.StartsWith("x-"), (o, p, n, _) => o.AddExtension(p, LoadExtension(p,n))} }; - public static OpenApiResponse LoadResponse(ParseNode node, OpenApiDocument hostDocument = null) + public static OpenApiResponse LoadResponse(ParseNode node, OpenApiDocument hostDocument) { var mapNode = node.CheckMapNode("response"); diff --git a/src/Microsoft.OpenApi/Reader/V31/OpenApiResponsesDeserializer.cs b/src/Microsoft.OpenApi/Reader/V31/OpenApiResponsesDeserializer.cs index 42cb3b826..228a0045e 100644 --- a/src/Microsoft.OpenApi/Reader/V31/OpenApiResponsesDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V31/OpenApiResponsesDeserializer.cs @@ -21,7 +21,7 @@ internal static partial class OpenApiV31Deserializer {s => s.StartsWith("x-"), (o, p, n, _) => o.AddExtension(p, LoadExtension(p,n))} }; - public static OpenApiResponses LoadResponses(ParseNode node, OpenApiDocument hostDocument = null) + public static OpenApiResponses LoadResponses(ParseNode node, OpenApiDocument hostDocument) { var mapNode = node.CheckMapNode("Responses"); diff --git a/src/Microsoft.OpenApi/Reader/V31/OpenApiSchemaDeserializer.cs b/src/Microsoft.OpenApi/Reader/V31/OpenApiSchemaDeserializer.cs index 83be6f773..36db155c1 100644 --- a/src/Microsoft.OpenApi/Reader/V31/OpenApiSchemaDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V31/OpenApiSchemaDeserializer.cs @@ -151,11 +151,11 @@ internal static partial class OpenApiV31Deserializer }, { "not", - (o, n, _) => o.Not = LoadSchema(n) + (o, n, doc) => o.Not = LoadSchema(n, doc) }, { "items", - (o, n, _) => o.Items = LoadSchema(n) + (o, n, doc) => o.Items = LoadSchema(n, doc) }, { "properties", @@ -166,7 +166,7 @@ internal static partial class OpenApiV31Deserializer (o, n, t) => o.PatternProperties = n.CreateMap(LoadSchema, t) }, { - "additionalProperties", (o, n, _) => + "additionalProperties", (o, n, doc) => { if (n is ValueNode) { @@ -174,7 +174,7 @@ internal static partial class OpenApiV31Deserializer } else { - o.AdditionalProperties = LoadSchema(n); + o.AdditionalProperties = LoadSchema(n, doc); } } }, @@ -203,7 +203,7 @@ internal static partial class OpenApiV31Deserializer }, { "discriminator", - (o, n, _) => o.Discriminator = LoadDiscriminator(n) + (o, n, doc) => o.Discriminator = LoadDiscriminator(n, doc) }, { "readOnly", @@ -215,11 +215,11 @@ internal static partial class OpenApiV31Deserializer }, { "xml", - (o, n, _) => o.Xml = LoadXml(n) + (o, n, doc) => o.Xml = LoadXml(n, doc) }, { "externalDocs", - (o, n, _) => o.ExternalDocs = LoadExternalDocs(n) + (o, n, doc) => o.ExternalDocs = LoadExternalDocs(n, doc) }, { "example", @@ -240,7 +240,7 @@ internal static partial class OpenApiV31Deserializer {s => s.StartsWith("x-"), (o, p, n, _) => o.AddExtension(p, LoadExtension(p,n))} }; - public static OpenApiSchema LoadSchema(ParseNode node, OpenApiDocument hostDocument = null) + public static OpenApiSchema LoadSchema(ParseNode node, OpenApiDocument hostDocument) { var mapNode = node.CheckMapNode(OpenApiConstants.Schema); @@ -261,7 +261,7 @@ public static OpenApiSchema LoadSchema(ParseNode node, OpenApiDocument hostDocum if (isRecognized) { - propertyNode.ParseField(schema, _openApiSchemaFixedFields, _openApiSchemaPatternFields); + propertyNode.ParseField(schema, _openApiSchemaFixedFields, _openApiSchemaPatternFields, hostDocument); } else { diff --git a/src/Microsoft.OpenApi/Reader/V31/OpenApiSecuritySchemeDeserializer.cs b/src/Microsoft.OpenApi/Reader/V31/OpenApiSecuritySchemeDeserializer.cs index 7b5ff5cb8..baaf20428 100644 --- a/src/Microsoft.OpenApi/Reader/V31/OpenApiSecuritySchemeDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V31/OpenApiSecuritySchemeDeserializer.cs @@ -75,7 +75,7 @@ internal static partial class OpenApiV31Deserializer {s => s.StartsWith("x-"), (o, p, n, _) => o.AddExtension(p, LoadExtension(p,n))} }; - public static OpenApiSecurityScheme LoadSecurityScheme(ParseNode node, OpenApiDocument hostDocument = null) + public static OpenApiSecurityScheme LoadSecurityScheme(ParseNode node, OpenApiDocument hostDocument) { var mapNode = node.CheckMapNode("securityScheme"); @@ -89,7 +89,7 @@ public static OpenApiSecurityScheme LoadSecurityScheme(ParseNode node, OpenApiDo var securityScheme = new OpenApiSecurityScheme(); foreach (var property in mapNode) { - property.ParseField(securityScheme, _securitySchemeFixedFields, _securitySchemePatternFields); + property.ParseField(securityScheme, _securitySchemeFixedFields, _securitySchemePatternFields, hostDocument); } return securityScheme; diff --git a/src/Microsoft.OpenApi/Reader/V31/OpenApiServerDeserializer.cs b/src/Microsoft.OpenApi/Reader/V31/OpenApiServerDeserializer.cs index efe25fedb..2ae8ac340 100644 --- a/src/Microsoft.OpenApi/Reader/V31/OpenApiServerDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V31/OpenApiServerDeserializer.cs @@ -40,7 +40,7 @@ internal static partial class OpenApiV31Deserializer {s => s.StartsWith("x-"), (o, p, n, _) => o.AddExtension(p, LoadExtension(p,n))} }; - public static OpenApiServer LoadServer(ParseNode node, OpenApiDocument hostDocument = null) + public static OpenApiServer LoadServer(ParseNode node, OpenApiDocument hostDocument) { var mapNode = node.CheckMapNode("server"); diff --git a/src/Microsoft.OpenApi/Reader/V31/OpenApiServerVariableDeserializer.cs b/src/Microsoft.OpenApi/Reader/V31/OpenApiServerVariableDeserializer.cs index 74dc1c504..0c6e8b756 100644 --- a/src/Microsoft.OpenApi/Reader/V31/OpenApiServerVariableDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V31/OpenApiServerVariableDeserializer.cs @@ -42,7 +42,7 @@ internal static partial class OpenApiV31Deserializer {s => s.StartsWith("x-"), (o, p, n, _) => o.AddExtension(p, LoadExtension(p,n))} }; - public static OpenApiServerVariable LoadServerVariable(ParseNode node, OpenApiDocument hostDocument = null) + public static OpenApiServerVariable LoadServerVariable(ParseNode node, OpenApiDocument hostDocument) { var mapNode = node.CheckMapNode("serverVariable"); diff --git a/src/Microsoft.OpenApi/Reader/V31/OpenApiTagDeserializer.cs b/src/Microsoft.OpenApi/Reader/V31/OpenApiTagDeserializer.cs index a6dfe5f1f..f1b0065cc 100644 --- a/src/Microsoft.OpenApi/Reader/V31/OpenApiTagDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V31/OpenApiTagDeserializer.cs @@ -40,7 +40,7 @@ internal static partial class OpenApiV31Deserializer {s => s.StartsWith("x-"), (o, p, n, _) => o.AddExtension(p, LoadExtension(p,n))} }; - public static OpenApiTag LoadTag(ParseNode n, OpenApiDocument hostDocument = null) + public static OpenApiTag LoadTag(ParseNode n, OpenApiDocument hostDocument) { var mapNode = n.CheckMapNode("tag"); @@ -48,7 +48,7 @@ public static OpenApiTag LoadTag(ParseNode n, OpenApiDocument hostDocument = nul foreach (var propertyNode in mapNode) { - propertyNode.ParseField(domainObject, _tagFixedFields, _tagPatternFields); + propertyNode.ParseField(domainObject, _tagFixedFields, _tagPatternFields, hostDocument); } return domainObject; diff --git a/src/Microsoft.OpenApi/Reader/V31/OpenApiV31Deserializer.cs b/src/Microsoft.OpenApi/Reader/V31/OpenApiV31Deserializer.cs index a037dc3c1..2a2fdbfe9 100644 --- a/src/Microsoft.OpenApi/Reader/V31/OpenApiV31Deserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V31/OpenApiV31Deserializer.cs @@ -128,7 +128,7 @@ private static RuntimeExpressionAnyWrapper LoadRuntimeExpressionAnyWrapper(Parse }; } - public static JsonNode LoadAny(ParseNode node, OpenApiDocument hostDocument = null) + public static JsonNode LoadAny(ParseNode node, OpenApiDocument hostDocument) { return node.CreateAny(); } diff --git a/src/Microsoft.OpenApi/Reader/V31/OpenApiXmlDeserializer.cs b/src/Microsoft.OpenApi/Reader/V31/OpenApiXmlDeserializer.cs index 4c7a17b85..13870f341 100644 --- a/src/Microsoft.OpenApi/Reader/V31/OpenApiXmlDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V31/OpenApiXmlDeserializer.cs @@ -54,14 +54,14 @@ internal static partial class OpenApiV31Deserializer {s => s.StartsWith("x-"), (o, p, n, _) => o.AddExtension(p, LoadExtension(p,n))} }; - public static OpenApiXml LoadXml(ParseNode node, OpenApiDocument hostDocument = null) + public static OpenApiXml LoadXml(ParseNode node, OpenApiDocument hostDocument) { var mapNode = node.CheckMapNode("xml"); var xml = new OpenApiXml(); foreach (var property in mapNode) { - property.ParseField(xml, _xmlFixedFields, _xmlPatternFields); + property.ParseField(xml, _xmlFixedFields, _xmlPatternFields, hostDocument); } return xml; diff --git a/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiHeaderTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiHeaderTests.cs index 80948f93b..cc15d8427 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiHeaderTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiHeaderTests.cs @@ -28,7 +28,7 @@ public void ParseHeaderWithDefaultShouldSucceed() } // Act - var header = OpenApiV2Deserializer.LoadHeader(node); + var header = OpenApiV2Deserializer.LoadHeader(node, new()); // Assert header.Should().BeEquivalentTo( @@ -57,7 +57,7 @@ public void ParseHeaderWithEnumShouldSucceed() } // Act - var header = OpenApiV2Deserializer.LoadHeader(node); + var header = OpenApiV2Deserializer.LoadHeader(node, new()); // Assert header.Should().BeEquivalentTo( diff --git a/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiOperationTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiOperationTests.cs index 4142e9fcd..2b11566bb 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiOperationTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiOperationTests.cs @@ -227,7 +227,7 @@ public void ParseBasicOperationShouldSucceed() } // Act - var operation = OpenApiV2Deserializer.LoadOperation(node); + var operation = OpenApiV2Deserializer.LoadOperation(node, new()); // Assert operation.Should().BeEquivalentTo(_basicOperation); @@ -245,7 +245,7 @@ public void ParseBasicOperationTwiceShouldYieldSameObject() } // Act - var operation = OpenApiV2Deserializer.LoadOperation(node); + var operation = OpenApiV2Deserializer.LoadOperation(node, new()); // Assert operation.Should().BeEquivalentTo(_basicOperation); @@ -262,7 +262,7 @@ public void ParseOperationWithBodyShouldSucceed() } // Act - var operation = OpenApiV2Deserializer.LoadOperation(node); + var operation = OpenApiV2Deserializer.LoadOperation(node, new()); // Assert operation.Should().BeEquivalentTo(_operationWithBody, options => options.IgnoringCyclicReferences()); @@ -280,7 +280,7 @@ public void ParseOperationWithBodyTwiceShouldYieldSameObject() } // Act - var operation = OpenApiV2Deserializer.LoadOperation(node); + var operation = OpenApiV2Deserializer.LoadOperation(node, new()); // Assert operation.Should().BeEquivalentTo(_operationWithBody, options => options.IgnoringCyclicReferences()); @@ -297,7 +297,7 @@ public void ParseOperationWithResponseExamplesShouldSucceed() } // Act - var operation = OpenApiV2Deserializer.LoadOperation(node); + var operation = OpenApiV2Deserializer.LoadOperation(node, new()); // Assert operation.Should().BeEquivalentTo( @@ -361,7 +361,7 @@ public void ParseOperationWithEmptyProducesArraySetsResponseSchemaIfExists() node = TestHelper.CreateYamlMapNode(stream); // Act - var operation = OpenApiV2Deserializer.LoadOperation(node); + var operation = OpenApiV2Deserializer.LoadOperation(node, new()); var expected = @"{ ""produces"": [ ""application/octet-stream"" @@ -397,7 +397,7 @@ public void ParseOperationWithBodyAndEmptyConsumesSetsRequestBodySchemaIfExists( node = TestHelper.CreateYamlMapNode(stream); // Act - var operation = OpenApiV2Deserializer.LoadOperation(node); + var operation = OpenApiV2Deserializer.LoadOperation(node, new()); // Assert operation.Should().BeEquivalentTo(_operationWithBody, options => options.IgnoringCyclicReferences()); @@ -414,7 +414,7 @@ public void ParseV2ResponseWithExamplesExtensionWorks() } // Act - var operation = OpenApiV2Deserializer.LoadOperation(node); + var operation = OpenApiV2Deserializer.LoadOperation(node, new()); var actual = operation.SerializeAsYaml(OpenApiSpecVersion.OpenApi3_0); // Assert @@ -464,7 +464,7 @@ public void LoadV3ExamplesInResponseAsExtensionsWorks() } // Act - var operation = OpenApiV3Deserializer.LoadOperation(node); + var operation = OpenApiV3Deserializer.LoadOperation(node, new()); var actual = operation.SerializeAsYaml(OpenApiSpecVersion.OpenApi2_0); // Assert @@ -514,7 +514,7 @@ public void LoadV2OperationWithBodyParameterExamplesWorks() } // Act - var operation = OpenApiV2Deserializer.LoadOperation(node); + var operation = OpenApiV2Deserializer.LoadOperation(node, new()); var actual = operation.SerializeAsYaml(OpenApiSpecVersion.OpenApi3_0); // Assert @@ -565,7 +565,7 @@ public void LoadV3ExamplesInRequestBodyParameterAsExtensionsWorks() } // Act - var operation = OpenApiV3Deserializer.LoadOperation(node); + var operation = OpenApiV3Deserializer.LoadOperation(node, new()); var actual = operation.SerializeAsYaml(OpenApiSpecVersion.OpenApi2_0); // Assert diff --git a/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiParameterTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiParameterTests.cs index 0b4b1a77e..e631dc31d 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiParameterTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiParameterTests.cs @@ -28,7 +28,7 @@ public void ParseBodyParameterShouldSucceed() } // Act - var parameter = OpenApiV2Deserializer.LoadParameter(node); + var parameter = OpenApiV2Deserializer.LoadParameter(node, new()); // Assert // Body parameter is currently not translated via LoadParameter. @@ -47,7 +47,7 @@ public void ParsePathParameterShouldSucceed() } // Act - var parameter = OpenApiV2Deserializer.LoadParameter(node); + var parameter = OpenApiV2Deserializer.LoadParameter(node, new()); // Assert parameter.Should().BeEquivalentTo( @@ -75,7 +75,7 @@ public void ParseQueryParameterShouldSucceed() } // Act - var parameter = OpenApiV2Deserializer.LoadParameter(node); + var parameter = OpenApiV2Deserializer.LoadParameter(node, new()); // Assert parameter.Should().BeEquivalentTo( @@ -109,7 +109,7 @@ public void ParseParameterWithNullLocationShouldSucceed() } // Act - var parameter = OpenApiV2Deserializer.LoadParameter(node); + var parameter = OpenApiV2Deserializer.LoadParameter(node, new()); // Assert parameter.Should().BeEquivalentTo( @@ -137,7 +137,7 @@ public void ParseParameterWithNoLocationShouldSucceed() } // Act - var parameter = OpenApiV2Deserializer.LoadParameter(node); + var parameter = OpenApiV2Deserializer.LoadParameter(node, new()); // Assert parameter.Should().BeEquivalentTo( @@ -165,7 +165,7 @@ public void ParseParameterWithNoSchemaShouldSucceed() } // Act - var parameter = OpenApiV2Deserializer.LoadParameter(node); + var parameter = OpenApiV2Deserializer.LoadParameter(node, new()); // Assert parameter.Should().BeEquivalentTo( @@ -189,7 +189,7 @@ public void ParseParameterWithUnknownLocationShouldSucceed() } // Act - var parameter = OpenApiV2Deserializer.LoadParameter(node); + var parameter = OpenApiV2Deserializer.LoadParameter(node, new()); // Assert parameter.Should().BeEquivalentTo( @@ -217,7 +217,7 @@ public void ParseParameterWithDefaultShouldSucceed() } // Act - var parameter = OpenApiV2Deserializer.LoadParameter(node); + var parameter = OpenApiV2Deserializer.LoadParameter(node, new()); // Assert parameter.Should().BeEquivalentTo( @@ -247,7 +247,7 @@ public void ParseParameterWithEnumShouldSucceed() } // Act - var parameter = OpenApiV2Deserializer.LoadParameter(node); + var parameter = OpenApiV2Deserializer.LoadParameter(node, new()); var expected = new OpenApiParameter { In = ParameterLocation.Path, diff --git a/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiPathItemTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiPathItemTests.cs index 47f3903fa..6c4af9e2a 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiPathItemTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiPathItemTests.cs @@ -257,7 +257,7 @@ public void ParseBasicPathItemWithFormDataShouldSucceed() } // Act - var pathItem = OpenApiV2Deserializer.LoadPathItem(node); + var pathItem = OpenApiV2Deserializer.LoadPathItem(node, new()); // Assert pathItem.Should().BeEquivalentTo(_basicPathItemWithFormData); @@ -274,7 +274,7 @@ public void ParsePathItemWithFormDataPathParameterShouldSucceed() } // Act - var pathItem = OpenApiV2Deserializer.LoadPathItem(node); + var pathItem = OpenApiV2Deserializer.LoadPathItem(node, new()); // Assert // FormData parameters at in the path level are pushed into Operation request bodies. @@ -293,7 +293,7 @@ public void ParsePathItemBodyDataPathParameterShouldSucceed() } // Act - var pathItem = OpenApiV2Deserializer.LoadPathItem(node); + var pathItem = OpenApiV2Deserializer.LoadPathItem(node, new()); // Assert // FormData parameters at in the path level are pushed into Operation request bodies. diff --git a/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiSchemaTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiSchemaTests.cs index aee5aab7e..3ba251e04 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiSchemaTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiSchemaTests.cs @@ -30,7 +30,7 @@ public void ParseSchemaWithDefaultShouldSucceed() } // Act - var schema = OpenApiV2Deserializer.LoadSchema(node); + var schema = OpenApiV2Deserializer.LoadSchema(node, new()); // Assert schema.Should().BeEquivalentTo(new OpenApiSchema @@ -52,7 +52,7 @@ public void ParseSchemaWithExampleShouldSucceed() } // Act - var schema = OpenApiV2Deserializer.LoadSchema(node); + var schema = OpenApiV2Deserializer.LoadSchema(node, new()); // Assert schema.Should().BeEquivalentTo( @@ -75,7 +75,7 @@ public void ParseSchemaWithEnumShouldSucceed() } // Act - var schema = OpenApiV2Deserializer.LoadSchema(node); + var schema = OpenApiV2Deserializer.LoadSchema(node, new()); // Assert var expected = new OpenApiSchema diff --git a/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiSecuritySchemeTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiSecuritySchemeTests.cs index 82565facd..95a4cf68c 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiSecuritySchemeTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiSecuritySchemeTests.cs @@ -33,7 +33,7 @@ public void ParseHttpSecuritySchemeShouldSucceed() var node = new MapNode(context, asJsonNode); // Act - var securityScheme = OpenApiV2Deserializer.LoadSecurityScheme(node); + var securityScheme = OpenApiV2Deserializer.LoadSecurityScheme(node, new()); // Assert securityScheme.Should().BeEquivalentTo( @@ -58,7 +58,7 @@ public void ParseApiKeySecuritySchemeShouldSucceed() var node = new MapNode(context, asJsonNode); // Act - var securityScheme = OpenApiV2Deserializer.LoadSecurityScheme(node); + var securityScheme = OpenApiV2Deserializer.LoadSecurityScheme(node, new()); // Assert securityScheme.Should().BeEquivalentTo( @@ -83,7 +83,7 @@ public void ParseOAuth2ImplicitSecuritySchemeShouldSucceed() var node = new MapNode(context, asJsonNode); // Act - var securityScheme = OpenApiV2Deserializer.LoadSecurityScheme(node); + var securityScheme = OpenApiV2Deserializer.LoadSecurityScheme(node, new()); // Assert securityScheme.Should().BeEquivalentTo( @@ -118,7 +118,7 @@ public void ParseOAuth2PasswordSecuritySchemeShouldSucceed() var node = new MapNode(context, asJsonNode); // Act - var securityScheme = OpenApiV2Deserializer.LoadSecurityScheme(node); + var securityScheme = OpenApiV2Deserializer.LoadSecurityScheme(node, new()); // Assert securityScheme.Should().BeEquivalentTo( @@ -153,7 +153,7 @@ public void ParseOAuth2ApplicationSecuritySchemeShouldSucceed() var node = new MapNode(context, asJsonNode); // Act - var securityScheme = OpenApiV2Deserializer.LoadSecurityScheme(node); + var securityScheme = OpenApiV2Deserializer.LoadSecurityScheme(node, new()); // Assert securityScheme.Should().BeEquivalentTo( @@ -189,7 +189,7 @@ public void ParseOAuth2AccessCodeSecuritySchemeShouldSucceed() var node = new MapNode(context, asJsonNode); // Act - var securityScheme = OpenApiV2Deserializer.LoadSecurityScheme(node); + var securityScheme = OpenApiV2Deserializer.LoadSecurityScheme(node, new()); // Assert securityScheme.Should().BeEquivalentTo( diff --git a/test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiInfoTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiInfoTests.cs index 8ecfcf7d5..36982637c 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiInfoTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiInfoTests.cs @@ -30,7 +30,7 @@ public void ParseBasicInfoShouldSucceed() var node = new MapNode(context, asJsonNode); // Act - var openApiInfo = OpenApiV31Deserializer.LoadInfo(node); + var openApiInfo = OpenApiV31Deserializer.LoadInfo(node, new()); // Assert openApiInfo.Should().BeEquivalentTo( diff --git a/test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiLicenseTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiLicenseTests.cs index cb617064e..14fcd7eae 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiLicenseTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiLicenseTests.cs @@ -33,7 +33,7 @@ public void ParseLicenseWithSpdxIdentifierShouldSucceed() var node = new MapNode(context, asJsonNode); // Act - var license = OpenApiV31Deserializer.LoadLicense(node); + var license = OpenApiV31Deserializer.LoadLicense(node, new()); // Assert license.Should().BeEquivalentTo( diff --git a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiMediaTypeTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiMediaTypeTests.cs index 36710f6ca..db7d55773 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiMediaTypeTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiMediaTypeTests.cs @@ -106,7 +106,7 @@ public void ParseMediaTypeWithEmptyArrayInExamplesWorks() } // Act - var mediaType = OpenApiV3Deserializer.LoadMediaType(node); + var mediaType = OpenApiV3Deserializer.LoadMediaType(node, new()); var serialized = mediaType.SerializeAsJson(OpenApiSpecVersion.OpenApi3_0); // Assert diff --git a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiSchemaTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiSchemaTests.cs index 5a1f2b70b..1b8b5d5c9 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiSchemaTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiSchemaTests.cs @@ -45,7 +45,7 @@ public void ParsePrimitiveSchemaShouldSucceed() var node = new MapNode(context, asJsonNode); // Act - var schema = OpenApiV3Deserializer.LoadSchema(node); + var schema = OpenApiV3Deserializer.LoadSchema(node, new()); // Assert diagnostic.Should().BeEquivalentTo(new OpenApiDiagnostic()); @@ -157,7 +157,7 @@ public void ParseDictionarySchemaShouldSucceed() var node = new MapNode(context, asJsonNode); // Act - var schema = OpenApiV3Deserializer.LoadSchema(node); + var schema = OpenApiV3Deserializer.LoadSchema(node, new()); // Assert diagnostic.Should().BeEquivalentTo(new OpenApiDiagnostic()); @@ -189,7 +189,7 @@ public void ParseBasicSchemaWithExampleShouldSucceed() var node = new MapNode(context, asJsonNode); // Act - var schema = OpenApiV3Deserializer.LoadSchema(node); + var schema = OpenApiV3Deserializer.LoadSchema(node, new()); // Assert diagnostic.Should().BeEquivalentTo(new OpenApiDiagnostic()); From 1368eed03769e62231c82231a0d5e1c1fa52c381 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 31 Dec 2024 21:47:22 +0000 Subject: [PATCH 17/90] chore(deps): bump coverlet.collector from 6.0.2 to 6.0.3 Bumps [coverlet.collector](https://github.com/coverlet-coverage/coverlet) from 6.0.2 to 6.0.3. - [Release notes](https://github.com/coverlet-coverage/coverlet/releases) - [Commits](https://github.com/coverlet-coverage/coverlet/compare/v6.0.2...v6.0.3) --- updated-dependencies: - dependency-name: coverlet.collector dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- .../Microsoft.OpenApi.Readers.Tests.csproj | 2 +- test/Microsoft.OpenApi.Tests/Microsoft.OpenApi.Tests.csproj | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index a0cc5337f..7dbfbed6a 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -16,7 +16,7 @@ - + diff --git a/test/Microsoft.OpenApi.Readers.Tests/Microsoft.OpenApi.Readers.Tests.csproj b/test/Microsoft.OpenApi.Readers.Tests/Microsoft.OpenApi.Readers.Tests.csproj index 5a2e85fed..195b07877 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/Microsoft.OpenApi.Readers.Tests.csproj +++ b/test/Microsoft.OpenApi.Readers.Tests/Microsoft.OpenApi.Readers.Tests.csproj @@ -15,7 +15,7 @@ - + diff --git a/test/Microsoft.OpenApi.Tests/Microsoft.OpenApi.Tests.csproj b/test/Microsoft.OpenApi.Tests/Microsoft.OpenApi.Tests.csproj index 634c70257..565abdf79 100644 --- a/test/Microsoft.OpenApi.Tests/Microsoft.OpenApi.Tests.csproj +++ b/test/Microsoft.OpenApi.Tests/Microsoft.OpenApi.Tests.csproj @@ -8,7 +8,7 @@ - + From df3744d165750369435fc93c8a2ac1a4d5b3280c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 31 Dec 2024 22:17:00 +0000 Subject: [PATCH 18/90] chore(deps): bump coverlet.msbuild from 6.0.2 to 6.0.3 Bumps [coverlet.msbuild](https://github.com/coverlet-coverage/coverlet) from 6.0.2 to 6.0.3. - [Release notes](https://github.com/coverlet-coverage/coverlet/releases) - [Commits](https://github.com/coverlet-coverage/coverlet/compare/v6.0.2...v6.0.3) --- updated-dependencies: - dependency-name: coverlet.msbuild dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- .../Microsoft.OpenApi.Readers.Tests.csproj | 2 +- test/Microsoft.OpenApi.Tests/Microsoft.OpenApi.Tests.csproj | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index 7dbfbed6a..c04e5b149 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -11,7 +11,7 @@ - + diff --git a/test/Microsoft.OpenApi.Readers.Tests/Microsoft.OpenApi.Readers.Tests.csproj b/test/Microsoft.OpenApi.Readers.Tests/Microsoft.OpenApi.Readers.Tests.csproj index 195b07877..e77f34698 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/Microsoft.OpenApi.Readers.Tests.csproj +++ b/test/Microsoft.OpenApi.Readers.Tests/Microsoft.OpenApi.Readers.Tests.csproj @@ -16,7 +16,7 @@ - + diff --git a/test/Microsoft.OpenApi.Tests/Microsoft.OpenApi.Tests.csproj b/test/Microsoft.OpenApi.Tests/Microsoft.OpenApi.Tests.csproj index 565abdf79..559019242 100644 --- a/test/Microsoft.OpenApi.Tests/Microsoft.OpenApi.Tests.csproj +++ b/test/Microsoft.OpenApi.Tests/Microsoft.OpenApi.Tests.csproj @@ -9,7 +9,7 @@ - + From 45329e4e5b3606964e85bbfdece4b5f239865353 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Thu, 2 Jan 2025 13:00:47 -0500 Subject: [PATCH 19/90] fix: adds missing culture argument to date serialization --- src/Microsoft.OpenApi/Writers/OpenApiWriterBase.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Microsoft.OpenApi/Writers/OpenApiWriterBase.cs b/src/Microsoft.OpenApi/Writers/OpenApiWriterBase.cs index 99b148652..901b26194 100644 --- a/src/Microsoft.OpenApi/Writers/OpenApiWriterBase.cs +++ b/src/Microsoft.OpenApi/Writers/OpenApiWriterBase.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; +using System.Globalization; using System.IO; using System.Linq; using System.Text.Json; @@ -188,7 +189,7 @@ public virtual void WriteValue(long value) /// The DateTime value. public virtual void WriteValue(DateTime value) { - this.WriteValue(value.ToString("o")); + this.WriteValue(value.ToString("o", CultureInfo.InvariantCulture)); } /// @@ -197,7 +198,7 @@ public virtual void WriteValue(DateTime value) /// The DateTimeOffset value. public virtual void WriteValue(DateTimeOffset value) { - this.WriteValue(value.ToString("o")); + this.WriteValue(value.ToString("o", CultureInfo.InvariantCulture)); } /// From 818414d73a351447a403e8555c140b180de5d375 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Thu, 2 Jan 2025 13:01:45 -0500 Subject: [PATCH 20/90] fix: uses the json node clone API to avoid unecessary allocs --- .../Helpers/JsonNodeCloneHelper.cs | 27 +------------------ 1 file changed, 1 insertion(+), 26 deletions(-) diff --git a/src/Microsoft.OpenApi/Helpers/JsonNodeCloneHelper.cs b/src/Microsoft.OpenApi/Helpers/JsonNodeCloneHelper.cs index d6e9cb9df..caab84e7b 100644 --- a/src/Microsoft.OpenApi/Helpers/JsonNodeCloneHelper.cs +++ b/src/Microsoft.OpenApi/Helpers/JsonNodeCloneHelper.cs @@ -1,40 +1,15 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. -using System.Text.Json; using System.Text.Json.Nodes; -using System.Text.Json.Serialization; -using Microsoft.OpenApi.Any; namespace Microsoft.OpenApi.Helpers { internal static class JsonNodeCloneHelper { - private static readonly JsonSerializerOptions options = new() - { - ReferenceHandler = ReferenceHandler.IgnoreCycles - }; - internal static JsonNode Clone(JsonNode value) { - var jsonString = Serialize(value); - if (string.IsNullOrEmpty(jsonString)) - { - return null; - } - - var result = JsonSerializer.Deserialize(jsonString, options); - return result; - } - - private static string Serialize(object obj) - { - if (obj == null) - { - return null; - } - var result = JsonSerializer.Serialize(obj, options); - return result; + return value.DeepClone(); } } } From a6a44a7e3d271a2cc88fda02aabec944402a32a9 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Thu, 2 Jan 2025 15:51:30 -0500 Subject: [PATCH 21/90] fix: date time and date time offset shifting zones perf: avoid round trip serialization Signed-off-by: Vincent Biret --- .../Writers/OpenApiWriterAnyExtensions.cs | 67 +++++++++++++------ 1 file changed, 45 insertions(+), 22 deletions(-) diff --git a/src/Microsoft.OpenApi/Writers/OpenApiWriterAnyExtensions.cs b/src/Microsoft.OpenApi/Writers/OpenApiWriterAnyExtensions.cs index b0ef0a174..a54753d80 100644 --- a/src/Microsoft.OpenApi/Writers/OpenApiWriterAnyExtensions.cs +++ b/src/Microsoft.OpenApi/Writers/OpenApiWriterAnyExtensions.cs @@ -1,7 +1,9 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. +using System; using System.Collections.Generic; +using System.Globalization; using System.Text.Json; using System.Text.Json.Nodes; using Microsoft.OpenApi.Any; @@ -49,7 +51,7 @@ public static void WriteExtensions(this IOpenApiWriter writer, IDictionaryThe JsonNode value public static void WriteAny(this IOpenApiWriter writer, JsonNode node) { - Utils.CheckArgumentNull(writer);; + Utils.CheckArgumentNull(writer); if (node == null) { @@ -57,8 +59,7 @@ public static void WriteAny(this IOpenApiWriter writer, JsonNode node) return; } - var element = JsonDocument.Parse(node.ToJsonString()).RootElement; - switch (element.ValueKind) + switch (node.GetValueKind()) { case JsonValueKind.Array: // Array writer.WriteArray(node as JsonArray); @@ -67,13 +68,13 @@ public static void WriteAny(this IOpenApiWriter writer, JsonNode node) writer.WriteObject(node as JsonObject); break; case JsonValueKind.String: // Primitive - writer.WritePrimitive(element); + writer.WritePrimitive(node); break; case JsonValueKind.Number: // Primitive - writer.WritePrimitive(element); + writer.WritePrimitive(node); break; case JsonValueKind.True or JsonValueKind.False: // Primitive - writer.WritePrimitive(element); + writer.WritePrimitive(node); break; case JsonValueKind.Null: // null writer.WriteNull(); @@ -108,52 +109,74 @@ private static void WriteObject(this IOpenApiWriter writer, JsonObject entity) writer.WriteEndObject(); } - private static void WritePrimitive(this IOpenApiWriter writer, JsonElement primitive) + private static void WritePrimitive(this IOpenApiWriter writer, JsonNode primitive) { if (writer == null) { Utils.CheckArgumentNull(writer); } - if (primitive.ValueKind == JsonValueKind.String) + var valueKind = primitive.GetValueKind(); + + if (valueKind == JsonValueKind.String && primitive is JsonValue jsonStrValue) { - // check whether string is actual string or date time object - if (primitive.TryGetDateTime(out var dateTime)) + if (jsonStrValue.TryGetValue(out var dto)) { - writer.WriteValue(dateTime); + writer.WriteValue(dto); } - else if (primitive.TryGetDateTimeOffset(out var dateTimeOffset)) + else if (jsonStrValue.TryGetValue(out var dt)) { - writer.WriteValue(dateTimeOffset); + writer.WriteValue(dt); } - else + else if (jsonStrValue.TryGetValue(out var strValue)) { - writer.WriteValue(primitive.GetString()); + // check whether string is actual string or date time object + if (DateTimeOffset.TryParse(strValue, CultureInfo.InvariantCulture, DateTimeStyles.RoundtripKind, out var dateTimeOffset)) + { + writer.WriteValue(dateTimeOffset); + } + else if (DateTime.TryParse(strValue, CultureInfo.InvariantCulture, DateTimeStyles.RoundtripKind, out var dateTime)) + { // order matters, DTO needs to be checked first!!! + writer.WriteValue(dateTime); + } + else + { + writer.WriteValue(strValue); + } } } - if (primitive.ValueKind == JsonValueKind.Number) + else if (valueKind == JsonValueKind.Number && primitive is JsonValue jsonValue) { - if (primitive.TryGetDecimal(out var decimalValue)) + + if (jsonValue.TryGetValue(out var decimalValue)) { writer.WriteValue(decimalValue); } - else if (primitive.TryGetDouble(out var doubleValue)) + else if (jsonValue.TryGetValue(out var doubleValue)) { writer.WriteValue(doubleValue); } - else if (primitive.TryGetInt64(out var longValue)) + else if (jsonValue.TryGetValue(out var floatValue)) + { + writer.WriteValue(floatValue); + } + else if (jsonValue.TryGetValue(out var longValue)) { writer.WriteValue(longValue); } - else if (primitive.TryGetInt32(out var intValue)) + else if (jsonValue.TryGetValue(out var intValue)) { writer.WriteValue(intValue); } } - if (primitive.ValueKind is JsonValueKind.True or JsonValueKind.False) + else if (valueKind is JsonValueKind.False) + { + writer.WriteValue(false); + } + else if (valueKind is JsonValueKind.True) { - writer.WriteValue(primitive.GetBoolean()); + writer.WriteValue(true); } } } From e861c08442fe7b2f1b0e4079d4a007e525a75ca9 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Thu, 2 Jan 2025 16:16:10 -0500 Subject: [PATCH 22/90] fix: removes all obsolete APIs --- .../Interfaces/IStreamLoader.cs | 10 ---- .../Reader/Services/DefaultStreamLoader.cs | 13 +---- .../Validations/ValidationRule.cs | 10 ---- .../Writers/OpenApiWriterSettings.cs | 50 ------------------- 4 files changed, 1 insertion(+), 82 deletions(-) diff --git a/src/Microsoft.OpenApi/Interfaces/IStreamLoader.cs b/src/Microsoft.OpenApi/Interfaces/IStreamLoader.cs index c3edebe1b..c3cb9b256 100644 --- a/src/Microsoft.OpenApi/Interfaces/IStreamLoader.cs +++ b/src/Microsoft.OpenApi/Interfaces/IStreamLoader.cs @@ -2,7 +2,6 @@ // Licensed under the MIT license. using System; -using System.ComponentModel; using System.IO; using System.Threading.Tasks; using Microsoft.OpenApi.Models; @@ -20,14 +19,5 @@ public interface IStreamLoader /// Identifier of some source of an OpenAPI Description /// A data object that can be processed by a reader to generate an Task LoadAsync(Uri uri); - - /// - /// Use Uri to locate data and convert into an input object. - /// - /// - /// - [Obsolete("Use the Async overload")] - [EditorBrowsable(EditorBrowsableState.Never)] - Stream Load(Uri uri); } } diff --git a/src/Microsoft.OpenApi/Reader/Services/DefaultStreamLoader.cs b/src/Microsoft.OpenApi/Reader/Services/DefaultStreamLoader.cs index 746ca0c96..bb230c4a9 100644 --- a/src/Microsoft.OpenApi/Reader/Services/DefaultStreamLoader.cs +++ b/src/Microsoft.OpenApi/Reader/Services/DefaultStreamLoader.cs @@ -2,7 +2,6 @@ // Licensed under the MIT license. using System; -using System.ComponentModel; using System.IO; using System.Net.Http; using System.Threading.Tasks; @@ -17,7 +16,7 @@ namespace Microsoft.OpenApi.Reader.Services public class DefaultStreamLoader : IStreamLoader { private readonly Uri baseUrl; - private HttpClient _httpClient = new(); + private readonly HttpClient _httpClient = new(); /// /// The default stream loader @@ -27,16 +26,6 @@ public DefaultStreamLoader(Uri baseUrl) { this.baseUrl = baseUrl; } -/// - - [Obsolete] - [EditorBrowsable(EditorBrowsableState.Never)] - public Stream Load(Uri uri) - { -#pragma warning disable VSTHRD002 // Avoid problematic synchronous waits - return LoadAsync(uri).GetAwaiter().GetResult(); -#pragma warning restore VSTHRD002 // Avoid problematic synchronous waits - } /// /// Use Uri to locate data and convert into an input object. diff --git a/src/Microsoft.OpenApi/Validations/ValidationRule.cs b/src/Microsoft.OpenApi/Validations/ValidationRule.cs index bccb28be6..35503606f 100644 --- a/src/Microsoft.OpenApi/Validations/ValidationRule.cs +++ b/src/Microsoft.OpenApi/Validations/ValidationRule.cs @@ -44,16 +44,6 @@ public class ValidationRule : ValidationRule { private readonly Action _validate; - /// - /// Initializes a new instance of the class. - /// - /// Action to perform the validation. - [Obsolete("Please use the other constructor and specify a name")] - public ValidationRule(Action validate) - : this (Guid.NewGuid().ToString("D"), validate) - { - } - /// /// Initializes a new instance of the class. /// diff --git a/src/Microsoft.OpenApi/Writers/OpenApiWriterSettings.cs b/src/Microsoft.OpenApi/Writers/OpenApiWriterSettings.cs index c647436ea..f05fd13a7 100644 --- a/src/Microsoft.OpenApi/Writers/OpenApiWriterSettings.cs +++ b/src/Microsoft.OpenApi/Writers/OpenApiWriterSettings.cs @@ -5,63 +5,13 @@ namespace Microsoft.OpenApi.Writers { - /// - /// Indicates if and when the writer should convert references into complete object renderings - /// - [Obsolete("Use InlineLocalReference and InlineExternalReference settings instead")] - public enum ReferenceInlineSetting - { - /// - /// Render all references as $ref. - /// - DoNotInlineReferences, - /// - /// Render all local references as inline objects - /// - InlineLocalReferences, - /// - /// Render all references as inline objects. - /// - InlineAllReferences - } - /// /// Configuration settings to control how OpenAPI documents are written /// public class OpenApiWriterSettings { - [Obsolete("Use InlineLocalReference and InlineExternalReference settings instead")] - private ReferenceInlineSetting referenceInline = ReferenceInlineSetting.DoNotInlineReferences; - internal LoopDetector LoopDetector { get; } = new(); /// - /// Indicates how references in the source document should be handled. - /// - [Obsolete("Use InlineLocalReference and InlineExternalReference settings instead")] - public ReferenceInlineSetting ReferenceInline - { - get { return referenceInline; } - set - { - referenceInline = value; - switch (referenceInline) - { - case ReferenceInlineSetting.DoNotInlineReferences: - InlineLocalReferences = false; - InlineExternalReferences = false; - break; - case ReferenceInlineSetting.InlineLocalReferences: - InlineLocalReferences = true; - InlineExternalReferences = false; - break; - case ReferenceInlineSetting.InlineAllReferences: - InlineLocalReferences = true; - InlineExternalReferences = true; - break; - } - } - } - /// /// Indicates if local references should be rendered as an inline object /// public bool InlineLocalReferences { get; set; } From e478b75918e92fbf8124ed7cc16b674888ce2081 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Thu, 2 Jan 2025 16:17:03 -0500 Subject: [PATCH 23/90] chore: updates public api document --- .../PublicApi/PublicApi.approved.txt | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt b/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt index 642dd0b82..1b8857c0f 100644 --- a/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt +++ b/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt @@ -237,8 +237,6 @@ namespace Microsoft.OpenApi.Interfaces } public interface IStreamLoader { - [System.Obsolete("Use the Async overload")] - System.IO.Stream Load(System.Uri uri); System.Threading.Tasks.Task LoadAsync(System.Uri uri); } } @@ -1401,8 +1399,6 @@ namespace Microsoft.OpenApi.Reader.Services public class DefaultStreamLoader : Microsoft.OpenApi.Interfaces.IStreamLoader { public DefaultStreamLoader(System.Uri baseUrl) { } - [System.Obsolete] - public System.IO.Stream Load(System.Uri uri) { } public System.Threading.Tasks.Task LoadAsync(System.Uri uri) { } } } @@ -1653,8 +1649,6 @@ namespace Microsoft.OpenApi.Validations } public class ValidationRule : Microsoft.OpenApi.Validations.ValidationRule { - [System.Obsolete("Please use the other constructor and specify a name")] - public ValidationRule(System.Action validate) { } public ValidationRule(string name, System.Action validate) { } } } @@ -1876,8 +1870,6 @@ namespace Microsoft.OpenApi.Writers public OpenApiWriterSettings() { } public bool InlineExternalReferences { get; set; } public bool InlineLocalReferences { get; set; } - [System.Obsolete("Use InlineLocalReference and InlineExternalReference settings instead")] - public Microsoft.OpenApi.Writers.ReferenceInlineSetting ReferenceInline { get; set; } } public class OpenApiYamlWriter : Microsoft.OpenApi.Writers.OpenApiWriterBase { @@ -1895,13 +1887,6 @@ namespace Microsoft.OpenApi.Writers public override void WriteValue(string value) { } protected override void WriteValueSeparator() { } } - [System.Obsolete("Use InlineLocalReference and InlineExternalReference settings instead")] - public enum ReferenceInlineSetting - { - DoNotInlineReferences = 0, - InlineLocalReferences = 1, - InlineAllReferences = 2, - } public sealed class Scope { public Scope(Microsoft.OpenApi.Writers.ScopeType type) { } From 4a50c77a90f0e9810b4912cbb694883921c508cd Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Thu, 2 Jan 2025 16:20:11 -0500 Subject: [PATCH 24/90] fix: removes useless condition for null check Signed-off-by: Vincent Biret --- src/Microsoft.OpenApi/Writers/OpenApiWriterAnyExtensions.cs | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/Microsoft.OpenApi/Writers/OpenApiWriterAnyExtensions.cs b/src/Microsoft.OpenApi/Writers/OpenApiWriterAnyExtensions.cs index a54753d80..fd2ff1387 100644 --- a/src/Microsoft.OpenApi/Writers/OpenApiWriterAnyExtensions.cs +++ b/src/Microsoft.OpenApi/Writers/OpenApiWriterAnyExtensions.cs @@ -111,10 +111,7 @@ private static void WriteObject(this IOpenApiWriter writer, JsonObject entity) private static void WritePrimitive(this IOpenApiWriter writer, JsonNode primitive) { - if (writer == null) - { - Utils.CheckArgumentNull(writer); - } + Utils.CheckArgumentNull(writer); var valueKind = primitive.GetValueKind(); From ec9c01b9b873d02ab2682ceb5fb9ac509a931781 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Fri, 3 Jan 2025 10:36:22 -0500 Subject: [PATCH 25/90] fix: v2 references for properties do not work as expected --- src/Microsoft.OpenApi/Models/OpenApiSchema.cs | 2 +- .../Models/References/OpenApiSchemaReference.cs | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi/Models/OpenApiSchema.cs b/src/Microsoft.OpenApi/Models/OpenApiSchema.cs index c9e5441a9..0ebe9eab9 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiSchema.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiSchema.cs @@ -650,7 +650,7 @@ internal void WriteAsItemsProperties(IOpenApiWriter writer) /// The open api writer. /// The list of required properties in parent schema. /// The property name that will be serialized. - internal void SerializeAsV2( + internal virtual void SerializeAsV2( IOpenApiWriter writer, ISet parentRequiredProperties, string propertyName) diff --git a/src/Microsoft.OpenApi/Models/References/OpenApiSchemaReference.cs b/src/Microsoft.OpenApi/Models/References/OpenApiSchemaReference.cs index 011e0b930..3e2c5b53c 100644 --- a/src/Microsoft.OpenApi/Models/References/OpenApiSchemaReference.cs +++ b/src/Microsoft.OpenApi/Models/References/OpenApiSchemaReference.cs @@ -227,6 +227,22 @@ public override void SerializeAsV3(IOpenApiWriter writer) writer.GetSettings().LoopDetector.PopLoop(); } + /// + internal override void SerializeAsV2( + IOpenApiWriter writer, + ISet parentRequiredProperties, + string propertyName) + { + if (!writer.GetSettings().ShouldInlineReference(_reference)) + { + _reference.SerializeAsV2(writer); + } + else + { + base.SerializeAsV2(writer, parentRequiredProperties, propertyName); + } + } + /// public override void SerializeAsV2(IOpenApiWriter writer) { From 8b4833cce98cb8d8c782ceed8d5d122357b71065 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Fri, 3 Jan 2025 12:51:10 -0500 Subject: [PATCH 26/90] fix: v2 request body content null propagation --- .../Models/OpenApiOperation.cs | 21 +++++++++---------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/src/Microsoft.OpenApi/Models/OpenApiOperation.cs b/src/Microsoft.OpenApi/Models/OpenApiOperation.cs index 6e54cd894..eb5f9cdc0 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiOperation.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiOperation.cs @@ -237,18 +237,18 @@ public void SerializeAsV2(IOpenApiWriter writer) List parameters; if (Parameters == null) { - parameters = new(); + parameters = []; } else { - parameters = new(Parameters); + parameters = [.. Parameters]; } if (RequestBody != null) { // consumes - var consumes = RequestBody.Content.Keys.Distinct().ToList(); - if (consumes.Any()) + var consumes = new HashSet(RequestBody.Content?.Keys.Distinct(StringComparer.OrdinalIgnoreCase) ?? [], StringComparer.OrdinalIgnoreCase); + if (consumes.Count > 0) { // This is form data. We need to split the request body into multiple parameters. if (consumes.Contains("application/x-www-form-urlencoded") || @@ -261,19 +261,18 @@ public void SerializeAsV2(IOpenApiWriter writer) parameters.Add(RequestBody.ConvertToBodyParameter()); } } - else if (RequestBody.Reference != null) + else if (RequestBody.Reference != null && RequestBody.Reference.HostDocument is {} hostDocument) { - var hostDocument = RequestBody.Reference.HostDocument; parameters.Add( new OpenApiParameterReference(RequestBody.Reference.Id, hostDocument)); if (hostDocument != null) { - consumes = RequestBody.Content.Keys.Distinct().ToList(); + consumes = new (RequestBody.Content?.Keys.Distinct(StringComparer.OrdinalIgnoreCase) ?? [], StringComparer.OrdinalIgnoreCase); } } - if (consumes.Any()) + if (consumes.Count > 0) { writer.WritePropertyName(OpenApiConstants.Consumes); writer.WriteStartArray(); @@ -294,10 +293,10 @@ public void SerializeAsV2(IOpenApiWriter writer) Responses .Where(static r => r.Value.Reference is {HostDocument: not null}) .SelectMany(static r => r.Value.Content?.Keys)) - .Distinct() - .ToList(); + .Distinct(StringComparer.OrdinalIgnoreCase) + .ToArray(); - if (produces.Any()) + if (produces.Length > 0) { // produces writer.WritePropertyName(OpenApiConstants.Produces); From 8d701955f24801b495dfd4b3b7a2351b499355b2 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Fri, 3 Jan 2025 13:17:34 -0500 Subject: [PATCH 27/90] fix: removes redundant assignment Signed-off-by: Vincent Biret --- src/Microsoft.OpenApi/Models/OpenApiOperation.cs | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/Microsoft.OpenApi/Models/OpenApiOperation.cs b/src/Microsoft.OpenApi/Models/OpenApiOperation.cs index eb5f9cdc0..6182eda2b 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiOperation.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiOperation.cs @@ -265,11 +265,6 @@ public void SerializeAsV2(IOpenApiWriter writer) { parameters.Add( new OpenApiParameterReference(RequestBody.Reference.Id, hostDocument)); - - if (hostDocument != null) - { - consumes = new (RequestBody.Content?.Keys.Distinct(StringComparer.OrdinalIgnoreCase) ?? [], StringComparer.OrdinalIgnoreCase); - } } if (consumes.Count > 0) From 0ce92cc948869e0d5eb46d388559405c9b412b06 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Fri, 3 Jan 2025 15:00:23 -0500 Subject: [PATCH 28/90] fix: conditional version for extension causes invalid json Signed-off-by: Vincent Biret --- .../OpenApiEnumValuesDescriptionExtension.cs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/Microsoft.OpenApi/MicrosoftExtensions/OpenApiEnumValuesDescriptionExtension.cs b/src/Microsoft.OpenApi/MicrosoftExtensions/OpenApiEnumValuesDescriptionExtension.cs index a6df2444b..d2661a225 100644 --- a/src/Microsoft.OpenApi/MicrosoftExtensions/OpenApiEnumValuesDescriptionExtension.cs +++ b/src/Microsoft.OpenApi/MicrosoftExtensions/OpenApiEnumValuesDescriptionExtension.cs @@ -41,10 +41,9 @@ public class OpenApiEnumValuesDescriptionExtension : IOpenApiExtension public void Write(IOpenApiWriter writer, OpenApiSpecVersion specVersion) { if (writer is null) throw new ArgumentNullException(nameof(writer)); - if (specVersion is OpenApiSpecVersion.OpenApi2_0 or OpenApiSpecVersion.OpenApi3_0 && - !string.IsNullOrEmpty(EnumName) && + if (!string.IsNullOrEmpty(EnumName) && ValuesDescriptions.Any()) - { // when we upgrade to 3.1, we don't need to write this extension as JSON schema will support writing enum values + { writer.WriteStartObject(); writer.WriteProperty(nameof(Name).ToFirstCharacterLowerCase(), EnumName); writer.WriteProperty("modelAsString", false); From f7dbe74c676b5981969b48caf8e6565d8935ce7b Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Mon, 6 Jan 2025 12:22:03 -0500 Subject: [PATCH 29/90] chore: adds unit test for properties references Signed-off-by: Vincent Biret --- .../V2Tests/OpenApiSchemaTests.cs | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiSchemaTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiSchemaTests.cs index aee5aab7e..bf42916f5 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiSchemaTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiSchemaTests.cs @@ -11,6 +11,8 @@ using System.Text.Json.Nodes; using System.Collections.Generic; using FluentAssertions.Equivalency; +using Microsoft.OpenApi.Models.References; +using Microsoft.OpenApi.Writers; namespace Microsoft.OpenApi.Readers.Tests.V2Tests { @@ -95,5 +97,56 @@ public void ParseSchemaWithEnumShouldSucceed() .Excluding((IMemberInfo memberInfo) => memberInfo.Path.EndsWith("Parent"))); } + [Fact] + public void PropertiesReferenceShouldWork() + { + var workingDocument = new OpenApiDocument() + { + Components = new OpenApiComponents(), + }; + const string referenceId = "targetSchema"; + var targetSchema = new OpenApiSchema() + { + Type = JsonSchemaType.Object, + Properties = new Dictionary + { + ["prop1"] = new OpenApiSchema() + { + Type = JsonSchemaType.String + } + } + }; + workingDocument.Components.Schemas.Add(referenceId, targetSchema); + workingDocument.Workspace.RegisterComponent("schemas", targetSchema); + var referenceSchema = new OpenApiSchema() + { + Type = JsonSchemaType.Object, + Properties = new Dictionary + { + ["propA"] = new OpenApiSchemaReference(referenceId, workingDocument), + } + }; + + using var textWriter = new StringWriter(); + var writer = new OpenApiJsonWriter(textWriter); + referenceSchema.SerializeAsV2(writer); + + var json = textWriter.ToString(); + var expected = JsonNode.Parse( + """ + { + "type": "object", + "properties": + { + "propA": + { + "$ref": "#/definitions/targetSchema" + } + } + } + """ + ); + Assert.True(JsonNode.DeepEquals(JsonNode.Parse(json), expected)); + } } } From ebdbcd8baf05ddf88eba2428dc63e31504ab0743 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Mon, 6 Jan 2025 12:28:07 -0500 Subject: [PATCH 30/90] chore: switches to the other registration method Signed-off-by: Vincent Biret --- .../V2Tests/OpenApiSchemaTests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiSchemaTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiSchemaTests.cs index bf42916f5..384e23298 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiSchemaTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiSchemaTests.cs @@ -117,7 +117,7 @@ public void PropertiesReferenceShouldWork() } }; workingDocument.Components.Schemas.Add(referenceId, targetSchema); - workingDocument.Workspace.RegisterComponent("schemas", targetSchema); + workingDocument.Workspace.RegisterComponents(workingDocument); var referenceSchema = new OpenApiSchema() { Type = JsonSchemaType.Object, From 8a73b540e88bd18aeef27e86e41dbec3e7e1d2cd Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Mon, 6 Jan 2025 12:50:13 -0500 Subject: [PATCH 31/90] fix: adds support for all component types --- .../Models/OpenApiDocument.cs | 62 ++++++++++++++++--- .../Services/OpenApiWorkspace.cs | 38 ++++++++---- 2 files changed, 80 insertions(+), 20 deletions(-) diff --git a/src/Microsoft.OpenApi/Models/OpenApiDocument.cs b/src/Microsoft.OpenApi/Models/OpenApiDocument.cs index d680495c8..8cc1fda6c 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiDocument.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiDocument.cs @@ -588,19 +588,65 @@ public static ReadResult Parse(string input, return OpenApiModelFactory.Parse(input, format, settings); } /// - /// Adds a schema to the components object of the current document. + /// Adds a component to the components object of the current document and registers it to the underlying workspace. /// - /// The schema to add + /// The component to add /// The id for the component - /// Whether the schema was added to the components. - public bool AddComponentSchema(string id, OpenApiSchema openApiSchema) + /// The type of the component + /// Whether the component was added to the components. + /// Thrown when the component is null. + /// Thrown when the id is null or empty. + public bool AddComponent(string id, T componentToRegister) { - Utils.CheckArgumentNull(openApiSchema); + Utils.CheckArgumentNull(componentToRegister); Utils.CheckArgumentNullOrEmpty(id); Components ??= new(); - Components.Schemas ??= new Dictionary(); - Components.Schemas.Add(id, openApiSchema); - return Workspace?.RegisterSchemaForDocument(this, openApiSchema, id) ?? false; + switch (componentToRegister) + { + case OpenApiSchema openApiSchema: + Components.Schemas ??= new Dictionary(); + Components.Schemas.Add(id, openApiSchema); + break; + case OpenApiParameter openApiParameter: + Components.Parameters ??= new Dictionary(); + Components.Parameters.Add(id, openApiParameter); + break; + case OpenApiResponse openApiResponse: + Components.Responses ??= new Dictionary(); + Components.Responses.Add(id, openApiResponse); + break; + case OpenApiRequestBody openApiRequestBody: + Components.RequestBodies ??= new Dictionary(); + Components.RequestBodies.Add(id, openApiRequestBody); + break; + case OpenApiLink openApiLink: + Components.Links ??= new Dictionary(); + Components.Links.Add(id, openApiLink); + break; + case OpenApiCallback openApiCallback: + Components.Callbacks ??= new Dictionary(); + Components.Callbacks.Add(id, openApiCallback); + break; + case OpenApiPathItem openApiPathItem: + Components.PathItems ??= new Dictionary(); + Components.PathItems.Add(id, openApiPathItem); + break; + case OpenApiExample openApiExample: + Components.Examples ??= new Dictionary(); + Components.Examples.Add(id, openApiExample); + break; + case OpenApiHeader openApiHeader: + Components.Headers ??= new Dictionary(); + Components.Headers.Add(id, openApiHeader); + break; + case OpenApiSecurityScheme openApiSecurityScheme: + Components.SecuritySchemes ??= new Dictionary(); + Components.SecuritySchemes.Add(id, openApiSecurityScheme); + break; + default: + throw new ArgumentException($"Component type {componentToRegister!.GetType().Name} is not supported."); + } + return Workspace?.RegisterComponentForDocument(this, componentToRegister, id) ?? false; } } diff --git a/src/Microsoft.OpenApi/Services/OpenApiWorkspace.cs b/src/Microsoft.OpenApi/Services/OpenApiWorkspace.cs index 1d8aa2799..f92e6f322 100644 --- a/src/Microsoft.OpenApi/Services/OpenApiWorkspace.cs +++ b/src/Microsoft.OpenApi/Services/OpenApiWorkspace.cs @@ -145,26 +145,40 @@ private string getBaseUri(OpenApiDocument openApiDocument) } /// - /// Registers a schema for a document in the workspace + /// Registers a component for a document in the workspace /// - /// The document to register the schema for. - /// The schema to register. - /// The id of the schema. - /// true if the schema is successfully registered; otherwise false. + /// The document to register the component for. + /// The component to register. + /// The id of the component. + /// The type of the component to register. + /// true if the component is successfully registered; otherwise false. /// openApiDocument is null - /// openApiSchema is null + /// componentToRegister is null /// id is null or empty - public bool RegisterSchemaForDocument(OpenApiDocument openApiDocument, OpenApiSchema openApiSchema, string id) + public bool RegisterComponentForDocument(OpenApiDocument openApiDocument, T componentToRegister, string id) { Utils.CheckArgumentNull(openApiDocument); - Utils.CheckArgumentNull(openApiSchema); + Utils.CheckArgumentNull(componentToRegister); Utils.CheckArgumentNullOrEmpty(id); var baseUri = getBaseUri(openApiDocument); - var location = baseUri + ReferenceType.Schema.GetDisplayName() + ComponentSegmentSeparator + id; - - return RegisterComponent(location, openApiSchema); + var location = componentToRegister switch + { + OpenApiSchema => baseUri + ReferenceType.Schema.GetDisplayName() + ComponentSegmentSeparator + id, + OpenApiParameter => baseUri + ReferenceType.Parameter.GetDisplayName() + ComponentSegmentSeparator + id, + OpenApiResponse => baseUri + ReferenceType.Response.GetDisplayName() + ComponentSegmentSeparator + id, + OpenApiRequestBody => baseUri + ReferenceType.RequestBody.GetDisplayName() + ComponentSegmentSeparator + id, + OpenApiLink => baseUri + ReferenceType.Link.GetDisplayName() + ComponentSegmentSeparator + id, + OpenApiCallback => baseUri + ReferenceType.Callback.GetDisplayName() + ComponentSegmentSeparator + id, + OpenApiPathItem => baseUri + ReferenceType.PathItem.GetDisplayName() + ComponentSegmentSeparator + id, + OpenApiExample => baseUri + ReferenceType.Example.GetDisplayName() + ComponentSegmentSeparator + id, + OpenApiHeader => baseUri + ReferenceType.Header.GetDisplayName() + ComponentSegmentSeparator + id, + OpenApiSecurityScheme => baseUri + ReferenceType.SecurityScheme.GetDisplayName() + ComponentSegmentSeparator + id, + _ => throw new ArgumentException($"Invalid component type {componentToRegister.GetType().Name}"), + }; + + return RegisterComponent(location, componentToRegister); } /// @@ -173,7 +187,7 @@ public bool RegisterSchemaForDocument(OpenApiDocument openApiDocument, OpenApiSc /// /// /// true if the component is successfully registered; otherwise false. - public bool RegisterComponent(string location, T component) + internal bool RegisterComponent(string location, T component) { var uri = ToLocationUrl(location); if (component is IOpenApiReferenceable referenceable) From 45d49f1a9dbac0d83839fc557933585e25e120b4 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Mon, 6 Jan 2025 12:56:32 -0500 Subject: [PATCH 32/90] chore: updates public api test Signed-off-by: Vincent Biret --- .../Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt b/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt index f18916ab0..3fee85452 100644 --- a/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt +++ b/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt @@ -571,7 +571,7 @@ namespace Microsoft.OpenApi.Models public System.Collections.Generic.IList? Tags { get; set; } public System.Collections.Generic.IDictionary? Webhooks { get; set; } public Microsoft.OpenApi.Services.OpenApiWorkspace? Workspace { get; set; } - public bool AddComponentSchema(string id, Microsoft.OpenApi.Models.OpenApiSchema openApiSchema) { } + public bool AddComponent(string id, T componentToRegister) { } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } @@ -1533,9 +1533,8 @@ namespace Microsoft.OpenApi.Services public int ComponentsCount() { } public bool Contains(string location) { } public System.Uri GetDocumentId(string key) { } - public bool RegisterComponent(string location, T component) { } + public bool RegisterComponentForDocument(Microsoft.OpenApi.Models.OpenApiDocument openApiDocument, T componentToRegister, string id) { } public void RegisterComponents(Microsoft.OpenApi.Models.OpenApiDocument document) { } - public bool RegisterSchemaForDocument(Microsoft.OpenApi.Models.OpenApiDocument openApiDocument, Microsoft.OpenApi.Models.OpenApiSchema openApiSchema, string id) { } public T? ResolveReference(string location) { } } public class OperationSearch : Microsoft.OpenApi.Services.OpenApiVisitorBase From 799d161d5e1a64778076c44a7ff2154b38aa2fad Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 6 Jan 2025 21:45:06 +0000 Subject: [PATCH 33/90] chore(deps): bump Verify.Xunit from 28.7.0 to 28.8.1 Bumps [Verify.Xunit](https://github.com/VerifyTests/Verify) from 28.7.0 to 28.8.1. - [Release notes](https://github.com/VerifyTests/Verify/releases) - [Commits](https://github.com/VerifyTests/Verify/commits) --- updated-dependencies: - dependency-name: Verify.Xunit dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- test/Microsoft.OpenApi.Tests/Microsoft.OpenApi.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Tests/Microsoft.OpenApi.Tests.csproj b/test/Microsoft.OpenApi.Tests/Microsoft.OpenApi.Tests.csproj index 559019242..3b223d0a3 100644 --- a/test/Microsoft.OpenApi.Tests/Microsoft.OpenApi.Tests.csproj +++ b/test/Microsoft.OpenApi.Tests/Microsoft.OpenApi.Tests.csproj @@ -14,7 +14,7 @@ - + From 66e4101c3d656b5e557ed9dfa9b120a9850c0df1 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Wed, 8 Jan 2025 10:57:03 -0500 Subject: [PATCH 34/90] chore: removes unused method --- src/Microsoft.OpenApi/Writers/OpenApiWriterSettings.cs | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/Microsoft.OpenApi/Writers/OpenApiWriterSettings.cs b/src/Microsoft.OpenApi/Writers/OpenApiWriterSettings.cs index f05fd13a7..09a65cc83 100644 --- a/src/Microsoft.OpenApi/Writers/OpenApiWriterSettings.cs +++ b/src/Microsoft.OpenApi/Writers/OpenApiWriterSettings.cs @@ -26,10 +26,5 @@ internal bool ShouldInlineReference(OpenApiReference reference) return (reference.IsLocal && InlineLocalReferences) || (reference.IsExternal && InlineExternalReferences); } - - internal bool ShouldInlineReference() - { - return InlineLocalReferences || InlineExternalReferences; - } } } From 88daad5d31fee2f4826be9717ece808495d9b4d8 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Wed, 8 Jan 2025 10:57:53 -0500 Subject: [PATCH 35/90] fix: components schema copy --- .../References/OpenApiSchemaReference.cs | 16 +- .../Services/CopyReferences.cs | 304 +++++++++--------- .../PublicApi/PublicApi.approved.txt | 1 + 3 files changed, 163 insertions(+), 158 deletions(-) diff --git a/src/Microsoft.OpenApi/Models/References/OpenApiSchemaReference.cs b/src/Microsoft.OpenApi/Models/References/OpenApiSchemaReference.cs index 41a1dceb5..62cb0bae4 100644 --- a/src/Microsoft.OpenApi/Models/References/OpenApiSchemaReference.cs +++ b/src/Microsoft.OpenApi/Models/References/OpenApiSchemaReference.cs @@ -14,7 +14,7 @@ namespace Microsoft.OpenApi.Models.References /// public class OpenApiSchemaReference : OpenApiSchema { - #nullable enable +#nullable enable private OpenApiSchema? _target; private readonly OpenApiReference _reference; private string? _description; @@ -69,8 +69,14 @@ public class OpenApiSchemaReference : OpenApiSchema private bool? _unevaluatedProperties; private IList? _enum; - private OpenApiSchema? Target - #nullable restore + /// + /// Gets the target schema. + /// + /// + /// If the reference is not resolved, this will return null. + /// + public OpenApiSchema? Target +#nullable restore { get { @@ -190,7 +196,7 @@ public override string Description /// public override bool? UniqueItems { get => _uniqueItems is not null ? _uniqueItems : Target?.UniqueItems; set => _uniqueItems = value; } /// - public override IDictionary Properties { get => _properties is not null ? _properties : Target?.Properties ; set => _properties = value; } + public override IDictionary Properties { get => _properties is not null ? _properties : Target?.Properties; set => _properties = value; } /// public override IDictionary PatternProperties { get => _patternProperties is not null ? _patternProperties : Target?.PatternProperties; set => _patternProperties = value; } /// @@ -257,7 +263,7 @@ public override void SerializeAsV3(IOpenApiWriter writer) _reference.SerializeAsV3(writer); return; } - + SerializeInternal(writer, (writer, element) => element.SerializeAsV3(writer)); writer.GetSettings().LoopDetector.PopLoop(); } diff --git a/src/Microsoft.OpenApi/Services/CopyReferences.cs b/src/Microsoft.OpenApi/Services/CopyReferences.cs index 73bb667b6..f12b11f28 100644 --- a/src/Microsoft.OpenApi/Services/CopyReferences.cs +++ b/src/Microsoft.OpenApi/Services/CopyReferences.cs @@ -4,183 +4,181 @@ using System.Collections.Generic; using Microsoft.OpenApi.Interfaces; using Microsoft.OpenApi.Models; +using Microsoft.OpenApi.Models.References; -namespace Microsoft.OpenApi.Services +namespace Microsoft.OpenApi.Services; +internal class CopyReferences(OpenApiDocument target) : OpenApiVisitorBase { - internal class CopyReferences : OpenApiVisitorBase + private readonly OpenApiDocument _target = target; + public OpenApiComponents Components = new(); + + /// + /// Visits IOpenApiReferenceable instances that are references and not in components. + /// + /// An IOpenApiReferenceable object. + public override void Visit(IOpenApiReferenceable referenceable) { - private readonly OpenApiDocument _target; - public OpenApiComponents Components = new(); - - public CopyReferences(OpenApiDocument target) + switch (referenceable) { - _target = target; - } + case OpenApiSchemaReference openApiSchemaReference: + AddSchemaToComponents(openApiSchemaReference.Target, openApiSchemaReference.Reference.Id); + break; + case OpenApiSchema schema: + AddSchemaToComponents(schema); + break; + + case OpenApiParameter parameter: + EnsureComponentsExist(); + EnsureParametersExist(); + if (!Components.Parameters.ContainsKey(parameter.Reference.Id)) + { + Components.Parameters.Add(parameter.Reference.Id, parameter); + } + break; - /// - /// Visits IOpenApiReferenceable instances that are references and not in components. - /// - /// An IOpenApiReferenceable object. - public override void Visit(IOpenApiReferenceable referenceable) - { - switch (referenceable) - { - case OpenApiSchema schema: - EnsureComponentsExist(); - EnsureSchemasExist(); - if (!Components.Schemas.ContainsKey(schema.Reference.Id)) - { - Components.Schemas.Add(schema.Reference.Id, schema); - } - break; - - case OpenApiParameter parameter: - EnsureComponentsExist(); - EnsureParametersExist(); - if (!Components.Parameters.ContainsKey(parameter.Reference.Id)) - { - Components.Parameters.Add(parameter.Reference.Id, parameter); - } - break; - - case OpenApiResponse response: - EnsureComponentsExist(); - EnsureResponsesExist(); - if (!Components.Responses.ContainsKey(response.Reference.Id)) - { - Components.Responses.Add(response.Reference.Id, response); - } - break; - - case OpenApiRequestBody requestBody: - EnsureComponentsExist(); - EnsureResponsesExist(); - EnsureRequestBodiesExist(); - if (!Components.RequestBodies.ContainsKey(requestBody.Reference.Id)) - { - Components.RequestBodies.Add(requestBody.Reference.Id, requestBody); - } - break; - - case OpenApiExample example: - EnsureComponentsExist(); - EnsureExamplesExist(); - if (!Components.Examples.ContainsKey(example.Reference.Id)) - { - Components.Examples.Add(example.Reference.Id, example); - } - break; - - case OpenApiHeader header: - EnsureComponentsExist(); - EnsureHeadersExist(); - if (!Components.Headers.ContainsKey(header.Reference.Id)) - { - Components.Headers.Add(header.Reference.Id, header); - } - break; - - case OpenApiCallback callback: - EnsureComponentsExist(); - EnsureCallbacksExist(); - if (!Components.Callbacks.ContainsKey(callback.Reference.Id)) - { - Components.Callbacks.Add(callback.Reference.Id, callback); - } - break; - - case OpenApiLink link: - EnsureComponentsExist(); - EnsureLinksExist(); - if (!Components.Links.ContainsKey(link.Reference.Id)) - { - Components.Links.Add(link.Reference.Id, link); - } - break; - - case OpenApiSecurityScheme securityScheme: - EnsureComponentsExist(); - EnsureSecuritySchemesExist(); - if (!Components.SecuritySchemes.ContainsKey(securityScheme.Reference.Id)) - { - Components.SecuritySchemes.Add(securityScheme.Reference.Id, securityScheme); - } - break; - - default: - break; - } - - base.Visit(referenceable); - } + case OpenApiResponse response: + EnsureComponentsExist(); + EnsureResponsesExist(); + if (!Components.Responses.ContainsKey(response.Reference.Id)) + { + Components.Responses.Add(response.Reference.Id, response); + } + break; - /// - /// Visits - /// - /// The OpenApiSchema to be visited. - public override void Visit(OpenApiSchema schema) - { - // This is needed to handle schemas used in Responses in components - if (schema.Reference != null) - { + case OpenApiRequestBody requestBody: EnsureComponentsExist(); - EnsureSchemasExist(); - if (!Components.Schemas.ContainsKey(schema.Reference.Id)) + EnsureResponsesExist(); + EnsureRequestBodiesExist(); + if (!Components.RequestBodies.ContainsKey(requestBody.Reference.Id)) { - Components.Schemas.Add(schema.Reference.Id, schema); + Components.RequestBodies.Add(requestBody.Reference.Id, requestBody); } - } - base.Visit(schema); - } + break; - private void EnsureComponentsExist() - { - _target.Components ??= new(); - } + case OpenApiExample example: + EnsureComponentsExist(); + EnsureExamplesExist(); + if (!Components.Examples.ContainsKey(example.Reference.Id)) + { + Components.Examples.Add(example.Reference.Id, example); + } + break; - private void EnsureSchemasExist() - { - _target.Components.Schemas ??= new Dictionary(); - } + case OpenApiHeader header: + EnsureComponentsExist(); + EnsureHeadersExist(); + if (!Components.Headers.ContainsKey(header.Reference.Id)) + { + Components.Headers.Add(header.Reference.Id, header); + } + break; - private void EnsureParametersExist() - { - _target.Components.Parameters ??= new Dictionary(); - } + case OpenApiCallback callback: + EnsureComponentsExist(); + EnsureCallbacksExist(); + if (!Components.Callbacks.ContainsKey(callback.Reference.Id)) + { + Components.Callbacks.Add(callback.Reference.Id, callback); + } + break; - private void EnsureResponsesExist() - { - _target.Components.Responses ??= new Dictionary(); - } + case OpenApiLink link: + EnsureComponentsExist(); + EnsureLinksExist(); + if (!Components.Links.ContainsKey(link.Reference.Id)) + { + Components.Links.Add(link.Reference.Id, link); + } + break; - private void EnsureRequestBodiesExist() - { - _target.Components.RequestBodies ??= new Dictionary(); - } + case OpenApiSecurityScheme securityScheme: + EnsureComponentsExist(); + EnsureSecuritySchemesExist(); + if (!Components.SecuritySchemes.ContainsKey(securityScheme.Reference.Id)) + { + Components.SecuritySchemes.Add(securityScheme.Reference.Id, securityScheme); + } + break; - private void EnsureExamplesExist() - { - _target.Components.Examples ??= new Dictionary(); + default: + break; } - private void EnsureHeadersExist() - { - _target.Components.Headers ??= new Dictionary(); - } + base.Visit(referenceable); + } - private void EnsureCallbacksExist() + private void AddSchemaToComponents(OpenApiSchema schema, string referenceId = null) + { + EnsureComponentsExist(); + EnsureSchemasExist(); + if (!Components.Schemas.ContainsKey(referenceId ?? schema.Reference.Id)) { - _target.Components.Callbacks ??= new Dictionary(); + Components.Schemas.Add(referenceId ?? schema.Reference.Id, schema); } + } - private void EnsureLinksExist() + /// + public override void Visit(OpenApiSchema schema) + { + // This is needed to handle schemas used in Responses in components + if (schema is OpenApiSchemaReference openApiSchemaReference) { - _target.Components.Links ??= new Dictionary(); + AddSchemaToComponents(openApiSchemaReference.Target, openApiSchemaReference.Reference.Id); } - - private void EnsureSecuritySchemesExist() + else if (schema.Reference != null) { - _target.Components.SecuritySchemes ??= new Dictionary(); + AddSchemaToComponents(schema); } + base.Visit(schema); + } + + private void EnsureComponentsExist() + { + _target.Components ??= new(); + } + + private void EnsureSchemasExist() + { + _target.Components.Schemas ??= new Dictionary(); + } + + private void EnsureParametersExist() + { + _target.Components.Parameters ??= new Dictionary(); + } + + private void EnsureResponsesExist() + { + _target.Components.Responses ??= new Dictionary(); + } + + private void EnsureRequestBodiesExist() + { + _target.Components.RequestBodies ??= new Dictionary(); + } + + private void EnsureExamplesExist() + { + _target.Components.Examples ??= new Dictionary(); + } + + private void EnsureHeadersExist() + { + _target.Components.Headers ??= new Dictionary(); + } + + private void EnsureCallbacksExist() + { + _target.Components.Callbacks ??= new Dictionary(); + } + + private void EnsureLinksExist() + { + _target.Components.Links ??= new Dictionary(); + } + + private void EnsureSecuritySchemesExist() + { + _target.Components.SecuritySchemes ??= new Dictionary(); } } diff --git a/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt b/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt index 88599f6ef..557266d9d 100644 --- a/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt +++ b/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt @@ -1212,6 +1212,7 @@ namespace Microsoft.OpenApi.Models.References public class OpenApiSchemaReference : Microsoft.OpenApi.Models.OpenApiSchema { public OpenApiSchemaReference(string referenceId, Microsoft.OpenApi.Models.OpenApiDocument hostDocument, string externalResource = null) { } + public Microsoft.OpenApi.Models.OpenApiSchema? Target { get; } public override Microsoft.OpenApi.Models.OpenApiSchema AdditionalProperties { get; set; } public override bool AdditionalPropertiesAllowed { get; set; } public override System.Collections.Generic.IList AllOf { get; set; } From 9d07ebb4b70bdd641748270a831df031d35b7ec4 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Wed, 8 Jan 2025 15:52:38 -0500 Subject: [PATCH 36/90] fix: enum parsing when encountering unknown values should not default to first member --- .../Extensions/StringExtensions.cs | 52 ++++++++++++------- .../Models/OpenApiSecurityScheme.cs | 10 ++-- .../OpenApiSecuritySchemeReference.cs | 4 +- .../Reader/V2/OpenApiParameterDeserializer.cs | 3 +- .../V2/OpenApiSecuritySchemeDeserializer.cs | 14 ++++- .../Reader/V3/OpenApiEncodingDeserializer.cs | 9 +++- .../Reader/V3/OpenApiHeaderDeserializer.cs | 9 +++- .../Reader/V3/OpenApiParameterDeserializer.cs | 19 ++++--- .../V3/OpenApiSecuritySchemeDeserializer.cs | 19 +++++-- .../Reader/V3/OpenApiV3VersionService.cs | 29 +++++------ .../Reader/V31/OpenApiEncodingDeserializer.cs | 6 ++- .../Reader/V31/OpenApiHeaderDeserializer.cs | 6 ++- .../V31/OpenApiParameterDeserializer.cs | 16 +++--- .../V31/OpenApiSecuritySchemeDeserializer.cs | 12 ++++- .../Reader/V31/OpenApiV31VersionService.cs | 4 +- .../Attributes/DisplayAttributeTests.cs | 6 ++- .../PublicApi/PublicApi.approved.txt | 12 ++--- 17 files changed, 153 insertions(+), 77 deletions(-) diff --git a/src/Microsoft.OpenApi/Extensions/StringExtensions.cs b/src/Microsoft.OpenApi/Extensions/StringExtensions.cs index 00c26575e..1678f26dd 100644 --- a/src/Microsoft.OpenApi/Extensions/StringExtensions.cs +++ b/src/Microsoft.OpenApi/Extensions/StringExtensions.cs @@ -2,47 +2,61 @@ // Licensed under the MIT license. using System; using System.Collections.Concurrent; +using System.Collections.Generic; +using System.Collections.ObjectModel; using System.Diagnostics.CodeAnalysis; using System.Reflection; using Microsoft.OpenApi.Attributes; +using Microsoft.OpenApi.Models; +using Microsoft.OpenApi.Reader; namespace Microsoft.OpenApi.Extensions { /// /// String extension methods. /// - public static class StringExtensions + internal static class StringExtensions { - private static readonly ConcurrentDictionary> EnumDisplayCache = new(); + private static readonly ConcurrentDictionary> EnumDisplayCache = new(); - /// - /// Gets the enum value based on the given enum type and display name. - /// - /// The display name. - public static T GetEnumFromDisplayName<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicFields)] T>(this string displayName) + internal static bool TryGetEnumFromDisplayName<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicFields)] T>(this string displayName, ParsingContext parsingContext, out T result) where T : Enum + { + if (TryGetEnumFromDisplayName(displayName, out result)) + { + return true; + } + + parsingContext.Diagnostic.Errors.Add(new OpenApiError(parsingContext.GetLocation(), $"Enum value {displayName} is not recognized.")); + return false; + + } + internal static bool TryGetEnumFromDisplayName<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicFields)] T>(this string displayName, out T result) where T : Enum { var type = typeof(T); - if (!type.IsEnum) - return default; - var displayMap = EnumDisplayCache.GetOrAdd(type, _ => new ConcurrentDictionary(StringComparer.OrdinalIgnoreCase)); + var displayMap = EnumDisplayCache.GetOrAdd(type, GetEnumValues); if (displayMap.TryGetValue(displayName, out var cachedValue)) - return (T)cachedValue; - + { + result = (T)cachedValue; + return true; + } - foreach (var field in type.GetFields(BindingFlags.Public | BindingFlags.Static)) + result = default; + return false; + } + private static ReadOnlyDictionary GetEnumValues(Type enumType) where T : Enum + { + var result = new Dictionary(StringComparer.OrdinalIgnoreCase); + foreach (var field in enumType.GetFields(BindingFlags.Public | BindingFlags.Static)) { - var displayAttribute = field.GetCustomAttribute(); - if (displayAttribute != null && displayAttribute.Name.Equals(displayName, StringComparison.OrdinalIgnoreCase)) + if (field.GetCustomAttribute() is {} displayAttribute) { var enumValue = (T)field.GetValue(null); - displayMap.TryAdd(displayName, enumValue); - return enumValue; + result.Add(displayAttribute.Name, enumValue); } } - - return default; + return new ReadOnlyDictionary(result); } internal static string ToFirstCharacterLowerCase(this string input) => string.IsNullOrEmpty(input) ? string.Empty : char.ToLowerInvariant(input[0]) + input.Substring(1); diff --git a/src/Microsoft.OpenApi/Models/OpenApiSecurityScheme.cs b/src/Microsoft.OpenApi/Models/OpenApiSecurityScheme.cs index 33a07beda..d9227be25 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiSecurityScheme.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiSecurityScheme.cs @@ -17,7 +17,7 @@ public class OpenApiSecurityScheme : IOpenApiReferenceable, IOpenApiExtensible /// /// REQUIRED. The type of the security scheme. Valid values are "apiKey", "http", "oauth2", "openIdConnect". /// - public virtual SecuritySchemeType Type { get; set; } + public virtual SecuritySchemeType? Type { get; set; } /// /// A short description for security scheme. CommonMark syntax MAY be used for rich text representation. @@ -32,7 +32,7 @@ public class OpenApiSecurityScheme : IOpenApiReferenceable, IOpenApiExtensible /// /// REQUIRED. The location of the API key. Valid values are "query", "header" or "cookie". /// - public virtual ParameterLocation In { get; set; } + public virtual ParameterLocation? In { get; set; } /// /// REQUIRED. The name of the HTTP Authorization scheme to be used @@ -82,10 +82,10 @@ public OpenApiSecurityScheme() { } /// public OpenApiSecurityScheme(OpenApiSecurityScheme securityScheme) { - Type = securityScheme?.Type ?? Type; + Type = securityScheme?.Type; Description = securityScheme?.Description ?? Description; Name = securityScheme?.Name ?? Name; - In = securityScheme?.In ?? In; + In = securityScheme?.In; Scheme = securityScheme?.Scheme ?? Scheme; BearerFormat = securityScheme?.BearerFormat ?? BearerFormat; Flows = securityScheme?.Flows != null ? new(securityScheme?.Flows) : null; @@ -111,7 +111,7 @@ public virtual void SerializeAsV3(IOpenApiWriter writer) SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0, (writer, element) => element.SerializeAsV3(writer)); } - internal virtual void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version, + internal virtual void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version, Action callback) { Utils.CheckArgumentNull(writer); diff --git a/src/Microsoft.OpenApi/Models/References/OpenApiSecuritySchemeReference.cs b/src/Microsoft.OpenApi/Models/References/OpenApiSecuritySchemeReference.cs index e635de6f9..faf6ae3bc 100644 --- a/src/Microsoft.OpenApi/Models/References/OpenApiSecuritySchemeReference.cs +++ b/src/Microsoft.OpenApi/Models/References/OpenApiSecuritySchemeReference.cs @@ -71,7 +71,7 @@ public override string Description public override string Name { get => Target.Name; set => Target.Name = value; } /// - public override ParameterLocation In { get => Target.In; set => Target.In = value; } + public override ParameterLocation? In { get => Target.In; set => Target.In = value; } /// public override string Scheme { get => Target.Scheme; set => Target.Scheme = value; } @@ -89,7 +89,7 @@ public override string Description public override IDictionary Extensions { get => Target.Extensions; set => Target.Extensions = value; } /// - public override SecuritySchemeType Type { get => Target.Type; set => Target.Type = value; } + public override SecuritySchemeType? Type { get => Target.Type; set => Target.Type = value; } /// public override void SerializeAsV3(IOpenApiWriter writer) diff --git a/src/Microsoft.OpenApi/Reader/V2/OpenApiParameterDeserializer.cs b/src/Microsoft.OpenApi/Reader/V2/OpenApiParameterDeserializer.cs index 149c00fd3..da1766cbe 100644 --- a/src/Microsoft.OpenApi/Reader/V2/OpenApiParameterDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V2/OpenApiParameterDeserializer.cs @@ -172,7 +172,8 @@ private static void ProcessIn(OpenApiParameter o, ParseNode n, OpenApiDocument h case "query": case "header": case "path": - o.In = value.GetEnumFromDisplayName(); + value.TryGetEnumFromDisplayName(out var _in); + o.In = _in; break; default: o.In = null; diff --git a/src/Microsoft.OpenApi/Reader/V2/OpenApiSecuritySchemeDeserializer.cs b/src/Microsoft.OpenApi/Reader/V2/OpenApiSecuritySchemeDeserializer.cs index 4e142b479..91d783bce 100644 --- a/src/Microsoft.OpenApi/Reader/V2/OpenApiSecuritySchemeDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V2/OpenApiSecuritySchemeDeserializer.cs @@ -40,12 +40,24 @@ internal static partial class OpenApiV2Deserializer case "oauth2": o.Type = SecuritySchemeType.OAuth2; break; + + default: + n.Context.Diagnostic.Errors.Add(new OpenApiError(n.Context.GetLocation(), $"Security scheme type {type} is not recognized.")); + break; } } }, {"description", (o, n, _) => o.Description = n.GetScalarValue()}, {"name", (o, n, _) => o.Name = n.GetScalarValue()}, - {"in", (o, n, _) => o.In = n.GetScalarValue().GetEnumFromDisplayName()}, + {"in", (o, n, _) => + { + if (!n.GetScalarValue().TryGetEnumFromDisplayName(n.Context, out var _in)) + { + return; + } + o.In = _in; + } + }, { "flow", (_, n, _) => _flowValue = n.GetScalarValue() }, diff --git a/src/Microsoft.OpenApi/Reader/V3/OpenApiEncodingDeserializer.cs b/src/Microsoft.OpenApi/Reader/V3/OpenApiEncodingDeserializer.cs index 67cb19ecb..6bd486e7a 100644 --- a/src/Microsoft.OpenApi/Reader/V3/OpenApiEncodingDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V3/OpenApiEncodingDeserializer.cs @@ -25,7 +25,14 @@ internal static partial class OpenApiV3Deserializer }, { "style", - (o, n, _) => o.Style = n.GetScalarValue().GetEnumFromDisplayName() + (o, n, _) => + { + if(!n.GetScalarValue().TryGetEnumFromDisplayName(n.Context, out var style)) + { + return; + } + o.Style = style; + } }, { "explode", diff --git a/src/Microsoft.OpenApi/Reader/V3/OpenApiHeaderDeserializer.cs b/src/Microsoft.OpenApi/Reader/V3/OpenApiHeaderDeserializer.cs index bc09b9b10..8f6edb55b 100644 --- a/src/Microsoft.OpenApi/Reader/V3/OpenApiHeaderDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V3/OpenApiHeaderDeserializer.cs @@ -39,7 +39,14 @@ internal static partial class OpenApiV3Deserializer }, { "style", - (o, n, _) => o.Style = n.GetScalarValue().GetEnumFromDisplayName() + (o, n, _) => + { + if(!n.GetScalarValue().TryGetEnumFromDisplayName(n.Context, out var style)) + { + return; + } + o.Style = style; + } }, { "explode", diff --git a/src/Microsoft.OpenApi/Reader/V3/OpenApiParameterDeserializer.cs b/src/Microsoft.OpenApi/Reader/V3/OpenApiParameterDeserializer.cs index 0446c52b7..74edfd462 100644 --- a/src/Microsoft.OpenApi/Reader/V3/OpenApiParameterDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V3/OpenApiParameterDeserializer.cs @@ -26,11 +26,11 @@ internal static partial class OpenApiV3Deserializer { "in", (o, n, _) => { - var inString = n.GetScalarValue(); - - o.In = Enum.GetValues(typeof(ParameterLocation)).Cast() - .Select( e => e.GetDisplayName() ) - .Contains(inString) ? n.GetScalarValue().GetEnumFromDisplayName() : null; + if (!n.GetScalarValue().TryGetEnumFromDisplayName(n.Context, out var _in)) + { + return; + } + o.In = _in; } }, { @@ -55,7 +55,14 @@ internal static partial class OpenApiV3Deserializer }, { "style", - (o, n, _) => o.Style = n.GetScalarValue().GetEnumFromDisplayName() + (o, n, _) => + { + if (!n.GetScalarValue().TryGetEnumFromDisplayName(n.Context, out var style)) + { + return; + } + o.Style = style; + } }, { "explode", diff --git a/src/Microsoft.OpenApi/Reader/V3/OpenApiSecuritySchemeDeserializer.cs b/src/Microsoft.OpenApi/Reader/V3/OpenApiSecuritySchemeDeserializer.cs index 4a794408a..0659b4c22 100644 --- a/src/Microsoft.OpenApi/Reader/V3/OpenApiSecuritySchemeDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V3/OpenApiSecuritySchemeDeserializer.cs @@ -2,7 +2,6 @@ // Licensed under the MIT license. using System; -using System.Linq; using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Models.References; @@ -21,7 +20,14 @@ internal static partial class OpenApiV3Deserializer { { "type", - (o, n, _) => o.Type = n.GetScalarValue().GetEnumFromDisplayName() + (o, n, _) => + { + if (!n.GetScalarValue().TryGetEnumFromDisplayName(n.Context, out var type)) + { + return; + } + o.Type = type; + } }, { "description", @@ -33,7 +39,14 @@ internal static partial class OpenApiV3Deserializer }, { "in", - (o, n, _) => o.In = n.GetScalarValue().GetEnumFromDisplayName() + (o, n, _) => + { + if(!n.GetScalarValue().TryGetEnumFromDisplayName(n.Context, out var _in)) + { + return; + } + o.In = _in; + } }, { "scheme", diff --git a/src/Microsoft.OpenApi/Reader/V3/OpenApiV3VersionService.cs b/src/Microsoft.OpenApi/Reader/V3/OpenApiV3VersionService.cs index c2ef954a5..9ac257814 100644 --- a/src/Microsoft.OpenApi/Reader/V3/OpenApiV3VersionService.cs +++ b/src/Microsoft.OpenApi/Reader/V3/OpenApiV3VersionService.cs @@ -123,7 +123,7 @@ public OpenApiReference ConvertToOpenApiReference( if (id.StartsWith("/components/")) { var localSegments = segments[1].Split('/'); - var referencedType = localSegments[2].GetEnumFromDisplayName(); + localSegments[2].TryGetEnumFromDisplayName(out var referencedType); if (type == null) { type = referencedType; @@ -200,25 +200,22 @@ private OpenApiReference ParseLocalReference(string localReference) var segments = localReference.Split('/'); - if (segments.Length == 4) // /components/{type}/pet + if (segments.Length == 4 && segments[1] == "components") // /components/{type}/pet { - if (segments[1] == "components") + segments[2].TryGetEnumFromDisplayName(out var referenceType); + var refId = segments[3]; + if (segments[2] == "pathItems") { - var referenceType = segments[2].GetEnumFromDisplayName(); - var refId = segments[3]; - if (segments[2] == "pathItems") - { - refId = "/" + segments[3]; - }; + refId = "/" + segments[3]; + } - var parsedReference = new OpenApiReference - { - Type = referenceType, - Id = refId - }; + var parsedReference = new OpenApiReference + { + Type = referenceType, + Id = refId + }; - return parsedReference; - } + return parsedReference; } throw new OpenApiException(string.Format(SRResource.ReferenceHasInvalidFormat, localReference)); diff --git a/src/Microsoft.OpenApi/Reader/V31/OpenApiEncodingDeserializer.cs b/src/Microsoft.OpenApi/Reader/V31/OpenApiEncodingDeserializer.cs index b54c5e75b..d676b1a59 100644 --- a/src/Microsoft.OpenApi/Reader/V31/OpenApiEncodingDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V31/OpenApiEncodingDeserializer.cs @@ -27,7 +27,11 @@ internal static partial class OpenApiV31Deserializer { "style", (o, n, _) => { - o.Style = n.GetScalarValue().GetEnumFromDisplayName(); + if(!n.GetScalarValue().TryGetEnumFromDisplayName(n.Context, out var style)) + { + return; + } + o.Style = style; } }, { diff --git a/src/Microsoft.OpenApi/Reader/V31/OpenApiHeaderDeserializer.cs b/src/Microsoft.OpenApi/Reader/V31/OpenApiHeaderDeserializer.cs index d3657db02..7349774f6 100644 --- a/src/Microsoft.OpenApi/Reader/V31/OpenApiHeaderDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V31/OpenApiHeaderDeserializer.cs @@ -47,7 +47,11 @@ internal static partial class OpenApiV31Deserializer { "style", (o, n, _) => { - o.Style = n.GetScalarValue().GetEnumFromDisplayName(); + if(!n.GetScalarValue().TryGetEnumFromDisplayName(n.Context, out var style)) + { + return; + } + o.Style = style; } }, { diff --git a/src/Microsoft.OpenApi/Reader/V31/OpenApiParameterDeserializer.cs b/src/Microsoft.OpenApi/Reader/V31/OpenApiParameterDeserializer.cs index e8f4e5a93..824e6e577 100644 --- a/src/Microsoft.OpenApi/Reader/V31/OpenApiParameterDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V31/OpenApiParameterDeserializer.cs @@ -25,11 +25,11 @@ internal static partial class OpenApiV31Deserializer { "in", (o, n, _) => { - var inString = n.GetScalarValue(); - o.In = Enum.GetValues(typeof(ParameterLocation)).Cast() - .Select( e => e.GetDisplayName() ) - .Contains(inString) ? n.GetScalarValue().GetEnumFromDisplayName() : null; - + if (!n.GetScalarValue().TryGetEnumFromDisplayName(n.Context, out var _in)) + { + return; + } + o.In = _in; } }, { @@ -65,7 +65,11 @@ internal static partial class OpenApiV31Deserializer { "style", (o, n, _) => { - o.Style = n.GetScalarValue().GetEnumFromDisplayName(); + if (!n.GetScalarValue().TryGetEnumFromDisplayName(n.Context, out var style)) + { + return; + } + o.Style = style; } }, { diff --git a/src/Microsoft.OpenApi/Reader/V31/OpenApiSecuritySchemeDeserializer.cs b/src/Microsoft.OpenApi/Reader/V31/OpenApiSecuritySchemeDeserializer.cs index 7b5ff5cb8..8fb5c0cd1 100644 --- a/src/Microsoft.OpenApi/Reader/V31/OpenApiSecuritySchemeDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V31/OpenApiSecuritySchemeDeserializer.cs @@ -22,7 +22,11 @@ internal static partial class OpenApiV31Deserializer { "type", (o, n, _) => { - o.Type = n.GetScalarValue().GetEnumFromDisplayName(); + if (!n.GetScalarValue().TryGetEnumFromDisplayName(n.Context, out var type)) + { + return; + } + o.Type = type; } }, { @@ -40,7 +44,11 @@ internal static partial class OpenApiV31Deserializer { "in", (o, n, _) => { - o.In = n.GetScalarValue().GetEnumFromDisplayName(); + if (!n.GetScalarValue().TryGetEnumFromDisplayName(n.Context, out var _in)) + { + return; + } + o.In = _in; } }, { diff --git a/src/Microsoft.OpenApi/Reader/V31/OpenApiV31VersionService.cs b/src/Microsoft.OpenApi/Reader/V31/OpenApiV31VersionService.cs index 333ec53bb..f564c37ab 100644 --- a/src/Microsoft.OpenApi/Reader/V31/OpenApiV31VersionService.cs +++ b/src/Microsoft.OpenApi/Reader/V31/OpenApiV31VersionService.cs @@ -124,7 +124,7 @@ public OpenApiReference ConvertToOpenApiReference( if (id.StartsWith("/components/")) { var localSegments = segments[1].Split('/'); - var referencedType = localSegments[2].GetEnumFromDisplayName(); + localSegments[2].TryGetEnumFromDisplayName(out var referencedType); if (type == null) { type = referencedType; @@ -188,7 +188,7 @@ private OpenApiReference ParseLocalReference(string localReference, string summa if (segments.Length == 4 && segments[1] == "components") // /components/{type}/pet { - var referenceType = segments[2].GetEnumFromDisplayName(); + segments[2].TryGetEnumFromDisplayName(out var referenceType); var refId = segments[3]; if (segments[2] == "pathItems") { diff --git a/test/Microsoft.OpenApi.Tests/Attributes/DisplayAttributeTests.cs b/test/Microsoft.OpenApi.Tests/Attributes/DisplayAttributeTests.cs index 182108260..4ce1c644a 100644 --- a/test/Microsoft.OpenApi.Tests/Attributes/DisplayAttributeTests.cs +++ b/test/Microsoft.OpenApi.Tests/Attributes/DisplayAttributeTests.cs @@ -45,7 +45,8 @@ public void GetDisplayNameExtensionShouldUseDisplayAttribute(ApiLevel apiLevel, [InlineData(ApiLevel.Corporate, "corporate")] public void GetEnumFromDisplayNameShouldReturnEnumValue(ApiLevel expected, string displayName) { - Assert.Equal(expected, displayName.GetEnumFromDisplayName()); + displayName.TryGetEnumFromDisplayName(out var result); + Assert.Equal(expected, result); } [Theory] @@ -54,7 +55,8 @@ public void GetEnumFromDisplayNameShouldReturnEnumValue(ApiLevel expected, strin [InlineData(UserType.Editor, "editor")] public void GetEnumFromDisplayNameShouldReturnEnumValueForFlagsEnum(UserType expected, string displayName) { - Assert.Equal(expected, displayName.GetEnumFromDisplayName()); + displayName.TryGetEnumFromDisplayName(out var result); + Assert.Equal(expected, result); } } } diff --git a/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt b/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt index 88599f6ef..d57cb34ff 100644 --- a/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt +++ b/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt @@ -196,10 +196,6 @@ namespace Microsoft.OpenApi.Extensions public static string? ToIdentifier(this Microsoft.OpenApi.Models.JsonSchemaType? schemaType) { } public static Microsoft.OpenApi.Models.JsonSchemaType ToJsonSchemaType(this string identifier) { } } - public static class StringExtensions - { - public static T GetEnumFromDisplayName(this string displayName) { } - } } namespace Microsoft.OpenApi.Interfaces { @@ -949,11 +945,11 @@ namespace Microsoft.OpenApi.Models public virtual string Description { get; set; } public virtual System.Collections.Generic.IDictionary Extensions { get; set; } public virtual Microsoft.OpenApi.Models.OpenApiOAuthFlows Flows { get; set; } - public virtual Microsoft.OpenApi.Models.ParameterLocation In { get; set; } + public virtual Microsoft.OpenApi.Models.ParameterLocation? In { get; set; } public virtual string Name { get; set; } public virtual System.Uri OpenIdConnectUrl { get; set; } public virtual string Scheme { get; set; } - public virtual Microsoft.OpenApi.Models.SecuritySchemeType Type { get; set; } + public virtual Microsoft.OpenApi.Models.SecuritySchemeType? Type { get; set; } public virtual void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public virtual void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public virtual void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } @@ -1274,11 +1270,11 @@ namespace Microsoft.OpenApi.Models.References public override string Description { get; set; } public override System.Collections.Generic.IDictionary Extensions { get; set; } public override Microsoft.OpenApi.Models.OpenApiOAuthFlows Flows { get; set; } - public override Microsoft.OpenApi.Models.ParameterLocation In { get; set; } + public override Microsoft.OpenApi.Models.ParameterLocation? In { get; set; } public override string Name { get; set; } public override System.Uri OpenIdConnectUrl { get; set; } public override string Scheme { get; set; } - public override Microsoft.OpenApi.Models.SecuritySchemeType Type { get; set; } + public override Microsoft.OpenApi.Models.SecuritySchemeType? Type { get; set; } public override void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public override void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public override void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } From fd25660595082b32d4414d8f10e450d4275974ae Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Wed, 8 Jan 2025 15:57:41 -0500 Subject: [PATCH 37/90] chore: aligns parsing pattern --- .../Reader/V2/OpenApiParameterDeserializer.cs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Microsoft.OpenApi/Reader/V2/OpenApiParameterDeserializer.cs b/src/Microsoft.OpenApi/Reader/V2/OpenApiParameterDeserializer.cs index da1766cbe..99f65fdb2 100644 --- a/src/Microsoft.OpenApi/Reader/V2/OpenApiParameterDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V2/OpenApiParameterDeserializer.cs @@ -172,8 +172,10 @@ private static void ProcessIn(OpenApiParameter o, ParseNode n, OpenApiDocument h case "query": case "header": case "path": - value.TryGetEnumFromDisplayName(out var _in); - o.In = _in; + if (value.TryGetEnumFromDisplayName(out var _in)) + { + o.In = _in; + } break; default: o.In = null; From 97ce7a8d33eac1a7210964ded366a8cdabc065ea Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 8 Jan 2025 21:52:48 +0000 Subject: [PATCH 38/90] chore(deps): bump xunit from 2.9.2 to 2.9.3 Bumps [xunit](https://github.com/xunit/xunit) from 2.9.2 to 2.9.3. - [Commits](https://github.com/xunit/xunit/compare/v2-2.9.2...v2-2.9.3) --- updated-dependencies: - dependency-name: xunit dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- .../Microsoft.OpenApi.Readers.Tests.csproj | 2 +- test/Microsoft.OpenApi.Tests/Microsoft.OpenApi.Tests.csproj | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index c04e5b149..2a614ea53 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -14,7 +14,7 @@ - + diff --git a/test/Microsoft.OpenApi.Readers.Tests/Microsoft.OpenApi.Readers.Tests.csproj b/test/Microsoft.OpenApi.Readers.Tests/Microsoft.OpenApi.Readers.Tests.csproj index e77f34698..c2dcf4613 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/Microsoft.OpenApi.Readers.Tests.csproj +++ b/test/Microsoft.OpenApi.Readers.Tests/Microsoft.OpenApi.Readers.Tests.csproj @@ -20,7 +20,7 @@ - + diff --git a/test/Microsoft.OpenApi.Tests/Microsoft.OpenApi.Tests.csproj b/test/Microsoft.OpenApi.Tests/Microsoft.OpenApi.Tests.csproj index 3b223d0a3..2c4eb6c43 100644 --- a/test/Microsoft.OpenApi.Tests/Microsoft.OpenApi.Tests.csproj +++ b/test/Microsoft.OpenApi.Tests/Microsoft.OpenApi.Tests.csproj @@ -15,7 +15,7 @@ - + From 47ad76b4318d1a468478d4c1c82092bd5aa0eb6a Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Wed, 8 Jan 2025 17:24:42 -0500 Subject: [PATCH 39/90] fix: inconsistant API surface usage --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 10 +-- src/Microsoft.OpenApi.Workbench/MainModel.cs | 10 +-- .../OpenApiSerializableExtensions.cs | 63 +++++++++------ .../Models/OpenApiDocument.cs | 13 +-- .../Writers/IOpenApiWriter.cs | 6 +- .../Writers/OpenApiWriterBase.cs | 18 +++-- .../V2Tests/OpenApiOperationTests.cs | 25 +++--- .../V31Tests/OpenApiDocumentTests.cs | 2 +- .../V3Tests/OpenApiDocumentTests.cs | 25 +++--- .../V3Tests/OpenApiMediaTypeTests.cs | 4 +- .../V3Tests/OpenApiSchemaTests.cs | 4 +- .../Models/OpenApiCallbackTests.cs | 6 +- .../Models/OpenApiComponentsTests.cs | 49 ++++++------ .../Models/OpenApiContactTests.cs | 13 +-- .../Models/OpenApiDocumentTests.cs | 79 +++++++++++-------- .../Models/OpenApiEncodingTests.cs | 13 +-- .../Models/OpenApiExampleTests.cs | 6 +- .../Models/OpenApiExternalDocsTests.cs | 13 +-- .../Models/OpenApiHeaderTests.cs | 12 +-- .../Models/OpenApiInfoTests.cs | 29 +++---- .../Models/OpenApiLicenseTests.cs | 25 +++--- .../Models/OpenApiLinkTests.cs | 6 +- .../Models/OpenApiMediaTypeTests.cs | 37 ++++----- .../Models/OpenApiOAuthFlowTests.cs | 17 ++-- .../Models/OpenApiOAuthFlowsTests.cs | 17 ++-- .../Models/OpenApiOperationTests.cs | 43 +++++----- .../Models/OpenApiParameterTests.cs | 35 ++++---- .../Models/OpenApiReferenceTests.cs | 33 ++++---- .../Models/OpenApiRequestBodyTests.cs | 6 +- .../Models/OpenApiResponseTests.cs | 28 +++---- .../Models/OpenApiSchemaTests.cs | 30 +++---- .../Models/OpenApiSecurityRequirementTests.cs | 22 +++--- .../Models/OpenApiSecuritySchemeTests.cs | 32 ++++---- .../Models/OpenApiServerTests.cs | 9 ++- .../Models/OpenApiServerVariableTests.cs | 13 +-- .../Models/OpenApiTagTests.cs | 40 +++++----- .../Models/OpenApiXmlTests.cs | 13 +-- .../OpenApiCallbackReferenceTests.cs | 4 +- .../OpenApiExampleReferenceTests.cs | 4 +- .../References/OpenApiHeaderReferenceTests.cs | 6 +- .../References/OpenApiLinkReferenceTests.cs | 4 +- .../OpenApiParameterReferenceTests.cs | 6 +- .../OpenApiPathItemReferenceTests.cs | 2 +- .../OpenApiRequestBodyReferenceTests.cs | 4 +- .../OpenApiResponseReferenceTest.cs | 4 +- .../OpenApiSecuritySchemeReferenceTests.cs | 4 +- .../References/OpenApiTagReferenceTest.cs | 4 +- .../PublicApi/PublicApi.approved.txt | 27 +++---- .../Writers/OpenApiJsonWriterTests.cs | 5 +- .../OpenApiWriterAnyExtensionsTests.cs | 2 +- .../Writers/OpenApiYamlWriterTests.cs | 5 +- 51 files changed, 466 insertions(+), 421 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 069f8cd67..c7bf1a558 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -113,7 +113,7 @@ public static async Task TransformOpenApiDocumentAsync(HidiOptions options, ILog var walker = new OpenApiWalker(powerShellFormatter); walker.Walk(document); } - WriteOpenApi(options, openApiFormat, openApiVersion, document, logger); + await WriteOpenApiAsync(options, openApiFormat, openApiVersion, document, logger, cancellationToken).ConfigureAwait(false); } catch (TaskCanceledException) { @@ -191,7 +191,7 @@ private static OpenApiDocument ApplyFilters(HidiOptions options, ILogger logger, return document; } - private static void WriteOpenApi(HidiOptions options, OpenApiFormat openApiFormat, OpenApiSpecVersion openApiVersion, OpenApiDocument document, ILogger logger) + private static async Task WriteOpenApiAsync(HidiOptions options, OpenApiFormat openApiFormat, OpenApiSpecVersion openApiVersion, OpenApiDocument document, ILogger logger, CancellationToken cancellationToken) { using (logger.BeginScope("Output")) { @@ -216,11 +216,11 @@ private static void WriteOpenApi(HidiOptions options, OpenApiFormat openApiForma var stopwatch = new Stopwatch(); stopwatch.Start(); - document.Serialize(writer, openApiVersion); + await document.SerializeAsync(writer, openApiVersion, cancellationToken).ConfigureAwait(false); stopwatch.Stop(); logger.LogTrace("Finished serializing in {ElapsedMilliseconds}ms", stopwatch.ElapsedMilliseconds); - textWriter.Flush(); + await textWriter.FlushAsync(cancellationToken).ConfigureAwait(false); } } @@ -769,7 +769,7 @@ internal static async Task PluginManifestAsync(HidiOptions options, ILogger logg // Write OpenAPI to Output folder options.Output = new(Path.Combine(options.OutputFolder, "openapi.json")); options.TerseOutput = true; - WriteOpenApi(options, OpenApiFormat.Json, OpenApiSpecVersion.OpenApi3_1, document, logger); + await WriteOpenApiAsync(options, OpenApiFormat.Json, OpenApiSpecVersion.OpenApi3_1, document, logger, cancellationToken).ConfigureAwait(false); // Create OpenAIPluginManifest from ApiDependency and OpenAPI document var manifest = new OpenAIPluginManifest(document.Info?.Title ?? "Title", document.Info?.Title ?? "Title", "https://go.microsoft.com/fwlink/?LinkID=288890", document.Info?.Contact?.Email ?? "placeholder@contoso.com", document.Info?.License?.Url.ToString() ?? "https://placeholderlicenseurl.com") diff --git a/src/Microsoft.OpenApi.Workbench/MainModel.cs b/src/Microsoft.OpenApi.Workbench/MainModel.cs index 1cd4f24ac..7eee12251 100644 --- a/src/Microsoft.OpenApi.Workbench/MainModel.cs +++ b/src/Microsoft.OpenApi.Workbench/MainModel.cs @@ -270,7 +270,7 @@ internal async Task ParseDocumentAsync() stopwatch.Reset(); stopwatch.Start(); - Output = WriteContents(document); + Output = await WriteContentsAsync(document); stopwatch.Stop(); RenderTime = $"{stopwatch.ElapsedMilliseconds} ms"; @@ -299,15 +299,15 @@ internal async Task ParseDocumentAsync() /// /// Write content from the given document based on the format and version set in this class. /// - private string WriteContents(OpenApiDocument document) + private async Task WriteContentsAsync(OpenApiDocument document) { var outputStream = new MemoryStream(); - document.Serialize( + await document.SerializeAsync( outputStream, Version, Format, - new() + (Writers.OpenApiWriterSettings)new() { InlineLocalReferences = InlineLocal, InlineExternalReferences = InlineExternal @@ -315,7 +315,7 @@ private string WriteContents(OpenApiDocument document) outputStream.Position = 0; - return new StreamReader(outputStream).ReadToEnd(); + return await new StreamReader(outputStream).ReadToEndAsync(); } private static MemoryStream CreateStream(string text) diff --git a/src/Microsoft.OpenApi/Extensions/OpenApiSerializableExtensions.cs b/src/Microsoft.OpenApi/Extensions/OpenApiSerializableExtensions.cs index 5d59a8de2..9d284db1a 100755 --- a/src/Microsoft.OpenApi/Extensions/OpenApiSerializableExtensions.cs +++ b/src/Microsoft.OpenApi/Extensions/OpenApiSerializableExtensions.cs @@ -3,6 +3,8 @@ using System.Globalization; using System.IO; +using System.Threading; +using System.Threading.Tasks; using Microsoft.OpenApi.Exceptions; using Microsoft.OpenApi.Interfaces; using Microsoft.OpenApi.Properties; @@ -22,10 +24,11 @@ public static class OpenApiSerializableExtensions /// The Open API element. /// The output stream. /// The Open API specification version. - public static void SerializeAsJson(this T element, Stream stream, OpenApiSpecVersion specVersion) + /// The cancellation token. + public static Task SerializeAsJsonAsync(this T element, Stream stream, OpenApiSpecVersion specVersion, CancellationToken cancellationToken = default) where T : IOpenApiSerializable { - element.Serialize(stream, specVersion, OpenApiFormat.Json); + return element.SerializeAsync(stream, specVersion, OpenApiFormat.Json, cancellationToken); } /// @@ -35,10 +38,11 @@ public static void SerializeAsJson(this T element, Stream stream, OpenApiSpec /// The Open API element. /// The output stream. /// The Open API specification version. - public static void SerializeAsYaml(this T element, Stream stream, OpenApiSpecVersion specVersion) + /// The cancellation token. + public static Task SerializeAsYamlAsync(this T element, Stream stream, OpenApiSpecVersion specVersion, CancellationToken cancellationToken = default) where T : IOpenApiSerializable { - element.Serialize(stream, specVersion, OpenApiFormat.Yaml); + return element.SerializeAsync(stream, specVersion, OpenApiFormat.Yaml, cancellationToken); } /// @@ -50,14 +54,16 @@ public static void SerializeAsYaml(this T element, Stream stream, OpenApiSpec /// The given stream. /// The Open API specification version. /// The output format (JSON or YAML). - public static void Serialize( + /// The cancellation token. + public static Task SerializeAsync( this T element, Stream stream, OpenApiSpecVersion specVersion, - OpenApiFormat format) + OpenApiFormat format, + CancellationToken cancellationToken = default) where T : IOpenApiSerializable { - element.Serialize(stream, specVersion, format, null); + return element.SerializeAsync(stream, specVersion, format, null, cancellationToken); } /// @@ -70,12 +76,14 @@ public static void Serialize( /// The Open API specification version. /// The output format (JSON or YAML). /// Provide configuration settings for controlling writing output - public static void Serialize( + /// The cancellation token. + public static Task SerializeAsync( this T element, Stream stream, OpenApiSpecVersion specVersion, OpenApiFormat format, - OpenApiWriterSettings settings) + OpenApiWriterSettings settings, + CancellationToken cancellationToken = default) where T : IOpenApiSerializable { Utils.CheckArgumentNull(stream); @@ -88,7 +96,7 @@ public static void Serialize( OpenApiFormat.Yaml => new OpenApiYamlWriter(streamWriter, settings), _ => throw new OpenApiException(string.Format(SRResource.OpenApiFormatNotSupported, format)), }; - element.Serialize(writer, specVersion); + return element.SerializeAsync(writer, specVersion, cancellationToken); } /// @@ -98,7 +106,8 @@ public static void Serialize( /// The Open API element. /// The output writer. /// Version of the specification the output should conform to - public static void Serialize(this T element, IOpenApiWriter writer, OpenApiSpecVersion specVersion) + /// The cancellation token. + public static Task SerializeAsync(this T element, IOpenApiWriter writer, OpenApiSpecVersion specVersion, CancellationToken cancellationToken = default) where T : IOpenApiSerializable { Utils.CheckArgumentNull(element); @@ -122,7 +131,7 @@ public static void Serialize(this T element, IOpenApiWriter writer, OpenApiSp throw new OpenApiException(string.Format(SRResource.OpenApiSpecVersionNotSupported, specVersion)); } - writer.Flush(); + return writer.FlushAsync(cancellationToken); } /// @@ -131,12 +140,14 @@ public static void Serialize(this T element, IOpenApiWriter writer, OpenApiSp /// the /// The Open API element. /// The Open API specification version. - public static string SerializeAsJson( + /// The cancellation token. + public static Task SerializeAsJsonAsync( this T element, - OpenApiSpecVersion specVersion) + OpenApiSpecVersion specVersion, + CancellationToken cancellationToken = default) where T : IOpenApiSerializable { - return element.Serialize(specVersion, OpenApiFormat.Json); + return element.SerializeAsync(specVersion, OpenApiFormat.Json, cancellationToken); } /// @@ -145,12 +156,14 @@ public static string SerializeAsJson( /// the /// The Open API element. /// The Open API specification version. - public static string SerializeAsYaml( + /// The cancellation token. + public static Task SerializeAsYamlAsync( this T element, - OpenApiSpecVersion specVersion) + OpenApiSpecVersion specVersion, + CancellationToken cancellationToken = default) where T : IOpenApiSerializable { - return element.Serialize(specVersion, OpenApiFormat.Yaml); + return element.SerializeAsync(specVersion, OpenApiFormat.Yaml, cancellationToken); } /// @@ -160,20 +173,26 @@ public static string SerializeAsYaml( /// The Open API element. /// The Open API specification version. /// Open API document format. - public static string Serialize( + /// The cancellation token. + public static async Task SerializeAsync( this T element, OpenApiSpecVersion specVersion, - OpenApiFormat format) + OpenApiFormat format, + CancellationToken cancellationToken = default) where T : IOpenApiSerializable { Utils.CheckArgumentNull(element); using var stream = new MemoryStream(); - element.Serialize(stream, specVersion, format); + await element.SerializeAsync(stream, specVersion, format, cancellationToken).ConfigureAwait(false); stream.Position = 0; using var streamReader = new StreamReader(stream); - return streamReader.ReadToEnd(); +#if NET7_0_OR_GREATER + return await streamReader.ReadToEndAsync(cancellationToken).ConfigureAwait(false); +#else + return await streamReader.ReadToEndAsync().ConfigureAwait(false); +#endif } } } diff --git a/src/Microsoft.OpenApi/Models/OpenApiDocument.cs b/src/Microsoft.OpenApi/Models/OpenApiDocument.cs index 8cc1fda6c..27296f47b 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiDocument.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiDocument.cs @@ -83,11 +83,6 @@ public class OpenApiDocument : IOpenApiSerializable, IOpenApiExtensible, IOpenAp /// public IDictionary? Extensions { get; set; } = new Dictionary(); - /// - /// The unique hash code of the generated OpenAPI document - /// - public string HashCode => GenerateHashValue(this); - /// public IDictionary? Annotations { get; set; } @@ -457,17 +452,17 @@ public void SetReferenceHostDocument() /// /// Takes in an OpenApi document instance and generates its hash value /// - /// The OpenAPI description to hash. + /// Propagates notification that operations should be canceled. /// The hash value. - public static string GenerateHashValue(OpenApiDocument doc) + public async Task GetHashCodeAsync(CancellationToken cancellationToken = default) { using HashAlgorithm sha = SHA512.Create(); using var cryptoStream = new CryptoStream(Stream.Null, sha, CryptoStreamMode.Write); using var streamWriter = new StreamWriter(cryptoStream); var openApiJsonWriter = new OpenApiJsonWriter(streamWriter, new() { Terse = true }); - doc.SerializeAsV3(openApiJsonWriter); - openApiJsonWriter.Flush(); + SerializeAsV3(openApiJsonWriter); + await openApiJsonWriter.FlushAsync(cancellationToken).ConfigureAwait(false); cryptoStream.FlushFinalBlock(); var hash = sha.Hash; diff --git a/src/Microsoft.OpenApi/Writers/IOpenApiWriter.cs b/src/Microsoft.OpenApi/Writers/IOpenApiWriter.cs index 9ea04b400..78be4e37f 100644 --- a/src/Microsoft.OpenApi/Writers/IOpenApiWriter.cs +++ b/src/Microsoft.OpenApi/Writers/IOpenApiWriter.cs @@ -1,6 +1,9 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. +using System.Threading; +using System.Threading.Tasks; + namespace Microsoft.OpenApi.Writers { /// @@ -71,6 +74,7 @@ public interface IOpenApiWriter /// /// Flush the writer. /// - void Flush(); + /// The cancellation token. + Task FlushAsync(CancellationToken cancellationToken = default); } } diff --git a/src/Microsoft.OpenApi/Writers/OpenApiWriterBase.cs b/src/Microsoft.OpenApi/Writers/OpenApiWriterBase.cs index 901b26194..0864729d9 100644 --- a/src/Microsoft.OpenApi/Writers/OpenApiWriterBase.cs +++ b/src/Microsoft.OpenApi/Writers/OpenApiWriterBase.cs @@ -7,6 +7,8 @@ using System.IO; using System.Linq; using System.Text.Json; +using System.Threading; +using System.Threading.Tasks; using Microsoft.OpenApi.Any; using Microsoft.OpenApi.Exceptions; using Microsoft.OpenApi.Extensions; @@ -46,7 +48,7 @@ public abstract class OpenApiWriterBase : IOpenApiWriter /// Initializes a new instance of the class. /// /// The text writer. - public OpenApiWriterBase(TextWriter textWriter) : this(textWriter, null) + protected OpenApiWriterBase(TextWriter textWriter) : this(textWriter, null) { } @@ -55,7 +57,7 @@ public OpenApiWriterBase(TextWriter textWriter) : this(textWriter, null) /// /// /// - public OpenApiWriterBase(TextWriter textWriter, OpenApiWriterSettings settings) + protected OpenApiWriterBase(TextWriter textWriter, OpenApiWriterSettings settings) { Writer = textWriter; Writer.NewLine = "\n"; @@ -119,12 +121,14 @@ public OpenApiWriterBase(TextWriter textWriter, OpenApiWriterSettings settings) /// public abstract void WriteRaw(string value); - /// - /// Flush the writer. - /// - public void Flush() + /// + public Task FlushAsync(CancellationToken cancellationToken = default) { - Writer.Flush(); +#if NET8_OR_GREATER + return Writer.FlushAsync(cancellationToken); +#else + return Writer.FlushAsync(); +#endif } /// diff --git a/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiOperationTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiOperationTests.cs index 4142e9fcd..948c6544c 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiOperationTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiOperationTests.cs @@ -5,6 +5,7 @@ using System.IO; using System.Text; using System.Text.Json.Nodes; +using System.Threading.Tasks; using FluentAssertions; using Microsoft.OpenApi.Any; using Microsoft.OpenApi.Extensions; @@ -234,12 +235,12 @@ public void ParseBasicOperationShouldSucceed() } [Fact] - public void ParseBasicOperationTwiceShouldYieldSameObject() + public async Task ParseBasicOperationTwiceShouldYieldSameObject() { // Arrange MapNode node; using (var stream = new MemoryStream( - Encoding.Default.GetBytes(_basicOperation.SerializeAsYaml(OpenApiSpecVersion.OpenApi2_0)))) + Encoding.Default.GetBytes(await _basicOperation.SerializeAsYamlAsync(OpenApiSpecVersion.OpenApi2_0)))) { node = TestHelper.CreateYamlMapNode(stream); } @@ -269,12 +270,12 @@ public void ParseOperationWithBodyShouldSucceed() } [Fact] - public void ParseOperationWithBodyTwiceShouldYieldSameObject() + public async Task ParseOperationWithBodyTwiceShouldYieldSameObject() { // Arrange MapNode node; using (var stream = new MemoryStream( - Encoding.Default.GetBytes(_operationWithBody.SerializeAsYaml(OpenApiSpecVersion.OpenApi2_0)))) + Encoding.Default.GetBytes(await _operationWithBody.SerializeAsYamlAsync(OpenApiSpecVersion.OpenApi2_0)))) { node = TestHelper.CreateYamlMapNode(stream); } @@ -404,7 +405,7 @@ public void ParseOperationWithBodyAndEmptyConsumesSetsRequestBodySchemaIfExists( } [Fact] - public void ParseV2ResponseWithExamplesExtensionWorks() + public async Task ParseV2ResponseWithExamplesExtensionWorks() { // Arrange MapNode node; @@ -415,7 +416,7 @@ public void ParseV2ResponseWithExamplesExtensionWorks() // Act var operation = OpenApiV2Deserializer.LoadOperation(node); - var actual = operation.SerializeAsYaml(OpenApiSpecVersion.OpenApi3_0); + var actual = await operation.SerializeAsYamlAsync(OpenApiSpecVersion.OpenApi3_0); // Assert var expected = @"summary: Get all pets @@ -454,7 +455,7 @@ public void ParseV2ResponseWithExamplesExtensionWorks() } [Fact] - public void LoadV3ExamplesInResponseAsExtensionsWorks() + public async Task LoadV3ExamplesInResponseAsExtensionsWorks() { // Arrange MapNode node; @@ -465,7 +466,7 @@ public void LoadV3ExamplesInResponseAsExtensionsWorks() // Act var operation = OpenApiV3Deserializer.LoadOperation(node); - var actual = operation.SerializeAsYaml(OpenApiSpecVersion.OpenApi2_0); + var actual = await operation.SerializeAsYamlAsync(OpenApiSpecVersion.OpenApi2_0); // Assert var expected = @"summary: Get all pets @@ -504,7 +505,7 @@ public void LoadV3ExamplesInResponseAsExtensionsWorks() } [Fact] - public void LoadV2OperationWithBodyParameterExamplesWorks() + public async Task LoadV2OperationWithBodyParameterExamplesWorks() { // Arrange MapNode node; @@ -515,7 +516,7 @@ public void LoadV2OperationWithBodyParameterExamplesWorks() // Act var operation = OpenApiV2Deserializer.LoadOperation(node); - var actual = operation.SerializeAsYaml(OpenApiSpecVersion.OpenApi3_0); + var actual = await operation.SerializeAsYamlAsync(OpenApiSpecVersion.OpenApi3_0); // Assert var expected = @"summary: Get all pets @@ -555,7 +556,7 @@ public void LoadV2OperationWithBodyParameterExamplesWorks() } [Fact] - public void LoadV3ExamplesInRequestBodyParameterAsExtensionsWorks() + public async Task LoadV3ExamplesInRequestBodyParameterAsExtensionsWorks() { // Arrange MapNode node; @@ -566,7 +567,7 @@ public void LoadV3ExamplesInRequestBodyParameterAsExtensionsWorks() // Act var operation = OpenApiV3Deserializer.LoadOperation(node); - var actual = operation.SerializeAsYaml(OpenApiSpecVersion.OpenApi2_0); + var actual = await operation.SerializeAsYamlAsync(OpenApiSpecVersion.OpenApi2_0); // Assert var expected = @"summary: Get all pets diff --git a/test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiDocumentTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiDocumentTests.cs index 22747f0cf..a83da5e39 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiDocumentTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiDocumentTests.cs @@ -460,7 +460,7 @@ public async Task ParseDocumentWithPatternPropertiesInSchemaWorks() prop3: type: string"; - var actualMediaType = mediaType.SerializeAsYaml(OpenApiSpecVersion.OpenApi3_1); + var actualMediaType = await mediaType.SerializeAsYamlAsync(OpenApiSpecVersion.OpenApi3_1); // Assert actualSchema.Should().BeEquivalentTo(expectedSchema); diff --git a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDocumentTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDocumentTests.cs index c281206e3..864bb5aaa 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDocumentTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDocumentTests.cs @@ -32,7 +32,7 @@ public OpenApiDocumentTests() OpenApiReaderRegistry.RegisterReader(OpenApiConstants.Yaml, new OpenApiYamlReader()); } - private static T Clone(T element) where T : IOpenApiSerializable + private static async Task CloneAsync(T element) where T : IOpenApiSerializable { using var stream = new MemoryStream(); var streamWriter = new FormattingStreamWriter(stream, CultureInfo.InvariantCulture); @@ -41,15 +41,15 @@ private static T Clone(T element) where T : IOpenApiSerializable InlineLocalReferences = true }); element.SerializeAsV3(writer); - writer.Flush(); + await writer.FlushAsync(); stream.Position = 0; using var streamReader = new StreamReader(stream); - var result = streamReader.ReadToEnd(); + var result = await streamReader.ReadToEndAsync(); return OpenApiModelFactory.Parse(result, OpenApiSpecVersion.OpenApi3_0, out var _); } - private static OpenApiSecurityScheme CloneSecurityScheme(OpenApiSecurityScheme element) + private static async Task CloneSecuritySchemeAsync(OpenApiSecurityScheme element) { using var stream = new MemoryStream(); var streamWriter = new FormattingStreamWriter(stream, CultureInfo.InvariantCulture); @@ -58,11 +58,11 @@ private static OpenApiSecurityScheme CloneSecurityScheme(OpenApiSecurityScheme e InlineLocalReferences = true }); element.SerializeAsV3(writer); - writer.Flush(); + await writer.FlushAsync(); stream.Position = 0; using var streamReader = new StreamReader(stream); - var result = streamReader.ReadToEnd(); + var result = await streamReader.ReadToEndAsync(); return OpenApiModelFactory.Parse(result, OpenApiSpecVersion.OpenApi3_0, out var _); } @@ -681,7 +681,7 @@ public async Task ParseModifiedPetStoreDocumentWithTagAndSecurityShouldSucceed() }; // Create a clone of the schema to avoid modifying things in components. - var petSchema = Clone(components.Schemas["pet1"]); + var petSchema = await CloneAsync(components.Schemas["pet1"]); petSchema.Reference = new() { Id = "pet1", @@ -689,7 +689,7 @@ public async Task ParseModifiedPetStoreDocumentWithTagAndSecurityShouldSucceed() HostDocument = actual.Document }; - var newPetSchema = Clone(components.Schemas["newPet"]); + var newPetSchema = await CloneAsync(components.Schemas["newPet"]); newPetSchema.Reference = new() { @@ -698,7 +698,7 @@ public async Task ParseModifiedPetStoreDocumentWithTagAndSecurityShouldSucceed() HostDocument = actual.Document }; - var errorModelSchema = Clone(components.Schemas["errorModel"]); + var errorModelSchema = await CloneAsync(components.Schemas["errorModel"]); errorModelSchema.Reference = new() { @@ -729,7 +729,7 @@ public async Task ParseModifiedPetStoreDocumentWithTagAndSecurityShouldSucceed() } }; - var securityScheme1 = CloneSecurityScheme(components.SecuritySchemes["securitySchemeName1"]); + var securityScheme1 = await CloneSecuritySchemeAsync(components.SecuritySchemes["securitySchemeName1"]); securityScheme1.Reference = new OpenApiReference { @@ -737,7 +737,7 @@ public async Task ParseModifiedPetStoreDocumentWithTagAndSecurityShouldSucceed() Type = ReferenceType.SecurityScheme }; - var securityScheme2 = CloneSecurityScheme(components.SecuritySchemes["securitySchemeName2"]); + var securityScheme2 = await CloneSecuritySchemeAsync(components.SecuritySchemes["securitySchemeName2"]); securityScheme2.Reference = new OpenApiReference { @@ -1081,7 +1081,6 @@ public async Task ParseModifiedPetStoreDocumentWithTagAndSecurityShouldSucceed() }; actual.Document.Should().BeEquivalentTo(expected, options => options - .Excluding(x => x.HashCode) .Excluding(m => m.Tags[0].Reference) .Excluding(x => x.Paths["/pets"].Operations[OperationType.Get].Tags[0].Reference) .Excluding(x => x.Paths["/pets"].Operations[OperationType.Get].Tags[0].Reference.HostDocument) @@ -1325,7 +1324,7 @@ public async Task ParseDocWithRefsUsingProxyReferencesSucceeds() // Act var doc = (await OpenApiDocument.LoadAsync(stream)).Document; var actualParam = doc.Paths["/pets"].Operations[OperationType.Get].Parameters[0]; - var outputDoc = doc.SerializeAsYaml(OpenApiSpecVersion.OpenApi3_0).MakeLineBreaksEnvironmentNeutral(); + var outputDoc = (await doc.SerializeAsYamlAsync(OpenApiSpecVersion.OpenApi3_0)).MakeLineBreaksEnvironmentNeutral(); var expectedParam = expected.Paths["/pets"].Operations[OperationType.Get].Parameters[0]; // Assert diff --git a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiMediaTypeTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiMediaTypeTests.cs index 6197cca71..8ade58ca5 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiMediaTypeTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiMediaTypeTests.cs @@ -77,7 +77,7 @@ public async Task ParseMediaTypeWithExamplesShouldSucceed() } [Fact] - public void ParseMediaTypeWithEmptyArrayInExamplesWorks() + public async Task ParseMediaTypeWithEmptyArrayInExamplesWorks() { // Arrange var expected = @"{ @@ -107,7 +107,7 @@ public void ParseMediaTypeWithEmptyArrayInExamplesWorks() // Act var mediaType = OpenApiV3Deserializer.LoadMediaType(node); - var serialized = mediaType.SerializeAsJson(OpenApiSpecVersion.OpenApi3_0); + var serialized = await mediaType.SerializeAsJsonAsync(OpenApiSpecVersion.OpenApi3_0); // Assert serialized.MakeLineBreaksEnvironmentNeutral() diff --git a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiSchemaTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiSchemaTests.cs index 8e52ad6aa..a1554352f 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiSchemaTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiSchemaTests.cs @@ -383,8 +383,8 @@ public async Task ParseAdvancedSchemaWithReferenceShouldSucceed() }; // We serialize so that we can get rid of the schema BaseUri properties which show up as diffs - var actual = result.Document.Components.SerializeAsYaml(OpenApiSpecVersion.OpenApi3_0); - var expected = expectedComponents.SerializeAsYaml(OpenApiSpecVersion.OpenApi3_0); + var actual = await result.Document.Components.SerializeAsYamlAsync(OpenApiSpecVersion.OpenApi3_0); + var expected = await expectedComponents.SerializeAsYamlAsync(OpenApiSpecVersion.OpenApi3_0); // Assert actual.Should().Be(expected); diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiCallbackTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiCallbackTests.cs index ad2c9ffdb..8c729b7c4 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiCallbackTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiCallbackTests.cs @@ -105,7 +105,7 @@ public async Task SerializeAdvancedCallbackAsV3JsonWorksAsync(bool produceTerseO // Act AdvancedCallback.SerializeAsV3(writer); - writer.Flush(); + await writer.FlushAsync(); // Assert await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput); @@ -122,7 +122,7 @@ public async Task SerializeReferencedCallbackAsV3JsonWorksAsync(bool produceTers // Act CallbackProxy.SerializeAsV3(writer); - writer.Flush(); + await writer.FlushAsync(); // Assert await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput); @@ -139,7 +139,7 @@ public async Task SerializeReferencedCallbackAsV3JsonWithoutReferenceWorksAsync( // Act ReferencedCallback.SerializeAsV3(writer); - writer.Flush(); + await writer.FlushAsync(); // Assert await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput); diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiComponentsTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiComponentsTests.cs index a959edbf6..3a69b708e 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiComponentsTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiComponentsTests.cs @@ -2,6 +2,7 @@ // Licensed under the MIT license. using System.Collections.Generic; +using System.Threading.Tasks; using FluentAssertions; using Microsoft.OpenApi.Any; using Microsoft.OpenApi.Extensions; @@ -274,13 +275,13 @@ public class OpenApiComponentsTests }; [Fact] - public void SerializeBasicComponentsAsJsonWorks() + public async Task SerializeBasicComponentsAsJsonWorks() { // Arrange var expected = @"{ }"; // Act - var actual = BasicComponents.SerializeAsJson(OpenApiSpecVersion.OpenApi3_0); + var actual = await BasicComponents.SerializeAsJsonAsync(OpenApiSpecVersion.OpenApi3_0); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -289,13 +290,13 @@ public void SerializeBasicComponentsAsJsonWorks() } [Fact] - public void SerializeBasicComponentsAsYamlWorks() + public async Task SerializeBasicComponentsAsYamlWorks() { // Arrange var expected = @"{ }"; // Act - var actual = BasicComponents.SerializeAsYaml(OpenApiSpecVersion.OpenApi3_0); + var actual = await BasicComponents.SerializeAsYamlAsync(OpenApiSpecVersion.OpenApi3_0); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -304,7 +305,7 @@ public void SerializeBasicComponentsAsYamlWorks() } [Fact] - public void SerializeAdvancedComponentsAsJsonV3Works() + public async Task SerializeAdvancedComponentsAsJsonV3Works() { // Arrange var expected = @@ -347,7 +348,7 @@ public void SerializeAdvancedComponentsAsJsonV3Works() """; // Act - var actual = AdvancedComponents.SerializeAsJson(OpenApiSpecVersion.OpenApi3_0); + var actual = await AdvancedComponents.SerializeAsJsonAsync(OpenApiSpecVersion.OpenApi3_0); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -356,7 +357,7 @@ public void SerializeAdvancedComponentsAsJsonV3Works() } [Fact] - public void SerializeAdvancedComponentsWithReferenceAsJsonV3Works() + public async Task SerializeAdvancedComponentsWithReferenceAsJsonV3Works() { // Arrange var expected = @@ -405,7 +406,7 @@ public void SerializeAdvancedComponentsWithReferenceAsJsonV3Works() """; // Act - var actual = AdvancedComponentsWithReference.SerializeAsJson(OpenApiSpecVersion.OpenApi3_0); + var actual = await AdvancedComponentsWithReference.SerializeAsJsonAsync(OpenApiSpecVersion.OpenApi3_0); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -414,7 +415,7 @@ public void SerializeAdvancedComponentsWithReferenceAsJsonV3Works() } [Fact] - public void SerializeAdvancedComponentsAsYamlV3Works() + public async Task SerializeAdvancedComponentsAsYamlV3Works() { // Arrange var expected = @@ -444,7 +445,7 @@ public void SerializeAdvancedComponentsAsYamlV3Works() """; // Act - var actual = AdvancedComponents.SerializeAsYaml(OpenApiSpecVersion.OpenApi3_0); + var actual = await AdvancedComponents.SerializeAsYamlAsync(OpenApiSpecVersion.OpenApi3_0); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -453,7 +454,7 @@ public void SerializeAdvancedComponentsAsYamlV3Works() } [Fact] - public void SerializeAdvancedComponentsWithReferenceAsYamlV3Works() + public async Task SerializeAdvancedComponentsWithReferenceAsYamlV3Works() { // Arrange var expected = @@ -486,7 +487,7 @@ public void SerializeAdvancedComponentsWithReferenceAsYamlV3Works() """; // Act - var actual = AdvancedComponentsWithReference.SerializeAsYaml(OpenApiSpecVersion.OpenApi3_0); + var actual = await AdvancedComponentsWithReference.SerializeAsYamlAsync(OpenApiSpecVersion.OpenApi3_0); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -495,7 +496,7 @@ public void SerializeAdvancedComponentsWithReferenceAsYamlV3Works() } [Fact] - public void SerializeBrokenComponentsAsJsonV3Works() + public async Task SerializeBrokenComponentsAsJsonV3Works() { // Arrange var expected = """ @@ -523,7 +524,7 @@ public void SerializeBrokenComponentsAsJsonV3Works() """; // Act - var actual = BrokenComponents.SerializeAsJson(OpenApiSpecVersion.OpenApi3_0); + var actual = await BrokenComponents.SerializeAsJsonAsync(OpenApiSpecVersion.OpenApi3_0); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -532,7 +533,7 @@ public void SerializeBrokenComponentsAsJsonV3Works() } [Fact] - public void SerializeBrokenComponentsAsYamlV3Works() + public async Task SerializeBrokenComponentsAsYamlV3Works() { // Arrange var expected = @@ -553,7 +554,7 @@ public void SerializeBrokenComponentsAsYamlV3Works() """; // Act - var actual = BrokenComponents.SerializeAsYaml(OpenApiSpecVersion.OpenApi3_0); + var actual = await BrokenComponents.SerializeAsYamlAsync(OpenApiSpecVersion.OpenApi3_0); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -562,7 +563,7 @@ public void SerializeBrokenComponentsAsYamlV3Works() } [Fact] - public void SerializeTopLevelReferencingComponentsAsYamlV3Works() + public async Task SerializeTopLevelReferencingComponentsAsYamlV3Works() { // Arrange // Arrange @@ -579,7 +580,7 @@ public void SerializeTopLevelReferencingComponentsAsYamlV3Works() """; // Act - var actual = TopLevelReferencingComponents.SerializeAsYaml(OpenApiSpecVersion.OpenApi3_0); + var actual = await TopLevelReferencingComponents.SerializeAsYamlAsync(OpenApiSpecVersion.OpenApi3_0); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -588,7 +589,7 @@ public void SerializeTopLevelReferencingComponentsAsYamlV3Works() } [Fact] - public void SerializeTopLevelSelfReferencingWithOtherPropertiesComponentsAsYamlV3Works() + public async Task SerializeTopLevelSelfReferencingWithOtherPropertiesComponentsAsYamlV3Works() { // Arrange var expected = @"schemas: @@ -604,7 +605,7 @@ public void SerializeTopLevelSelfReferencingWithOtherPropertiesComponentsAsYamlV type: string"; // Act - var actual = TopLevelSelfReferencingComponentsWithOtherProperties.SerializeAsYaml(OpenApiSpecVersion.OpenApi3_0); + var actual = await TopLevelSelfReferencingComponentsWithOtherProperties.SerializeAsYamlAsync(OpenApiSpecVersion.OpenApi3_0); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -613,7 +614,7 @@ public void SerializeTopLevelSelfReferencingWithOtherPropertiesComponentsAsYamlV } [Fact] - public void SerializeComponentsWithPathItemsAsJsonWorks() + public async Task SerializeComponentsWithPathItemsAsJsonWorks() { // Arrange var expected = @"{ @@ -659,7 +660,7 @@ public void SerializeComponentsWithPathItemsAsJsonWorks() } }"; // Act - var actual = ComponentsWithPathItem.SerializeAsJson(OpenApiSpecVersion.OpenApi3_1); + var actual = await ComponentsWithPathItem.SerializeAsJsonAsync(OpenApiSpecVersion.OpenApi3_1); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -668,7 +669,7 @@ public void SerializeComponentsWithPathItemsAsJsonWorks() } [Fact] - public void SerializeComponentsWithPathItemsAsYamlWorks() + public async Task SerializeComponentsWithPathItemsAsYamlWorks() { // Arrange var expected = @"pathItems: @@ -696,7 +697,7 @@ public void SerializeComponentsWithPathItemsAsYamlWorks() type: integer"; // Act - var actual = ComponentsWithPathItem.SerializeAsYaml(OpenApiSpecVersion.OpenApi3_1); + var actual = await ComponentsWithPathItem.SerializeAsYamlAsync(OpenApiSpecVersion.OpenApi3_1); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiContactTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiContactTests.cs index 06c00fec4..337548ccb 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiContactTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiContactTests.cs @@ -2,6 +2,7 @@ // Licensed under the MIT license. using System.Collections.Generic; +using System.Threading.Tasks; using FluentAssertions; using Microsoft.OpenApi.Any; using Microsoft.OpenApi.Extensions; @@ -32,13 +33,13 @@ public class OpenApiContactTests [InlineData(OpenApiSpecVersion.OpenApi2_0, OpenApiFormat.Json, "{ }")] [InlineData(OpenApiSpecVersion.OpenApi3_0, OpenApiFormat.Yaml, "{ }")] [InlineData(OpenApiSpecVersion.OpenApi2_0, OpenApiFormat.Yaml, "{ }")] - public void SerializeBasicContactWorks( + public async Task SerializeBasicContactWorks( OpenApiSpecVersion version, OpenApiFormat format, string expected) { // Arrange & Act - var actual = BasicContact.Serialize(version, format); + var actual = await BasicContact.SerializeAsync(version, format); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -49,7 +50,7 @@ public void SerializeBasicContactWorks( [Theory] [InlineData(OpenApiSpecVersion.OpenApi3_0)] [InlineData(OpenApiSpecVersion.OpenApi2_0)] - public void SerializeAdvanceContactAsJsonWorks(OpenApiSpecVersion version) + public async Task SerializeAdvanceContactAsJsonWorks(OpenApiSpecVersion version) { // Arrange var expected = @@ -63,7 +64,7 @@ public void SerializeAdvanceContactAsJsonWorks(OpenApiSpecVersion version) """; // Act - var actual = AdvanceContact.SerializeAsJson(version); + var actual = await AdvanceContact.SerializeAsJsonAsync(version); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -74,7 +75,7 @@ public void SerializeAdvanceContactAsJsonWorks(OpenApiSpecVersion version) [Theory] [InlineData(OpenApiSpecVersion.OpenApi3_0)] [InlineData(OpenApiSpecVersion.OpenApi2_0)] - public void SerializeAdvanceContactAsYamlWorks(OpenApiSpecVersion version) + public async Task SerializeAdvanceContactAsYamlWorks(OpenApiSpecVersion version) { // Arrange var expected = @@ -86,7 +87,7 @@ public void SerializeAdvanceContactAsYamlWorks(OpenApiSpecVersion version) """; // Act - var actual = AdvanceContact.SerializeAsYaml(version); + var actual = await AdvanceContact.SerializeAsYamlAsync(version); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiDocumentTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiDocumentTests.cs index 5d493fc55..5d9c9175b 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiDocumentTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiDocumentTests.cs @@ -1355,7 +1355,7 @@ public async Task SerializeAdvancedDocumentAsV3JsonWorksAsync(bool produceTerseO // Act AdvancedDocument.SerializeAsV3(writer); - writer.Flush(); + await writer.FlushAsync(); // Assert await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput); @@ -1372,7 +1372,7 @@ public async Task SerializeAdvancedDocumentWithReferenceAsV3JsonWorksAsync(bool // Act AdvancedDocumentWithReference.SerializeAsV3(writer); - writer.Flush(); + await writer.FlushAsync(); // Assert await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput); @@ -1389,7 +1389,7 @@ public async Task SerializeAdvancedDocumentWithServerVariableAsV2JsonWorksAsync( // Act AdvancedDocumentWithServerVariable.SerializeAsV2(writer); - writer.Flush(); + await writer.FlushAsync(); // Assert await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput); @@ -1406,7 +1406,7 @@ public async Task SerializeAdvancedDocumentAsV2JsonWorksAsync(bool produceTerseO // Act AdvancedDocument.SerializeAsV2(writer); - writer.Flush(); + await writer.FlushAsync(); // Assert await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput); @@ -1423,7 +1423,7 @@ public async Task SerializeDuplicateExtensionsAsV3JsonWorksAsync(bool produceTer // Act DuplicateExtensions.SerializeAsV3(writer); - writer.Flush(); + await writer.FlushAsync(); // Assert await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput); @@ -1440,7 +1440,7 @@ public async Task SerializeDuplicateExtensionsAsV2JsonWorksAsync(bool produceTer // Act DuplicateExtensions.SerializeAsV2(writer); - writer.Flush(); + await writer.FlushAsync(); // Assert await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput); @@ -1457,14 +1457,14 @@ public async Task SerializeAdvancedDocumentWithReferenceAsV2JsonWorksAsync(bool // Act AdvancedDocumentWithReference.SerializeAsV2(writer); - writer.Flush(); + await writer.FlushAsync(); // Assert await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput); } [Fact] - public void SerializeSimpleDocumentWithTopLevelReferencingComponentsAsYamlV2Works() + public async Task SerializeSimpleDocumentWithTopLevelReferencingComponentsAsYamlV2Works() { // Arrange var expected = @"swagger: '2.0' @@ -1481,7 +1481,7 @@ public void SerializeSimpleDocumentWithTopLevelReferencingComponentsAsYamlV2Work type: string"; // Act - var actual = SimpleDocumentWithTopLevelReferencingComponents.SerializeAsYaml(OpenApiSpecVersion.OpenApi2_0); + var actual = await SimpleDocumentWithTopLevelReferencingComponents.SerializeAsYamlAsync(OpenApiSpecVersion.OpenApi2_0); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -1490,7 +1490,7 @@ public void SerializeSimpleDocumentWithTopLevelReferencingComponentsAsYamlV2Work } [Fact] - public void SerializeSimpleDocumentWithTopLevelSelfReferencingComponentsAsYamlV3Works() + public async Task SerializeSimpleDocumentWithTopLevelSelfReferencingComponentsAsYamlV3Works() { // Arrange var expected = @"swagger: '2.0' @@ -1501,7 +1501,7 @@ public void SerializeSimpleDocumentWithTopLevelSelfReferencingComponentsAsYamlV3 schema1: { }"; // Act - var actual = SimpleDocumentWithTopLevelSelfReferencingComponents.SerializeAsYaml(OpenApiSpecVersion.OpenApi2_0); + var actual = await SimpleDocumentWithTopLevelSelfReferencingComponents.SerializeAsYamlAsync(OpenApiSpecVersion.OpenApi2_0); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -1510,7 +1510,7 @@ public void SerializeSimpleDocumentWithTopLevelSelfReferencingComponentsAsYamlV3 } [Fact] - public void SerializeSimpleDocumentWithTopLevelSelfReferencingWithOtherPropertiesComponentsAsYamlV3Works() + public async Task SerializeSimpleDocumentWithTopLevelSelfReferencingWithOtherPropertiesComponentsAsYamlV3Works() { // Arrange var expected = @"swagger: '2.0' @@ -1530,7 +1530,7 @@ public void SerializeSimpleDocumentWithTopLevelSelfReferencingWithOtherPropertie type: string"; // Act - var actual = SimpleDocumentWithTopLevelSelfReferencingComponentsWithOtherProperties.SerializeAsYaml(OpenApiSpecVersion.OpenApi2_0); + var actual = await SimpleDocumentWithTopLevelSelfReferencingComponentsWithOtherProperties.SerializeAsYamlAsync(OpenApiSpecVersion.OpenApi2_0); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -1539,7 +1539,7 @@ public void SerializeSimpleDocumentWithTopLevelSelfReferencingWithOtherPropertie } [Fact] - public void SerializeDocumentWithReferenceButNoComponents() + public async Task SerializeDocumentWithReferenceButNoComponents() { // Arrange var document = new OpenApiDocument() @@ -1584,14 +1584,14 @@ public void SerializeDocumentWithReferenceButNoComponents() }; // Act - var actual = document.Serialize(OpenApiSpecVersion.OpenApi2_0, OpenApiFormat.Json); + var actual = await document.SerializeAsync(OpenApiSpecVersion.OpenApi2_0, OpenApiFormat.Json); // Assert Assert.NotEmpty(actual); } [Fact] - public void SerializeRelativePathAsV2JsonWorks() + public async Task SerializeRelativePathAsV2JsonWorks() { // Arrange var expected = @@ -1612,7 +1612,7 @@ public void SerializeRelativePathAsV2JsonWorks() }; // Act - var actual = doc.SerializeAsYaml(OpenApiSpecVersion.OpenApi2_0); + var actual = await doc.SerializeAsYamlAsync(OpenApiSpecVersion.OpenApi2_0); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -1621,7 +1621,7 @@ public void SerializeRelativePathAsV2JsonWorks() } [Fact] - public void SerializeRelativePathWithHostAsV2JsonWorks() + public async Task SerializeRelativePathWithHostAsV2JsonWorks() { // Arrange var expected = @@ -1643,7 +1643,7 @@ public void SerializeRelativePathWithHostAsV2JsonWorks() }; // Act - var actual = doc.SerializeAsYaml(OpenApiSpecVersion.OpenApi2_0); + var actual = await doc.SerializeAsYamlAsync(OpenApiSpecVersion.OpenApi2_0); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -1652,7 +1652,7 @@ public void SerializeRelativePathWithHostAsV2JsonWorks() } [Fact] - public void SerializeRelativeRootPathWithHostAsV2JsonWorks() + public async Task SerializeRelativeRootPathWithHostAsV2JsonWorks() { // Arrange var expected = @@ -1673,7 +1673,7 @@ public void SerializeRelativeRootPathWithHostAsV2JsonWorks() }; // Act - var actual = doc.SerializeAsYaml(OpenApiSpecVersion.OpenApi2_0); + var actual = await doc.SerializeAsYamlAsync(OpenApiSpecVersion.OpenApi2_0); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -1696,8 +1696,17 @@ public async Task TestHashCodesForSimilarOpenApiDocuments() Test whether reading in two similar documents yield the same hash code, And reading in similar documents(one has a whitespace) yields the same hash code as the result is terse */ - Assert.True(doc1.HashCode != null && doc2.HashCode != null && doc1.HashCode.Equals(doc2.HashCode)); - Assert.Equal(doc1.HashCode, doc3.HashCode); + var doc1HashCode = await doc1.GetHashCodeAsync(); + var doc2HashCode = await doc2.GetHashCodeAsync(); + var doc3HashCode = await doc3.GetHashCodeAsync(); + Assert.NotNull(doc1HashCode); + Assert.NotNull(doc2HashCode); + Assert.NotNull(doc3HashCode); + Assert.NotEmpty(doc1HashCode); + Assert.NotEmpty(doc2HashCode); + Assert.NotEmpty(doc3HashCode); + Assert.Equal(doc1HashCode, doc2HashCode); + Assert.Equal(doc1HashCode, doc3HashCode); } private static async Task ParseInputFileAsync(string filePath) @@ -1707,7 +1716,7 @@ private static async Task ParseInputFileAsync(string filePath) } [Fact] - public void SerializeV2DocumentWithNonArraySchemaTypeDoesNotWriteOutCollectionFormat() + public async Task SerializeV2DocumentWithNonArraySchemaTypeDoesNotWriteOutCollectionFormat() { // Arrange var expected = @"swagger: '2.0' @@ -1750,7 +1759,7 @@ public void SerializeV2DocumentWithNonArraySchemaTypeDoesNotWriteOutCollectionFo }; // Act - var actual = doc.SerializeAsYaml(OpenApiSpecVersion.OpenApi2_0); + var actual = await doc.SerializeAsYamlAsync(OpenApiSpecVersion.OpenApi2_0); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -1759,7 +1768,7 @@ public void SerializeV2DocumentWithNonArraySchemaTypeDoesNotWriteOutCollectionFo } [Fact] - public void SerializeV2DocumentWithStyleAsNullDoesNotWriteOutStyleValue() + public async Task SerializeV2DocumentWithStyleAsNullDoesNotWriteOutStyleValue() { // Arrange var expected = @"openapi: 3.0.4 @@ -1839,7 +1848,7 @@ public void SerializeV2DocumentWithStyleAsNullDoesNotWriteOutStyleValue() }; // Act - var actual = doc.SerializeAsYaml(OpenApiSpecVersion.OpenApi3_0); + var actual = await doc.SerializeAsYamlAsync(OpenApiSpecVersion.OpenApi3_0); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -1912,7 +1921,7 @@ public async Task SerializeDocumentWithWebhooksAsV3JsonWorks(bool produceTerseOu // Act DocumentWithWebhooks.SerializeAsV31(writer); - writer.Flush(); + await writer.FlushAsync(); var actual = outputStringWriter.GetStringBuilder().ToString(); // Assert @@ -1920,7 +1929,7 @@ public async Task SerializeDocumentWithWebhooksAsV3JsonWorks(bool produceTerseOu } [Fact] - public void SerializeDocumentWithWebhooksAsV3YamlWorks() + public async Task SerializeDocumentWithWebhooksAsV3YamlWorks() { // Arrange var expected = @"openapi: '3.1.1' @@ -1956,7 +1965,7 @@ public void SerializeDocumentWithWebhooksAsV3YamlWorks() description: Return a 200 status to indicate that the data was received successfully"; // Act - var actual = DocumentWithWebhooks.SerializeAsYaml(OpenApiSpecVersion.OpenApi3_1); + var actual = await DocumentWithWebhooks.SerializeAsYamlAsync(OpenApiSpecVersion.OpenApi3_1); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -1965,7 +1974,7 @@ public void SerializeDocumentWithWebhooksAsV3YamlWorks() } [Fact] - public void SerializeDocumentWithRootJsonSchemaDialectPropertyWorks() + public async Task SerializeDocumentWithRootJsonSchemaDialectPropertyWorks() { // Arrange var doc = new OpenApiDocument @@ -1986,7 +1995,7 @@ public void SerializeDocumentWithRootJsonSchemaDialectPropertyWorks() paths: { }"; // Act - var actual = doc.SerializeAsYaml(OpenApiSpecVersion.OpenApi3_1); + var actual = await doc.SerializeAsYamlAsync(OpenApiSpecVersion.OpenApi3_1); // Assert actual.MakeLineBreaksEnvironmentNeutral().Should().BeEquivalentTo(expected.MakeLineBreaksEnvironmentNeutral()); @@ -2062,12 +2071,12 @@ public async Task SerializeDocWithDollarIdInDollarRefSucceeds() type: number "; var doc = (await OpenApiDocument.LoadAsync("Models/Samples/docWithDollarId.yaml")).Document; - var actual = doc.SerializeAsYaml(OpenApiSpecVersion.OpenApi3_1); + var actual = await doc.SerializeAsYamlAsync(OpenApiSpecVersion.OpenApi3_1); actual.MakeLineBreaksEnvironmentNeutral().Should().BeEquivalentTo(expected.MakeLineBreaksEnvironmentNeutral()); } [Fact] - public void SerializeDocumentTagsWithMultipleExtensionsWorks() + public async Task SerializeDocumentTagsWithMultipleExtensionsWorks() { var expected = @"{ ""openapi"": ""3.0.4"", @@ -2116,7 +2125,7 @@ public void SerializeDocumentTagsWithMultipleExtensionsWorks() } }; - var actual = doc.SerializeAsJson(OpenApiSpecVersion.OpenApi3_0); + var actual = await doc.SerializeAsJsonAsync(OpenApiSpecVersion.OpenApi3_0); actual.MakeLineBreaksEnvironmentNeutral().Should().BeEquivalentTo(expected.MakeLineBreaksEnvironmentNeutral()); } } diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiEncodingTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiEncodingTests.cs index fe699f7aa..c9ce9d217 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiEncodingTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiEncodingTests.cs @@ -1,6 +1,7 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. +using System.Threading.Tasks; using FluentAssertions; using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Models; @@ -24,10 +25,10 @@ public class OpenApiEncodingTests [Theory] [InlineData(OpenApiFormat.Json, "{ }")] [InlineData(OpenApiFormat.Yaml, "{ }")] - public void SerializeBasicEncodingAsV3Works(OpenApiFormat format, string expected) + public async Task SerializeBasicEncodingAsV3Works(OpenApiFormat format, string expected) { // Arrange & Act - var actual = BasicEncoding.Serialize(OpenApiSpecVersion.OpenApi3_0, format); + var actual = await BasicEncoding.SerializeAsync(OpenApiSpecVersion.OpenApi3_0, format); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -36,7 +37,7 @@ public void SerializeBasicEncodingAsV3Works(OpenApiFormat format, string expecte } [Fact] - public void SerializeAdvanceEncodingAsV3JsonWorks() + public async Task SerializeAdvanceEncodingAsV3JsonWorks() { // Arrange var expected = @@ -50,7 +51,7 @@ public void SerializeAdvanceEncodingAsV3JsonWorks() """; // Act - var actual = AdvanceEncoding.SerializeAsJson(OpenApiSpecVersion.OpenApi3_0); + var actual = await AdvanceEncoding.SerializeAsJsonAsync(OpenApiSpecVersion.OpenApi3_0); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -59,7 +60,7 @@ public void SerializeAdvanceEncodingAsV3JsonWorks() } [Fact] - public void SerializeAdvanceEncodingAsV3YamlWorks() + public async Task SerializeAdvanceEncodingAsV3YamlWorks() { // Arrange var expected = @@ -71,7 +72,7 @@ public void SerializeAdvanceEncodingAsV3YamlWorks() """; // Act - var actual = AdvanceEncoding.SerializeAsYaml(OpenApiSpecVersion.OpenApi3_0); + var actual = await AdvanceEncoding.SerializeAsYamlAsync(OpenApiSpecVersion.OpenApi3_0); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiExampleTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiExampleTests.cs index 023f4d78f..c920c986b 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiExampleTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiExampleTests.cs @@ -108,7 +108,7 @@ public async Task SerializeAdvancedExampleAsV3JsonWorksAsync(bool produceTerseOu // Act AdvancedExample.SerializeAsV3(writer); - writer.Flush(); + await writer.FlushAsync(); // Assert await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput); @@ -125,7 +125,7 @@ public async Task SerializeReferencedExampleAsV3JsonWorksAsync(bool produceTerse // Act OpenApiExampleReference.SerializeAsV3(writer); - writer.Flush(); + await writer.FlushAsync(); // Assert await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput); @@ -142,7 +142,7 @@ public async Task SerializeReferencedExampleAsV3JsonWithoutReferenceWorksAsync(b // Act ReferencedExample.SerializeAsV3(writer); - writer.Flush(); + await writer.FlushAsync(); // Assert await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput); diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiExternalDocsTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiExternalDocsTests.cs index 25bf6315d..59c81865f 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiExternalDocsTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiExternalDocsTests.cs @@ -1,6 +1,7 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. +using System.Threading.Tasks; using FluentAssertions; using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Models; @@ -24,10 +25,10 @@ public class OpenApiExternalDocsTests [Theory] [InlineData(OpenApiFormat.Json, "{ }")] [InlineData(OpenApiFormat.Yaml, "{ }")] - public void SerializeBasicExternalDocsAsV3Works(OpenApiFormat format, string expected) + public async Task SerializeBasicExternalDocsAsV3Works(OpenApiFormat format, string expected) { // Arrange & Act - var actual = BasicExDocs.Serialize(OpenApiSpecVersion.OpenApi3_0, format); + var actual = await BasicExDocs.SerializeAsync(OpenApiSpecVersion.OpenApi3_0, format); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -36,7 +37,7 @@ public void SerializeBasicExternalDocsAsV3Works(OpenApiFormat format, string exp } [Fact] - public void SerializeAdvanceExDocsAsV3JsonWorks() + public async Task SerializeAdvanceExDocsAsV3JsonWorks() { // Arrange var expected = @@ -48,7 +49,7 @@ public void SerializeAdvanceExDocsAsV3JsonWorks() """; // Act - var actual = AdvanceExDocs.SerializeAsJson(OpenApiSpecVersion.OpenApi3_0); + var actual = await AdvanceExDocs.SerializeAsJsonAsync(OpenApiSpecVersion.OpenApi3_0); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -57,7 +58,7 @@ public void SerializeAdvanceExDocsAsV3JsonWorks() } [Fact] - public void SerializeAdvanceExDocsAsV3YamlWorks() + public async Task SerializeAdvanceExDocsAsV3YamlWorks() { // Arrange var expected = @@ -67,7 +68,7 @@ public void SerializeAdvanceExDocsAsV3YamlWorks() """; // Act - var actual = AdvanceExDocs.SerializeAsYaml(OpenApiSpecVersion.OpenApi3_0); + var actual = await AdvanceExDocs.SerializeAsYamlAsync(OpenApiSpecVersion.OpenApi3_0); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiHeaderTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiHeaderTests.cs index 72c4fdfaa..e368c587b 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiHeaderTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiHeaderTests.cs @@ -48,7 +48,7 @@ public async Task SerializeAdvancedHeaderAsV3JsonWorksAsync(bool produceTerseOut // Act AdvancedHeader.SerializeAsV3(writer); - writer.Flush(); + await writer.FlushAsync(); // Assert await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput); @@ -65,7 +65,7 @@ public async Task SerializeReferencedHeaderAsV3JsonWorksAsync(bool produceTerseO // Act OpenApiHeaderReference.SerializeAsV3(writer); - writer.Flush(); + await writer.FlushAsync(); // Assert await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput); @@ -82,7 +82,7 @@ public async Task SerializeReferencedHeaderAsV3JsonWithoutReferenceWorksAsync(bo // Act ReferencedHeader.SerializeAsV3(writer); - writer.Flush(); + await writer.FlushAsync(); // Assert await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput); @@ -99,7 +99,7 @@ public async Task SerializeAdvancedHeaderAsV2JsonWorksAsync(bool produceTerseOut // Act AdvancedHeader.SerializeAsV2(writer); - writer.Flush(); + await writer.FlushAsync(); // Assert await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput); @@ -116,7 +116,7 @@ public async Task SerializeReferencedHeaderAsV2JsonWorksAsync(bool produceTerseO // Act OpenApiHeaderReference.SerializeAsV2(writer); - writer.Flush(); + await writer.FlushAsync(); // Assert await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput); @@ -133,7 +133,7 @@ public async Task SerializeReferencedHeaderAsV2JsonWithoutReferenceWorksAsync(bo // Act ReferencedHeader.SerializeAsV2(writer); - writer.Flush(); + await writer.FlushAsync(); // Assert await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput); diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiInfoTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiInfoTests.cs index 980ce0565..a3c4633e1 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiInfoTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiInfoTests.cs @@ -2,6 +2,7 @@ // Licensed under the MIT license. using System.Collections.Generic; +using System.Threading.Tasks; using FluentAssertions; using Microsoft.OpenApi.Any; using Microsoft.OpenApi.Extensions; @@ -62,10 +63,10 @@ public static IEnumerable BasicInfoJsonExpected() [Theory] [MemberData(nameof(BasicInfoJsonExpected))] - public void SerializeBasicInfoAsJsonWorks(OpenApiSpecVersion version, string expected) + public async Task SerializeBasicInfoAsJsonWorks(OpenApiSpecVersion version, string expected) { // Arrange & Act - var actual = BasicInfo.SerializeAsJson(version); + var actual = await BasicInfo.SerializeAsJsonAsync(version); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -91,10 +92,10 @@ public static IEnumerable BasicInfoYamlExpected() [Theory] [MemberData(nameof(BasicInfoYamlExpected))] - public void SerializeBasicInfoAsYamlWorks(OpenApiSpecVersion version, string expected) + public async Task SerializeBasicInfoAsYamlWorks(OpenApiSpecVersion version, string expected) { // Arrange & Act - var actual = BasicInfo.SerializeAsYaml(version); + var actual = await BasicInfo.SerializeAsYamlAsync(version); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -136,10 +137,10 @@ public static IEnumerable AdvanceInfoJsonExpect() [Theory] [MemberData(nameof(AdvanceInfoJsonExpect))] - public void SerializeAdvanceInfoAsJsonWorks(OpenApiSpecVersion version, string expected) + public async Task SerializeAdvanceInfoAsJsonWorks(OpenApiSpecVersion version, string expected) { // Arrange & Act - var actual = AdvanceInfo.SerializeAsJson(version); + var actual = await AdvanceInfo.SerializeAsJsonAsync(version); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -177,10 +178,10 @@ public static IEnumerable AdvanceInfoYamlExpect() [Theory] [MemberData(nameof(AdvanceInfoYamlExpect))] - public void SerializeAdvanceInfoAsYamlWorks(OpenApiSpecVersion version, string expected) + public async Task SerializeAdvanceInfoAsYamlWorks(OpenApiSpecVersion version, string expected) { // Arrange & Act - var actual = AdvanceInfo.SerializeAsYaml(version); + var actual = await AdvanceInfo.SerializeAsYamlAsync(version); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -189,7 +190,7 @@ public void SerializeAdvanceInfoAsYamlWorks(OpenApiSpecVersion version, string e } [Fact] - public void InfoVersionShouldAcceptDateStyledAsVersions() + public async Task InfoVersionShouldAcceptDateStyledAsVersions() { // Arrange var info = new OpenApiInfo @@ -205,7 +206,7 @@ public void InfoVersionShouldAcceptDateStyledAsVersions() """; // Act - var actual = info.Serialize(OpenApiSpecVersion.OpenApi3_0, OpenApiFormat.Yaml); + var actual = await info.SerializeAsync(OpenApiSpecVersion.OpenApi3_0, OpenApiFormat.Yaml); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -214,7 +215,7 @@ public void InfoVersionShouldAcceptDateStyledAsVersions() } [Fact] - public void SerializeInfoObjectWithSummaryAsV31YamlWorks() + public async Task SerializeInfoObjectWithSummaryAsV31YamlWorks() { // Arrange var expected = @"title: Sample Pet Store App @@ -223,7 +224,7 @@ public void SerializeInfoObjectWithSummaryAsV31YamlWorks() summary: This is a sample server for a pet store."; // Act - var actual = InfoWithSummary.SerializeAsYaml(OpenApiSpecVersion.OpenApi3_1); + var actual = await InfoWithSummary.SerializeAsYamlAsync(OpenApiSpecVersion.OpenApi3_1); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -232,7 +233,7 @@ public void SerializeInfoObjectWithSummaryAsV31YamlWorks() } [Fact] - public void SerializeInfoObjectWithSummaryAsV31JsonWorks() + public async Task SerializeInfoObjectWithSummaryAsV31JsonWorks() { // Arrange var expected = @"{ @@ -243,7 +244,7 @@ public void SerializeInfoObjectWithSummaryAsV31JsonWorks() }"; // Act - var actual = InfoWithSummary.SerializeAsJson(OpenApiSpecVersion.OpenApi3_1); + var actual = await InfoWithSummary.SerializeAsJsonAsync(OpenApiSpecVersion.OpenApi3_1); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiLicenseTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiLicenseTests.cs index bff5efe2c..7ee848a26 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiLicenseTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiLicenseTests.cs @@ -2,6 +2,7 @@ // Licensed under the MIT license. using System.Collections.Generic; +using System.Threading.Tasks; using FluentAssertions; using Microsoft.OpenApi.Any; using Microsoft.OpenApi.Extensions; @@ -38,7 +39,7 @@ public class OpenApiLicenseTests [Theory] [InlineData(OpenApiSpecVersion.OpenApi3_0)] [InlineData(OpenApiSpecVersion.OpenApi2_0)] - public void SerializeBasicLicenseAsJsonWorks(OpenApiSpecVersion version) + public async Task SerializeBasicLicenseAsJsonWorks(OpenApiSpecVersion version) { // Arrange var expected = @@ -49,7 +50,7 @@ public void SerializeBasicLicenseAsJsonWorks(OpenApiSpecVersion version) """; // Act - var actual = BasicLicense.SerializeAsJson(version); + var actual = await BasicLicense.SerializeAsJsonAsync(version); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -60,13 +61,13 @@ public void SerializeBasicLicenseAsJsonWorks(OpenApiSpecVersion version) [Theory] [InlineData(OpenApiSpecVersion.OpenApi3_0)] [InlineData(OpenApiSpecVersion.OpenApi2_0)] - public void SerializeBasicLicenseAsYamlWorks(OpenApiSpecVersion version) + public async Task SerializeBasicLicenseAsYamlWorks(OpenApiSpecVersion version) { // Arrange var expected = "name: Apache 2.0"; // Act - var actual = BasicLicense.SerializeAsYaml(version); + var actual = await BasicLicense.SerializeAsYamlAsync(version); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -77,7 +78,7 @@ public void SerializeBasicLicenseAsYamlWorks(OpenApiSpecVersion version) [Theory] [InlineData(OpenApiSpecVersion.OpenApi3_0)] [InlineData(OpenApiSpecVersion.OpenApi2_0)] - public void SerializeAdvanceLicenseAsJsonWorks(OpenApiSpecVersion version) + public async Task SerializeAdvanceLicenseAsJsonWorks(OpenApiSpecVersion version) { // Arrange var expected = @@ -90,7 +91,7 @@ public void SerializeAdvanceLicenseAsJsonWorks(OpenApiSpecVersion version) """; // Act - var actual = AdvanceLicense.SerializeAsJson(version); + var actual = await AdvanceLicense.SerializeAsJsonAsync(version); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -101,7 +102,7 @@ public void SerializeAdvanceLicenseAsJsonWorks(OpenApiSpecVersion version) [Theory] [InlineData(OpenApiSpecVersion.OpenApi3_0)] [InlineData(OpenApiSpecVersion.OpenApi2_0)] - public void SerializeAdvanceLicenseAsYamlWorks(OpenApiSpecVersion version) + public async Task SerializeAdvanceLicenseAsYamlWorks(OpenApiSpecVersion version) { // Arrange var expected = @@ -112,7 +113,7 @@ public void SerializeAdvanceLicenseAsYamlWorks(OpenApiSpecVersion version) """; // Act - var actual = AdvanceLicense.SerializeAsYaml(version); + var actual = await AdvanceLicense.SerializeAsYamlAsync(version); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -136,7 +137,7 @@ public void ShouldCopyFromOriginalObjectWithoutMutating() } [Fact] - public void SerializeLicenseWithIdentifierAsJsonWorks() + public async Task SerializeLicenseWithIdentifierAsJsonWorks() { // Arrange var expected = @@ -146,21 +147,21 @@ public void SerializeLicenseWithIdentifierAsJsonWorks() }"; // Act - var actual = LicenseWithIdentifier.SerializeAsJson(OpenApiSpecVersion.OpenApi3_1); + var actual = await LicenseWithIdentifier.SerializeAsJsonAsync(OpenApiSpecVersion.OpenApi3_1); // Assert Assert.Equal(expected.MakeLineBreaksEnvironmentNeutral(), actual.MakeLineBreaksEnvironmentNeutral()); } [Fact] - public void SerializeLicenseWithIdentifierAsYamlWorks() + public async Task SerializeLicenseWithIdentifierAsYamlWorks() { // Arrange var expected = @"name: Apache 2.0 identifier: Apache-2.0"; // Act - var actual = LicenseWithIdentifier.SerializeAsYaml(OpenApiSpecVersion.OpenApi3_1); + var actual = await LicenseWithIdentifier.SerializeAsYamlAsync(OpenApiSpecVersion.OpenApi3_1); // Assert Assert.Equal(expected.MakeLineBreaksEnvironmentNeutral(), actual.MakeLineBreaksEnvironmentNeutral()); diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiLinkTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiLinkTests.cs index 194d909b1..e1a949348 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiLinkTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiLinkTests.cs @@ -83,7 +83,7 @@ public async Task SerializeAdvancedLinkAsV3JsonWorksAsync(bool produceTerseOutpu // Act AdvancedLink.SerializeAsV3(writer); - writer.Flush(); + await writer.FlushAsync(); // Assert await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput); @@ -100,7 +100,7 @@ public async Task SerializeReferencedLinkAsV3JsonWorksAsync(bool produceTerseOut // Act LinkReference.SerializeAsV3(writer); - writer.Flush(); + await writer.FlushAsync(); // Assert await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput); @@ -117,7 +117,7 @@ public async Task SerializeReferencedLinkAsV3JsonWithoutReferenceWorksAsync(bool // Act ReferencedLink.SerializeAsV3(writer); - writer.Flush(); + await writer.FlushAsync(); // Assert await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput); diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiMediaTypeTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiMediaTypeTests.cs index d4eecf7ee..a47ef4052 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiMediaTypeTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiMediaTypeTests.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Text.Json.Nodes; +using System.Threading.Tasks; using FluentAssertions; using Microsoft.OpenApi.Any; using Microsoft.OpenApi.Extensions; @@ -133,10 +134,10 @@ public OpenApiMediaTypeTests(ITestOutputHelper output) [Theory] [InlineData(OpenApiFormat.Json, "{ }")] [InlineData(OpenApiFormat.Yaml, "{ }")] - public void SerializeBasicMediaTypeAsV3Works(OpenApiFormat format, string expected) + public async Task SerializeBasicMediaTypeAsV3Works(OpenApiFormat format, string expected) { // Arrange & Act - var actual = BasicMediaType.Serialize(OpenApiSpecVersion.OpenApi3_0, format); + var actual = await BasicMediaType.SerializeAsync(OpenApiSpecVersion.OpenApi3_0, format); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -145,7 +146,7 @@ public void SerializeBasicMediaTypeAsV3Works(OpenApiFormat format, string expect } [Fact] - public void SerializeAdvanceMediaTypeAsV3JsonWorks() + public async Task SerializeAdvanceMediaTypeAsV3JsonWorks() { // Arrange var expected = @@ -164,7 +165,7 @@ public void SerializeAdvanceMediaTypeAsV3JsonWorks() """; // Act - var actual = AdvanceMediaType.SerializeAsJson(OpenApiSpecVersion.OpenApi3_0); + var actual = await AdvanceMediaType.SerializeAsJsonAsync(OpenApiSpecVersion.OpenApi3_0); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -173,7 +174,7 @@ public void SerializeAdvanceMediaTypeAsV3JsonWorks() } [Fact] - public void SerializeAdvanceMediaTypeAsV3YamlWorks() + public async Task SerializeAdvanceMediaTypeAsV3YamlWorks() { // Arrange var expected = @@ -188,7 +189,7 @@ public void SerializeAdvanceMediaTypeAsV3YamlWorks() """; // Act - var actual = AdvanceMediaType.SerializeAsYaml(OpenApiSpecVersion.OpenApi3_0); + var actual = await AdvanceMediaType.SerializeAsYamlAsync(OpenApiSpecVersion.OpenApi3_0); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -197,7 +198,7 @@ public void SerializeAdvanceMediaTypeAsV3YamlWorks() } [Fact] - public void SerializeMediaTypeWithObjectExampleAsV3YamlWorks() + public async Task SerializeMediaTypeWithObjectExampleAsV3YamlWorks() { // Arrange var expected = @@ -223,7 +224,7 @@ public void SerializeMediaTypeWithObjectExampleAsV3YamlWorks() """; // Act - var actual = MediaTypeWithObjectExample.SerializeAsYaml(OpenApiSpecVersion.OpenApi3_0); + var actual = await MediaTypeWithObjectExample.SerializeAsYamlAsync(OpenApiSpecVersion.OpenApi3_0); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -232,7 +233,7 @@ public void SerializeMediaTypeWithObjectExampleAsV3YamlWorks() } [Fact] - public void SerializeMediaTypeWithObjectExampleAsV3JsonWorks() + public async Task SerializeMediaTypeWithObjectExampleAsV3JsonWorks() { // Arrange var expected = @@ -274,7 +275,7 @@ public void SerializeMediaTypeWithObjectExampleAsV3JsonWorks() """; // Act - var actual = MediaTypeWithObjectExample.SerializeAsJson(OpenApiSpecVersion.OpenApi3_0); + var actual = await MediaTypeWithObjectExample.SerializeAsJsonAsync(OpenApiSpecVersion.OpenApi3_0); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -283,7 +284,7 @@ public void SerializeMediaTypeWithObjectExampleAsV3JsonWorks() } [Fact] - public void SerializeMediaTypeWithXmlExampleAsV3YamlWorks() + public async Task SerializeMediaTypeWithXmlExampleAsV3YamlWorks() { // Arrange var expected = @@ -298,7 +299,7 @@ public void SerializeMediaTypeWithXmlExampleAsV3YamlWorks() """; // Act - var actual = MediaTypeWithXmlExample.SerializeAsYaml(OpenApiSpecVersion.OpenApi3_0); + var actual = await MediaTypeWithXmlExample.SerializeAsYamlAsync(OpenApiSpecVersion.OpenApi3_0); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -307,7 +308,7 @@ public void SerializeMediaTypeWithXmlExampleAsV3YamlWorks() } [Fact] - public void SerializeMediaTypeWithXmlExampleAsV3JsonWorks() + public async Task SerializeMediaTypeWithXmlExampleAsV3JsonWorks() { // Arrange var expected = @@ -326,7 +327,7 @@ public void SerializeMediaTypeWithXmlExampleAsV3JsonWorks() """; // Act - var actual = MediaTypeWithXmlExample.SerializeAsJson(OpenApiSpecVersion.OpenApi3_0); + var actual = await MediaTypeWithXmlExample.SerializeAsJsonAsync(OpenApiSpecVersion.OpenApi3_0); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -335,7 +336,7 @@ public void SerializeMediaTypeWithXmlExampleAsV3JsonWorks() } [Fact] - public void SerializeMediaTypeWithObjectExamplesAsV3YamlWorks() + public async Task SerializeMediaTypeWithObjectExamplesAsV3YamlWorks() { // Arrange var expected = @@ -363,7 +364,7 @@ public void SerializeMediaTypeWithObjectExamplesAsV3YamlWorks() """; // Act - var actual = MediaTypeWithObjectExamples.SerializeAsYaml(OpenApiSpecVersion.OpenApi3_0); + var actual = await MediaTypeWithObjectExamples.SerializeAsYamlAsync(OpenApiSpecVersion.OpenApi3_0); _output.WriteLine(actual); // Assert @@ -373,7 +374,7 @@ public void SerializeMediaTypeWithObjectExamplesAsV3YamlWorks() } [Fact] - public void SerializeMediaTypeWithObjectExamplesAsV3JsonWorks() + public async Task SerializeMediaTypeWithObjectExamplesAsV3JsonWorks() { // Arrange var expected = @@ -419,7 +420,7 @@ public void SerializeMediaTypeWithObjectExamplesAsV3JsonWorks() """; // Act - var actual = MediaTypeWithObjectExamples.SerializeAsJson(OpenApiSpecVersion.OpenApi3_0); + var actual = await MediaTypeWithObjectExamples.SerializeAsJsonAsync(OpenApiSpecVersion.OpenApi3_0); _output.WriteLine(actual); // Assert diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiOAuthFlowTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiOAuthFlowTests.cs index 3327887c9..e47d1db9b 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiOAuthFlowTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiOAuthFlowTests.cs @@ -2,6 +2,7 @@ // Licensed under the MIT license. using System.Collections.Generic; +using System.Threading.Tasks; using FluentAssertions; using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Models; @@ -37,7 +38,7 @@ public class OpenApiOAuthFlowTests }; [Fact] - public void SerializeBasicOAuthFlowAsV3JsonWorks() + public async Task SerializeBasicOAuthFlowAsV3JsonWorks() { // Arrange var expected = @@ -48,7 +49,7 @@ public void SerializeBasicOAuthFlowAsV3JsonWorks() """; // Act - var actual = BasicOAuthFlow.SerializeAsJson(OpenApiSpecVersion.OpenApi3_0); + var actual = await BasicOAuthFlow.SerializeAsJsonAsync(OpenApiSpecVersion.OpenApi3_0); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -57,14 +58,14 @@ public void SerializeBasicOAuthFlowAsV3JsonWorks() } [Fact] - public void SerializeBasicOAuthFlowAsV3YamlWorks() + public async Task SerializeBasicOAuthFlowAsV3YamlWorks() { // Arrange var expected = @"scopes: { }"; // Act - var actual = BasicOAuthFlow.SerializeAsYaml(OpenApiSpecVersion.OpenApi3_0); + var actual = await BasicOAuthFlow.SerializeAsYamlAsync(OpenApiSpecVersion.OpenApi3_0); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -73,7 +74,7 @@ public void SerializeBasicOAuthFlowAsV3YamlWorks() } [Fact] - public void SerializePartialOAuthFlowAsV3JsonWorks() + public async Task SerializePartialOAuthFlowAsV3JsonWorks() { // Arrange var expected = @@ -88,7 +89,7 @@ public void SerializePartialOAuthFlowAsV3JsonWorks() """; // Act - var actual = PartialOAuthFlow.SerializeAsJson(OpenApiSpecVersion.OpenApi3_0); + var actual = await PartialOAuthFlow.SerializeAsJsonAsync(OpenApiSpecVersion.OpenApi3_0); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -97,7 +98,7 @@ public void SerializePartialOAuthFlowAsV3JsonWorks() } [Fact] - public void SerializeCompleteOAuthFlowAsV3JsonWorks() + public async Task SerializeCompleteOAuthFlowAsV3JsonWorks() { // Arrange var expected = @@ -114,7 +115,7 @@ public void SerializeCompleteOAuthFlowAsV3JsonWorks() """; // Act - var actual = CompleteOAuthFlow.SerializeAsJson(OpenApiSpecVersion.OpenApi3_0); + var actual = await CompleteOAuthFlow.SerializeAsJsonAsync(OpenApiSpecVersion.OpenApi3_0); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiOAuthFlowsTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiOAuthFlowsTests.cs index 1bb473a89..6e1b2e102 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiOAuthFlowsTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiOAuthFlowsTests.cs @@ -2,6 +2,7 @@ // Licensed under the MIT license. using System.Collections.Generic; +using System.Threading.Tasks; using FluentAssertions; using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Models; @@ -51,14 +52,14 @@ public class OpenApiOAuthFlowsTests }; [Fact] - public void SerializeBasicOAuthFlowsAsV3JsonWorks() + public async Task SerializeBasicOAuthFlowsAsV3JsonWorks() { // Arrange var expected = @"{ }"; // Act - var actual = BasicOAuthFlows.SerializeAsJson(OpenApiSpecVersion.OpenApi3_0); + var actual = await BasicOAuthFlows.SerializeAsJsonAsync(OpenApiSpecVersion.OpenApi3_0); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -67,14 +68,14 @@ public void SerializeBasicOAuthFlowsAsV3JsonWorks() } [Fact] - public void SerializeBasicOAuthFlowsAsV3YamlWorks() + public async Task SerializeBasicOAuthFlowsAsV3YamlWorks() { // Arrange var expected = @"{ }"; // Act - var actual = BasicOAuthFlows.SerializeAsYaml(OpenApiSpecVersion.OpenApi3_0); + var actual = await BasicOAuthFlows.SerializeAsYamlAsync(OpenApiSpecVersion.OpenApi3_0); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -83,7 +84,7 @@ public void SerializeBasicOAuthFlowsAsV3YamlWorks() } [Fact] - public void SerializeOAuthFlowsWithSingleFlowAsV3JsonWorks() + public async Task SerializeOAuthFlowsWithSingleFlowAsV3JsonWorks() { // Arrange var expected = @@ -100,7 +101,7 @@ public void SerializeOAuthFlowsWithSingleFlowAsV3JsonWorks() """; // Act - var actual = OAuthFlowsWithSingleFlow.SerializeAsJson(OpenApiSpecVersion.OpenApi3_0); + var actual = await OAuthFlowsWithSingleFlow.SerializeAsJsonAsync(OpenApiSpecVersion.OpenApi3_0); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -109,7 +110,7 @@ public void SerializeOAuthFlowsWithSingleFlowAsV3JsonWorks() } [Fact] - public void SerializeOAuthFlowsWithMultipleFlowsAsV3JsonWorks() + public async Task SerializeOAuthFlowsWithMultipleFlowsAsV3JsonWorks() { // Arrange var expected = @@ -134,7 +135,7 @@ public void SerializeOAuthFlowsWithMultipleFlowsAsV3JsonWorks() """; // Act - var actual = OAuthFlowsWithMultipleFlows.SerializeAsJson(OpenApiSpecVersion.OpenApi3_0); + var actual = await OAuthFlowsWithMultipleFlows.SerializeAsJsonAsync(OpenApiSpecVersion.OpenApi3_0); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiOperationTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiOperationTests.cs index 5f6b5f4e7..654db50d5 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiOperationTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiOperationTests.cs @@ -2,6 +2,7 @@ // Licensed under the MIT license. using System.Collections.Generic; +using System.Threading.Tasks; using FluentAssertions; using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Models; @@ -256,7 +257,7 @@ public class OpenApiOperationTests }; [Fact] - public void SerializeBasicOperationAsV3JsonWorks() + public async Task SerializeBasicOperationAsV3JsonWorks() { // Arrange var expected = @@ -267,7 +268,7 @@ public void SerializeBasicOperationAsV3JsonWorks() """; // Act - var actual = _basicOperation.SerializeAsJson(OpenApiSpecVersion.OpenApi3_0); + var actual = await _basicOperation.SerializeAsJsonAsync(OpenApiSpecVersion.OpenApi3_0); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -276,7 +277,7 @@ public void SerializeBasicOperationAsV3JsonWorks() } [Fact] - public void SerializeOperationWithBodyAsV3JsonWorks() + public async Task SerializeOperationWithBodyAsV3JsonWorks() { // Arrange var expected = @@ -339,7 +340,7 @@ public void SerializeOperationWithBodyAsV3JsonWorks() """; // Act - var actual = _operationWithBody.SerializeAsJson(OpenApiSpecVersion.OpenApi3_0); + var actual = await _operationWithBody.SerializeAsJsonAsync(OpenApiSpecVersion.OpenApi3_0); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -348,7 +349,7 @@ public void SerializeOperationWithBodyAsV3JsonWorks() } [Fact] - public void SerializeAdvancedOperationWithTagAndSecurityAsV3JsonWorks() + public async Task SerializeAdvancedOperationWithTagAndSecurityAsV3JsonWorks() { // Arrange var expected = @@ -423,7 +424,7 @@ public void SerializeAdvancedOperationWithTagAndSecurityAsV3JsonWorks() """; // Act - var actual = _advancedOperationWithTagsAndSecurity.SerializeAsJson(OpenApiSpecVersion.OpenApi3_0); + var actual = await _advancedOperationWithTagsAndSecurity.SerializeAsJsonAsync(OpenApiSpecVersion.OpenApi3_0); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -432,7 +433,7 @@ public void SerializeAdvancedOperationWithTagAndSecurityAsV3JsonWorks() } [Fact] - public void SerializeBasicOperationAsV2JsonWorks() + public async Task SerializeBasicOperationAsV2JsonWorks() { // Arrange var expected = @@ -443,7 +444,7 @@ public void SerializeBasicOperationAsV2JsonWorks() """; // Act - var actual = _basicOperation.SerializeAsJson(OpenApiSpecVersion.OpenApi2_0); + var actual = await _basicOperation.SerializeAsJsonAsync(OpenApiSpecVersion.OpenApi2_0); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -452,7 +453,7 @@ public void SerializeBasicOperationAsV2JsonWorks() } [Fact] - public void SerializeOperationWithFormDataAsV3JsonWorks() + public async Task SerializeOperationWithFormDataAsV3JsonWorks() { // Arrange var expected = @@ -522,7 +523,7 @@ public void SerializeOperationWithFormDataAsV3JsonWorks() """; // Act - var actual = _operationWithFormData.SerializeAsJson(OpenApiSpecVersion.OpenApi3_0); + var actual = await _operationWithFormData.SerializeAsJsonAsync(OpenApiSpecVersion.OpenApi3_0); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -531,7 +532,7 @@ public void SerializeOperationWithFormDataAsV3JsonWorks() } [Fact] - public void SerializeOperationWithFormDataAsV2JsonWorks() + public async Task SerializeOperationWithFormDataAsV2JsonWorks() { // Arrange var expected = @@ -578,7 +579,7 @@ public void SerializeOperationWithFormDataAsV2JsonWorks() """; // Act - var actual = _operationWithFormData.SerializeAsJson(OpenApiSpecVersion.OpenApi2_0); + var actual = await _operationWithFormData.SerializeAsJsonAsync(OpenApiSpecVersion.OpenApi2_0); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -587,7 +588,7 @@ public void SerializeOperationWithFormDataAsV2JsonWorks() } [Fact] - public void SerializeOperationWithBodyAsV2JsonWorks() + public async Task SerializeOperationWithBodyAsV2JsonWorks() { // Arrange var expected = @@ -647,7 +648,7 @@ public void SerializeOperationWithBodyAsV2JsonWorks() """; // Act - var actual = _operationWithBody.SerializeAsJson(OpenApiSpecVersion.OpenApi2_0); + var actual = await _operationWithBody.SerializeAsJsonAsync(OpenApiSpecVersion.OpenApi2_0); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -656,7 +657,7 @@ public void SerializeOperationWithBodyAsV2JsonWorks() } [Fact] - public void SerializeAdvancedOperationWithTagAndSecurityAsV2JsonWorks() + public async Task SerializeAdvancedOperationWithTagAndSecurityAsV2JsonWorks() { // Arrange var expected = @@ -728,7 +729,7 @@ public void SerializeAdvancedOperationWithTagAndSecurityAsV2JsonWorks() """; // Act - var actual = _advancedOperationWithTagsAndSecurity.SerializeAsJson(OpenApiSpecVersion.OpenApi2_0); + var actual = await _advancedOperationWithTagsAndSecurity.SerializeAsJsonAsync(OpenApiSpecVersion.OpenApi2_0); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -737,7 +738,7 @@ public void SerializeAdvancedOperationWithTagAndSecurityAsV2JsonWorks() } [Fact] - public void SerializeOperationWithNullCollectionAsV2JsonWorks() + public async Task SerializeOperationWithNullCollectionAsV2JsonWorks() { // Arrange var expected = @@ -753,7 +754,7 @@ public void SerializeOperationWithNullCollectionAsV2JsonWorks() }; // Act - var actual = operation.SerializeAsJson(OpenApiSpecVersion.OpenApi2_0); + var actual = await operation.SerializeAsJsonAsync(OpenApiSpecVersion.OpenApi2_0); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -803,7 +804,7 @@ public void EnsureOpenApiOperationCopyConstructorCopiesNull() } [Fact] - public void EnsureOpenApiOperationCopyConstructor_SerializationResultsInSame() + public async Task EnsureOpenApiOperationCopyConstructor_SerializationResultsInSame() { var operations = new[] { @@ -816,9 +817,9 @@ public void EnsureOpenApiOperationCopyConstructor_SerializationResultsInSame() foreach (var operation in operations) { // Act - var expected = operation.SerializeAsJson(OpenApiSpecVersion.OpenApi3_0); + var expected = await operation.SerializeAsJsonAsync(OpenApiSpecVersion.OpenApi3_0); var openApiOperation = new OpenApiOperation(operation); - var actual = openApiOperation.SerializeAsJson(OpenApiSpecVersion.OpenApi3_0); + var actual = await openApiOperation.SerializeAsJsonAsync(OpenApiSpecVersion.OpenApi3_0); // Assert actual.Should().Be(expected); diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiParameterTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiParameterTests.cs index 95596b787..8b4d8a42a 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiParameterTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiParameterTests.cs @@ -4,7 +4,6 @@ using System.Collections.Generic; using System.Globalization; using System.IO; -using System.Text.Json.Nodes; using System.Threading.Tasks; using FluentAssertions; using Microsoft.OpenApi.Any; @@ -194,7 +193,7 @@ public void WhenStyleIsFormTheDefaultValueOfExplodeShouldBeTrueOtherwiseFalse(Pa [InlineData(ParameterLocation.Header, ParameterStyle.Simple)] [InlineData(ParameterLocation.Cookie, ParameterStyle.Form)] [InlineData(null, ParameterStyle.Simple)] - public void WhenStyleAndInIsNullTheDefaultValueOfStyleShouldBeSimple(ParameterLocation? inValue, ParameterStyle expectedStyle) + public async Task WhenStyleAndInIsNullTheDefaultValueOfStyleShouldBeSimple(ParameterLocation? inValue, ParameterStyle expectedStyle) { // Arrange var outputStringWriter = new StringWriter(CultureInfo.InvariantCulture); @@ -207,13 +206,13 @@ public void WhenStyleAndInIsNullTheDefaultValueOfStyleShouldBeSimple(ParameterLo // Act & Assert parameter.SerializeAsV3(writer); - writer.Flush(); + await writer.FlushAsync(); parameter.Style.Should().Be(expectedStyle); } [Fact] - public void SerializeQueryParameterWithMissingStyleSucceeds() + public async Task SerializeQueryParameterWithMissingStyleSucceeds() { // Arrange var expected = @"name: id @@ -224,14 +223,14 @@ public void SerializeQueryParameterWithMissingStyleSucceeds() type: integer"; // Act - var actual = QueryParameterWithMissingStyle.SerializeAsYaml(OpenApiSpecVersion.OpenApi3_0); + var actual = await QueryParameterWithMissingStyle.SerializeAsYamlAsync(OpenApiSpecVersion.OpenApi3_0); // Assert actual.MakeLineBreaksEnvironmentNeutral().Should().Be(expected.MakeLineBreaksEnvironmentNeutral()); } [Fact] - public void SerializeBasicParameterAsV3JsonWorks() + public async Task SerializeBasicParameterAsV3JsonWorks() { // Arrange var expected = @@ -243,7 +242,7 @@ public void SerializeBasicParameterAsV3JsonWorks() """; // Act - var actual = BasicParameter.SerializeAsJson(OpenApiSpecVersion.OpenApi3_0); + var actual = await BasicParameter.SerializeAsJsonAsync(OpenApiSpecVersion.OpenApi3_0); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -252,7 +251,7 @@ public void SerializeBasicParameterAsV3JsonWorks() } [Fact] - public void SerializeAdvancedParameterAsV3JsonWorks() + public async Task SerializeAdvancedParameterAsV3JsonWorks() { // Arrange var expected = @@ -287,7 +286,7 @@ public void SerializeAdvancedParameterAsV3JsonWorks() """; // Act - var actual = AdvancedPathParameterWithSchema.SerializeAsJson(OpenApiSpecVersion.OpenApi3_0); + var actual = await AdvancedPathParameterWithSchema.SerializeAsJsonAsync(OpenApiSpecVersion.OpenApi3_0); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -296,7 +295,7 @@ public void SerializeAdvancedParameterAsV3JsonWorks() } [Fact] - public void SerializeAdvancedParameterAsV2JsonWorks() + public async Task SerializeAdvancedParameterAsV2JsonWorks() { // Arrange var expected = @@ -317,7 +316,7 @@ public void SerializeAdvancedParameterAsV2JsonWorks() """; // Act - var actual = AdvancedPathParameterWithSchema.SerializeAsJson(OpenApiSpecVersion.OpenApi2_0); + var actual = await AdvancedPathParameterWithSchema.SerializeAsJsonAsync(OpenApiSpecVersion.OpenApi2_0); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -336,7 +335,7 @@ public async Task SerializeReferencedParameterAsV3JsonWorksAsync(bool produceTer // Act OpenApiParameterReference.SerializeAsV3(writer); - writer.Flush(); + await writer.FlushAsync(); // Assert await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput); @@ -353,7 +352,7 @@ public async Task SerializeReferencedParameterAsV3JsonWithoutReferenceWorksAsync // Act ReferencedParameter.SerializeAsV3(writer); - writer.Flush(); + await writer.FlushAsync(); // Assert await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput); @@ -370,7 +369,7 @@ public async Task SerializeReferencedParameterAsV2JsonWorksAsync(bool produceTer // Act OpenApiParameterReference.SerializeAsV2(writer); - writer.Flush(); + await writer.FlushAsync(); // Assert await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput); @@ -387,7 +386,7 @@ public async Task SerializeReferencedParameterAsV2JsonWithoutReferenceWorksAsync // Act ReferencedParameter.SerializeAsV2(writer); - writer.Flush(); + await writer.FlushAsync(); // Assert await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput); @@ -404,7 +403,7 @@ public async Task SerializeParameterWithSchemaTypeObjectAsV2JsonWorksAsync(bool // Act AdvancedHeaderParameterWithSchemaTypeObject.SerializeAsV2(writer); - writer.Flush(); + await writer.FlushAsync(); // Assert await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput); @@ -421,7 +420,7 @@ public async Task SerializeParameterWithFormStyleAndExplodeFalseWorksAsync(bool // Act ParameterWithFormStyleAndExplodeFalse.SerializeAsV3(writer); - writer.Flush(); + await writer.FlushAsync(); // Assert await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput); @@ -438,7 +437,7 @@ public async Task SerializeParameterWithFormStyleAndExplodeTrueWorksAsync(bool p // Act ParameterWithFormStyleAndExplodeTrue.SerializeAsV3(writer); - writer.Flush(); + await writer.FlushAsync(); // Assert await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput); diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiReferenceTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiReferenceTests.cs index 1a8497e5a..4e6e47509 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiReferenceTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiReferenceTests.cs @@ -1,6 +1,7 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. +using System.Threading.Tasks; using FluentAssertions; using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Models; @@ -85,7 +86,7 @@ public void SettingExternalReferenceV2ShouldSucceed(string expected, string exte } [Fact] - public void SerializeSchemaReferenceAsJsonV3Works() + public async Task SerializeSchemaReferenceAsJsonV3Works() { // Arrange var reference = new OpenApiReference { Type = ReferenceType.Schema, Id = "Pet" }; @@ -97,7 +98,7 @@ public void SerializeSchemaReferenceAsJsonV3Works() """; // Act - var actual = reference.SerializeAsJson(OpenApiSpecVersion.OpenApi3_0); + var actual = await reference.SerializeAsJsonAsync(OpenApiSpecVersion.OpenApi3_0); expected = expected.MakeLineBreaksEnvironmentNeutral(); actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -106,7 +107,7 @@ public void SerializeSchemaReferenceAsJsonV3Works() } [Fact] - public void SerializeSchemaReferenceAsYamlV3Works() + public async Task SerializeSchemaReferenceAsYamlV3Works() { // Arrange var reference = new OpenApiReference @@ -118,14 +119,14 @@ public void SerializeSchemaReferenceAsYamlV3Works() var expected = @"$ref: '#/components/schemas/Pet'"; // Act - var actual = reference.SerializeAsYaml(OpenApiSpecVersion.OpenApi3_0); + var actual = await reference.SerializeAsYamlAsync(OpenApiSpecVersion.OpenApi3_0); // Assert actual.Should().Be(expected); } [Fact] - public void SerializeSchemaReferenceAsJsonV2Works() + public async Task SerializeSchemaReferenceAsJsonV2Works() { // Arrange var reference = new OpenApiReference @@ -142,14 +143,14 @@ public void SerializeSchemaReferenceAsJsonV2Works() """.MakeLineBreaksEnvironmentNeutral(); // Act - var actual = reference.SerializeAsJson(OpenApiSpecVersion.OpenApi2_0); + var actual = await reference.SerializeAsJsonAsync(OpenApiSpecVersion.OpenApi2_0); // Assert actual.MakeLineBreaksEnvironmentNeutral().Should().Be(expected); } [Fact] - public void SerializeSchemaReferenceAsYamlV2Works() + public async Task SerializeSchemaReferenceAsYamlV2Works() { // Arrange var reference = new OpenApiReference @@ -160,14 +161,14 @@ public void SerializeSchemaReferenceAsYamlV2Works() var expected = @"$ref: '#/definitions/Pet'"; // Act - var actual = reference.SerializeAsYaml(OpenApiSpecVersion.OpenApi2_0); + var actual = await reference.SerializeAsYamlAsync(OpenApiSpecVersion.OpenApi2_0); // Assert actual.Should().Be(expected); } [Fact] - public void SerializeExternalReferenceAsJsonV2Works() + public async Task SerializeExternalReferenceAsJsonV2Works() { // Arrange var reference = new OpenApiReference @@ -185,7 +186,7 @@ public void SerializeExternalReferenceAsJsonV2Works() """; // Act - var actual = reference.SerializeAsJson(OpenApiSpecVersion.OpenApi2_0); + var actual = await reference.SerializeAsJsonAsync(OpenApiSpecVersion.OpenApi2_0); expected = expected.MakeLineBreaksEnvironmentNeutral(); actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -194,7 +195,7 @@ public void SerializeExternalReferenceAsJsonV2Works() } [Fact] - public void SerializeExternalReferenceAsYamlV2Works() + public async Task SerializeExternalReferenceAsYamlV2Works() { // Arrange var reference = new OpenApiReference @@ -206,14 +207,14 @@ public void SerializeExternalReferenceAsYamlV2Works() var expected = @"$ref: main.json#/definitions/Pets"; // Act - var actual = reference.SerializeAsYaml(OpenApiSpecVersion.OpenApi2_0); + var actual = await reference.SerializeAsYamlAsync(OpenApiSpecVersion.OpenApi2_0); // Assert actual.Should().Be(expected); } [Fact] - public void SerializeExternalReferenceAsJsonV3Works() + public async Task SerializeExternalReferenceAsJsonV3Works() { // Arrange var reference = new OpenApiReference { ExternalResource = "main.json", Type = ReferenceType.Schema, Id = "Pets" }; @@ -226,7 +227,7 @@ public void SerializeExternalReferenceAsJsonV3Works() """; // Act - var actual = reference.SerializeAsJson(OpenApiSpecVersion.OpenApi3_0); + var actual = await reference.SerializeAsJsonAsync(OpenApiSpecVersion.OpenApi3_0); expected = expected.MakeLineBreaksEnvironmentNeutral(); actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -235,14 +236,14 @@ public void SerializeExternalReferenceAsJsonV3Works() } [Fact] - public void SerializeExternalReferenceAsYamlV3Works() + public async Task SerializeExternalReferenceAsYamlV3Works() { // Arrange var reference = new OpenApiReference { ExternalResource = "main.json", Type = ReferenceType.Schema, Id = "Pets" }; var expected = @"$ref: main.json#/components/schemas/Pets"; // Act - var actual = reference.SerializeAsYaml(OpenApiSpecVersion.OpenApi3_0); + var actual = await reference.SerializeAsYamlAsync(OpenApiSpecVersion.OpenApi3_0); // Assert actual.Should().Be(expected); diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiRequestBodyTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiRequestBodyTests.cs index ebffa38fd..f391ef4d8 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiRequestBodyTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiRequestBodyTests.cs @@ -59,7 +59,7 @@ public async Task SerializeAdvancedRequestBodyAsV3JsonWorksAsync(bool produceTer // Act AdvancedRequestBody.SerializeAsV3(writer); - writer.Flush(); + await writer.FlushAsync(); // Assert await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput); @@ -76,7 +76,7 @@ public async Task SerializeReferencedRequestBodyAsV3JsonWorksAsync(bool produceT // Act OpenApiRequestBodyReference.SerializeAsV3(writer); - writer.Flush(); + await writer.FlushAsync(); // Assert await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput); @@ -93,7 +93,7 @@ public async Task SerializeReferencedRequestBodyAsV3JsonWithoutReferenceWorksAsy // Act ReferencedRequestBody.SerializeAsV3(writer); - writer.Flush(); + await writer.FlushAsync(); // Assert await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput); diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiResponseTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiResponseTests.cs index f09d41da8..5026a0549 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiResponseTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiResponseTests.cs @@ -186,7 +186,7 @@ public OpenApiResponseTests(ITestOutputHelper output) [InlineData(OpenApiSpecVersion.OpenApi2_0, OpenApiFormat.Json)] [InlineData(OpenApiSpecVersion.OpenApi3_0, OpenApiFormat.Yaml)] [InlineData(OpenApiSpecVersion.OpenApi2_0, OpenApiFormat.Yaml)] - public void SerializeBasicResponseWorks( + public async Task SerializeBasicResponseWorks( OpenApiSpecVersion version, OpenApiFormat format) { @@ -196,7 +196,7 @@ public void SerializeBasicResponseWorks( }" : @"description: "; // Act - var actual = BasicResponse.Serialize(version, format); + var actual = await BasicResponse.SerializeAsync(version, format); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -205,7 +205,7 @@ public void SerializeBasicResponseWorks( } [Fact] - public void SerializeAdvancedResponseAsV3JsonWorks() + public async Task SerializeAdvancedResponseAsV3JsonWorks() { // Arrange var expected = @"{ @@ -239,7 +239,7 @@ public void SerializeAdvancedResponseAsV3JsonWorks() }"; // Act - var actual = AdvancedV3Response.SerializeAsJson(OpenApiSpecVersion.OpenApi3_0); + var actual = await AdvancedV3Response.SerializeAsJsonAsync(OpenApiSpecVersion.OpenApi3_0); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -248,7 +248,7 @@ public void SerializeAdvancedResponseAsV3JsonWorks() } [Fact] - public void SerializeAdvancedResponseAsV3YamlWorks() + public async Task SerializeAdvancedResponseAsV3YamlWorks() { // Arrange var expected = @@ -272,7 +272,7 @@ public void SerializeAdvancedResponseAsV3YamlWorks() myextension: myextensionvalue"; // Act - var actual = AdvancedV3Response.SerializeAsYaml(OpenApiSpecVersion.OpenApi3_0); + var actual = await AdvancedV3Response.SerializeAsYamlAsync(OpenApiSpecVersion.OpenApi3_0); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -281,7 +281,7 @@ public void SerializeAdvancedResponseAsV3YamlWorks() } [Fact] - public void SerializeAdvancedResponseAsV2JsonWorks() + public async Task SerializeAdvancedResponseAsV2JsonWorks() { // Arrange var expected = @"{ @@ -309,7 +309,7 @@ public void SerializeAdvancedResponseAsV2JsonWorks() }"; // Act - var actual = AdvancedV2Response.SerializeAsJson(OpenApiSpecVersion.OpenApi2_0); + var actual = await AdvancedV2Response.SerializeAsJsonAsync(OpenApiSpecVersion.OpenApi2_0); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -318,7 +318,7 @@ public void SerializeAdvancedResponseAsV2JsonWorks() } [Fact] - public void SerializeAdvancedResponseAsV2YamlWorks() + public async Task SerializeAdvancedResponseAsV2YamlWorks() { // Arrange var expected = @@ -339,7 +339,7 @@ public void SerializeAdvancedResponseAsV2YamlWorks() type: integer"; // Act - var actual = AdvancedV2Response.SerializeAsYaml(OpenApiSpecVersion.OpenApi2_0); + var actual = await AdvancedV2Response.SerializeAsYamlAsync(OpenApiSpecVersion.OpenApi2_0); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -358,7 +358,7 @@ public async Task SerializeReferencedResponseAsV3JsonWorksAsync(bool produceTers // Act V3OpenApiResponseReference.SerializeAsV3(writer); - writer.Flush(); + await writer.FlushAsync(); // Assert await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput); @@ -375,7 +375,7 @@ public async Task SerializeReferencedResponseAsV3JsonWithoutReferenceWorksAsync( // Act ReferencedV3Response.SerializeAsV3(writer); - writer.Flush(); + await writer.FlushAsync(); // Assert await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput); @@ -392,7 +392,7 @@ public async Task SerializeReferencedResponseAsV2JsonWorksAsync(bool produceTers // Act V2OpenApiResponseReference.SerializeAsV2(writer); - writer.Flush(); + await writer.FlushAsync(); // Assert await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput); @@ -409,7 +409,7 @@ public async Task SerializeReferencedResponseAsV2JsonWithoutReferenceWorksAsync( // Act ReferencedV2Response.SerializeAsV2(writer); - writer.Flush(); + await writer.FlushAsync(); // Assert await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput); diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiSchemaTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiSchemaTests.cs index 75ea5ca47..49f1596c5 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiSchemaTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiSchemaTests.cs @@ -215,13 +215,13 @@ public class OpenApiSchemaTests }; [Fact] - public void SerializeBasicSchemaAsV3JsonWorks() + public async Task SerializeBasicSchemaAsV3JsonWorks() { // Arrange var expected = @"{ }"; // Act - var actual = BasicSchema.SerializeAsJson(OpenApiSpecVersion.OpenApi3_0); + var actual = await BasicSchema.SerializeAsJsonAsync(OpenApiSpecVersion.OpenApi3_0); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -230,7 +230,7 @@ public void SerializeBasicSchemaAsV3JsonWorks() } [Fact] - public void SerializeAdvancedSchemaNumberAsV3JsonWorks() + public async Task SerializeAdvancedSchemaNumberAsV3JsonWorks() { // Arrange var expected = @@ -251,7 +251,7 @@ public void SerializeAdvancedSchemaNumberAsV3JsonWorks() """; // Act - var actual = AdvancedSchemaNumber.SerializeAsJson(OpenApiSpecVersion.OpenApi3_0); + var actual = await AdvancedSchemaNumber.SerializeAsJsonAsync(OpenApiSpecVersion.OpenApi3_0); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -260,7 +260,7 @@ public void SerializeAdvancedSchemaNumberAsV3JsonWorks() } [Fact] - public void SerializeAdvancedSchemaObjectAsV3JsonWorks() + public async Task SerializeAdvancedSchemaObjectAsV3JsonWorks() { // Arrange var expected = @@ -303,7 +303,7 @@ public void SerializeAdvancedSchemaObjectAsV3JsonWorks() """; // Act - var actual = AdvancedSchemaObject.SerializeAsJson(OpenApiSpecVersion.OpenApi3_0); + var actual = await AdvancedSchemaObject.SerializeAsJsonAsync(OpenApiSpecVersion.OpenApi3_0); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -312,7 +312,7 @@ public void SerializeAdvancedSchemaObjectAsV3JsonWorks() } [Fact] - public void SerializeAdvancedSchemaWithAllOfAsV3JsonWorks() + public async Task SerializeAdvancedSchemaWithAllOfAsV3JsonWorks() { // Arrange var expected = @@ -358,7 +358,7 @@ public void SerializeAdvancedSchemaWithAllOfAsV3JsonWorks() """; // Act - var actual = AdvancedSchemaWithAllOf.SerializeAsJson(OpenApiSpecVersion.OpenApi3_0); + var actual = await AdvancedSchemaWithAllOf.SerializeAsJsonAsync(OpenApiSpecVersion.OpenApi3_0); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -377,7 +377,7 @@ public async Task SerializeReferencedSchemaAsV3WithoutReferenceJsonWorksAsync(bo // Act ReferencedSchema.SerializeAsV3(writer); - writer.Flush(); + await writer.FlushAsync(); // Assert await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput); @@ -394,7 +394,7 @@ public async Task SerializeReferencedSchemaAsV3JsonWorksAsync(bool produceTerseO // Act ReferencedSchema.SerializeAsV3(writer); - writer.Flush(); + await writer.FlushAsync(); // Assert await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput); @@ -411,14 +411,14 @@ public async Task SerializeSchemaWRequiredPropertiesAsV2JsonWorksAsync(bool prod // Act AdvancedSchemaWithRequiredPropertiesObject.SerializeAsV2(writer); - writer.Flush(); + await writer.FlushAsync(); // Assert await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput); } [Fact] - public void SerializeAsV2ShouldSetFormatPropertyInParentSchemaIfPresentInChildrenSchema() + public async Task SerializeAsV2ShouldSetFormatPropertyInParentSchemaIfPresentInChildrenSchema() { // Arrange var schema = new OpenApiSchema @@ -440,7 +440,7 @@ public void SerializeAsV2ShouldSetFormatPropertyInParentSchemaIfPresentInChildre // Act // Serialize as V2 schema.SerializeAsV2(openApiJsonWriter); - openApiJsonWriter.Flush(); + await openApiJsonWriter.FlushAsync(); var v2Schema = outputStringWriter.GetStringBuilder().ToString().MakeLineBreaksEnvironmentNeutral(); @@ -604,7 +604,7 @@ public void OpenApiWalkerVisitsOpenApiSchemaNot() } [Fact] - public void SerializeSchemaWithUnrecognizedPropertiesWorks() + public async Task SerializeSchemaWithUnrecognizedPropertiesWorks() { // Arrange var schema = new OpenApiSchema @@ -624,7 +624,7 @@ public void SerializeSchemaWithUnrecognizedPropertiesWorks() }"; // Act - var actual = schema.SerializeAsJson(OpenApiSpecVersion.OpenApi3_1); + var actual = await schema.SerializeAsJsonAsync(OpenApiSpecVersion.OpenApi3_1); // Assert actual.MakeLineBreaksEnvironmentNeutral().Should().Be(expected.MakeLineBreaksEnvironmentNeutral()); diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiSecurityRequirementTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiSecurityRequirementTests.cs index 1e9e13323..8dcebc315 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiSecurityRequirementTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiSecurityRequirementTests.cs @@ -72,13 +72,13 @@ public class OpenApiSecurityRequirementTests }; [Fact] - public void SerializeBasicSecurityRequirementAsV3JsonWorks() + public async Task SerializeBasicSecurityRequirementAsV3JsonWorks() { // Arrange var expected = @"{ }"; // Act - var actual = BasicSecurityRequirement.SerializeAsJson(OpenApiSpecVersion.OpenApi3_0); + var actual = await BasicSecurityRequirement.SerializeAsJsonAsync(OpenApiSpecVersion.OpenApi3_0); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -97,14 +97,14 @@ public async Task SerializeSecurityRequirementAsV3JsonWorksAsync(bool produceTer // Act SecurityRequirementWithReferencedSecurityScheme.SerializeAsV3(writer); - writer.Flush(); + await writer.FlushAsync(); // Assert await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput); } [Fact] - public void SerializeSecurityRequirementWithReferencedSecuritySchemeAsV3JsonWorks() + public async Task SerializeSecurityRequirementWithReferencedSecuritySchemeAsV3JsonWorks() { // Arrange var expected = @@ -124,7 +124,7 @@ public void SerializeSecurityRequirementWithReferencedSecuritySchemeAsV3JsonWork """; // Act - var actual = SecurityRequirementWithReferencedSecurityScheme.SerializeAsJson(OpenApiSpecVersion.OpenApi3_0); + var actual = await SecurityRequirementWithReferencedSecurityScheme.SerializeAsJsonAsync(OpenApiSpecVersion.OpenApi3_0); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -133,7 +133,7 @@ public void SerializeSecurityRequirementWithReferencedSecuritySchemeAsV3JsonWork } [Fact] - public void SerializeSecurityRequirementWithReferencedSecuritySchemeAsV2JsonWorks() + public async Task SerializeSecurityRequirementWithReferencedSecuritySchemeAsV2JsonWorks() { // Arrange var expected = @@ -153,7 +153,7 @@ public void SerializeSecurityRequirementWithReferencedSecuritySchemeAsV2JsonWork """; // Act - var actual = SecurityRequirementWithReferencedSecurityScheme.SerializeAsJson(OpenApiSpecVersion.OpenApi2_0); + var actual = await SecurityRequirementWithReferencedSecurityScheme.SerializeAsJsonAsync(OpenApiSpecVersion.OpenApi2_0); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -162,7 +162,7 @@ public void SerializeSecurityRequirementWithReferencedSecuritySchemeAsV2JsonWork } [Fact] - public void SerializeSecurityRequirementWithUnreferencedSecuritySchemeAsV3JsonShouldSkipUnserializableKeyValuePair() + public async Task SerializeSecurityRequirementWithUnreferencedSecuritySchemeAsV3JsonShouldSkipUnserializableKeyValuePair() { // Arrange var expected = @@ -178,7 +178,7 @@ public void SerializeSecurityRequirementWithUnreferencedSecuritySchemeAsV3JsonSh """; // Act - var actual = SecurityRequirementWithUnreferencedSecurityScheme.SerializeAsJson(OpenApiSpecVersion.OpenApi3_0); + var actual = await SecurityRequirementWithUnreferencedSecurityScheme.SerializeAsJsonAsync(OpenApiSpecVersion.OpenApi3_0); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -187,7 +187,7 @@ public void SerializeSecurityRequirementWithUnreferencedSecuritySchemeAsV3JsonSh } [Fact] - public void SerializeSecurityRequirementWithUnreferencedSecuritySchemeAsV2JsonShouldSkipUnserializableKeyValuePair() + public async Task SerializeSecurityRequirementWithUnreferencedSecuritySchemeAsV2JsonShouldSkipUnserializableKeyValuePair() { // Arrange var expected = @@ -204,7 +204,7 @@ public void SerializeSecurityRequirementWithUnreferencedSecuritySchemeAsV2JsonSh // Act var actual = - SecurityRequirementWithUnreferencedSecurityScheme.SerializeAsJson(OpenApiSpecVersion.OpenApi2_0); + await SecurityRequirementWithUnreferencedSecurityScheme.SerializeAsJsonAsync(OpenApiSpecVersion.OpenApi2_0); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiSecuritySchemeTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiSecuritySchemeTests.cs index 58794373d..ebe06d4d6 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiSecuritySchemeTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiSecuritySchemeTests.cs @@ -115,7 +115,7 @@ public class OpenApiSecuritySchemeTests }; [Fact] - public void SerializeApiKeySecuritySchemeAsV3JsonWorks() + public async Task SerializeApiKeySecuritySchemeAsV3JsonWorks() { // Arrange var expected = @@ -129,7 +129,7 @@ public void SerializeApiKeySecuritySchemeAsV3JsonWorks() """; // Act - var actual = ApiKeySecurityScheme.SerializeAsJson(OpenApiSpecVersion.OpenApi3_0); + var actual = await ApiKeySecurityScheme.SerializeAsJsonAsync(OpenApiSpecVersion.OpenApi3_0); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -138,7 +138,7 @@ public void SerializeApiKeySecuritySchemeAsV3JsonWorks() } [Fact] - public void SerializeApiKeySecuritySchemeAsV3YamlWorks() + public async Task SerializeApiKeySecuritySchemeAsV3YamlWorks() { // Arrange var expected = @@ -150,7 +150,7 @@ public void SerializeApiKeySecuritySchemeAsV3YamlWorks() """; // Act - var actual = ApiKeySecurityScheme.SerializeAsYaml(OpenApiSpecVersion.OpenApi3_0); + var actual = await ApiKeySecurityScheme.SerializeAsYamlAsync(OpenApiSpecVersion.OpenApi3_0); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -159,7 +159,7 @@ public void SerializeApiKeySecuritySchemeAsV3YamlWorks() } [Fact] - public void SerializeHttpBasicSecuritySchemeAsV3JsonWorks() + public async Task SerializeHttpBasicSecuritySchemeAsV3JsonWorks() { // Arrange var expected = @@ -172,7 +172,7 @@ public void SerializeHttpBasicSecuritySchemeAsV3JsonWorks() """; // Act - var actual = HttpBasicSecurityScheme.SerializeAsJson(OpenApiSpecVersion.OpenApi3_0); + var actual = await HttpBasicSecurityScheme.SerializeAsJsonAsync(OpenApiSpecVersion.OpenApi3_0); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -181,7 +181,7 @@ public void SerializeHttpBasicSecuritySchemeAsV3JsonWorks() } [Fact] - public void SerializeHttpBearerSecuritySchemeAsV3JsonWorks() + public async Task SerializeHttpBearerSecuritySchemeAsV3JsonWorks() { // Arrange var expected = @@ -195,7 +195,7 @@ public void SerializeHttpBearerSecuritySchemeAsV3JsonWorks() """; // Act - var actual = HttpBearerSecurityScheme.SerializeAsJson(OpenApiSpecVersion.OpenApi3_0); + var actual = await HttpBearerSecurityScheme.SerializeAsJsonAsync(OpenApiSpecVersion.OpenApi3_0); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -204,7 +204,7 @@ public void SerializeHttpBearerSecuritySchemeAsV3JsonWorks() } [Fact] - public void SerializeOAuthSingleFlowSecuritySchemeAsV3JsonWorks() + public async Task SerializeOAuthSingleFlowSecuritySchemeAsV3JsonWorks() { // Arrange var expected = @@ -225,7 +225,7 @@ public void SerializeOAuthSingleFlowSecuritySchemeAsV3JsonWorks() """; // Act - var actual = OAuth2SingleFlowSecurityScheme.SerializeAsJson(OpenApiSpecVersion.OpenApi3_0); + var actual = await OAuth2SingleFlowSecurityScheme.SerializeAsJsonAsync(OpenApiSpecVersion.OpenApi3_0); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -234,7 +234,7 @@ public void SerializeOAuthSingleFlowSecuritySchemeAsV3JsonWorks() } [Fact] - public void SerializeOAuthMultipleFlowSecuritySchemeAsV3JsonWorks() + public async Task SerializeOAuthMultipleFlowSecuritySchemeAsV3JsonWorks() { // Arrange var expected = @@ -271,7 +271,7 @@ public void SerializeOAuthMultipleFlowSecuritySchemeAsV3JsonWorks() """; // Act - var actual = OAuth2MultipleFlowSecurityScheme.SerializeAsJson(OpenApiSpecVersion.OpenApi3_0); + var actual = await OAuth2MultipleFlowSecurityScheme.SerializeAsJsonAsync(OpenApiSpecVersion.OpenApi3_0); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -280,7 +280,7 @@ public void SerializeOAuthMultipleFlowSecuritySchemeAsV3JsonWorks() } [Fact] - public void SerializeOpenIdConnectSecuritySchemeAsV3JsonWorks() + public async Task SerializeOpenIdConnectSecuritySchemeAsV3JsonWorks() { // Arrange var expected = @@ -293,7 +293,7 @@ public void SerializeOpenIdConnectSecuritySchemeAsV3JsonWorks() """; // Act - var actual = OpenIdConnectSecurityScheme.SerializeAsJson(OpenApiSpecVersion.OpenApi3_0); + var actual = await OpenIdConnectSecurityScheme.SerializeAsJsonAsync(OpenApiSpecVersion.OpenApi3_0); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -312,7 +312,7 @@ public async Task SerializeReferencedSecuritySchemeAsV3JsonWorksAsync(bool produ // Act OpenApiSecuritySchemeReference.SerializeAsV3(writer); - writer.Flush(); + await writer.FlushAsync(); // Assert await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput); @@ -329,7 +329,7 @@ public async Task SerializeReferencedSecuritySchemeAsV3JsonWithoutReferenceWorks // Act ReferencedSecurityScheme.SerializeAsV3(writer); - writer.Flush(); + await writer.FlushAsync(); // Assert await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput); diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiServerTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiServerTests.cs index 19fc00aeb..1d4cc248c 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiServerTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiServerTests.cs @@ -2,6 +2,7 @@ // Licensed under the MIT license. using System.Collections.Generic; +using System.Threading.Tasks; using FluentAssertions; using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Models; @@ -47,7 +48,7 @@ public class OpenApiServerTests }; [Fact] - public void SerializeBasicServerAsV3JsonWorks() + public async Task SerializeBasicServerAsV3JsonWorks() { // Arrange var expected = @@ -59,7 +60,7 @@ public void SerializeBasicServerAsV3JsonWorks() """; // Act - var actual = BasicServer.SerializeAsJson(OpenApiSpecVersion.OpenApi3_0); + var actual = await BasicServer.SerializeAsJsonAsync(OpenApiSpecVersion.OpenApi3_0); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -68,7 +69,7 @@ public void SerializeBasicServerAsV3JsonWorks() } [Fact] - public void SerializeAdvancedServerAsV3JsonWorks() + public async Task SerializeAdvancedServerAsV3JsonWorks() { // Arrange var expected = @@ -97,7 +98,7 @@ public void SerializeAdvancedServerAsV3JsonWorks() """; // Act - var actual = AdvancedServer.SerializeAsJson(OpenApiSpecVersion.OpenApi3_0); + var actual = await AdvancedServer.SerializeAsJsonAsync(OpenApiSpecVersion.OpenApi3_0); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiServerVariableTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiServerVariableTests.cs index ca23e3b97..032b9c7f3 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiServerVariableTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiServerVariableTests.cs @@ -1,6 +1,7 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. +using System.Threading.Tasks; using FluentAssertions; using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Models; @@ -27,10 +28,10 @@ public class OpenApiServerVariableTests [Theory] [InlineData(OpenApiFormat.Json, "{ }")] [InlineData(OpenApiFormat.Yaml, "{ }")] - public void SerializeBasicServerVariableAsV3Works(OpenApiFormat format, string expected) + public async Task SerializeBasicServerVariableAsV3Works(OpenApiFormat format, string expected) { // Arrange & Act - var actual = BasicServerVariable.Serialize(OpenApiSpecVersion.OpenApi3_0, format); + var actual = await BasicServerVariable.SerializeAsync(OpenApiSpecVersion.OpenApi3_0, format); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -39,7 +40,7 @@ public void SerializeBasicServerVariableAsV3Works(OpenApiFormat format, string e } [Fact] - public void SerializeAdvancedServerVariableAsV3JsonWorks() + public async Task SerializeAdvancedServerVariableAsV3JsonWorks() { // Arrange var expected = @@ -55,7 +56,7 @@ public void SerializeAdvancedServerVariableAsV3JsonWorks() """; // Act - var actual = AdvancedServerVariable.SerializeAsJson(OpenApiSpecVersion.OpenApi3_0); + var actual = await AdvancedServerVariable.SerializeAsJsonAsync(OpenApiSpecVersion.OpenApi3_0); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -64,7 +65,7 @@ public void SerializeAdvancedServerVariableAsV3JsonWorks() } [Fact] - public void SerializeAdvancedServerVariableAsV3YamlWorks() + public async Task SerializeAdvancedServerVariableAsV3YamlWorks() { // Arrange var expected = @@ -77,7 +78,7 @@ public void SerializeAdvancedServerVariableAsV3YamlWorks() """; // Act - var actual = AdvancedServerVariable.SerializeAsYaml(OpenApiSpecVersion.OpenApi3_0); + var actual = await AdvancedServerVariable.SerializeAsYamlAsync(OpenApiSpecVersion.OpenApi3_0); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiTagTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiTagTests.cs index 24c186b0b..62616fe25 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiTagTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiTagTests.cs @@ -44,7 +44,7 @@ public async Task SerializeBasicTagAsV3JsonWithoutReferenceWorksAsync(bool produ // Act BasicTag.SerializeAsV3(writer); - writer.Flush(); + await writer.FlushAsync(); // Assert await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput); @@ -61,7 +61,7 @@ public async Task SerializeBasicTagAsV2JsonWithoutReferenceWorksAsync(bool produ // Act BasicTag.SerializeAsV2(writer); - writer.Flush(); + await writer.FlushAsync(); // Assert await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput); @@ -86,7 +86,7 @@ public void SerializeBasicTagAsV3YamlWithoutReferenceWorks() } [Fact] - public void SerializeBasicTagAsV2YamlWithoutReferenceWorks() + public async Task SerializeBasicTagAsV2YamlWithoutReferenceWorks() { // Arrange var outputStringWriter = new StringWriter(CultureInfo.InvariantCulture); @@ -95,7 +95,7 @@ public void SerializeBasicTagAsV2YamlWithoutReferenceWorks() // Act BasicTag.SerializeAsV2(writer); - writer.Flush(); + await writer.FlushAsync(); var actual = outputStringWriter.GetStringBuilder().ToString(); // Assert @@ -105,7 +105,7 @@ public void SerializeBasicTagAsV2YamlWithoutReferenceWorks() } [Fact] - public void SerializeAdvancedTagAsV3YamlWithoutReferenceWorks() + public async Task SerializeAdvancedTagAsV3YamlWithoutReferenceWorks() { // Arrange var outputStringWriter = new StringWriter(CultureInfo.InvariantCulture); @@ -122,7 +122,7 @@ public void SerializeAdvancedTagAsV3YamlWithoutReferenceWorks() // Act AdvancedTag.SerializeAsV3(writer); - writer.Flush(); + await writer.FlushAsync(); var actual = outputStringWriter.GetStringBuilder().ToString(); // Assert @@ -132,7 +132,7 @@ public void SerializeAdvancedTagAsV3YamlWithoutReferenceWorks() } [Fact] - public void SerializeAdvancedTagAsV2YamlWithoutReferenceWorks() + public async Task SerializeAdvancedTagAsV2YamlWithoutReferenceWorks() { // Arrange var outputStringWriter = new StringWriter(CultureInfo.InvariantCulture); @@ -149,7 +149,7 @@ public void SerializeAdvancedTagAsV2YamlWithoutReferenceWorks() // Act AdvancedTag.SerializeAsV2(writer); - writer.Flush(); + await writer.FlushAsync(); var actual = outputStringWriter.GetStringBuilder().ToString(); // Assert @@ -169,7 +169,7 @@ public async Task SerializeAdvancedTagAsV3JsonWorksAsync(bool produceTerseOutput // Act AdvancedTag.SerializeAsV3(writer); - writer.Flush(); + await writer.FlushAsync(); // Assert await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput); @@ -186,14 +186,14 @@ public async Task SerializeAdvancedTagAsV2JsonWorksAsync(bool produceTerseOutput // Act AdvancedTag.SerializeAsV2(writer); - writer.Flush(); + await writer.FlushAsync(); // Assert await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput); } [Fact] - public void SerializeAdvancedTagAsV3YamlWorks() + public async Task SerializeAdvancedTagAsV3YamlWorks() { // Arrange var outputStringWriter = new StringWriter(CultureInfo.InvariantCulture); @@ -208,7 +208,7 @@ public void SerializeAdvancedTagAsV3YamlWorks() // Act AdvancedTag.SerializeAsV3(writer); - writer.Flush(); + await writer.FlushAsync(); var actual = outputStringWriter.GetStringBuilder().ToString(); // Assert @@ -218,7 +218,7 @@ public void SerializeAdvancedTagAsV3YamlWorks() } [Fact] - public void SerializeAdvancedTagAsV2YamlWorks() + public async Task SerializeAdvancedTagAsV2YamlWorks() { // Arrange var outputStringWriter = new StringWriter(CultureInfo.InvariantCulture); @@ -233,7 +233,7 @@ public void SerializeAdvancedTagAsV2YamlWorks() // Act AdvancedTag.SerializeAsV2(writer); - writer.Flush(); + await writer.FlushAsync(); var actual = outputStringWriter.GetStringBuilder().ToString(); // Assert @@ -253,7 +253,7 @@ public async Task SerializeReferencedTagAsV3JsonWorksAsync(bool produceTerseOutp // Act ReferencedTag.SerializeAsV3(writer); - writer.Flush(); + await writer.FlushAsync(); // Assert await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput); @@ -270,14 +270,14 @@ public async Task SerializeReferencedTagAsV2JsonWorksAsync(bool produceTerseOutp // Act ReferencedTag.SerializeAsV2(writer); - writer.Flush(); + await writer.FlushAsync(); // Assert await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput); } [Fact] - public void SerializeReferencedTagAsV3YamlWorks() + public async Task SerializeReferencedTagAsV3YamlWorks() { // Arrange var outputStringWriter = new StringWriter(CultureInfo.InvariantCulture); @@ -287,7 +287,7 @@ public void SerializeReferencedTagAsV3YamlWorks() // Act ReferencedTag.SerializeAsV3(writer); - writer.Flush(); + await writer.FlushAsync(); var actual = outputStringWriter.GetStringBuilder().ToString(); // Assert @@ -297,7 +297,7 @@ public void SerializeReferencedTagAsV3YamlWorks() } [Fact] - public void SerializeReferencedTagAsV2YamlWorks() + public async Task SerializeReferencedTagAsV2YamlWorks() { // Arrange var outputStringWriter = new StringWriter(CultureInfo.InvariantCulture); @@ -307,7 +307,7 @@ public void SerializeReferencedTagAsV2YamlWorks() // Act ReferencedTag.SerializeAsV2(writer); - writer.Flush(); + await writer.FlushAsync(); var actual = outputStringWriter.GetStringBuilder().ToString(); // Assert diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiXmlTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiXmlTests.cs index 3a75b2336..45c13500c 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiXmlTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiXmlTests.cs @@ -2,6 +2,7 @@ // Licensed under the MIT license. using System.Collections.Generic; +using System.Threading.Tasks; using FluentAssertions; using Microsoft.OpenApi.Any; using Microsoft.OpenApi.Extensions; @@ -34,12 +35,12 @@ public class OpenApiXmlTests [InlineData(OpenApiSpecVersion.OpenApi2_0, OpenApiFormat.Json)] [InlineData(OpenApiSpecVersion.OpenApi3_0, OpenApiFormat.Yaml)] [InlineData(OpenApiSpecVersion.OpenApi2_0, OpenApiFormat.Yaml)] - public void SerializeBasicXmlWorks( + public async Task SerializeBasicXmlWorks( OpenApiSpecVersion version, OpenApiFormat format) { // Act - var actual = BasicXml.Serialize(version, format); + var actual = await BasicXml.SerializeAsync(version, format); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -49,7 +50,7 @@ public void SerializeBasicXmlWorks( [Theory] [InlineData(OpenApiSpecVersion.OpenApi3_0)] [InlineData(OpenApiSpecVersion.OpenApi2_0)] - public void SerializeAdvancedXmlAsJsonWorks(OpenApiSpecVersion version) + public async Task SerializeAdvancedXmlAsJsonWorks(OpenApiSpecVersion version) { // Arrange var expected = @@ -65,7 +66,7 @@ public void SerializeAdvancedXmlAsJsonWorks(OpenApiSpecVersion version) """; // Act - var actual = AdvancedXml.SerializeAsJson(version); + var actual = await AdvancedXml.SerializeAsJsonAsync(version); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -76,7 +77,7 @@ public void SerializeAdvancedXmlAsJsonWorks(OpenApiSpecVersion version) [Theory] [InlineData(OpenApiSpecVersion.OpenApi3_0)] [InlineData(OpenApiSpecVersion.OpenApi2_0)] - public void SerializeAdvancedXmlAsYamlWorks(OpenApiSpecVersion version) + public async Task SerializeAdvancedXmlAsYamlWorks(OpenApiSpecVersion version) { // Arrange var expected = @@ -90,7 +91,7 @@ public void SerializeAdvancedXmlAsYamlWorks(OpenApiSpecVersion version) """; // Act - var actual = AdvancedXml.SerializeAsYaml(version); + var actual = await AdvancedXml.SerializeAsYamlAsync(version); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiCallbackReferenceTests.cs b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiCallbackReferenceTests.cs index 8942e692c..b147e19ee 100644 --- a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiCallbackReferenceTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiCallbackReferenceTests.cs @@ -170,7 +170,7 @@ public async Task SerializeCallbackReferenceAsV3JsonWorks(bool produceTerseOutpu // Act _externalCallbackReference.SerializeAsV3(writer); - writer.Flush(); + await writer.FlushAsync(); // Assert await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput); @@ -187,7 +187,7 @@ public async Task SerializeCallbackReferenceAsV31JsonWorks(bool produceTerseOutp // Act _externalCallbackReference.SerializeAsV31(writer); - writer.Flush(); + await writer.FlushAsync(); // Assert await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput); diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiExampleReferenceTests.cs b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiExampleReferenceTests.cs index a3342ade6..a3c5efb7e 100644 --- a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiExampleReferenceTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiExampleReferenceTests.cs @@ -161,7 +161,7 @@ public async Task SerializeExampleReferenceAsV3JsonWorks(bool produceTerseOutput // Act _localExampleReference.SerializeAsV3(writer); - writer.Flush(); + await writer.FlushAsync(); // Assert await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput); @@ -178,7 +178,7 @@ public async Task SerializeExampleReferenceAsV31JsonWorks(bool produceTerseOutpu // Act _localExampleReference.SerializeAsV31(writer); - writer.Flush(); + await writer.FlushAsync(); // Assert await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput); diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiHeaderReferenceTests.cs b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiHeaderReferenceTests.cs index c979e1eb0..9e1867455 100644 --- a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiHeaderReferenceTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiHeaderReferenceTests.cs @@ -120,7 +120,7 @@ public async Task SerializeHeaderReferenceAsV3JsonWorks(bool produceTerseOutput) // Act _localHeaderReference.SerializeAsV3(writer); - writer.Flush(); + await writer.FlushAsync(); // Assert await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput); @@ -137,7 +137,7 @@ public async Task SerializeHeaderReferenceAsV31JsonWorks(bool produceTerseOutput // Act _localHeaderReference.SerializeAsV31(writer); - writer.Flush(); + await writer.FlushAsync(); // Assert await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput); @@ -154,7 +154,7 @@ public async Task SerializeHeaderReferenceAsV2JsonWorksAsync(bool produceTerseOu // Act _localHeaderReference.SerializeAsV2(writer); - writer.Flush(); + await writer.FlushAsync(); // Assert await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput); diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiLinkReferenceTests.cs b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiLinkReferenceTests.cs index 3587a83d9..9f005727f 100644 --- a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiLinkReferenceTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiLinkReferenceTests.cs @@ -169,7 +169,7 @@ public async Task SerializeLinkReferenceAsV3JsonWorks(bool produceTerseOutput) // Act _localLinkReference.SerializeAsV3(writer); - writer.Flush(); + await writer.FlushAsync(); // Assert await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput); @@ -186,7 +186,7 @@ public async Task SerializeLinkReferenceAsV31JsonWorks(bool produceTerseOutput) // Act _localLinkReference.SerializeAsV31(writer); - writer.Flush(); + await writer.FlushAsync(); // Assert await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput); diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiParameterReferenceTests.cs b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiParameterReferenceTests.cs index 8745da455..57239f13b 100644 --- a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiParameterReferenceTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiParameterReferenceTests.cs @@ -122,7 +122,7 @@ public async Task SerializeParameterReferenceAsV3JsonWorks(bool produceTerseOutp // Act _localParameterReference.SerializeAsV3(writer); - writer.Flush(); + await writer.FlushAsync(); // Assert await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput); @@ -139,7 +139,7 @@ public async Task SerializeParameterReferenceAsV31JsonWorks(bool produceTerseOut // Act _localParameterReference.SerializeAsV31(writer); - writer.Flush(); + await writer.FlushAsync(); // Assert await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput); @@ -156,7 +156,7 @@ public async Task SerializeParameterReferenceAsV2JsonWorksAsync(bool produceTers // Act _localParameterReference.SerializeAsV2(writer); - writer.Flush(); + await writer.FlushAsync(); // Assert await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput); diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiPathItemReferenceTests.cs b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiPathItemReferenceTests.cs index c23d564d5..5d18b9095 100644 --- a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiPathItemReferenceTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiPathItemReferenceTests.cs @@ -130,7 +130,7 @@ public async Task SerializePathItemReferenceAsV31JsonWorks(bool produceTerseOutp // Act _localPathItemReference.SerializeAsV31(writer); - writer.Flush(); + await writer.FlushAsync(); // Assert await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput); diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiRequestBodyReferenceTests.cs b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiRequestBodyReferenceTests.cs index 7bd9ab35b..4befbb298 100644 --- a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiRequestBodyReferenceTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiRequestBodyReferenceTests.cs @@ -133,7 +133,7 @@ public async Task SerializeRequestBodyReferenceAsV3JsonWorks(bool produceTerseOu // Act _localRequestBodyReference.SerializeAsV3(writer); - writer.Flush(); + await writer.FlushAsync(); // Assert await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput); @@ -150,7 +150,7 @@ public async Task SerializeRequestBodyReferenceAsV31JsonWorks(bool produceTerseO // Act _localRequestBodyReference.SerializeAsV31(writer); - writer.Flush(); + await writer.FlushAsync(); // Assert await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput); diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiResponseReferenceTest.cs b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiResponseReferenceTest.cs index 361006b64..441677a6f 100644 --- a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiResponseReferenceTest.cs +++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiResponseReferenceTest.cs @@ -115,7 +115,7 @@ public async Task SerializeResponseReferenceAsV3JsonWorks(bool produceTerseOutpu // Act _localResponseReference.SerializeAsV3(writer); - writer.Flush(); + await writer.FlushAsync(); // Assert await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput); @@ -132,7 +132,7 @@ public async Task SerializeResponseReferenceAsV31JsonWorks(bool produceTerseOutp // Act _localResponseReference.SerializeAsV31(writer); - writer.Flush(); + await writer.FlushAsync(); // Assert await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput); diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiSecuritySchemeReferenceTests.cs b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiSecuritySchemeReferenceTests.cs index af9ab3c23..d13d63c9a 100644 --- a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiSecuritySchemeReferenceTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiSecuritySchemeReferenceTests.cs @@ -67,7 +67,7 @@ public async Task SerializeSecuritySchemeReferenceAsV3JsonWorks(bool produceTers // Act _openApiSecuritySchemeReference.SerializeAsV3(writer); - writer.Flush(); + await writer.FlushAsync(); // Assert await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput); @@ -84,7 +84,7 @@ public async Task SerializeSecuritySchemeReferenceAsV31JsonWorks(bool produceTer // Act _openApiSecuritySchemeReference.SerializeAsV31(writer); - writer.Flush(); + await writer.FlushAsync(); // Assert await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput); diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiTagReferenceTest.cs b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiTagReferenceTest.cs index 8ec0e1373..d0e5758a5 100644 --- a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiTagReferenceTest.cs +++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiTagReferenceTest.cs @@ -89,7 +89,7 @@ public async Task SerializeTagReferenceAsV3JsonWorks(bool produceTerseOutput) // Act _openApiTagReference.SerializeAsV3(writer); - writer.Flush(); + await writer.FlushAsync(); // Assert await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput); @@ -106,7 +106,7 @@ public async Task SerializeTagReferenceAsV31JsonWorks(bool produceTerseOutput) // Act _openApiTagReference.SerializeAsV31(writer); - writer.Flush(); + await writer.FlushAsync(); // Assert await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput); diff --git a/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt b/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt index 88599f6ef..b1a5cefa9 100644 --- a/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt +++ b/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt @@ -167,21 +167,21 @@ namespace Microsoft.OpenApi.Extensions } public static class OpenApiSerializableExtensions { - public static string Serialize(this T element, Microsoft.OpenApi.OpenApiSpecVersion specVersion, Microsoft.OpenApi.OpenApiFormat format) + public static System.Threading.Tasks.Task SerializeAsJsonAsync(this T element, Microsoft.OpenApi.OpenApiSpecVersion specVersion, System.Threading.CancellationToken cancellationToken = default) where T : Microsoft.OpenApi.Interfaces.IOpenApiSerializable { } - public static void Serialize(this T element, Microsoft.OpenApi.Writers.IOpenApiWriter writer, Microsoft.OpenApi.OpenApiSpecVersion specVersion) + public static System.Threading.Tasks.Task SerializeAsJsonAsync(this T element, System.IO.Stream stream, Microsoft.OpenApi.OpenApiSpecVersion specVersion, System.Threading.CancellationToken cancellationToken = default) where T : Microsoft.OpenApi.Interfaces.IOpenApiSerializable { } - public static void Serialize(this T element, System.IO.Stream stream, Microsoft.OpenApi.OpenApiSpecVersion specVersion, Microsoft.OpenApi.OpenApiFormat format) + public static System.Threading.Tasks.Task SerializeAsYamlAsync(this T element, Microsoft.OpenApi.OpenApiSpecVersion specVersion, System.Threading.CancellationToken cancellationToken = default) where T : Microsoft.OpenApi.Interfaces.IOpenApiSerializable { } - public static void Serialize(this T element, System.IO.Stream stream, Microsoft.OpenApi.OpenApiSpecVersion specVersion, Microsoft.OpenApi.OpenApiFormat format, Microsoft.OpenApi.Writers.OpenApiWriterSettings settings) + public static System.Threading.Tasks.Task SerializeAsYamlAsync(this T element, System.IO.Stream stream, Microsoft.OpenApi.OpenApiSpecVersion specVersion, System.Threading.CancellationToken cancellationToken = default) where T : Microsoft.OpenApi.Interfaces.IOpenApiSerializable { } - public static string SerializeAsJson(this T element, Microsoft.OpenApi.OpenApiSpecVersion specVersion) + public static System.Threading.Tasks.Task SerializeAsync(this T element, Microsoft.OpenApi.OpenApiSpecVersion specVersion, Microsoft.OpenApi.OpenApiFormat format, System.Threading.CancellationToken cancellationToken = default) where T : Microsoft.OpenApi.Interfaces.IOpenApiSerializable { } - public static void SerializeAsJson(this T element, System.IO.Stream stream, Microsoft.OpenApi.OpenApiSpecVersion specVersion) + public static System.Threading.Tasks.Task SerializeAsync(this T element, Microsoft.OpenApi.Writers.IOpenApiWriter writer, Microsoft.OpenApi.OpenApiSpecVersion specVersion, System.Threading.CancellationToken cancellationToken = default) where T : Microsoft.OpenApi.Interfaces.IOpenApiSerializable { } - public static string SerializeAsYaml(this T element, Microsoft.OpenApi.OpenApiSpecVersion specVersion) + public static System.Threading.Tasks.Task SerializeAsync(this T element, System.IO.Stream stream, Microsoft.OpenApi.OpenApiSpecVersion specVersion, Microsoft.OpenApi.OpenApiFormat format, System.Threading.CancellationToken cancellationToken = default) where T : Microsoft.OpenApi.Interfaces.IOpenApiSerializable { } - public static void SerializeAsYaml(this T element, System.IO.Stream stream, Microsoft.OpenApi.OpenApiSpecVersion specVersion) + public static System.Threading.Tasks.Task SerializeAsync(this T element, System.IO.Stream stream, Microsoft.OpenApi.OpenApiSpecVersion specVersion, Microsoft.OpenApi.OpenApiFormat format, Microsoft.OpenApi.Writers.OpenApiWriterSettings settings, System.Threading.CancellationToken cancellationToken = default) where T : Microsoft.OpenApi.Interfaces.IOpenApiSerializable { } } public static class OpenApiServerExtensions @@ -560,7 +560,6 @@ namespace Microsoft.OpenApi.Models public Microsoft.OpenApi.Models.OpenApiComponents? Components { get; set; } public System.Collections.Generic.IDictionary? Extensions { get; set; } public Microsoft.OpenApi.Models.OpenApiExternalDocs? ExternalDocs { get; set; } - public string HashCode { get; } public Microsoft.OpenApi.Models.OpenApiInfo Info { get; set; } public string? JsonSchemaDialect { get; set; } public Microsoft.OpenApi.Models.OpenApiPaths Paths { get; set; } @@ -570,11 +569,11 @@ namespace Microsoft.OpenApi.Models public System.Collections.Generic.IDictionary? Webhooks { get; set; } public Microsoft.OpenApi.Services.OpenApiWorkspace? Workspace { get; set; } public bool AddComponent(string id, T componentToRegister) { } + public System.Threading.Tasks.Task GetHashCodeAsync(System.Threading.CancellationToken cancellationToken = default) { } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SetReferenceHostDocument() { } - public static string GenerateHashValue(Microsoft.OpenApi.Models.OpenApiDocument doc) { } public static Microsoft.OpenApi.Reader.ReadResult Load(System.IO.MemoryStream stream, string? format = null, Microsoft.OpenApi.Reader.OpenApiReaderSettings? settings = null) { } public static System.Threading.Tasks.Task LoadAsync(string url, Microsoft.OpenApi.Reader.OpenApiReaderSettings? settings = null) { } public static System.Threading.Tasks.Task LoadAsync(System.IO.Stream stream, string? format = null, Microsoft.OpenApi.Reader.OpenApiReaderSettings? settings = null, System.Threading.CancellationToken cancellationToken = default) { } @@ -1758,7 +1757,7 @@ namespace Microsoft.OpenApi.Writers } public interface IOpenApiWriter { - void Flush(); + System.Threading.Tasks.Task FlushAsync(System.Threading.CancellationToken cancellationToken = default); void WriteEndArray(); void WriteEndObject(); void WriteNull(); @@ -1803,15 +1802,15 @@ namespace Microsoft.OpenApi.Writers { protected const string IndentationString = " "; protected readonly System.Collections.Generic.Stack Scopes; - public OpenApiWriterBase(System.IO.TextWriter textWriter) { } - public OpenApiWriterBase(System.IO.TextWriter textWriter, Microsoft.OpenApi.Writers.OpenApiWriterSettings settings) { } + protected OpenApiWriterBase(System.IO.TextWriter textWriter) { } + protected OpenApiWriterBase(System.IO.TextWriter textWriter, Microsoft.OpenApi.Writers.OpenApiWriterSettings settings) { } protected abstract int BaseIndentation { get; } public Microsoft.OpenApi.Writers.OpenApiWriterSettings Settings { get; set; } protected System.IO.TextWriter Writer { get; } protected Microsoft.OpenApi.Writers.Scope CurrentScope() { } public virtual void DecreaseIndentation() { } protected Microsoft.OpenApi.Writers.Scope EndScope(Microsoft.OpenApi.Writers.ScopeType type) { } - public void Flush() { } + public System.Threading.Tasks.Task FlushAsync(System.Threading.CancellationToken cancellationToken = default) { } public virtual void IncreaseIndentation() { } protected bool IsArrayScope() { } protected bool IsObjectScope() { } diff --git a/test/Microsoft.OpenApi.Tests/Writers/OpenApiJsonWriterTests.cs b/test/Microsoft.OpenApi.Tests/Writers/OpenApiJsonWriterTests.cs index 30247333f..b9c41bf5f 100644 --- a/test/Microsoft.OpenApi.Tests/Writers/OpenApiJsonWriterTests.cs +++ b/test/Microsoft.OpenApi.Tests/Writers/OpenApiJsonWriterTests.cs @@ -12,6 +12,7 @@ using System.Text.Json; using System.Text.Json.Nodes; using System.Text.Json.Serialization; +using System.Threading.Tasks; using FluentAssertions; using Microsoft.OpenApi.Any; using Microsoft.OpenApi.Models; @@ -48,7 +49,7 @@ from shouldBeTerse in shouldProduceTerseOutputValues [Theory] [MemberData(nameof(WriteStringListAsJsonShouldMatchExpectedTestCases))] - public void WriteStringListAsJsonShouldMatchExpected(string[] stringValues, bool produceTerseOutput) + public async Task WriteStringListAsJsonShouldMatchExpected(string[] stringValues, bool produceTerseOutput) { // Arrange var outputString = new StringWriter(CultureInfo.InvariantCulture); @@ -62,7 +63,7 @@ public void WriteStringListAsJsonShouldMatchExpected(string[] stringValues, bool } writer.WriteEndArray(); - writer.Flush(); + await writer.FlushAsync(); var parsedObject = JsonSerializer.Deserialize>(outputString.GetStringBuilder().ToString()); var expectedObject = diff --git a/test/Microsoft.OpenApi.Tests/Writers/OpenApiWriterAnyExtensionsTests.cs b/test/Microsoft.OpenApi.Tests/Writers/OpenApiWriterAnyExtensionsTests.cs index 2d966e8a5..69b176645 100644 --- a/test/Microsoft.OpenApi.Tests/Writers/OpenApiWriterAnyExtensionsTests.cs +++ b/test/Microsoft.OpenApi.Tests/Writers/OpenApiWriterAnyExtensionsTests.cs @@ -264,7 +264,7 @@ private static async Task WriteAsJsonAsync(JsonNode any, bool produceTer new() { Terse = produceTerseOutput }); writer.WriteAny(any); - writer.Flush(); + await writer.FlushAsync(); stream.Position = 0; // Act diff --git a/test/Microsoft.OpenApi.Tests/Writers/OpenApiYamlWriterTests.cs b/test/Microsoft.OpenApi.Tests/Writers/OpenApiYamlWriterTests.cs index f088a3d75..7d07e51ef 100644 --- a/test/Microsoft.OpenApi.Tests/Writers/OpenApiYamlWriterTests.cs +++ b/test/Microsoft.OpenApi.Tests/Writers/OpenApiYamlWriterTests.cs @@ -6,6 +6,7 @@ using System.Collections.Generic; using System.Globalization; using System.IO; +using System.Threading.Tasks; using FluentAssertions; using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Writers; @@ -57,7 +58,7 @@ public static IEnumerable WriteStringListAsYamlShouldMatchExpectedTest [Theory] [MemberData(nameof(WriteStringListAsYamlShouldMatchExpectedTestCases))] - public void WriteStringListAsYamlShouldMatchExpected(string[] stringValues, string expectedYaml) + public async Task WriteStringListAsYamlShouldMatchExpected(string[] stringValues, string expectedYaml) { // Arrange var outputString = new StringWriter(CultureInfo.InvariantCulture); @@ -71,7 +72,7 @@ public void WriteStringListAsYamlShouldMatchExpected(string[] stringValues, stri } writer.WriteEndArray(); - writer.Flush(); + await writer.FlushAsync(); var actualYaml = outputString.GetStringBuilder() .ToString() From a201aa237c39ab6748db0bfebd7d8c7be7ce4530 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Wed, 8 Jan 2025 17:27:40 -0500 Subject: [PATCH 40/90] feat: adds a net8 target to benefit from all the conditional compilation Signed-off-by: Vincent Biret --- src/Microsoft.OpenApi/Microsoft.OpenApi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi/Microsoft.OpenApi.csproj b/src/Microsoft.OpenApi/Microsoft.OpenApi.csproj index e0b815f5d..8753755ac 100644 --- a/src/Microsoft.OpenApi/Microsoft.OpenApi.csproj +++ b/src/Microsoft.OpenApi/Microsoft.OpenApi.csproj @@ -1,6 +1,6 @@  - netstandard2.0 + netstandard2.0;net8.0 Latest true 2.0.0-preview4 From f517deb6c7f68947a4a25da5b76ed1ee94d307e2 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Wed, 8 Jan 2025 17:40:20 -0500 Subject: [PATCH 41/90] fix: potential NRT for net8 build --- src/Microsoft.OpenApi/Models/OpenApiComponents.cs | 2 +- src/Microsoft.OpenApi/Models/OpenApiDocument.cs | 15 +++++++++------ src/Microsoft.OpenApi/Models/OpenApiOperation.cs | 4 ++-- .../Reader/OpenApiModelFactory.cs | 4 ++++ 4 files changed, 16 insertions(+), 9 deletions(-) diff --git a/src/Microsoft.OpenApi/Models/OpenApiComponents.cs b/src/Microsoft.OpenApi/Models/OpenApiComponents.cs index 0db85ed77..5b43b5187 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiComponents.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiComponents.cs @@ -318,7 +318,7 @@ private void RenderComponents(IOpenApiWriter writer, Action schemas)) + if (loops.TryGetValue(typeof(OpenApiSchema), out var schemas)) { writer.WriteOptionalMap(OpenApiConstants.Schemas, Schemas, callback); } diff --git a/src/Microsoft.OpenApi/Models/OpenApiDocument.cs b/src/Microsoft.OpenApi/Models/OpenApiDocument.cs index 27296f47b..cf7e53cae 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiDocument.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiDocument.cs @@ -238,7 +238,7 @@ public void SerializeAsV2(IOpenApiWriter writer) { var loops = writer.GetSettings().LoopDetector.Loops; - if (loops.TryGetValue(typeof(OpenApiSchema), out List schemas)) + if (loops.TryGetValue(typeof(OpenApiSchema), out var schemas)) { var openApiSchemas = schemas.Cast().Distinct().ToList() .ToDictionary(k => k.Reference.Id); @@ -409,14 +409,15 @@ private static void WriteHostInfoV2(IOpenApiWriter writer, IList? return url; }) .Where( - u => Uri.Compare( + u => u is not null && + Uri.Compare( u, firstServerUrl, UriComponents.Host | UriComponents.Port | UriComponents.Path, UriFormat.SafeUnescaped, StringComparison.OrdinalIgnoreCase) == 0 && u.IsAbsoluteUri) - .Select(u => u.Scheme) + .Select(u => u!.Scheme) .Distinct() .ToList(); @@ -464,10 +465,12 @@ public async Task GetHashCodeAsync(CancellationToken cancellationToken = SerializeAsV3(openApiJsonWriter); await openApiJsonWriter.FlushAsync(cancellationToken).ConfigureAwait(false); +#if NET5_0_OR_GREATER + await cryptoStream.FlushFinalBlockAsync(cancellationToken).ConfigureAwait(false); +#else cryptoStream.FlushFinalBlock(); - var hash = sha.Hash; - - return ConvertByteArrayToString(hash); +#endif + return ConvertByteArrayToString(sha.Hash ?? []); } private static string ConvertByteArrayToString(byte[] hash) diff --git a/src/Microsoft.OpenApi/Models/OpenApiOperation.cs b/src/Microsoft.OpenApi/Models/OpenApiOperation.cs index 6182eda2b..f5fe32274 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiOperation.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiOperation.cs @@ -283,11 +283,11 @@ public void SerializeAsV2(IOpenApiWriter writer) { var produces = Responses .Where(static r => r.Value.Content != null) - .SelectMany(static r => r.Value.Content?.Keys) + .SelectMany(static r => r.Value.Content?.Keys ?? []) .Concat( Responses .Where(static r => r.Value.Reference is {HostDocument: not null}) - .SelectMany(static r => r.Value.Content?.Keys)) + .SelectMany(static r => r.Value.Content?.Keys ?? [])) .Distinct(StringComparer.OrdinalIgnoreCase) .ToArray(); diff --git a/src/Microsoft.OpenApi/Reader/OpenApiModelFactory.cs b/src/Microsoft.OpenApi/Reader/OpenApiModelFactory.cs index 31b939548..fea86f899 100644 --- a/src/Microsoft.OpenApi/Reader/OpenApiModelFactory.cs +++ b/src/Microsoft.OpenApi/Reader/OpenApiModelFactory.cs @@ -129,7 +129,11 @@ public static async Task LoadAsync(Stream input, string format = nul var result = await InternalLoadAsync(preparedStream, format, settings, cancellationToken).ConfigureAwait(false); if (!settings.LeaveStreamOpen) { +#if NETSTANDARD2_1_OR_GREATER || NETCOREAPP || NET5_0_OR_GREATER + await input.DisposeAsync().ConfigureAwait(false); +#else input.Dispose(); +#endif } return result; } From 1a1e0135e977440be91e64d14e3d2b094238facd Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Wed, 8 Jan 2025 17:48:45 -0500 Subject: [PATCH 42/90] fix: updates public API surface with net8 target --- .../Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt b/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt index b1a5cefa9..19d51a834 100644 --- a/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt +++ b/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt @@ -1,7 +1,7 @@ [assembly: System.Reflection.AssemblyMetadata("RepositoryUrl", "https://github.com/Microsoft/OpenAPI.NET")] [assembly: System.Runtime.CompilerServices.InternalsVisibleTo(@"Microsoft.OpenApi.Readers.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100957cb48387b2a5f54f5ce39255f18f26d32a39990db27cf48737afc6bc62759ba996b8a2bfb675d4e39f3d06ecb55a178b1b4031dcb2a767e29977d88cce864a0d16bfc1b3bebb0edf9fe285f10fffc0a85f93d664fa05af07faa3aad2e545182dbf787e3fd32b56aca95df1a3c4e75dec164a3f1a4c653d971b01ffc39eb3c4")] [assembly: System.Runtime.CompilerServices.InternalsVisibleTo(@"Microsoft.OpenApi.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100957cb48387b2a5f54f5ce39255f18f26d32a39990db27cf48737afc6bc62759ba996b8a2bfb675d4e39f3d06ecb55a178b1b4031dcb2a767e29977d88cce864a0d16bfc1b3bebb0edf9fe285f10fffc0a85f93d664fa05af07faa3aad2e545182dbf787e3fd32b56aca95df1a3c4e75dec164a3f1a4c653d971b01ffc39eb3c4")] -[assembly: System.Runtime.Versioning.TargetFramework(".NETStandard,Version=v2.0", FrameworkDisplayName=".NET Standard 2.0")] +[assembly: System.Runtime.Versioning.TargetFramework(".NETCoreApp,Version=v8.0", FrameworkDisplayName=".NET 8.0")] public static class IDiagnosticExtensions { public static void AddRange(this System.Collections.Generic.ICollection collection, System.Collections.Generic.IEnumerable enumerable) { } @@ -148,6 +148,7 @@ namespace Microsoft.OpenApi.Extensions { public static class EnumExtensions { + [System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessage("Trimming", "IL2075", Justification="Fields are never trimmed for enum types.")] public static T GetAttributeOfType(this System.Enum enumValue) where T : System.Attribute { } public static string GetDisplayName(this System.Enum enumValue) { } @@ -198,7 +199,7 @@ namespace Microsoft.OpenApi.Extensions } public static class StringExtensions { - public static T GetEnumFromDisplayName(this string displayName) { } + public static T GetEnumFromDisplayName<[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicFields)] T>(this string displayName) { } } } namespace Microsoft.OpenApi.Interfaces From d405592979bd18d95cdbadf99fd75df680eea499 Mon Sep 17 00:00:00 2001 From: Marius Thesing Date: Fri, 10 Jan 2025 18:13:05 +0100 Subject: [PATCH 43/90] make IDiagnosticExtensions internal and fix namespace --- .../Reader/OpenApiDiagnostic.cs | 30 +++++++++---------- .../PublicApi/PublicApi.approved.txt | 4 --- 2 files changed, 15 insertions(+), 19 deletions(-) diff --git a/src/Microsoft.OpenApi/Reader/OpenApiDiagnostic.cs b/src/Microsoft.OpenApi/Reader/OpenApiDiagnostic.cs index 9f09bb457..5340d2aef 100644 --- a/src/Microsoft.OpenApi/Reader/OpenApiDiagnostic.cs +++ b/src/Microsoft.OpenApi/Reader/OpenApiDiagnostic.cs @@ -48,26 +48,26 @@ public void AppendDiagnostic(OpenApiDiagnostic diagnosticToAdd, string fileNameT } } } -} -/// -/// Extension class for IList to add the Method "AddRange" used above -/// -public static class IDiagnosticExtensions -{ /// - /// Extension method for IList so that another list can be added to the current list. + /// Extension class for IList to add the Method "AddRange" used above /// - /// - /// - /// - public static void AddRange(this ICollection collection, IEnumerable enumerable) + internal static class IDiagnosticExtensions { - if (collection is null || enumerable is null) return; - - foreach (var cur in enumerable) + /// + /// Extension method for IList so that another list can be added to the current list. + /// + /// + /// + /// + public static void AddRange(this ICollection collection, IEnumerable enumerable) { - collection.Add(cur); + if (collection is null || enumerable is null) return; + + foreach (var cur in enumerable) + { + collection.Add(cur); + } } } } diff --git a/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt b/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt index 3143b28b6..beae10400 100644 --- a/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt +++ b/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt @@ -2,10 +2,6 @@ [assembly: System.Runtime.CompilerServices.InternalsVisibleTo(@"Microsoft.OpenApi.Readers.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100957cb48387b2a5f54f5ce39255f18f26d32a39990db27cf48737afc6bc62759ba996b8a2bfb675d4e39f3d06ecb55a178b1b4031dcb2a767e29977d88cce864a0d16bfc1b3bebb0edf9fe285f10fffc0a85f93d664fa05af07faa3aad2e545182dbf787e3fd32b56aca95df1a3c4e75dec164a3f1a4c653d971b01ffc39eb3c4")] [assembly: System.Runtime.CompilerServices.InternalsVisibleTo(@"Microsoft.OpenApi.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100957cb48387b2a5f54f5ce39255f18f26d32a39990db27cf48737afc6bc62759ba996b8a2bfb675d4e39f3d06ecb55a178b1b4031dcb2a767e29977d88cce864a0d16bfc1b3bebb0edf9fe285f10fffc0a85f93d664fa05af07faa3aad2e545182dbf787e3fd32b56aca95df1a3c4e75dec164a3f1a4c653d971b01ffc39eb3c4")] [assembly: System.Runtime.Versioning.TargetFramework(".NETCoreApp,Version=v8.0", FrameworkDisplayName=".NET 8.0")] -public static class IDiagnosticExtensions -{ - public static void AddRange(this System.Collections.Generic.ICollection collection, System.Collections.Generic.IEnumerable enumerable) { } -} namespace Microsoft.OpenApi.Any { public class OpenApiAny : Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiExtension From a398fc4d4c86ee42504d73a0c8499954a0d73d8c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 10 Jan 2025 21:23:16 +0000 Subject: [PATCH 44/90] chore(deps): bump xunit.runner.visualstudio from 3.0.0 to 3.0.1 Bumps [xunit.runner.visualstudio](https://github.com/xunit/visualstudio.xunit) from 3.0.0 to 3.0.1. - [Release notes](https://github.com/xunit/visualstudio.xunit/releases) - [Commits](https://github.com/xunit/visualstudio.xunit/compare/3.0.0...3.0.1) --- updated-dependencies: - dependency-name: xunit.runner.visualstudio dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- .../Microsoft.OpenApi.Readers.Tests.csproj | 2 +- test/Microsoft.OpenApi.Tests/Microsoft.OpenApi.Tests.csproj | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index 2a614ea53..ad4dff3fb 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -15,7 +15,7 @@ - + diff --git a/test/Microsoft.OpenApi.Readers.Tests/Microsoft.OpenApi.Readers.Tests.csproj b/test/Microsoft.OpenApi.Readers.Tests/Microsoft.OpenApi.Readers.Tests.csproj index c2dcf4613..02033b3d2 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/Microsoft.OpenApi.Readers.Tests.csproj +++ b/test/Microsoft.OpenApi.Readers.Tests/Microsoft.OpenApi.Readers.Tests.csproj @@ -21,7 +21,7 @@ - + diff --git a/test/Microsoft.OpenApi.Tests/Microsoft.OpenApi.Tests.csproj b/test/Microsoft.OpenApi.Tests/Microsoft.OpenApi.Tests.csproj index 2c4eb6c43..7c596c34f 100644 --- a/test/Microsoft.OpenApi.Tests/Microsoft.OpenApi.Tests.csproj +++ b/test/Microsoft.OpenApi.Tests/Microsoft.OpenApi.Tests.csproj @@ -16,7 +16,7 @@ - + From 25765f9f02ec3fbae8d5d1073300429a422387c8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 13 Jan 2025 21:54:10 +0000 Subject: [PATCH 45/90] chore(deps): bump docker/build-push-action from 6.10.0 to 6.11.0 Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 6.10.0 to 6.11.0. - [Release notes](https://github.com/docker/build-push-action/releases) - [Commits](https://github.com/docker/build-push-action/compare/v6.10.0...v6.11.0) --- updated-dependencies: - dependency-name: docker/build-push-action dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .github/workflows/docker.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 7e81a456d..f2aa17fb8 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -30,13 +30,13 @@ jobs: id: getversion - name: Push to registry - Nightly if: ${{ github.ref == 'refs/heads/dev' }} - uses: docker/build-push-action@v6.10.0 + uses: docker/build-push-action@v6.11.0 with: push: true tags: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:nightly - name: Push to registry - Release if: ${{ github.ref == 'refs/heads/main' || github.ref == 'refs/heads/support/v1' }} - uses: docker/build-push-action@v6.10.0 + uses: docker/build-push-action@v6.11.0 with: push: true tags: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest,${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.getversion.outputs.version }} From 8178037174cb524d3d66e102c3dfa4c119aeccca Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 14 Jan 2025 21:28:42 +0000 Subject: [PATCH 46/90] chore(deps): bump Microsoft.Extensions.Logging, Microsoft.Extensions.Logging.Abstractions and Microsoft.Extensions.Logging.Debug Bumps [Microsoft.Extensions.Logging](https://github.com/dotnet/runtime), [Microsoft.Extensions.Logging.Abstractions](https://github.com/dotnet/runtime) and [Microsoft.Extensions.Logging.Debug](https://github.com/dotnet/runtime). These dependencies needed to be updated together. Updates `Microsoft.Extensions.Logging` from 9.0.0 to 9.0.1 - [Release notes](https://github.com/dotnet/runtime/releases) - [Commits](https://github.com/dotnet/runtime/compare/v9.0.0...v9.0.1) Updates `Microsoft.Extensions.Logging.Abstractions` from 9.0.0 to 9.0.1 - [Release notes](https://github.com/dotnet/runtime/releases) - [Commits](https://github.com/dotnet/runtime/compare/v9.0.0...v9.0.1) Updates `Microsoft.Extensions.Logging.Debug` from 8.0.1 to 9.0.1 - [Release notes](https://github.com/dotnet/runtime/releases) - [Commits](https://github.com/dotnet/runtime/compare/v8.0.1...v9.0.1) --- updated-dependencies: - dependency-name: Microsoft.Extensions.Logging dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: Microsoft.Extensions.Logging.Abstractions dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: Microsoft.Extensions.Logging.Debug dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 52672405e..46c9a1977 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -29,10 +29,10 @@ - - + + - + runtime; build; native; contentfiles; analyzers; buildtransitive all From 3311cb892fb6c5132579fc21d4fda14d941dafa7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 14 Jan 2025 21:29:49 +0000 Subject: [PATCH 47/90] chore(deps): bump Verify.Xunit from 28.8.1 to 28.9.0 Bumps [Verify.Xunit](https://github.com/VerifyTests/Verify) from 28.8.1 to 28.9.0. - [Release notes](https://github.com/VerifyTests/Verify/releases) - [Commits](https://github.com/VerifyTests/Verify/commits/28.9.0) --- updated-dependencies: - dependency-name: Verify.Xunit dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- test/Microsoft.OpenApi.Tests/Microsoft.OpenApi.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Tests/Microsoft.OpenApi.Tests.csproj b/test/Microsoft.OpenApi.Tests/Microsoft.OpenApi.Tests.csproj index 7c596c34f..60b5f8eb8 100644 --- a/test/Microsoft.OpenApi.Tests/Microsoft.OpenApi.Tests.csproj +++ b/test/Microsoft.OpenApi.Tests/Microsoft.OpenApi.Tests.csproj @@ -14,7 +14,7 @@ - + From 105b029233c48570ccd33c9c6e9947873a7340c1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 14 Jan 2025 21:30:47 +0000 Subject: [PATCH 48/90] chore(deps): bump System.Formats.Asn1 from 9.0.0 to 9.0.1 Bumps [System.Formats.Asn1](https://github.com/dotnet/runtime) from 9.0.0 to 9.0.1. - [Release notes](https://github.com/dotnet/runtime/releases) - [Commits](https://github.com/dotnet/runtime/compare/v9.0.0...v9.0.1) --- updated-dependencies: - dependency-name: System.Formats.Asn1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Workbench.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Workbench/Microsoft.OpenApi.Workbench.csproj b/src/Microsoft.OpenApi.Workbench/Microsoft.OpenApi.Workbench.csproj index ab6c09b54..b8b9633c0 100644 --- a/src/Microsoft.OpenApi.Workbench/Microsoft.OpenApi.Workbench.csproj +++ b/src/Microsoft.OpenApi.Workbench/Microsoft.OpenApi.Workbench.csproj @@ -15,7 +15,7 @@ - + From 45a544e1c8ed9f32b5d47e92584e7cfcf4e540ac Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Wed, 15 Jan 2025 11:36:44 +0300 Subject: [PATCH 49/90] Enable trimming for clients using net5 or higher --- src/Microsoft.OpenApi.Readers/Microsoft.OpenApi.Readers.csproj | 1 + src/Microsoft.OpenApi/Microsoft.OpenApi.csproj | 1 + 2 files changed, 2 insertions(+) diff --git a/src/Microsoft.OpenApi.Readers/Microsoft.OpenApi.Readers.csproj b/src/Microsoft.OpenApi.Readers/Microsoft.OpenApi.Readers.csproj index 94f633208..3b9ef012b 100644 --- a/src/Microsoft.OpenApi.Readers/Microsoft.OpenApi.Readers.csproj +++ b/src/Microsoft.OpenApi.Readers/Microsoft.OpenApi.Readers.csproj @@ -7,6 +7,7 @@ 2.0.0-preview4 OpenAPI.NET Readers for JSON and YAML documents true + true true NU5048 diff --git a/src/Microsoft.OpenApi/Microsoft.OpenApi.csproj b/src/Microsoft.OpenApi/Microsoft.OpenApi.csproj index 8753755ac..e071cff42 100644 --- a/src/Microsoft.OpenApi/Microsoft.OpenApi.csproj +++ b/src/Microsoft.OpenApi/Microsoft.OpenApi.csproj @@ -6,6 +6,7 @@ 2.0.0-preview4 .NET models with JSON and YAML writers for OpenAPI specification true + true true NU5048 From a5e9058d90b7845bea5cb2f14eb9c7d962c5a8c9 Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Wed, 15 Jan 2025 11:38:03 +0300 Subject: [PATCH 50/90] Add a reference to readers --- .../Microsoft.OpenApi.Trimming.Tests.csproj | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Trimming.Tests/Microsoft.OpenApi.Trimming.Tests.csproj b/test/Microsoft.OpenApi.Trimming.Tests/Microsoft.OpenApi.Trimming.Tests.csproj index 08f51d715..68c02953d 100644 --- a/test/Microsoft.OpenApi.Trimming.Tests/Microsoft.OpenApi.Trimming.Tests.csproj +++ b/test/Microsoft.OpenApi.Trimming.Tests/Microsoft.OpenApi.Trimming.Tests.csproj @@ -4,6 +4,7 @@ net8.0 enable enable + true true false true @@ -14,7 +15,8 @@ - + + From 1093d9380c9b51b40065f5ccc74cefc96f3600cf Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Wed, 15 Jan 2025 12:29:21 +0300 Subject: [PATCH 51/90] Use JsonSerializer context for source generation; compatible with AOT --- src/Microsoft.OpenApi/Reader/ParseNodes/MapNode.cs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi/Reader/ParseNodes/MapNode.cs b/src/Microsoft.OpenApi/Reader/ParseNodes/MapNode.cs index 919f1d85c..a9f7c1394 100644 --- a/src/Microsoft.OpenApi/Reader/ParseNodes/MapNode.cs +++ b/src/Microsoft.OpenApi/Reader/ParseNodes/MapNode.cs @@ -8,6 +8,7 @@ using System.Linq; using System.Text.Json; using System.Text.Json.Nodes; +using System.Text.Json.Serialization; using Microsoft.OpenApi.Any; using Microsoft.OpenApi.Exceptions; using Microsoft.OpenApi.Interfaces; @@ -114,7 +115,7 @@ IEnumerator IEnumerable.GetEnumerator() public override string GetRaw() { - var x = JsonSerializer.Serialize(_node); + var x = JsonSerializer.Serialize(_node, SourceGenerationContext.Default.JsonObject); return x; } @@ -176,4 +177,7 @@ public override JsonNode CreateAny() return _node; } } + + [JsonSerializable(typeof(JsonObject))] + internal partial class SourceGenerationContext : JsonSerializerContext { } } From 8ebab68b308e39c9cf4961b22364ef53f459ba7d Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Wed, 15 Jan 2025 12:55:38 +0300 Subject: [PATCH 52/90] Annotate enumType param to preserve metadata during trimming --- src/Microsoft.OpenApi/Extensions/StringExtensions.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi/Extensions/StringExtensions.cs b/src/Microsoft.OpenApi/Extensions/StringExtensions.cs index 1678f26dd..f272bfea9 100644 --- a/src/Microsoft.OpenApi/Extensions/StringExtensions.cs +++ b/src/Microsoft.OpenApi/Extensions/StringExtensions.cs @@ -45,7 +45,7 @@ internal static class StringExtensions result = default; return false; } - private static ReadOnlyDictionary GetEnumValues(Type enumType) where T : Enum + private static ReadOnlyDictionary GetEnumValues([DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicFields)] Type enumType) where T : Enum { var result = new Dictionary(StringComparer.OrdinalIgnoreCase); foreach (var field in enumType.GetFields(BindingFlags.Public | BindingFlags.Static)) From ad1d5d75e6c3060a2d5c12a6395af9c1b778fd21 Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Wed, 15 Jan 2025 12:56:15 +0300 Subject: [PATCH 53/90] simplify code --- .../Validations/Rules/RuleHelpers.cs | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/src/Microsoft.OpenApi/Validations/Rules/RuleHelpers.cs b/src/Microsoft.OpenApi/Validations/Rules/RuleHelpers.cs index 4e05c44fd..61b9d3a0c 100644 --- a/src/Microsoft.OpenApi/Validations/Rules/RuleHelpers.cs +++ b/src/Microsoft.OpenApi/Validations/Rules/RuleHelpers.cs @@ -52,7 +52,7 @@ public static void ValidateDataTypeMismatch( } // convert value to JsonElement and access the ValueKind property to determine the type. - var jsonElement = JsonDocument.Parse(JsonSerializer.Serialize(value)).RootElement; + var valueKind = value.GetValueKind(); var type = schema.Type.ToIdentifier(); var format = schema.Format; @@ -60,7 +60,7 @@ public static void ValidateDataTypeMismatch( // Before checking the type, check first if the schema allows null. // If so and the data given is also null, this is allowed for any type. - if (nullable && jsonElement.ValueKind is JsonValueKind.Null) + if (nullable && valueKind is JsonValueKind.Null) { return; } @@ -70,7 +70,7 @@ public static void ValidateDataTypeMismatch( // It is not against the spec to have a string representing an object value. // To represent examples of media types that cannot naturally be represented in JSON or YAML, // a string value can contain the example with escaping where necessary - if (jsonElement.ValueKind is JsonValueKind.String) + if (valueKind is JsonValueKind.String) { return; } @@ -110,7 +110,7 @@ public static void ValidateDataTypeMismatch( // It is not against the spec to have a string representing an array value. // To represent examples of media types that cannot naturally be represented in JSON or YAML, // a string value can contain the example with escaping where necessary - if (jsonElement.ValueKind is JsonValueKind.String) + if (valueKind is JsonValueKind.String) { return; } @@ -138,7 +138,7 @@ public static void ValidateDataTypeMismatch( if (type is "integer" or "number" && format is "int32") { - if (jsonElement.ValueKind is not JsonValueKind.Number) + if (valueKind is not JsonValueKind.Number) { context.CreateWarning( ruleName, @@ -150,7 +150,7 @@ public static void ValidateDataTypeMismatch( if (type is "integer" or "number" && format is "int64") { - if (jsonElement.ValueKind is not JsonValueKind.Number) + if (valueKind is not JsonValueKind.Number) { context.CreateWarning( ruleName, @@ -162,7 +162,7 @@ public static void ValidateDataTypeMismatch( if (type is "integer") { - if (jsonElement.ValueKind is not JsonValueKind.Number) + if (valueKind is not JsonValueKind.Number) { context.CreateWarning( ruleName, @@ -174,7 +174,7 @@ public static void ValidateDataTypeMismatch( if (type is "number" && format is "float") { - if (jsonElement.ValueKind is not JsonValueKind.Number) + if (valueKind is not JsonValueKind.Number) { context.CreateWarning( ruleName, @@ -186,7 +186,7 @@ public static void ValidateDataTypeMismatch( if (type is "number" && format is "double") { - if (jsonElement.ValueKind is not JsonValueKind.Number) + if (valueKind is not JsonValueKind.Number) { context.CreateWarning( ruleName, @@ -198,7 +198,7 @@ public static void ValidateDataTypeMismatch( if (type is "number") { - if (jsonElement.ValueKind is not JsonValueKind.Number) + if (valueKind is not JsonValueKind.Number) { context.CreateWarning( ruleName, @@ -210,7 +210,7 @@ public static void ValidateDataTypeMismatch( if (type is "string" && format is "byte") { - if (jsonElement.ValueKind is not JsonValueKind.String) + if (valueKind is not JsonValueKind.String) { context.CreateWarning( ruleName, @@ -222,7 +222,7 @@ public static void ValidateDataTypeMismatch( if (type is "string" && format is "date") { - if (jsonElement.ValueKind is not JsonValueKind.String) + if (valueKind is not JsonValueKind.String) { context.CreateWarning( ruleName, @@ -234,7 +234,7 @@ public static void ValidateDataTypeMismatch( if (type is "string" && format is "date-time") { - if (jsonElement.ValueKind is not JsonValueKind.String) + if (valueKind is not JsonValueKind.String) { context.CreateWarning( ruleName, @@ -246,7 +246,7 @@ public static void ValidateDataTypeMismatch( if (type is "string" && format is "password") { - if (jsonElement.ValueKind is not JsonValueKind.String) + if (valueKind is not JsonValueKind.String) { context.CreateWarning( ruleName, @@ -258,7 +258,7 @@ public static void ValidateDataTypeMismatch( if (type is "string") { - if (jsonElement.ValueKind is not JsonValueKind.String) + if (valueKind is not JsonValueKind.String) { context.CreateWarning( ruleName, @@ -270,7 +270,7 @@ public static void ValidateDataTypeMismatch( if (type is "boolean") { - if (jsonElement.ValueKind is not JsonValueKind.True && jsonElement.ValueKind is not JsonValueKind.False) + if (valueKind is not JsonValueKind.True && valueKind is not JsonValueKind.False) { context.CreateWarning( ruleName, From e8099450b80e4f9120c1c8ebea38daa077b184f5 Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Wed, 15 Jan 2025 14:12:54 +0300 Subject: [PATCH 54/90] Upgrade TFM and update API --- src/Microsoft.OpenApi.Readers/Microsoft.OpenApi.Readers.csproj | 2 +- test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Readers/Microsoft.OpenApi.Readers.csproj b/src/Microsoft.OpenApi.Readers/Microsoft.OpenApi.Readers.csproj index 3b9ef012b..cd1b4d2ae 100644 --- a/src/Microsoft.OpenApi.Readers/Microsoft.OpenApi.Readers.csproj +++ b/src/Microsoft.OpenApi.Readers/Microsoft.OpenApi.Readers.csproj @@ -1,6 +1,6 @@ - netstandard2.0;net6.0; + netstandard2.0;net8.0; latest true diff --git a/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt b/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt index beae10400..317f1965c 100644 --- a/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt +++ b/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt @@ -1,3 +1,4 @@ +[assembly: System.Reflection.AssemblyMetadata("IsTrimmable", "True")] [assembly: System.Reflection.AssemblyMetadata("RepositoryUrl", "https://github.com/Microsoft/OpenAPI.NET")] [assembly: System.Runtime.CompilerServices.InternalsVisibleTo(@"Microsoft.OpenApi.Readers.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100957cb48387b2a5f54f5ce39255f18f26d32a39990db27cf48737afc6bc62759ba996b8a2bfb675d4e39f3d06ecb55a178b1b4031dcb2a767e29977d88cce864a0d16bfc1b3bebb0edf9fe285f10fffc0a85f93d664fa05af07faa3aad2e545182dbf787e3fd32b56aca95df1a3c4e75dec164a3f1a4c653d971b01ffc39eb3c4")] [assembly: System.Runtime.CompilerServices.InternalsVisibleTo(@"Microsoft.OpenApi.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100957cb48387b2a5f54f5ce39255f18f26d32a39990db27cf48737afc6bc62759ba996b8a2bfb675d4e39f3d06ecb55a178b1b4031dcb2a767e29977d88cce864a0d16bfc1b3bebb0edf9fe285f10fffc0a85f93d664fa05af07faa3aad2e545182dbf787e3fd32b56aca95df1a3c4e75dec164a3f1a4c653d971b01ffc39eb3c4")] From 74f2c4388807b2e691b1d50c79ed49ab02d32863 Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Wed, 15 Jan 2025 14:31:20 +0300 Subject: [PATCH 55/90] Add workflow to validate project for trimming --- .github/workflows/ci-cd.yml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/.github/workflows/ci-cd.yml b/.github/workflows/ci-cd.yml index 13a34f171..ff11d7dd5 100644 --- a/.github/workflows/ci-cd.yml +++ b/.github/workflows/ci-cd.yml @@ -36,3 +36,18 @@ jobs: shell: pwsh run: | dotnet test Microsoft.OpenApi.sln -c Release -v n + + validate-trimming: + name: Validate Project for Trimming + runs-on: windows-latest + steps: + - uses: actions/checkout@v4.1.7 + + - name: Setup .NET + uses: actions/setup-dotnet@v4 + with: + dotnet-version: 8.x + + - name: Validate Trimming warnings + run: dotnet publish -c Release -r win-x64 /p:TreatWarningsAsErrors=true /warnaserror -f net8.0 + working-directory: ./test/Microsoft.OpenApi.Trimming.Tests From 5d56fac2f9958b6cabeb1bece3e530b0145a8a20 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Wed, 15 Jan 2025 07:26:17 -0500 Subject: [PATCH 56/90] Update .github/workflows/ci-cd.yml --- .github/workflows/ci-cd.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci-cd.yml b/.github/workflows/ci-cd.yml index ff11d7dd5..2ddce58b7 100644 --- a/.github/workflows/ci-cd.yml +++ b/.github/workflows/ci-cd.yml @@ -41,7 +41,7 @@ jobs: name: Validate Project for Trimming runs-on: windows-latest steps: - - uses: actions/checkout@v4.1.7 + - uses: actions/checkout@v4 - name: Setup .NET uses: actions/setup-dotnet@v4 From 78802161a037a9df5a13616afa9278f081279b55 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Wed, 15 Jan 2025 09:07:00 -0500 Subject: [PATCH 57/90] chore: migrates of FA to xunit first batch Signed-off-by: Vincent Biret --- .../OpenApiDiagnosticTests.cs | 13 +++--- .../UnsupportedSpecVersionTests.cs | 3 +- .../ParseNodeTests.cs | 9 ++-- .../ConvertToOpenApiReferenceV2Tests.cs | 37 ++++++++--------- .../ConvertToOpenApiReferenceV3Tests.cs | 41 +++++++++---------- .../TestCustomExtension.cs | 7 ++-- .../V2Tests/OpenApiContactTests.cs | 7 ++-- .../V2Tests/OpenApiParameterTests.cs | 2 +- .../V3Tests/OpenApiDocumentTests.cs | 4 +- .../V3Tests/OpenApiExampleTests.cs | 2 +- .../Expressions/RuntimeExpressionTests.cs | 6 +-- .../Models/OpenApiReferenceTests.cs | 2 +- .../OpenApiHeaderValidationTests.cs | 4 +- .../OpenApiMediaTypeValidationTests.cs | 4 +- .../OpenApiParameterValidationTests.cs | 9 ++-- .../OpenApiPathsValidationTests.cs | 2 +- .../OpenApiSchemaValidationTests.cs | 18 ++++---- .../Writers/OpenApiJsonWriterTests.cs | 5 +-- .../OpenApiWriterAnyExtensionsTests.cs | 16 ++++---- .../OpenApiWriterSpecialCharacterTests.cs | 11 +++-- .../Writers/OpenApiYamlWriterTests.cs | 9 ++-- 21 files changed, 97 insertions(+), 114 deletions(-) diff --git a/test/Microsoft.OpenApi.Readers.Tests/OpenApiReaderTests/OpenApiDiagnosticTests.cs b/test/Microsoft.OpenApi.Readers.Tests/OpenApiReaderTests/OpenApiDiagnosticTests.cs index 497de0088..667bedbd1 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/OpenApiReaderTests/OpenApiDiagnosticTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/OpenApiReaderTests/OpenApiDiagnosticTests.cs @@ -1,11 +1,8 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. -using System.Collections.Generic; using System.Threading.Tasks; using System; -using FluentAssertions; -using Microsoft.OpenApi.Exceptions; using Microsoft.OpenApi.Models; using Xunit; using System.IO; @@ -27,8 +24,8 @@ public async Task DetectedSpecificationVersionShouldBeV2_0() { var actual = await OpenApiDocument.LoadAsync("V2Tests/Samples/basic.v2.yaml"); - actual.Diagnostic.Should().NotBeNull(); - actual.Diagnostic.SpecificationVersion.Should().Be(OpenApiSpecVersion.OpenApi2_0); + Assert.NotNull(actual.Diagnostic); + Assert.Equal(OpenApiSpecVersion.OpenApi2_0, actual.Diagnostic.SpecificationVersion); } [Fact] @@ -36,8 +33,8 @@ public async Task DetectedSpecificationVersionShouldBeV3_0() { var actual = await OpenApiDocument.LoadAsync("V3Tests/Samples/OpenApiDocument/minimalDocument.yaml"); - actual.Diagnostic.Should().NotBeNull(); - actual.Diagnostic.SpecificationVersion.Should().Be(OpenApiSpecVersion.OpenApi3_0); + Assert.NotNull(actual.Diagnostic); + Assert.Equal(OpenApiSpecVersion.OpenApi3_0, actual.Diagnostic.SpecificationVersion); } [Fact] @@ -56,7 +53,7 @@ public async Task DiagnosticReportMergedForExternalReferenceAsync() Assert.NotNull(result); Assert.NotNull(result.Document.Workspace); - result.Diagnostic.Errors.Should().BeEmpty(); + Assert.Empty(result.Diagnostic.Errors); } } diff --git a/test/Microsoft.OpenApi.Readers.Tests/OpenApiReaderTests/UnsupportedSpecVersionTests.cs b/test/Microsoft.OpenApi.Readers.Tests/OpenApiReaderTests/UnsupportedSpecVersionTests.cs index 1f6cbb7e8..83d7c33d5 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/OpenApiReaderTests/UnsupportedSpecVersionTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/OpenApiReaderTests/UnsupportedSpecVersionTests.cs @@ -2,7 +2,6 @@ // Licensed under the MIT license. using System.Threading.Tasks; -using FluentAssertions; using Microsoft.OpenApi.Exceptions; using Microsoft.OpenApi.Models; using Xunit; @@ -21,7 +20,7 @@ public async Task ThrowOpenApiUnsupportedSpecVersionException() } catch (OpenApiUnsupportedSpecVersionException exception) { - exception.SpecificationVersion.Should().Be("1.0.0"); + Assert.Equal("1.0.0", exception.SpecificationVersion); } } } diff --git a/test/Microsoft.OpenApi.Readers.Tests/ParseNodeTests.cs b/test/Microsoft.OpenApi.Readers.Tests/ParseNodeTests.cs index 0e5eae1c8..e8d22a14a 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/ParseNodeTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/ParseNodeTests.cs @@ -2,7 +2,6 @@ // Licensed under the MIT license. using System.Collections.Generic; -using FluentAssertions; using Microsoft.OpenApi.Exceptions; using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Reader; @@ -33,9 +32,9 @@ public void BrokenSimpleList() var result = OpenApiDocument.Parse(input, "yaml"); - result.Diagnostic.Errors.Should().BeEquivalentTo(new List() { + Assert.Equivalent(new List() { new OpenApiError(new OpenApiReaderException("Expected a value.")) - }); + }, result.Diagnostic.Errors); } [Fact] @@ -59,12 +58,12 @@ public void BadSchema() var res= OpenApiDocument.Parse(input, "yaml"); - res.Diagnostic.Errors.Should().BeEquivalentTo(new List + Assert.Equivalent(new List { new(new OpenApiReaderException("schema must be a map/object") { Pointer = "#/paths/~1foo/get/responses/200/content/application~1json/schema" }) - }); + }, res.Diagnostic.Errors); } } } diff --git a/test/Microsoft.OpenApi.Readers.Tests/ReferenceService/ConvertToOpenApiReferenceV2Tests.cs b/test/Microsoft.OpenApi.Readers.Tests/ReferenceService/ConvertToOpenApiReferenceV2Tests.cs index abdbfcb9c..59c8a81f8 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/ReferenceService/ConvertToOpenApiReferenceV2Tests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/ReferenceService/ConvertToOpenApiReferenceV2Tests.cs @@ -1,7 +1,6 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. -using FluentAssertions; using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Reader; using Microsoft.OpenApi.Reader.V2; @@ -31,9 +30,9 @@ public void ParseExternalReferenceToV2OpenApi() var reference = versionService.ConvertToOpenApiReference(input, null); // Assert - reference.ExternalResource.Should().Be(externalResource); - reference.Type.Should().NotBeNull(); - reference.Id.Should().Be(id); + Assert.Equal(externalResource, reference.ExternalResource); + Assert.NotNull(reference.Type); + Assert.Equal(id, reference.Id); } [Fact] @@ -49,9 +48,9 @@ public void ParseExternalReference() var reference = versionService.ConvertToOpenApiReference(input, null); // Assert - reference.ExternalResource.Should().Be(externalResource); - reference.Type.Should().BeNull(); - reference.Id.Should().Be(id); + Assert.Equal(externalResource, reference.ExternalResource); + Assert.Null(reference.Type); + Assert.Equal(id, reference.Id); } [Fact] @@ -67,9 +66,9 @@ public void ParseLocalParameterReference() var reference = versionService.ConvertToOpenApiReference(input, referenceType); // Assert - reference.Type.Should().Be(referenceType); - reference.ExternalResource.Should().BeNull(); - reference.Id.Should().Be(id); + Assert.Equal(referenceType, reference.Type); + Assert.Null(reference.ExternalResource); + Assert.Equal(id, reference.Id); } [Fact] @@ -85,9 +84,9 @@ public void ParseLocalSchemaReference() var reference = versionService.ConvertToOpenApiReference(input, referenceType); // Assert - reference.Type.Should().Be(referenceType); - reference.ExternalResource.Should().BeNull(); - reference.Id.Should().Be(id); + Assert.Equal(referenceType, reference.Type); + Assert.Null(reference.ExternalResource); + Assert.Equal(id, reference.Id); } [Fact] @@ -103,9 +102,9 @@ public void ParseTagReference() var reference = versionService.ConvertToOpenApiReference(input, referenceType); // Assert - reference.Type.Should().Be(referenceType); - reference.ExternalResource.Should().BeNull(); - reference.Id.Should().Be(id); + Assert.Equal(referenceType, reference.Type); + Assert.Null(reference.ExternalResource); + Assert.Equal(id, reference.Id); } [Fact] @@ -121,9 +120,9 @@ public void ParseSecuritySchemeReference() var reference = versionService.ConvertToOpenApiReference(input, referenceType); // Assert - reference.Type.Should().Be(referenceType); - reference.ExternalResource.Should().BeNull(); - reference.Id.Should().Be(id); + Assert.Equal(referenceType, reference.Type); + Assert.Null(reference.ExternalResource); + Assert.Equal(id, reference.Id); } } } diff --git a/test/Microsoft.OpenApi.Readers.Tests/ReferenceService/ConvertToOpenApiReferenceV3Tests.cs b/test/Microsoft.OpenApi.Readers.Tests/ReferenceService/ConvertToOpenApiReferenceV3Tests.cs index 6f4d53acb..0104f5208 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/ReferenceService/ConvertToOpenApiReferenceV3Tests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/ReferenceService/ConvertToOpenApiReferenceV3Tests.cs @@ -1,7 +1,6 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. -using FluentAssertions; using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Reader; using Microsoft.OpenApi.Reader.V3; @@ -31,9 +30,9 @@ public void ParseExternalReference() var reference = versionService.ConvertToOpenApiReference(input, null); // Assert - reference.Type.Should().BeNull(); - reference.ExternalResource.Should().Be(externalResource); - reference.Id.Should().Be(id); + Assert.Null(reference.Type); + Assert.Equal(externalResource, reference.ExternalResource); + Assert.Equal(id, reference.Id); } [Fact] @@ -49,9 +48,9 @@ public void ParseLocalParameterReference() var reference = versionService.ConvertToOpenApiReference(input, referenceType); // Assert - reference.Type.Should().Be(referenceType); - reference.ExternalResource.Should().BeNull(); - reference.Id.Should().Be(id); + Assert.Equal(referenceType, reference.Type); + Assert.Null(reference.ExternalResource); + Assert.Equal(id, reference.Id); } [Fact] @@ -67,9 +66,9 @@ public void ParseLocalSchemaReference() var reference = versionService.ConvertToOpenApiReference(input, referenceType); // Assert - reference.Type.Should().Be(referenceType); - reference.ExternalResource.Should().BeNull(); - reference.Id.Should().Be(id); + Assert.Equal(referenceType, reference.Type); + Assert.Null(reference.ExternalResource); + Assert.Equal(id, reference.Id); } [Fact] @@ -85,9 +84,9 @@ public void ParseTagReference() var reference = versionService.ConvertToOpenApiReference(input, referenceType); // Assert - reference.Type.Should().Be(referenceType); - reference.ExternalResource.Should().BeNull(); - reference.Id.Should().Be(id); + Assert.Equal(referenceType, reference.Type); + Assert.Null(reference.ExternalResource); + Assert.Equal(id, reference.Id); } [Fact] @@ -103,9 +102,9 @@ public void ParseSecuritySchemeReference() var reference = versionService.ConvertToOpenApiReference(input, referenceType); // Assert - reference.Type.Should().Be(referenceType); - reference.ExternalResource.Should().BeNull(); - reference.Id.Should().Be(id); + Assert.Equal(referenceType, reference.Type); + Assert.Null(reference.ExternalResource); + Assert.Equal(id, reference.Id); } [Fact] @@ -120,8 +119,8 @@ public void ParseLocalFileReference() var reference = versionService.ConvertToOpenApiReference(input, referenceType); // Assert - reference.Type.Should().Be(referenceType); - reference.ExternalResource.Should().Be(input); + Assert.Equal(referenceType, reference.Type); + Assert.Equal(input, reference.ExternalResource); } [Fact] @@ -138,9 +137,9 @@ public void ParseExternalPathReference() var reference = versionService.ConvertToOpenApiReference(input, null); // Assert - reference.Type.Should().BeNull(); - reference.ExternalResource.Should().Be(externalResource); - reference.Id.Should().Be(id); + Assert.Null(reference.Type); + Assert.Equal(externalResource, reference.ExternalResource); + Assert.Equal(id, reference.Id); } } } diff --git a/test/Microsoft.OpenApi.Readers.Tests/TestCustomExtension.cs b/test/Microsoft.OpenApi.Readers.Tests/TestCustomExtension.cs index 9e7d19c7f..8de46ad64 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/TestCustomExtension.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/TestCustomExtension.cs @@ -2,7 +2,6 @@ // Licensed under the MIT license. using System.Text.Json.Nodes; -using FluentAssertions; using Microsoft.OpenApi.Interfaces; using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Reader; @@ -44,9 +43,9 @@ public void ParseCustomExtension() var fooExtension = actual.Document.Info.Extensions["x-foo"] as FooExtension; - fooExtension.Should().NotBeNull(); - fooExtension.Bar.Should().Be("hey"); - fooExtension.Baz.Should().Be("hi!"); + Assert.NotNull(fooExtension); + Assert.Equal("hey", fooExtension.Bar); + Assert.Equal("hi!", fooExtension.Baz); } } diff --git a/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiContactTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiContactTests.cs index 413d3ee7b..9533f8751 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiContactTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiContactTests.cs @@ -1,7 +1,6 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. -using FluentAssertions; using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Reader; using Xunit; @@ -26,15 +25,15 @@ public void ParseStringContactFragmentShouldSucceed() var contact = OpenApiModelFactory.Parse(input, OpenApiSpecVersion.OpenApi2_0, out var diagnostic); // Assert - diagnostic.Should().BeEquivalentTo(new OpenApiDiagnostic()); + Assert.Equivalent(new OpenApiDiagnostic(), diagnostic); - contact.Should().BeEquivalentTo( + Assert.Equivalent( new OpenApiContact { Email = "support@swagger.io", Name = "API Support", Url = new("http://www.swagger.io/support") - }); + }, contact); } } } diff --git a/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiParameterTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiParameterTests.cs index 0b4b1a77e..d89080f6d 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiParameterTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiParameterTests.cs @@ -33,7 +33,7 @@ public void ParseBodyParameterShouldSucceed() // Assert // Body parameter is currently not translated via LoadParameter. // This design may be revisited and this unit test may likely change. - parameter.Should().BeNull(); + Assert.Null(parameter); } [Fact] diff --git a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDocumentTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDocumentTests.cs index 864bb5aaa..68102328f 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDocumentTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDocumentTests.cs @@ -117,7 +117,7 @@ public async Task ParseBasicDocumentWithMultipleServersShouldSucceed() var path = System.IO.Path.Combine(SampleFolderPath, "basicDocumentWithMultipleServers.yaml"); var result = await OpenApiDocument.LoadAsync(path); - result.Diagnostic.Errors.Should().BeEmpty(); + Assert.Empty(result.Diagnostic.Errors); result.Document.Should().BeEquivalentTo( new OpenApiDocument { @@ -1409,7 +1409,7 @@ public void ParseBasicDocumentWithServerVariableAndNoDefaultShouldFail() public async Task ParseDocumentWithEmptyPathsSucceeds() { var result = await OpenApiDocument.LoadAsync(System.IO.Path.Combine(SampleFolderPath, "docWithEmptyPaths.yaml")); - result.Diagnostic.Errors.Should().BeEmpty(); + Assert.Empty(result.Diagnostic.Errors); } } } diff --git a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiExampleTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiExampleTests.cs index 633a0f688..95ee7076a 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiExampleTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiExampleTests.cs @@ -78,7 +78,7 @@ public async Task ParseAdvancedExampleShouldSucceed() public async Task ParseExampleForcedStringSucceed() { var result = await OpenApiDocument.LoadAsync(Path.Combine(SampleFolderPath, "explicitString.yaml")); - result.Diagnostic.Errors.Should().BeEmpty(); + Assert.Empty(result.Diagnostic.Errors); } } } diff --git a/test/Microsoft.OpenApi.Tests/Expressions/RuntimeExpressionTests.cs b/test/Microsoft.OpenApi.Tests/Expressions/RuntimeExpressionTests.cs index 70c7dc90d..fe6fde3d6 100644 --- a/test/Microsoft.OpenApi.Tests/Expressions/RuntimeExpressionTests.cs +++ b/test/Microsoft.OpenApi.Tests/Expressions/RuntimeExpressionTests.cs @@ -222,7 +222,7 @@ public void CompositeRuntimeExpressionWithMultipleRuntimeExpressionsAndFakeBrace var runtimeExpression = RuntimeExpression.Build(expression); // Assert - runtimeExpression.Should().NotBeNull(); + Assert.NotNull(runtimeExpression); runtimeExpression.Should().BeOfType(typeof(CompositeExpression)); var response = (CompositeExpression)runtimeExpression; response.Expression.Should().Be(expression); @@ -262,7 +262,7 @@ public void CompositeRuntimeExpressionWithoutRecognizedRuntimeExpressions(string var runtimeExpression = RuntimeExpression.Build(expression); // Assert - runtimeExpression.Should().NotBeNull(); + Assert.NotNull(runtimeExpression); runtimeExpression.Should().BeOfType(typeof(CompositeExpression)); var response = (CompositeExpression)runtimeExpression; response.Expression.Should().Be(expression); @@ -270,7 +270,7 @@ public void CompositeRuntimeExpressionWithoutRecognizedRuntimeExpressions(string var compositeExpression = runtimeExpression as CompositeExpression; // The whole string is treated as the template without any contained expressions. - compositeExpression.ContainedExpressions.Should().BeEmpty(); + Assert.Empty(compositeExpression.ContainedExpressions); } } } diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiReferenceTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiReferenceTests.cs index 4e6e47509..46d044c7c 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiReferenceTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiReferenceTests.cs @@ -29,7 +29,7 @@ public void SettingInternalReferenceForComponentsStyleReferenceShouldSucceed( }; // Assert - reference.ExternalResource.Should().BeNull(); + Assert.Null(reference.ExternalResource); reference.Type.Should().Be(type); reference.Id.Should().Be(id); diff --git a/test/Microsoft.OpenApi.Tests/Validations/OpenApiHeaderValidationTests.cs b/test/Microsoft.OpenApi.Tests/Validations/OpenApiHeaderValidationTests.cs index 25423ab1f..5f067a3b2 100644 --- a/test/Microsoft.OpenApi.Tests/Validations/OpenApiHeaderValidationTests.cs +++ b/test/Microsoft.OpenApi.Tests/Validations/OpenApiHeaderValidationTests.cs @@ -43,7 +43,7 @@ public void ValidateExampleShouldNotHaveDataTypeMismatchForSimpleSchema() var result = !warnings.Any(); // Assert - result.Should().BeFalse(); + Assert.False(result); } [Fact] @@ -102,7 +102,7 @@ public void ValidateExamplesShouldNotHaveDataTypeMismatchForSimpleSchema() var result = !warnings.Any(); // Assert - result.Should().BeTrue(); + Assert.True(result); } } } diff --git a/test/Microsoft.OpenApi.Tests/Validations/OpenApiMediaTypeValidationTests.cs b/test/Microsoft.OpenApi.Tests/Validations/OpenApiMediaTypeValidationTests.cs index 51a8e1795..a3729e0b1 100644 --- a/test/Microsoft.OpenApi.Tests/Validations/OpenApiMediaTypeValidationTests.cs +++ b/test/Microsoft.OpenApi.Tests/Validations/OpenApiMediaTypeValidationTests.cs @@ -39,7 +39,7 @@ public void ValidateExampleShouldNotHaveDataTypeMismatchForSimpleSchema() var result = !warnings.Any(); // Assert - result.Should().BeTrue(); + Assert.True(result); } [Fact] @@ -98,7 +98,7 @@ public void ValidateExamplesShouldNotHaveDataTypeMismatchForSimpleSchema() var result = !warnings.Any(); // Assert - result.Should().BeTrue(); + Assert.True(result); } } } diff --git a/test/Microsoft.OpenApi.Tests/Validations/OpenApiParameterValidationTests.cs b/test/Microsoft.OpenApi.Tests/Validations/OpenApiParameterValidationTests.cs index 3f380c7f1..83d1a2e1a 100644 --- a/test/Microsoft.OpenApi.Tests/Validations/OpenApiParameterValidationTests.cs +++ b/test/Microsoft.OpenApi.Tests/Validations/OpenApiParameterValidationTests.cs @@ -5,7 +5,6 @@ using System.Linq; using System.Text.Json.Nodes; using FluentAssertions; -using Microsoft.OpenApi.Any; using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Properties; @@ -88,7 +87,7 @@ public void ValidateExampleShouldNotHaveDataTypeMismatchForSimpleSchema() var result = !warnings.Any(); // Assert - result.Should().BeTrue(); + Assert.True(result); } [Fact] @@ -153,7 +152,7 @@ public void ValidateExamplesShouldNotHaveDataTypeMismatchForSimpleSchema() var result = !warnings.Any(); // Assert - result.Should().BeFalse(); + Assert.False(result); } [Fact] @@ -183,7 +182,7 @@ public void PathParameterNotInThePathShouldReturnAnError() var result = errors.Any(); // Assert - result.Should().BeTrue(); + Assert.True(result); errors.OfType().Select(e => e.RuleName).Should().BeEquivalentTo(new[] { "PathParameterShouldBeInThePath" @@ -226,7 +225,7 @@ public void PathParameterInThePathShouldBeOk() var result = errors.Any(); // Assert - result.Should().BeFalse(); + Assert.False(result); } } } diff --git a/test/Microsoft.OpenApi.Tests/Validations/OpenApiPathsValidationTests.cs b/test/Microsoft.OpenApi.Tests/Validations/OpenApiPathsValidationTests.cs index 6d0282748..bbe15c66e 100644 --- a/test/Microsoft.OpenApi.Tests/Validations/OpenApiPathsValidationTests.cs +++ b/test/Microsoft.OpenApi.Tests/Validations/OpenApiPathsValidationTests.cs @@ -60,7 +60,7 @@ public void ValidatePathsAreUniqueDoesNotConsiderMultiParametersAsIdentical() var errors = paths.Validate(ValidationRuleSet.GetDefaultRuleSet()); // Assert - errors.Should().BeEmpty(); + Assert.Empty(errors); } [Fact] public void ValidatePathsAreUniqueConsidersMultiParametersAsIdentical() diff --git a/test/Microsoft.OpenApi.Tests/Validations/OpenApiSchemaValidationTests.cs b/test/Microsoft.OpenApi.Tests/Validations/OpenApiSchemaValidationTests.cs index d2aa19590..9edd57c1e 100644 --- a/test/Microsoft.OpenApi.Tests/Validations/OpenApiSchemaValidationTests.cs +++ b/test/Microsoft.OpenApi.Tests/Validations/OpenApiSchemaValidationTests.cs @@ -5,14 +5,12 @@ using System.Collections.Generic; using System.Linq; using System.Text.Json.Nodes; -using FluentAssertions; using Microsoft.OpenApi.Any; using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Properties; using Microsoft.OpenApi.Services; using Microsoft.OpenApi.Validations.Rules; using Xunit; -using Microsoft.OpenApi.Extensions; namespace Microsoft.OpenApi.Validations.Tests { @@ -39,7 +37,7 @@ public void ValidateDefaultShouldNotHaveDataTypeMismatchForSimpleSchema() var result = !warnings.Any(); // Assert - result.Should().BeTrue(); + Assert.True(result); } [Fact] @@ -64,7 +62,7 @@ public void ValidateExampleAndDefaultShouldNotHaveDataTypeMismatchForSimpleSchem var expectedWarnings = warnings.Select(e => e.Message).ToList(); // Assert - result.Should().BeTrue(); + Assert.True(result); } [Fact] @@ -106,7 +104,7 @@ public void ValidateEnumShouldNotHaveDataTypeMismatchForSimpleSchema() var result = !warnings.Any(); // Assert - result.Should().BeTrue(); + Assert.True(result); } [Fact] @@ -184,7 +182,7 @@ public void ValidateDefaultShouldNotHaveDataTypeMismatchForComplexSchema() bool result = !warnings.Any(); // Assert - result.Should().BeFalse(); + Assert.False(result); } [Fact] @@ -214,13 +212,13 @@ public void ValidateSchemaRequiredFieldListMustContainThePropertySpecifiedInTheD var result = !errors.Any(); // Assert - result.Should().BeFalse(); - errors.Should().BeEquivalentTo(new List + Assert.False(result); + Assert.Equivalent(new List { new OpenApiValidatorError(nameof(OpenApiSchemaRules.ValidateSchemaDiscriminator),"#/schemas/schema1/discriminator", string.Format(SRResource.Validation_SchemaRequiredFieldListMustContainThePropertySpecifiedInTheDiscriminator, "schema1", "property1")) - }); + }, errors); } [Fact] @@ -275,7 +273,7 @@ public void ValidateOneOfSchemaPropertyNameContainsPropertySpecifiedInTheDiscrim var errors = validator.Errors; //Assert - errors.Should().BeEmpty(); + Assert.Empty(errors); } } } diff --git a/test/Microsoft.OpenApi.Tests/Writers/OpenApiJsonWriterTests.cs b/test/Microsoft.OpenApi.Tests/Writers/OpenApiJsonWriterTests.cs index b9c41bf5f..54fb8cfb6 100644 --- a/test/Microsoft.OpenApi.Tests/Writers/OpenApiJsonWriterTests.cs +++ b/test/Microsoft.OpenApi.Tests/Writers/OpenApiJsonWriterTests.cs @@ -13,7 +13,6 @@ using System.Text.Json.Nodes; using System.Text.Json.Serialization; using System.Threading.Tasks; -using FluentAssertions; using Microsoft.OpenApi.Any; using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Writers; @@ -70,7 +69,7 @@ public async Task WriteStringListAsJsonShouldMatchExpected(string[] stringValues JsonSerializer.Deserialize>(JsonSerializer.Serialize(new List(stringValues))); // Assert - parsedObject.Should().BeEquivalentTo(expectedObject); + Assert.Equivalent(expectedObject, parsedObject); } public static IEnumerable WriteMapAsJsonShouldMatchExpectedTestCasesSimple() @@ -317,7 +316,7 @@ public void WriteDateTimeAsJsonShouldMatchExpected(DateTimeOffset dateTimeOffset var expectedString = JsonSerializer.Serialize(dateTimeOffset, _jsonSerializerOptions.Value); // Assert - writtenString.Should().Be(expectedString); + Assert.Equal(expectedString, writtenString); } [Fact] diff --git a/test/Microsoft.OpenApi.Tests/Writers/OpenApiWriterAnyExtensionsTests.cs b/test/Microsoft.OpenApi.Tests/Writers/OpenApiWriterAnyExtensionsTests.cs index 69b176645..a26173606 100644 --- a/test/Microsoft.OpenApi.Tests/Writers/OpenApiWriterAnyExtensionsTests.cs +++ b/test/Microsoft.OpenApi.Tests/Writers/OpenApiWriterAnyExtensionsTests.cs @@ -9,8 +9,6 @@ using System.Text.Json; using System.Text.Json.Nodes; using System.Threading.Tasks; -using FluentAssertions; -using Microsoft.OpenApi.Any; using Microsoft.OpenApi.Writers; using VerifyXunit; using Xunit; @@ -31,7 +29,7 @@ public async Task WriteOpenApiNullAsJsonWorksAsync(bool produceTerseOutput) var json = await WriteAsJsonAsync(null, produceTerseOutput); // Assert - json.Should().Be("null"); + Assert.Equal("null", json); } public static IEnumerable IntInputs @@ -59,7 +57,7 @@ public async Task WriteOpenApiIntegerAsJsonWorksAsync(int input, bool produceTer var json = await WriteAsJsonAsync(intValue, produceTerseOutput); // Assert - json.Should().Be(input.ToString()); + Assert.Equal(input.ToString(), json); } public static IEnumerable LongInputs @@ -87,7 +85,7 @@ public async Task WriteOpenApiLongAsJsonWorksAsync(long input, bool produceTerse var json = await WriteAsJsonAsync(longValue, produceTerseOutput); // Assert - json.Should().Be(input.ToString()); + Assert.Equal(input.ToString(), json); } public static IEnumerable FloatInputs @@ -115,7 +113,7 @@ public async Task WriteOpenApiFloatAsJsonWorksAsync(float input, bool produceTer var json = await WriteAsJsonAsync(floatValue, produceTerseOutput); // Assert - json.Should().Be(input.ToString()); + Assert.Equal(input.ToString(), json); } public static IEnumerable DoubleInputs @@ -143,7 +141,7 @@ public async Task WriteOpenApiDoubleAsJsonWorksAsync(double input, bool produceT var json = await WriteAsJsonAsync(doubleValue, produceTerseOutput); // Assert - json.Should().Be(input.ToString()); + Assert.Equal(input.ToString(), json); } public static IEnumerable StringifiedDateTimes @@ -174,7 +172,7 @@ public async Task WriteOpenApiDateTimeAsJsonWorksAsync(string inputString, bool var expectedJson = "\"" + input.ToString("o") + "\""; // Assert - json.Should().Be(expectedJson); + Assert.Equal(expectedJson, json); } public static IEnumerable BooleanInputs @@ -195,7 +193,7 @@ public async Task WriteOpenApiBooleanAsJsonWorksAsync(bool input, bool produceTe var json = await WriteAsJsonAsync(boolValue, produceTerseOutput); // Assert - json.Should().Be(input.ToString().ToLower()); + Assert.Equal(input.ToString().ToLower(), json); } [Theory] diff --git a/test/Microsoft.OpenApi.Tests/Writers/OpenApiWriterSpecialCharacterTests.cs b/test/Microsoft.OpenApi.Tests/Writers/OpenApiWriterSpecialCharacterTests.cs index a127e982b..e02200cd7 100644 --- a/test/Microsoft.OpenApi.Tests/Writers/OpenApiWriterSpecialCharacterTests.cs +++ b/test/Microsoft.OpenApi.Tests/Writers/OpenApiWriterSpecialCharacterTests.cs @@ -5,7 +5,6 @@ using System.Globalization; using System.IO; using System.Linq; -using FluentAssertions; using Microsoft.OpenApi.Writers; using Xunit; @@ -47,7 +46,7 @@ public void WriteStringWithSpecialCharactersAsJsonWorks(string input, string exp var actual = outputStringWriter.GetStringBuilder().ToString(); // Assert - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Theory] @@ -81,7 +80,7 @@ public void WriteStringWithSpecialCharactersAsYamlWorks(string input, string exp var actual = outputStringWriter.GetStringBuilder().ToString(); // Assert - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Theory] @@ -109,7 +108,7 @@ public void WriteStringWithNewlineCharactersInObjectAsYamlWorks(string input, st .Replace("\r", ""); // Assert - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Theory] @@ -135,7 +134,7 @@ public void WriteStringWithNewlineCharactersInArrayAsYamlWorks(string input, str .Replace("\r", ""); // Assert - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Theory] @@ -156,7 +155,7 @@ public void WriteStringAsYamlDoesNotDependOnSystemCulture(string input, string e var actual = outputStringWriter.GetStringBuilder().ToString(); // Assert - actual.Should().Be(expected); + Assert.Equal(expected, actual); } } } diff --git a/test/Microsoft.OpenApi.Tests/Writers/OpenApiYamlWriterTests.cs b/test/Microsoft.OpenApi.Tests/Writers/OpenApiYamlWriterTests.cs index 7d07e51ef..2210cce59 100644 --- a/test/Microsoft.OpenApi.Tests/Writers/OpenApiYamlWriterTests.cs +++ b/test/Microsoft.OpenApi.Tests/Writers/OpenApiYamlWriterTests.cs @@ -7,7 +7,6 @@ using System.Globalization; using System.IO; using System.Threading.Tasks; -using FluentAssertions; using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Writers; using Xunit; @@ -81,7 +80,7 @@ public async Task WriteStringListAsYamlShouldMatchExpected(string[] stringValues expectedYaml = expectedYaml.MakeLineBreaksEnvironmentNeutral(); // Assert - actualYaml.Should().Be(expectedYaml); + Assert.Equal(expectedYaml, actualYaml); } public static IEnumerable WriteMapAsYamlShouldMatchExpectedTestCasesSimple() @@ -315,7 +314,7 @@ public void WriteMapAsYamlShouldMatchExpected(IDictionary inputM // Assert actualYaml = actualYaml.MakeLineBreaksEnvironmentNeutral(); expectedYaml = expectedYaml.MakeLineBreaksEnvironmentNeutral(); - actualYaml.Should().Be(expectedYaml); + Assert.Equal(expectedYaml, actualYaml); } public static IEnumerable WriteDateTimeAsJsonTestCases() @@ -356,7 +355,7 @@ public void WriteDateTimeAsJsonShouldMatchExpected(DateTimeOffset dateTimeOffset var expectedString = " '" + dateTimeOffset.ToString("o") + "'"; // Assert - writtenString.Should().Be(expectedString); + Assert.Equal(expectedString, writtenString); } [Fact] @@ -396,7 +395,7 @@ public void WriteInlineSchema() // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().BeEquivalentTo(expected); + Assert.Equivalent(expected, actual); Assert.Equal(expected, actual); } From 1a0153bdf7d0f681447f1acc105652bfaf38b23f Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Wed, 15 Jan 2025 09:23:08 -0500 Subject: [PATCH 58/90] chore: FA replacement additional batch Signed-off-by: Vincent Biret --- .../V2Tests/OpenApiOperationTests.cs | 8 +++---- .../V2Tests/OpenApiServerTests.cs | 2 +- .../Models/OpenApiComponentsTests.cs | 24 +++++++++---------- .../Models/OpenApiOAuthFlowsTests.cs | 9 ++++--- .../Models/OpenApiSchemaTests.cs | 12 +++++----- 5 files changed, 27 insertions(+), 28 deletions(-) diff --git a/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiOperationTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiOperationTests.cs index 948c6544c..ab5735e77 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiOperationTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiOperationTests.cs @@ -451,7 +451,7 @@ public async Task ParseV2ResponseWithExamplesExtensionWorks() // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Fact] @@ -501,7 +501,7 @@ public async Task LoadV3ExamplesInResponseAsExtensionsWorks() // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Fact] @@ -552,7 +552,7 @@ public async Task LoadV2OperationWithBodyParameterExamplesWorks() // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Fact] @@ -604,7 +604,7 @@ public async Task LoadV3ExamplesInRequestBodyParameterAsExtensionsWorks() // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } } } diff --git a/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiServerTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiServerTests.cs index e0c076ee3..6f72dccb7 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiServerTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiServerTests.cs @@ -304,7 +304,7 @@ public void InvalidHostShouldYieldError() }; var result = OpenApiDocument.Parse(input, "yaml", settings); - result.Document.Servers.Count.Should().Be(0); + Assert.Empty(result.Document.Servers); result.Diagnostic.Should().BeEquivalentTo( new OpenApiDiagnostic { diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiComponentsTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiComponentsTests.cs index 3a69b708e..2ac70548d 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiComponentsTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiComponentsTests.cs @@ -286,7 +286,7 @@ public async Task SerializeBasicComponentsAsJsonWorks() // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Fact] @@ -301,7 +301,7 @@ public async Task SerializeBasicComponentsAsYamlWorks() // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Fact] @@ -353,7 +353,7 @@ public async Task SerializeAdvancedComponentsAsJsonV3Works() // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Fact] @@ -411,7 +411,7 @@ public async Task SerializeAdvancedComponentsWithReferenceAsJsonV3Works() // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Fact] @@ -450,7 +450,7 @@ public async Task SerializeAdvancedComponentsAsYamlV3Works() // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Fact] @@ -492,7 +492,7 @@ public async Task SerializeAdvancedComponentsWithReferenceAsYamlV3Works() // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Fact] @@ -529,7 +529,7 @@ public async Task SerializeBrokenComponentsAsJsonV3Works() // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Fact] @@ -559,7 +559,7 @@ public async Task SerializeBrokenComponentsAsYamlV3Works() // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Fact] @@ -585,7 +585,7 @@ public async Task SerializeTopLevelReferencingComponentsAsYamlV3Works() // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Fact] @@ -610,7 +610,7 @@ public async Task SerializeTopLevelSelfReferencingWithOtherPropertiesComponentsA // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Fact] @@ -665,7 +665,7 @@ public async Task SerializeComponentsWithPathItemsAsJsonWorks() // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Fact] @@ -702,7 +702,7 @@ public async Task SerializeComponentsWithPathItemsAsYamlWorks() // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } } } diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiOAuthFlowsTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiOAuthFlowsTests.cs index 6e1b2e102..161c669fa 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiOAuthFlowsTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiOAuthFlowsTests.cs @@ -3,7 +3,6 @@ using System.Collections.Generic; using System.Threading.Tasks; -using FluentAssertions; using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Models; using Xunit; @@ -64,7 +63,7 @@ public async Task SerializeBasicOAuthFlowsAsV3JsonWorks() // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Fact] @@ -80,7 +79,7 @@ public async Task SerializeBasicOAuthFlowsAsV3YamlWorks() // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Fact] @@ -106,7 +105,7 @@ public async Task SerializeOAuthFlowsWithSingleFlowAsV3JsonWorks() // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Fact] @@ -140,7 +139,7 @@ public async Task SerializeOAuthFlowsWithMultipleFlowsAsV3JsonWorks() // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } } } diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiSchemaTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiSchemaTests.cs index 49f1596c5..ea867353d 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiSchemaTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiSchemaTests.cs @@ -226,7 +226,7 @@ public async Task SerializeBasicSchemaAsV3JsonWorks() // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Fact] @@ -256,7 +256,7 @@ public async Task SerializeAdvancedSchemaNumberAsV3JsonWorks() // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Fact] @@ -308,7 +308,7 @@ public async Task SerializeAdvancedSchemaObjectAsV3JsonWorks() // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Fact] @@ -363,7 +363,7 @@ public async Task SerializeAdvancedSchemaWithAllOfAsV3JsonWorks() // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Theory] @@ -600,7 +600,7 @@ public void OpenApiWalkerVisitsOpenApiSchemaNot() walker.Walk(document); // Assert - visitor.Titles.Count.Should().Be(2); + Assert.Equal(2, visitor.Titles.Count); } [Fact] @@ -627,7 +627,7 @@ public async Task SerializeSchemaWithUnrecognizedPropertiesWorks() var actual = await schema.SerializeAsJsonAsync(OpenApiSpecVersion.OpenApi3_1); // Assert - actual.MakeLineBreaksEnvironmentNeutral().Should().Be(expected.MakeLineBreaksEnvironmentNeutral()); + Assert.Equal(expected, actual); } internal class SchemaVisitor : OpenApiVisitorBase From 3ceaa12a1dff15273fa8da7812f315ad9aa16d9d Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Wed, 15 Jan 2025 09:26:52 -0500 Subject: [PATCH 59/90] chore: removes unused usings Signed-off-by: Vincent Biret --- src/Microsoft.OpenApi.Readers/OpenApiYamlReader.cs | 1 - src/Microsoft.OpenApi/Interfaces/IOpenApiReader.cs | 1 - .../MicrosoftExtensions/OpenApiEnumFlagsExtension.cs | 1 - .../OpenApiEnumValuesDescriptionExtension.cs | 1 - .../MicrosoftExtensions/OpenApiPagingExtension.cs | 1 - src/Microsoft.OpenApi/Models/OpenApiExample.cs | 2 -- src/Microsoft.OpenApi/Models/OpenApiParameter.cs | 1 - src/Microsoft.OpenApi/Models/RuntimeExpressionAnyWrapper.cs | 1 - src/Microsoft.OpenApi/Reader/OpenApiReaderRegistry.cs | 1 - src/Microsoft.OpenApi/Reader/OpenApiReaderSettings.cs | 1 - .../Reader/ParseNodes/AnyFieldMapParameter.cs | 1 - .../Reader/ParseNodes/AnyMapFieldMapParameter.cs | 1 - src/Microsoft.OpenApi/Reader/ParseNodes/ListNode.cs | 1 - src/Microsoft.OpenApi/Reader/ParseNodes/ParseNode.cs | 1 - src/Microsoft.OpenApi/Reader/ParseNodes/PropertyNode.cs | 1 - src/Microsoft.OpenApi/Reader/ParseNodes/ValueNode.cs | 1 - src/Microsoft.OpenApi/Reader/ParsingContext.cs | 1 - .../Reader/V3/OpenApiCallbackDeserializer.cs | 1 - .../Reader/V3/OpenApiDocumentDeserializer.cs | 1 - .../Reader/V3/OpenApiExampleDeserializer.cs | 1 - src/Microsoft.OpenApi/Reader/V3/OpenApiHeaderDeserializer.cs | 1 - src/Microsoft.OpenApi/Reader/V3/OpenApiLinkDeserializer.cs | 1 - .../Reader/V3/OpenApiParameterDeserializer.cs | 2 -- .../Reader/V3/OpenApiPathItemDeserializer.cs | 1 - .../Reader/V3/OpenApiRequestBodyDeserializer.cs | 1 - .../Reader/V3/OpenApiResponseDeserializer.cs | 1 - src/Microsoft.OpenApi/Reader/V3/OpenApiV3VersionService.cs | 1 - .../Reader/V31/OpenApiCallbackDeserializer.cs | 1 - .../Reader/V31/OpenApiDocumentDeserializer.cs | 4 +--- .../Reader/V31/OpenApiExampleDeserializer.cs | 3 +-- .../Reader/V31/OpenApiHeaderDeserializer.cs | 3 +-- src/Microsoft.OpenApi/Reader/V31/OpenApiLinkDeserializer.cs | 3 +-- .../Reader/V31/OpenApiParameterDeserializer.cs | 4 +--- .../Reader/V31/OpenApiPathItemDeserializer.cs | 3 +-- .../Reader/V31/OpenApiRequestBodyDeserializer.cs | 3 +-- .../Reader/V31/OpenApiResponseDeserializer.cs | 3 +-- .../Reader/V31/OpenApiSchemaDeserializer.cs | 1 - .../Reader/V31/OpenApiSecuritySchemeDeserializer.cs | 1 - src/Microsoft.OpenApi/Reader/V31/OpenApiV31Deserializer.cs | 1 - src/Microsoft.OpenApi/Validations/ValidationRule.cs | 1 - src/Microsoft.OpenApi/Writers/OpenApiWriterBase.cs | 5 ----- src/Microsoft.OpenApi/Writers/OpenApiWriterSettings.cs | 2 -- .../Services/OpenApiFilterServiceTests.cs | 2 -- test/Microsoft.OpenApi.Readers.Tests/Resources.cs | 1 - .../V2Tests/OpenApiDocumentTests.cs | 1 - .../V2Tests/OpenApiOperationTests.cs | 1 - .../V31Tests/OpenApiDocumentTests.cs | 2 -- .../V31Tests/OpenApiSchemaTests.cs | 1 - .../V3Tests/OpenApiDocumentTests.cs | 1 - .../V3Tests/OpenApiExampleTests.cs | 1 - .../V3Tests/OpenApiParameterTests.cs | 3 --- .../V3Tests/OpenApiSchemaTests.cs | 1 - .../OpenApiPrimaryErrorMessageExtensionTests.cs | 1 - .../OpenApiReservedParameterExtensionTests.cs | 2 -- .../Microsoft.OpenApi.Tests/Models/OpenApiComponentsTests.cs | 2 -- test/Microsoft.OpenApi.Tests/Models/OpenApiDocumentTests.cs | 1 - test/Microsoft.OpenApi.Tests/Models/OpenApiExampleTests.cs | 1 - test/Microsoft.OpenApi.Tests/Models/OpenApiMediaTypeTests.cs | 1 - .../Models/References/OpenApiCallbackReferenceTests.cs | 1 - .../Models/References/OpenApiExampleReferenceTests.cs | 1 - .../Models/References/OpenApiHeaderReferenceTests.cs | 1 - .../Models/References/OpenApiLinkReferenceTests.cs | 1 - .../Models/References/OpenApiParameterReferenceTests.cs | 1 - .../Models/References/OpenApiPathItemReferenceTests.cs | 1 - .../Models/References/OpenApiRequestBodyReferenceTests.cs | 1 - .../Models/References/OpenApiResponseReferenceTest.cs | 1 - .../Validations/OpenApiHeaderValidationTests.cs | 2 -- .../Validations/OpenApiMediaTypeValidationTests.cs | 3 --- 68 files changed, 8 insertions(+), 94 deletions(-) diff --git a/src/Microsoft.OpenApi.Readers/OpenApiYamlReader.cs b/src/Microsoft.OpenApi.Readers/OpenApiYamlReader.cs index 217db91b3..d33450c2b 100644 --- a/src/Microsoft.OpenApi.Readers/OpenApiYamlReader.cs +++ b/src/Microsoft.OpenApi.Readers/OpenApiYamlReader.cs @@ -9,7 +9,6 @@ using Microsoft.OpenApi.Interfaces; using Microsoft.OpenApi.Reader; using SharpYaml.Serialization; -using System.Linq; using Microsoft.OpenApi.Models; using System; using System.Text; diff --git a/src/Microsoft.OpenApi/Interfaces/IOpenApiReader.cs b/src/Microsoft.OpenApi/Interfaces/IOpenApiReader.cs index 9398551dd..39eb06979 100644 --- a/src/Microsoft.OpenApi/Interfaces/IOpenApiReader.cs +++ b/src/Microsoft.OpenApi/Interfaces/IOpenApiReader.cs @@ -2,7 +2,6 @@ // Licensed under the MIT license. using System.IO; -using System.Text.Json.Nodes; using System.Threading; using System.Threading.Tasks; using Microsoft.OpenApi.Reader; diff --git a/src/Microsoft.OpenApi/MicrosoftExtensions/OpenApiEnumFlagsExtension.cs b/src/Microsoft.OpenApi/MicrosoftExtensions/OpenApiEnumFlagsExtension.cs index 9cbae6350..22b9f0df2 100644 --- a/src/Microsoft.OpenApi/MicrosoftExtensions/OpenApiEnumFlagsExtension.cs +++ b/src/Microsoft.OpenApi/MicrosoftExtensions/OpenApiEnumFlagsExtension.cs @@ -5,7 +5,6 @@ using System; using Microsoft.OpenApi.Extensions; -using Microsoft.OpenApi.Any; using Microsoft.OpenApi.Interfaces; using Microsoft.OpenApi.Writers; using System.Text.Json.Nodes; diff --git a/src/Microsoft.OpenApi/MicrosoftExtensions/OpenApiEnumValuesDescriptionExtension.cs b/src/Microsoft.OpenApi/MicrosoftExtensions/OpenApiEnumValuesDescriptionExtension.cs index d2661a225..df1e664e1 100644 --- a/src/Microsoft.OpenApi/MicrosoftExtensions/OpenApiEnumValuesDescriptionExtension.cs +++ b/src/Microsoft.OpenApi/MicrosoftExtensions/OpenApiEnumValuesDescriptionExtension.cs @@ -7,7 +7,6 @@ using System.Collections.Generic; using System.Linq; using Microsoft.OpenApi.Extensions; -using Microsoft.OpenApi.Any; using Microsoft.OpenApi.Interfaces; using Microsoft.OpenApi.Writers; using System.Text.Json.Nodes; diff --git a/src/Microsoft.OpenApi/MicrosoftExtensions/OpenApiPagingExtension.cs b/src/Microsoft.OpenApi/MicrosoftExtensions/OpenApiPagingExtension.cs index f64eebf3f..57d057e59 100644 --- a/src/Microsoft.OpenApi/MicrosoftExtensions/OpenApiPagingExtension.cs +++ b/src/Microsoft.OpenApi/MicrosoftExtensions/OpenApiPagingExtension.cs @@ -5,7 +5,6 @@ using System; using Microsoft.OpenApi.Extensions; -using Microsoft.OpenApi.Any; using Microsoft.OpenApi.Interfaces; using Microsoft.OpenApi.Writers; using System.Text.Json.Nodes; diff --git a/src/Microsoft.OpenApi/Models/OpenApiExample.cs b/src/Microsoft.OpenApi/Models/OpenApiExample.cs index ef8a64b7a..1fc7ca900 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiExample.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiExample.cs @@ -1,10 +1,8 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. -using System; using System.Collections.Generic; using System.Text.Json.Nodes; -using Microsoft.OpenApi.Any; using Microsoft.OpenApi.Helpers; using Microsoft.OpenApi.Interfaces; using Microsoft.OpenApi.Writers; diff --git a/src/Microsoft.OpenApi/Models/OpenApiParameter.cs b/src/Microsoft.OpenApi/Models/OpenApiParameter.cs index f3eb6c76f..bdaba739e 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiParameter.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiParameter.cs @@ -5,7 +5,6 @@ using System.Collections.Generic; using System.Linq; using System.Text.Json.Nodes; -using Microsoft.OpenApi.Any; using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Helpers; using Microsoft.OpenApi.Interfaces; diff --git a/src/Microsoft.OpenApi/Models/RuntimeExpressionAnyWrapper.cs b/src/Microsoft.OpenApi/Models/RuntimeExpressionAnyWrapper.cs index dca24c3e5..35a08a422 100644 --- a/src/Microsoft.OpenApi/Models/RuntimeExpressionAnyWrapper.cs +++ b/src/Microsoft.OpenApi/Models/RuntimeExpressionAnyWrapper.cs @@ -2,7 +2,6 @@ // Licensed under the MIT license. using System.Text.Json.Nodes; -using Microsoft.OpenApi.Any; using Microsoft.OpenApi.Expressions; using Microsoft.OpenApi.Helpers; using Microsoft.OpenApi.Interfaces; diff --git a/src/Microsoft.OpenApi/Reader/OpenApiReaderRegistry.cs b/src/Microsoft.OpenApi/Reader/OpenApiReaderRegistry.cs index e1eea86a1..b86b5a9c6 100644 --- a/src/Microsoft.OpenApi/Reader/OpenApiReaderRegistry.cs +++ b/src/Microsoft.OpenApi/Reader/OpenApiReaderRegistry.cs @@ -3,7 +3,6 @@ using System; using System.Collections.Concurrent; -using System.Collections.Generic; using Microsoft.OpenApi.Interfaces; namespace Microsoft.OpenApi.Reader diff --git a/src/Microsoft.OpenApi/Reader/OpenApiReaderSettings.cs b/src/Microsoft.OpenApi/Reader/OpenApiReaderSettings.cs index fa0040ff8..33f03eedb 100644 --- a/src/Microsoft.OpenApi/Reader/OpenApiReaderSettings.cs +++ b/src/Microsoft.OpenApi/Reader/OpenApiReaderSettings.cs @@ -5,7 +5,6 @@ using System.Collections.Generic; using System.IO; using System.Text.Json.Nodes; -using Microsoft.OpenApi.Any; using Microsoft.OpenApi.Interfaces; using Microsoft.OpenApi.MicrosoftExtensions; using Microsoft.OpenApi.Validations; diff --git a/src/Microsoft.OpenApi/Reader/ParseNodes/AnyFieldMapParameter.cs b/src/Microsoft.OpenApi/Reader/ParseNodes/AnyFieldMapParameter.cs index ad8394b58..92dd24138 100644 --- a/src/Microsoft.OpenApi/Reader/ParseNodes/AnyFieldMapParameter.cs +++ b/src/Microsoft.OpenApi/Reader/ParseNodes/AnyFieldMapParameter.cs @@ -3,7 +3,6 @@ using System; using System.Text.Json.Nodes; -using Microsoft.OpenApi.Any; using Microsoft.OpenApi.Models; namespace Microsoft.OpenApi.Reader.ParseNodes diff --git a/src/Microsoft.OpenApi/Reader/ParseNodes/AnyMapFieldMapParameter.cs b/src/Microsoft.OpenApi/Reader/ParseNodes/AnyMapFieldMapParameter.cs index a4dc41b7f..4d365125b 100644 --- a/src/Microsoft.OpenApi/Reader/ParseNodes/AnyMapFieldMapParameter.cs +++ b/src/Microsoft.OpenApi/Reader/ParseNodes/AnyMapFieldMapParameter.cs @@ -4,7 +4,6 @@ using System; using System.Collections.Generic; using System.Text.Json.Nodes; -using Microsoft.OpenApi.Any; using Microsoft.OpenApi.Models; namespace Microsoft.OpenApi.Reader.ParseNodes diff --git a/src/Microsoft.OpenApi/Reader/ParseNodes/ListNode.cs b/src/Microsoft.OpenApi/Reader/ParseNodes/ListNode.cs index 6654344cd..3de21c79e 100644 --- a/src/Microsoft.OpenApi/Reader/ParseNodes/ListNode.cs +++ b/src/Microsoft.OpenApi/Reader/ParseNodes/ListNode.cs @@ -6,7 +6,6 @@ using System.Collections.Generic; using System.Linq; using System.Text.Json.Nodes; -using Microsoft.OpenApi.Any; using Microsoft.OpenApi.Exceptions; using Microsoft.OpenApi.Models; diff --git a/src/Microsoft.OpenApi/Reader/ParseNodes/ParseNode.cs b/src/Microsoft.OpenApi/Reader/ParseNodes/ParseNode.cs index 44d626f35..49ebc9c74 100644 --- a/src/Microsoft.OpenApi/Reader/ParseNodes/ParseNode.cs +++ b/src/Microsoft.OpenApi/Reader/ParseNodes/ParseNode.cs @@ -4,7 +4,6 @@ using System; using System.Collections.Generic; using System.Text.Json.Nodes; -using Microsoft.OpenApi.Any; using Microsoft.OpenApi.Exceptions; using Microsoft.OpenApi.Models; diff --git a/src/Microsoft.OpenApi/Reader/ParseNodes/PropertyNode.cs b/src/Microsoft.OpenApi/Reader/ParseNodes/PropertyNode.cs index 5f8031e87..170dfa14a 100644 --- a/src/Microsoft.OpenApi/Reader/ParseNodes/PropertyNode.cs +++ b/src/Microsoft.OpenApi/Reader/ParseNodes/PropertyNode.cs @@ -5,7 +5,6 @@ using System.Collections.Generic; using System.Linq; using System.Text.Json.Nodes; -using Microsoft.OpenApi.Any; using Microsoft.OpenApi.Exceptions; using Microsoft.OpenApi.Models; diff --git a/src/Microsoft.OpenApi/Reader/ParseNodes/ValueNode.cs b/src/Microsoft.OpenApi/Reader/ParseNodes/ValueNode.cs index ec9fefde5..f83d2ba66 100644 --- a/src/Microsoft.OpenApi/Reader/ParseNodes/ValueNode.cs +++ b/src/Microsoft.OpenApi/Reader/ParseNodes/ValueNode.cs @@ -4,7 +4,6 @@ using System; using System.Globalization; using System.Text.Json.Nodes; -using Microsoft.OpenApi.Any; using Microsoft.OpenApi.Exceptions; namespace Microsoft.OpenApi.Reader.ParseNodes diff --git a/src/Microsoft.OpenApi/Reader/ParsingContext.cs b/src/Microsoft.OpenApi/Reader/ParsingContext.cs index 7a8b07244..830b6390b 100644 --- a/src/Microsoft.OpenApi/Reader/ParsingContext.cs +++ b/src/Microsoft.OpenApi/Reader/ParsingContext.cs @@ -5,7 +5,6 @@ using System.Collections.Generic; using System.Linq; using System.Text.Json.Nodes; -using Microsoft.OpenApi.Any; using Microsoft.OpenApi.Exceptions; using Microsoft.OpenApi.Interfaces; using Microsoft.OpenApi.Models; diff --git a/src/Microsoft.OpenApi/Reader/V3/OpenApiCallbackDeserializer.cs b/src/Microsoft.OpenApi/Reader/V3/OpenApiCallbackDeserializer.cs index faf50ebb1..b81914521 100644 --- a/src/Microsoft.OpenApi/Reader/V3/OpenApiCallbackDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V3/OpenApiCallbackDeserializer.cs @@ -1,7 +1,6 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. -using System.Linq; using Microsoft.OpenApi.Expressions; using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Models; diff --git a/src/Microsoft.OpenApi/Reader/V3/OpenApiDocumentDeserializer.cs b/src/Microsoft.OpenApi/Reader/V3/OpenApiDocumentDeserializer.cs index 3fcdb9af7..5a20be549 100644 --- a/src/Microsoft.OpenApi/Reader/V3/OpenApiDocumentDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V3/OpenApiDocumentDeserializer.cs @@ -4,7 +4,6 @@ using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Reader.ParseNodes; -using Microsoft.OpenApi.Services; namespace Microsoft.OpenApi.Reader.V3 { diff --git a/src/Microsoft.OpenApi/Reader/V3/OpenApiExampleDeserializer.cs b/src/Microsoft.OpenApi/Reader/V3/OpenApiExampleDeserializer.cs index a73ee02b1..29ebacb61 100644 --- a/src/Microsoft.OpenApi/Reader/V3/OpenApiExampleDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V3/OpenApiExampleDeserializer.cs @@ -1,7 +1,6 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. -using System.Linq; using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Models.References; diff --git a/src/Microsoft.OpenApi/Reader/V3/OpenApiHeaderDeserializer.cs b/src/Microsoft.OpenApi/Reader/V3/OpenApiHeaderDeserializer.cs index 8f6edb55b..867781316 100644 --- a/src/Microsoft.OpenApi/Reader/V3/OpenApiHeaderDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V3/OpenApiHeaderDeserializer.cs @@ -1,7 +1,6 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. -using System.Linq; using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Models.References; diff --git a/src/Microsoft.OpenApi/Reader/V3/OpenApiLinkDeserializer.cs b/src/Microsoft.OpenApi/Reader/V3/OpenApiLinkDeserializer.cs index a95b6ebf8..fd71ca186 100644 --- a/src/Microsoft.OpenApi/Reader/V3/OpenApiLinkDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V3/OpenApiLinkDeserializer.cs @@ -1,7 +1,6 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. -using System.Linq; using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Models.References; diff --git a/src/Microsoft.OpenApi/Reader/V3/OpenApiParameterDeserializer.cs b/src/Microsoft.OpenApi/Reader/V3/OpenApiParameterDeserializer.cs index 74edfd462..1b950ec7e 100644 --- a/src/Microsoft.OpenApi/Reader/V3/OpenApiParameterDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V3/OpenApiParameterDeserializer.cs @@ -1,8 +1,6 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. -using System; -using System.Linq; using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Models.References; diff --git a/src/Microsoft.OpenApi/Reader/V3/OpenApiPathItemDeserializer.cs b/src/Microsoft.OpenApi/Reader/V3/OpenApiPathItemDeserializer.cs index afcee89b5..e7cad91db 100644 --- a/src/Microsoft.OpenApi/Reader/V3/OpenApiPathItemDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V3/OpenApiPathItemDeserializer.cs @@ -1,7 +1,6 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. -using System.Linq; using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Models.References; diff --git a/src/Microsoft.OpenApi/Reader/V3/OpenApiRequestBodyDeserializer.cs b/src/Microsoft.OpenApi/Reader/V3/OpenApiRequestBodyDeserializer.cs index 435b576e1..0b3cbd718 100644 --- a/src/Microsoft.OpenApi/Reader/V3/OpenApiRequestBodyDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V3/OpenApiRequestBodyDeserializer.cs @@ -1,7 +1,6 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. -using System.Linq; using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Models.References; diff --git a/src/Microsoft.OpenApi/Reader/V3/OpenApiResponseDeserializer.cs b/src/Microsoft.OpenApi/Reader/V3/OpenApiResponseDeserializer.cs index e65a1aafe..dd6f66d9b 100644 --- a/src/Microsoft.OpenApi/Reader/V3/OpenApiResponseDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V3/OpenApiResponseDeserializer.cs @@ -1,7 +1,6 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. -using System.Linq; using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Models.References; diff --git a/src/Microsoft.OpenApi/Reader/V3/OpenApiV3VersionService.cs b/src/Microsoft.OpenApi/Reader/V3/OpenApiV3VersionService.cs index 9ac257814..372a8b26f 100644 --- a/src/Microsoft.OpenApi/Reader/V3/OpenApiV3VersionService.cs +++ b/src/Microsoft.OpenApi/Reader/V3/OpenApiV3VersionService.cs @@ -4,7 +4,6 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Text.Json.Nodes; using Microsoft.OpenApi.Any; using Microsoft.OpenApi.Exceptions; using Microsoft.OpenApi.Extensions; diff --git a/src/Microsoft.OpenApi/Reader/V31/OpenApiCallbackDeserializer.cs b/src/Microsoft.OpenApi/Reader/V31/OpenApiCallbackDeserializer.cs index 580ce1356..4bb91bb39 100644 --- a/src/Microsoft.OpenApi/Reader/V31/OpenApiCallbackDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V31/OpenApiCallbackDeserializer.cs @@ -4,7 +4,6 @@ using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Reader.ParseNodes; using Microsoft.OpenApi.Models.References; -using System.Linq; namespace Microsoft.OpenApi.Reader.V31 { diff --git a/src/Microsoft.OpenApi/Reader/V31/OpenApiDocumentDeserializer.cs b/src/Microsoft.OpenApi/Reader/V31/OpenApiDocumentDeserializer.cs index 8137fb460..c3915fc84 100644 --- a/src/Microsoft.OpenApi/Reader/V31/OpenApiDocumentDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V31/OpenApiDocumentDeserializer.cs @@ -1,8 +1,6 @@ -using System; -using Microsoft.OpenApi.Extensions; +using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Reader.ParseNodes; -using Microsoft.OpenApi.Services; namespace Microsoft.OpenApi.Reader.V31 { diff --git a/src/Microsoft.OpenApi/Reader/V31/OpenApiExampleDeserializer.cs b/src/Microsoft.OpenApi/Reader/V31/OpenApiExampleDeserializer.cs index 0035360d5..724e72327 100644 --- a/src/Microsoft.OpenApi/Reader/V31/OpenApiExampleDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V31/OpenApiExampleDeserializer.cs @@ -1,5 +1,4 @@ -using System.Linq; -using Microsoft.OpenApi.Extensions; +using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Models.References; using Microsoft.OpenApi.Reader.ParseNodes; diff --git a/src/Microsoft.OpenApi/Reader/V31/OpenApiHeaderDeserializer.cs b/src/Microsoft.OpenApi/Reader/V31/OpenApiHeaderDeserializer.cs index 7349774f6..22ddfe0a5 100644 --- a/src/Microsoft.OpenApi/Reader/V31/OpenApiHeaderDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V31/OpenApiHeaderDeserializer.cs @@ -1,5 +1,4 @@ -using System.Linq; -using Microsoft.OpenApi.Extensions; +using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Models.References; using Microsoft.OpenApi.Reader.ParseNodes; diff --git a/src/Microsoft.OpenApi/Reader/V31/OpenApiLinkDeserializer.cs b/src/Microsoft.OpenApi/Reader/V31/OpenApiLinkDeserializer.cs index aa1e26ea1..b458c2b52 100644 --- a/src/Microsoft.OpenApi/Reader/V31/OpenApiLinkDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V31/OpenApiLinkDeserializer.cs @@ -1,5 +1,4 @@ -using System.Linq; -using Microsoft.OpenApi.Extensions; +using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Models.References; using Microsoft.OpenApi.Reader.ParseNodes; diff --git a/src/Microsoft.OpenApi/Reader/V31/OpenApiParameterDeserializer.cs b/src/Microsoft.OpenApi/Reader/V31/OpenApiParameterDeserializer.cs index 824e6e577..47056cddb 100644 --- a/src/Microsoft.OpenApi/Reader/V31/OpenApiParameterDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V31/OpenApiParameterDeserializer.cs @@ -1,6 +1,4 @@ -using System; -using System.Linq; -using Microsoft.OpenApi.Extensions; +using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Models.References; using Microsoft.OpenApi.Reader.ParseNodes; diff --git a/src/Microsoft.OpenApi/Reader/V31/OpenApiPathItemDeserializer.cs b/src/Microsoft.OpenApi/Reader/V31/OpenApiPathItemDeserializer.cs index 8797b03e6..c71840b1a 100644 --- a/src/Microsoft.OpenApi/Reader/V31/OpenApiPathItemDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V31/OpenApiPathItemDeserializer.cs @@ -1,5 +1,4 @@ -using System.Linq; -using Microsoft.OpenApi.Extensions; +using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Models.References; using Microsoft.OpenApi.Reader.ParseNodes; diff --git a/src/Microsoft.OpenApi/Reader/V31/OpenApiRequestBodyDeserializer.cs b/src/Microsoft.OpenApi/Reader/V31/OpenApiRequestBodyDeserializer.cs index 7acea65c0..d972169ba 100644 --- a/src/Microsoft.OpenApi/Reader/V31/OpenApiRequestBodyDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V31/OpenApiRequestBodyDeserializer.cs @@ -1,5 +1,4 @@ -using System.Linq; -using Microsoft.OpenApi.Extensions; +using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Models.References; using Microsoft.OpenApi.Reader.ParseNodes; diff --git a/src/Microsoft.OpenApi/Reader/V31/OpenApiResponseDeserializer.cs b/src/Microsoft.OpenApi/Reader/V31/OpenApiResponseDeserializer.cs index 611574bf2..1632439d4 100644 --- a/src/Microsoft.OpenApi/Reader/V31/OpenApiResponseDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V31/OpenApiResponseDeserializer.cs @@ -1,5 +1,4 @@ -using System.Linq; -using Microsoft.OpenApi.Extensions; +using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Models.References; using Microsoft.OpenApi.Reader.ParseNodes; diff --git a/src/Microsoft.OpenApi/Reader/V31/OpenApiSchemaDeserializer.cs b/src/Microsoft.OpenApi/Reader/V31/OpenApiSchemaDeserializer.cs index ad943dce4..95ba75f27 100644 --- a/src/Microsoft.OpenApi/Reader/V31/OpenApiSchemaDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V31/OpenApiSchemaDeserializer.cs @@ -8,7 +8,6 @@ using System.Collections.Generic; using System.Globalization; using System.Linq; -using System.Text.Json.Nodes; namespace Microsoft.OpenApi.Reader.V31 { diff --git a/src/Microsoft.OpenApi/Reader/V31/OpenApiSecuritySchemeDeserializer.cs b/src/Microsoft.OpenApi/Reader/V31/OpenApiSecuritySchemeDeserializer.cs index 8fb5c0cd1..572895a7a 100644 --- a/src/Microsoft.OpenApi/Reader/V31/OpenApiSecuritySchemeDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V31/OpenApiSecuritySchemeDeserializer.cs @@ -2,7 +2,6 @@ // Licensed under the MIT license. using System; -using System.Linq; using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Models.References; diff --git a/src/Microsoft.OpenApi/Reader/V31/OpenApiV31Deserializer.cs b/src/Microsoft.OpenApi/Reader/V31/OpenApiV31Deserializer.cs index a037dc3c1..9616d04cc 100644 --- a/src/Microsoft.OpenApi/Reader/V31/OpenApiV31Deserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V31/OpenApiV31Deserializer.cs @@ -1,7 +1,6 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. -using System.Collections.Generic; using System.Linq; using System.Text.Json.Nodes; using Microsoft.OpenApi.Any; diff --git a/src/Microsoft.OpenApi/Validations/ValidationRule.cs b/src/Microsoft.OpenApi/Validations/ValidationRule.cs index 35503606f..a72beb5c1 100644 --- a/src/Microsoft.OpenApi/Validations/ValidationRule.cs +++ b/src/Microsoft.OpenApi/Validations/ValidationRule.cs @@ -2,7 +2,6 @@ // Licensed under the MIT license. using System; -using Microsoft.OpenApi.Exceptions; using Microsoft.OpenApi.Interfaces; using Microsoft.OpenApi.Properties; diff --git a/src/Microsoft.OpenApi/Writers/OpenApiWriterBase.cs b/src/Microsoft.OpenApi/Writers/OpenApiWriterBase.cs index 0864729d9..7626f5908 100644 --- a/src/Microsoft.OpenApi/Writers/OpenApiWriterBase.cs +++ b/src/Microsoft.OpenApi/Writers/OpenApiWriterBase.cs @@ -5,16 +5,11 @@ using System.Collections.Generic; using System.Globalization; using System.IO; -using System.Linq; -using System.Text.Json; using System.Threading; using System.Threading.Tasks; -using Microsoft.OpenApi.Any; using Microsoft.OpenApi.Exceptions; -using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Properties; -using Microsoft.OpenApi.Services; namespace Microsoft.OpenApi.Writers { diff --git a/src/Microsoft.OpenApi/Writers/OpenApiWriterSettings.cs b/src/Microsoft.OpenApi/Writers/OpenApiWriterSettings.cs index f05fd13a7..3ff128ae6 100644 --- a/src/Microsoft.OpenApi/Writers/OpenApiWriterSettings.cs +++ b/src/Microsoft.OpenApi/Writers/OpenApiWriterSettings.cs @@ -1,5 +1,3 @@ - -using System; using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Services; diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs index 12293c4e5..77f2c9ae9 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs @@ -3,11 +3,9 @@ using Microsoft.Extensions.Logging; using Microsoft.OpenApi.Models; -using Microsoft.OpenApi.Readers; using Microsoft.OpenApi.Services; using Microsoft.OpenApi.Tests.UtilityFiles; using Moq; -using SharpYaml.Tokens; using Xunit; namespace Microsoft.OpenApi.Hidi.Tests diff --git a/test/Microsoft.OpenApi.Readers.Tests/Resources.cs b/test/Microsoft.OpenApi.Readers.Tests/Resources.cs index 431c86e04..856e87427 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/Resources.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/Resources.cs @@ -1,7 +1,6 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. -using System; using System.IO; namespace Microsoft.OpenApi.Readers.Tests diff --git a/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiDocumentTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiDocumentTests.cs index b3fead6b1..a9bd8291d 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiDocumentTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiDocumentTests.cs @@ -4,7 +4,6 @@ using System; using System.Collections.Generic; using System.IO; -using System.Linq; using System.Threading; using System.Threading.Tasks; using FluentAssertions; diff --git a/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiOperationTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiOperationTests.cs index ab5735e77..c3212b802 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiOperationTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiOperationTests.cs @@ -9,7 +9,6 @@ using FluentAssertions; using Microsoft.OpenApi.Any; using Microsoft.OpenApi.Extensions; -using Microsoft.OpenApi.Interfaces; using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Reader.ParseNodes; using Microsoft.OpenApi.Reader.V2; diff --git a/test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiDocumentTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiDocumentTests.cs index a83da5e39..842f7172a 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiDocumentTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiDocumentTests.cs @@ -9,9 +9,7 @@ using Microsoft.OpenApi.Reader; using Microsoft.OpenApi.Tests; using Microsoft.OpenApi.Writers; -using Microsoft.OpenApi.Services; using Xunit; -using System.Linq; using VerifyXunit; namespace Microsoft.OpenApi.Readers.Tests.V31Tests diff --git a/test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiSchemaTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiSchemaTests.cs index 312353ba8..add70aa92 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiSchemaTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiSchemaTests.cs @@ -1,7 +1,6 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. -using System; using System.Collections.Generic; using System.IO; using System.Text.Json.Nodes; diff --git a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDocumentTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDocumentTests.cs index 68102328f..03f310f6e 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDocumentTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDocumentTests.cs @@ -17,7 +17,6 @@ using Microsoft.OpenApi.Validations; using Microsoft.OpenApi.Validations.Rules; using Microsoft.OpenApi.Writers; -using SharpYaml.Model; using Xunit; namespace Microsoft.OpenApi.Readers.Tests.V3Tests diff --git a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiExampleTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiExampleTests.cs index 95ee7076a..2dd3d4490 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiExampleTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiExampleTests.cs @@ -5,7 +5,6 @@ using System.Text.Json.Nodes; using System.Threading.Tasks; using FluentAssertions; -using Microsoft.OpenApi.Any; using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Reader; using Xunit; diff --git a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiParameterTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiParameterTests.cs index a40cb4144..af79a64d3 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiParameterTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiParameterTests.cs @@ -2,15 +2,12 @@ // Licensed under the MIT license. using System.Collections.Generic; -using System; using System.IO; using FluentAssertions; -using Microsoft.OpenApi.Any; using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Reader; using Xunit; using Microsoft.OpenApi.Reader.V3; -using Microsoft.OpenApi.Services; using System.Threading.Tasks; namespace Microsoft.OpenApi.Readers.Tests.V3Tests diff --git a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiSchemaTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiSchemaTests.cs index a1554352f..3110ef251 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiSchemaTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiSchemaTests.cs @@ -3,7 +3,6 @@ using System.Collections.Generic; using System.IO; -using System.Linq; using System.Text.Json.Nodes; using FluentAssertions; using Microsoft.OpenApi.Any; diff --git a/test/Microsoft.OpenApi.Tests/MicrosoftExtensions/OpenApiPrimaryErrorMessageExtensionTests.cs b/test/Microsoft.OpenApi.Tests/MicrosoftExtensions/OpenApiPrimaryErrorMessageExtensionTests.cs index f7256f8e6..51f5d7b48 100644 --- a/test/Microsoft.OpenApi.Tests/MicrosoftExtensions/OpenApiPrimaryErrorMessageExtensionTests.cs +++ b/test/Microsoft.OpenApi.Tests/MicrosoftExtensions/OpenApiPrimaryErrorMessageExtensionTests.cs @@ -4,7 +4,6 @@ // ------------------------------------------------------------ using System.IO; -using Microsoft.OpenApi.Any; using Microsoft.OpenApi.Writers; using Xunit; diff --git a/test/Microsoft.OpenApi.Tests/MicrosoftExtensions/OpenApiReservedParameterExtensionTests.cs b/test/Microsoft.OpenApi.Tests/MicrosoftExtensions/OpenApiReservedParameterExtensionTests.cs index 4972f3230..5850aef26 100644 --- a/test/Microsoft.OpenApi.Tests/MicrosoftExtensions/OpenApiReservedParameterExtensionTests.cs +++ b/test/Microsoft.OpenApi.Tests/MicrosoftExtensions/OpenApiReservedParameterExtensionTests.cs @@ -1,10 +1,8 @@ using System; using System.IO; using Microsoft.OpenApi.MicrosoftExtensions; -using Microsoft.OpenApi.Any; using Microsoft.OpenApi.Writers; using Xunit; -using System.Text.Json.Nodes; namespace Microsoft.OpenApi.Tests.MicrosoftExtensions; diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiComponentsTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiComponentsTests.cs index 2ac70548d..738002b1e 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiComponentsTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiComponentsTests.cs @@ -3,8 +3,6 @@ using System.Collections.Generic; using System.Threading.Tasks; -using FluentAssertions; -using Microsoft.OpenApi.Any; using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Models.References; diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiDocumentTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiDocumentTests.cs index 5d9c9175b..326575b9b 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiDocumentTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiDocumentTests.cs @@ -18,7 +18,6 @@ using Microsoft.VisualBasic; using VerifyXunit; using Xunit; -using Xunit.Abstractions; namespace Microsoft.OpenApi.Tests.Models { diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiExampleTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiExampleTests.cs index c920c986b..d1e2cd8f5 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiExampleTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiExampleTests.cs @@ -8,7 +8,6 @@ using System.Text.Json; using System.Text.Json.Nodes; using System.Threading.Tasks; -using Microsoft.OpenApi.Any; using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Models.References; using Microsoft.OpenApi.Writers; diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiMediaTypeTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiMediaTypeTests.cs index a47ef4052..db9bfd7d5 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiMediaTypeTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiMediaTypeTests.cs @@ -5,7 +5,6 @@ using System.Text.Json.Nodes; using System.Threading.Tasks; using FluentAssertions; -using Microsoft.OpenApi.Any; using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Interfaces; using Microsoft.OpenApi.Models; diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiCallbackReferenceTests.cs b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiCallbackReferenceTests.cs index b147e19ee..38bf27215 100644 --- a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiCallbackReferenceTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiCallbackReferenceTests.cs @@ -9,7 +9,6 @@ using Microsoft.OpenApi.Models.References; using Microsoft.OpenApi.Reader; using Microsoft.OpenApi.Readers; -using Microsoft.OpenApi.Services; using Microsoft.OpenApi.Writers; using VerifyXunit; using Xunit; diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiExampleReferenceTests.cs b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiExampleReferenceTests.cs index a3c5efb7e..2cb0ff189 100644 --- a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiExampleReferenceTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiExampleReferenceTests.cs @@ -10,7 +10,6 @@ using Microsoft.OpenApi.Reader; using Microsoft.OpenApi.Readers; using Microsoft.OpenApi.Writers; -using Microsoft.OpenApi.Services; using VerifyXunit; using Xunit; diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiHeaderReferenceTests.cs b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiHeaderReferenceTests.cs index 9e1867455..70eca5e9e 100644 --- a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiHeaderReferenceTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiHeaderReferenceTests.cs @@ -10,7 +10,6 @@ using Microsoft.OpenApi.Reader; using Microsoft.OpenApi.Readers; using Microsoft.OpenApi.Writers; -using Microsoft.OpenApi.Services; using VerifyXunit; using Xunit; diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiLinkReferenceTests.cs b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiLinkReferenceTests.cs index 9f005727f..4845c2311 100644 --- a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiLinkReferenceTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiLinkReferenceTests.cs @@ -10,7 +10,6 @@ using Microsoft.OpenApi.Reader; using Microsoft.OpenApi.Readers; using Microsoft.OpenApi.Writers; -using Microsoft.OpenApi.Services; using VerifyXunit; using Xunit; diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiParameterReferenceTests.cs b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiParameterReferenceTests.cs index 57239f13b..5e95246ae 100644 --- a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiParameterReferenceTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiParameterReferenceTests.cs @@ -10,7 +10,6 @@ using Microsoft.OpenApi.Reader; using Microsoft.OpenApi.Readers; using Microsoft.OpenApi.Writers; -using Microsoft.OpenApi.Services; using VerifyXunit; using Xunit; diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiPathItemReferenceTests.cs b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiPathItemReferenceTests.cs index 5d18b9095..510dfbda3 100644 --- a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiPathItemReferenceTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiPathItemReferenceTests.cs @@ -10,7 +10,6 @@ using Microsoft.OpenApi.Reader; using Microsoft.OpenApi.Readers; using Microsoft.OpenApi.Writers; -using Microsoft.OpenApi.Services; using VerifyXunit; using Xunit; diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiRequestBodyReferenceTests.cs b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiRequestBodyReferenceTests.cs index 4befbb298..0f1d8f634 100644 --- a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiRequestBodyReferenceTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiRequestBodyReferenceTests.cs @@ -10,7 +10,6 @@ using Microsoft.OpenApi.Reader; using Microsoft.OpenApi.Readers; using Microsoft.OpenApi.Writers; -using Microsoft.OpenApi.Services; using VerifyXunit; using Xunit; diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiResponseReferenceTest.cs b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiResponseReferenceTest.cs index 441677a6f..b39d6040b 100644 --- a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiResponseReferenceTest.cs +++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiResponseReferenceTest.cs @@ -10,7 +10,6 @@ using Microsoft.OpenApi.Reader; using Microsoft.OpenApi.Readers; using Microsoft.OpenApi.Writers; -using Microsoft.OpenApi.Services; using VerifyXunit; using Xunit; diff --git a/test/Microsoft.OpenApi.Tests/Validations/OpenApiHeaderValidationTests.cs b/test/Microsoft.OpenApi.Tests/Validations/OpenApiHeaderValidationTests.cs index 5f067a3b2..3a685f3a8 100644 --- a/test/Microsoft.OpenApi.Tests/Validations/OpenApiHeaderValidationTests.cs +++ b/test/Microsoft.OpenApi.Tests/Validations/OpenApiHeaderValidationTests.cs @@ -4,8 +4,6 @@ using System.Collections.Generic; using System.Linq; using System.Text.Json.Nodes; -using FluentAssertions; -using Microsoft.OpenApi.Any; using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Services; using Microsoft.OpenApi.Validations.Rules; diff --git a/test/Microsoft.OpenApi.Tests/Validations/OpenApiMediaTypeValidationTests.cs b/test/Microsoft.OpenApi.Tests/Validations/OpenApiMediaTypeValidationTests.cs index a3729e0b1..834443135 100644 --- a/test/Microsoft.OpenApi.Tests/Validations/OpenApiMediaTypeValidationTests.cs +++ b/test/Microsoft.OpenApi.Tests/Validations/OpenApiMediaTypeValidationTests.cs @@ -4,11 +4,8 @@ using System.Collections.Generic; using System.Linq; using System.Text.Json.Nodes; -using FluentAssertions; -using Microsoft.OpenApi.Any; using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Services; -using Microsoft.OpenApi.Validations.Rules; using Xunit; namespace Microsoft.OpenApi.Validations.Tests From 865872d66a2967974526da03f3bdea20f0bd6b9e Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Wed, 15 Jan 2025 09:47:43 -0500 Subject: [PATCH 60/90] chore: FA replacement additional batch Signed-off-by: Vincent Biret --- .../Models/OpenApiDocumentTests.cs | 24 +++++-------- .../Models/OpenApiMediaTypeTests.cs | 18 +++++----- .../Models/OpenApiOperationTests.cs | 20 +++++------ .../Models/OpenApiReferenceTests.cs | 36 +++++++++---------- .../Models/OpenApiSchemaTests.cs | 2 +- .../Models/OpenApiSecuritySchemeTests.cs | 14 ++++---- 6 files changed, 53 insertions(+), 61 deletions(-) diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiDocumentTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiDocumentTests.cs index 326575b9b..afb06929d 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiDocumentTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiDocumentTests.cs @@ -1484,8 +1484,7 @@ public async Task SerializeSimpleDocumentWithTopLevelReferencingComponentsAsYaml // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); - expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Fact] @@ -1504,8 +1503,7 @@ public async Task SerializeSimpleDocumentWithTopLevelSelfReferencingComponentsAs // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); - expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Fact] @@ -1533,8 +1531,7 @@ public async Task SerializeSimpleDocumentWithTopLevelSelfReferencingWithOtherPro // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); - expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Fact] @@ -1615,8 +1612,7 @@ public async Task SerializeRelativePathAsV2JsonWorks() // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); - expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Fact] @@ -1646,8 +1642,7 @@ public async Task SerializeRelativePathWithHostAsV2JsonWorks() // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); - expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Fact] @@ -1676,8 +1671,7 @@ public async Task SerializeRelativeRootPathWithHostAsV2JsonWorks() // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); - expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Fact] @@ -1762,8 +1756,7 @@ public async Task SerializeV2DocumentWithNonArraySchemaTypeDoesNotWriteOutCollec // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); - expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Fact] @@ -1851,8 +1844,7 @@ public async Task SerializeV2DocumentWithStyleAsNullDoesNotWriteOutStyleValue() // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); - expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Fact] diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiMediaTypeTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiMediaTypeTests.cs index db9bfd7d5..4a7b25440 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiMediaTypeTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiMediaTypeTests.cs @@ -141,7 +141,7 @@ public async Task SerializeBasicMediaTypeAsV3Works(OpenApiFormat format, string // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Fact] @@ -169,7 +169,7 @@ public async Task SerializeAdvanceMediaTypeAsV3JsonWorks() // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Fact] @@ -193,7 +193,7 @@ public async Task SerializeAdvanceMediaTypeAsV3YamlWorks() // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Fact] @@ -228,7 +228,7 @@ public async Task SerializeMediaTypeWithObjectExampleAsV3YamlWorks() // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Fact] @@ -279,7 +279,7 @@ public async Task SerializeMediaTypeWithObjectExampleAsV3JsonWorks() // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Fact] @@ -303,7 +303,7 @@ public async Task SerializeMediaTypeWithXmlExampleAsV3YamlWorks() // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Fact] @@ -331,7 +331,7 @@ public async Task SerializeMediaTypeWithXmlExampleAsV3JsonWorks() // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Fact] @@ -369,7 +369,7 @@ public async Task SerializeMediaTypeWithObjectExamplesAsV3YamlWorks() // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Fact] @@ -425,7 +425,7 @@ public async Task SerializeMediaTypeWithObjectExamplesAsV3JsonWorks() // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Fact] diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiOperationTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiOperationTests.cs index 654db50d5..db98dfa61 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiOperationTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiOperationTests.cs @@ -273,7 +273,7 @@ public async Task SerializeBasicOperationAsV3JsonWorks() // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Fact] @@ -345,7 +345,7 @@ public async Task SerializeOperationWithBodyAsV3JsonWorks() // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Fact] @@ -429,7 +429,7 @@ public async Task SerializeAdvancedOperationWithTagAndSecurityAsV3JsonWorks() // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Fact] @@ -449,7 +449,7 @@ public async Task SerializeBasicOperationAsV2JsonWorks() // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Fact] @@ -528,7 +528,7 @@ public async Task SerializeOperationWithFormDataAsV3JsonWorks() // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Fact] @@ -584,7 +584,7 @@ public async Task SerializeOperationWithFormDataAsV2JsonWorks() // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Fact] @@ -653,7 +653,7 @@ public async Task SerializeOperationWithBodyAsV2JsonWorks() // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Fact] @@ -734,7 +734,7 @@ public async Task SerializeAdvancedOperationWithTagAndSecurityAsV2JsonWorks() // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Fact] @@ -759,7 +759,7 @@ public async Task SerializeOperationWithNullCollectionAsV2JsonWorks() // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Fact] @@ -822,7 +822,7 @@ public async Task EnsureOpenApiOperationCopyConstructor_SerializationResultsInSa var actual = await openApiOperation.SerializeAsJsonAsync(OpenApiSpecVersion.OpenApi3_0); // Assert - actual.Should().Be(expected); + Assert.Equal(expected, actual); } } diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiReferenceTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiReferenceTests.cs index 46d044c7c..617b43fd8 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiReferenceTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiReferenceTests.cs @@ -30,11 +30,11 @@ public void SettingInternalReferenceForComponentsStyleReferenceShouldSucceed( // Assert Assert.Null(reference.ExternalResource); - reference.Type.Should().Be(type); - reference.Id.Should().Be(id); + Assert.Equal(type, reference.Type); + Assert.Equal(id, reference.Id); - reference.ReferenceV3.Should().Be(input); - reference.ReferenceV2.Should().Be(input.Replace("schemas", "definitions").Replace("/components", "")); + Assert.Equal(input, reference.ReferenceV3); + Assert.Equal(input.Replace("schemas", "definitions").Replace("/components", ""), reference.ReferenceV2); } [Theory] @@ -55,10 +55,10 @@ public void SettingExternalReferenceV3ShouldSucceed(string expected, string exte }; // Assert - reference.ExternalResource.Should().Be(externalResource); - reference.Id.Should().Be(id); + Assert.Equal(externalResource, reference.ExternalResource); + Assert.Equal(id, reference.Id); - reference.ReferenceV3.Should().Be(expected); + Assert.Equal(expected, reference.ReferenceV3); } [Theory] @@ -79,10 +79,10 @@ public void SettingExternalReferenceV2ShouldSucceed(string expected, string exte }; // Assert - reference.ExternalResource.Should().Be(externalResource); - reference.Id.Should().Be(id); + Assert.Equal(externalResource, reference.ExternalResource); + Assert.Equal(id, reference.Id); - reference.ReferenceV2.Should().Be(expected); + Assert.Equal(expected, reference.ReferenceV2); } [Fact] @@ -103,7 +103,7 @@ public async Task SerializeSchemaReferenceAsJsonV3Works() actual = actual.MakeLineBreaksEnvironmentNeutral(); // Assert - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Fact] @@ -122,7 +122,7 @@ public async Task SerializeSchemaReferenceAsYamlV3Works() var actual = await reference.SerializeAsYamlAsync(OpenApiSpecVersion.OpenApi3_0); // Assert - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Fact] @@ -146,7 +146,7 @@ public async Task SerializeSchemaReferenceAsJsonV2Works() var actual = await reference.SerializeAsJsonAsync(OpenApiSpecVersion.OpenApi2_0); // Assert - actual.MakeLineBreaksEnvironmentNeutral().Should().Be(expected); + Assert.Equal(expected, actual.MakeLineBreaksEnvironmentNeutral()); } [Fact] @@ -164,7 +164,7 @@ public async Task SerializeSchemaReferenceAsYamlV2Works() var actual = await reference.SerializeAsYamlAsync(OpenApiSpecVersion.OpenApi2_0); // Assert - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Fact] @@ -191,7 +191,7 @@ public async Task SerializeExternalReferenceAsJsonV2Works() actual = actual.MakeLineBreaksEnvironmentNeutral(); // Assert - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Fact] @@ -210,7 +210,7 @@ public async Task SerializeExternalReferenceAsYamlV2Works() var actual = await reference.SerializeAsYamlAsync(OpenApiSpecVersion.OpenApi2_0); // Assert - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Fact] @@ -232,7 +232,7 @@ public async Task SerializeExternalReferenceAsJsonV3Works() actual = actual.MakeLineBreaksEnvironmentNeutral(); // Assert - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Fact] @@ -246,7 +246,7 @@ public async Task SerializeExternalReferenceAsYamlV3Works() var actual = await reference.SerializeAsYamlAsync(OpenApiSpecVersion.OpenApi3_0); // Assert - actual.Should().Be(expected); + Assert.Equal(expected, actual); } } } diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiSchemaTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiSchemaTests.cs index ea867353d..145d7f535 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiSchemaTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiSchemaTests.cs @@ -627,7 +627,7 @@ public async Task SerializeSchemaWithUnrecognizedPropertiesWorks() var actual = await schema.SerializeAsJsonAsync(OpenApiSpecVersion.OpenApi3_1); // Assert - Assert.Equal(expected, actual); + Assert.Equal(expected.MakeLineBreaksEnvironmentNeutral(), actual.MakeLineBreaksEnvironmentNeutral()); } internal class SchemaVisitor : OpenApiVisitorBase diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiSecuritySchemeTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiSecuritySchemeTests.cs index ebe06d4d6..345a75387 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiSecuritySchemeTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiSecuritySchemeTests.cs @@ -134,7 +134,7 @@ public async Task SerializeApiKeySecuritySchemeAsV3JsonWorks() // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Fact] @@ -155,7 +155,7 @@ public async Task SerializeApiKeySecuritySchemeAsV3YamlWorks() // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Fact] @@ -177,7 +177,7 @@ public async Task SerializeHttpBasicSecuritySchemeAsV3JsonWorks() // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Fact] @@ -200,7 +200,7 @@ public async Task SerializeHttpBearerSecuritySchemeAsV3JsonWorks() // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Fact] @@ -230,7 +230,7 @@ public async Task SerializeOAuthSingleFlowSecuritySchemeAsV3JsonWorks() // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Fact] @@ -276,7 +276,7 @@ public async Task SerializeOAuthMultipleFlowSecuritySchemeAsV3JsonWorks() // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Fact] @@ -298,7 +298,7 @@ public async Task SerializeOpenIdConnectSecuritySchemeAsV3JsonWorks() // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Theory] From b15de7aee7a7c8925be60180d278ae6e4494cde5 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Wed, 15 Jan 2025 10:11:30 -0500 Subject: [PATCH 61/90] chore: FA replacement additional batch Signed-off-by: Vincent Biret --- .../V31Tests/OpenApiSchemaTests.cs | 26 +++++++++---------- .../Models/OpenApiContactTests.cs | 7 +++-- .../Models/OpenApiInfoTests.cs | 11 ++++---- .../Models/OpenApiLicenseTests.cs | 9 +++---- .../Models/OpenApiOperationTests.cs | 1 - .../Models/OpenApiReferenceTests.cs | 1 - .../Models/OpenApiResponseTests.cs | 11 ++++---- .../Models/OpenApiSecurityRequirementTests.cs | 10 +++---- .../Models/OpenApiSecuritySchemeTests.cs | 1 - .../Models/OpenApiServerTests.cs | 5 ++-- .../Models/OpenApiServerVariableTests.cs | 7 +++-- .../Models/OpenApiTagTests.cs | 17 ++++++------ .../Models/OpenApiXmlTests.cs | 7 +++-- 13 files changed, 51 insertions(+), 62 deletions(-) diff --git a/test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiSchemaTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiSchemaTests.cs index add70aa92..b3b26c079 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiSchemaTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiSchemaTests.cs @@ -277,7 +277,7 @@ public void ParseSchemaWithExamplesShouldSucceed() var schema = OpenApiModelFactory.Parse(input, OpenApiSpecVersion.OpenApi3_1, out _, "yaml"); // Assert - schema.Examples.Should().HaveCount(2); + Assert.Equal(2, schema.Examples.Count); } [Fact] @@ -319,7 +319,7 @@ public async Task SerializeV31SchemaWithMultipleTypesAsV3Works() schema.SerializeAsV3(new OpenApiYamlWriter(writer)); var schema1String = writer.ToString(); - schema1String.MakeLineBreaksEnvironmentNeutral().Should().Be(expected.MakeLineBreaksEnvironmentNeutral()); + Assert.Equal(expected.MakeLineBreaksEnvironmentNeutral(), schema1String.MakeLineBreaksEnvironmentNeutral()); } [Fact] @@ -338,7 +338,7 @@ public async Task SerializeV31SchemaWithMultipleTypesAsV2Works() schema.SerializeAsV2(new OpenApiYamlWriter(writer)); var schema1String = writer.ToString(); - schema1String.MakeLineBreaksEnvironmentNeutral().Should().Be(expected.MakeLineBreaksEnvironmentNeutral()); + Assert.Equal(expected.MakeLineBreaksEnvironmentNeutral(), schema1String.MakeLineBreaksEnvironmentNeutral()); } [Fact] @@ -358,7 +358,7 @@ public async Task SerializeV3SchemaWithNullableAsV31Works() schema.SerializeAsV31(new OpenApiYamlWriter(writer)); var schemaString = writer.ToString(); - schemaString.MakeLineBreaksEnvironmentNeutral().Should().Be(expected.MakeLineBreaksEnvironmentNeutral()); + Assert.Equal(expected.MakeLineBreaksEnvironmentNeutral(), schemaString.MakeLineBreaksEnvironmentNeutral()); } [Fact] @@ -379,7 +379,7 @@ public async Task SerializeV2SchemaWithNullableExtensionAsV31Works() schema.SerializeAsV31(new OpenApiYamlWriter(writer)); var schemaString = writer.ToString(); - schemaString.MakeLineBreaksEnvironmentNeutral().Should().Be(expected.MakeLineBreaksEnvironmentNeutral()); + Assert.Equal(expected.MakeLineBreaksEnvironmentNeutral(), schemaString.MakeLineBreaksEnvironmentNeutral()); } [Fact] @@ -398,7 +398,7 @@ public void SerializeSchemaWithTypeArrayAndNullableDoesntEmitType() schema.SerializeAsV2(new OpenApiYamlWriter(writer)); var schemaString = writer.ToString(); - schemaString.MakeLineBreaksEnvironmentNeutral().Should().Be(expected.MakeLineBreaksEnvironmentNeutral()); + Assert.Equal(expected.MakeLineBreaksEnvironmentNeutral(), schemaString.MakeLineBreaksEnvironmentNeutral()); } [Theory] @@ -413,7 +413,7 @@ public async Task LoadSchemaWithNullableExtensionAsV31Works(string filePath) var schema = await OpenApiModelFactory.LoadAsync(path, OpenApiSpecVersion.OpenApi3_1); // Assert - schema.Type.Should().Be(JsonSchemaType.String | JsonSchemaType.Null); + Assert.Equal(JsonSchemaType.String | JsonSchemaType.Null, schema.Type); } [Fact] @@ -458,8 +458,8 @@ public async Task SerializeSchemaWithJsonSchemaKeywordsWorks() var schemaString = writer.ToString(); // Assert - schema.Vocabulary.Keys.Count.Should().Be(5); - schemaString.MakeLineBreaksEnvironmentNeutral().Should().Be(expected.MakeLineBreaksEnvironmentNeutral()); + Assert.Equal(5, schema.Vocabulary.Keys.Count); + Assert.Equal(expected.MakeLineBreaksEnvironmentNeutral(), schemaString.MakeLineBreaksEnvironmentNeutral()); } [Fact] @@ -495,14 +495,14 @@ public async Task ParseSchemaWithConstWorks() // Act var schema = await OpenApiModelFactory.LoadAsync(path, OpenApiSpecVersion.OpenApi3_1); - schema.Properties["status"].Const.Should().Be("active"); - schema.Properties["user"].Properties["role"].Const.Should().Be("admin"); + Assert.Equal("active", schema.Properties["status"].Const); + Assert.Equal("admin", schema.Properties["user"].Properties["role"].Const); // serialization var writer = new StringWriter(); schema.SerializeAsV31(new OpenApiJsonWriter(writer)); var schemaString = writer.ToString(); - schemaString.MakeLineBreaksEnvironmentNeutral().Should().Be(expected.MakeLineBreaksEnvironmentNeutral()); + Assert.Equal(expected.MakeLineBreaksEnvironmentNeutral(), schemaString.MakeLineBreaksEnvironmentNeutral()); } [Fact] @@ -517,7 +517,7 @@ public void ParseSchemaWithUnrecognizedKeywordsWorks() } "; var schema = OpenApiModelFactory.Parse(input, OpenApiSpecVersion.OpenApi3_1, out _, "json"); - schema.UnrecognizedKeywords.Should().HaveCount(2); + Assert.Equal(2, schema.UnrecognizedKeywords.Count); } } diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiContactTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiContactTests.cs index 337548ccb..aec4815e0 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiContactTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiContactTests.cs @@ -3,7 +3,6 @@ using System.Collections.Generic; using System.Threading.Tasks; -using FluentAssertions; using Microsoft.OpenApi.Any; using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Interfaces; @@ -44,7 +43,7 @@ public async Task SerializeBasicContactWorks( // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Theory] @@ -69,7 +68,7 @@ public async Task SerializeAdvanceContactAsJsonWorks(OpenApiSpecVersion version) // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Theory] @@ -92,7 +91,7 @@ public async Task SerializeAdvanceContactAsYamlWorks(OpenApiSpecVersion version) // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } } } diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiInfoTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiInfoTests.cs index a3c4633e1..65ded8841 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiInfoTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiInfoTests.cs @@ -3,7 +3,6 @@ using System.Collections.Generic; using System.Threading.Tasks; -using FluentAssertions; using Microsoft.OpenApi.Any; using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Interfaces; @@ -71,7 +70,7 @@ public async Task SerializeBasicInfoAsJsonWorks(OpenApiSpecVersion version, stri // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } public static IEnumerable BasicInfoYamlExpected() @@ -100,7 +99,7 @@ public async Task SerializeBasicInfoAsYamlWorks(OpenApiSpecVersion version, stri // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } public static IEnumerable AdvanceInfoJsonExpect() @@ -145,7 +144,7 @@ public async Task SerializeAdvanceInfoAsJsonWorks(OpenApiSpecVersion version, st // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } public static IEnumerable AdvanceInfoYamlExpect() @@ -186,7 +185,7 @@ public async Task SerializeAdvanceInfoAsYamlWorks(OpenApiSpecVersion version, st // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Fact] @@ -211,7 +210,7 @@ public async Task InfoVersionShouldAcceptDateStyledAsVersions() // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Fact] diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiLicenseTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiLicenseTests.cs index 7ee848a26..7daa55e29 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiLicenseTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiLicenseTests.cs @@ -3,7 +3,6 @@ using System.Collections.Generic; using System.Threading.Tasks; -using FluentAssertions; using Microsoft.OpenApi.Any; using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Interfaces; @@ -55,7 +54,7 @@ public async Task SerializeBasicLicenseAsJsonWorks(OpenApiSpecVersion version) // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Theory] @@ -72,7 +71,7 @@ public async Task SerializeBasicLicenseAsYamlWorks(OpenApiSpecVersion version) // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Theory] @@ -96,7 +95,7 @@ public async Task SerializeAdvanceLicenseAsJsonWorks(OpenApiSpecVersion version) // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Theory] @@ -118,7 +117,7 @@ public async Task SerializeAdvanceLicenseAsYamlWorks(OpenApiSpecVersion version) // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Fact] diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiOperationTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiOperationTests.cs index db98dfa61..a3995601c 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiOperationTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiOperationTests.cs @@ -3,7 +3,6 @@ using System.Collections.Generic; using System.Threading.Tasks; -using FluentAssertions; using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Models.References; diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiReferenceTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiReferenceTests.cs index 617b43fd8..2a27313ca 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiReferenceTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiReferenceTests.cs @@ -2,7 +2,6 @@ // Licensed under the MIT license. using System.Threading.Tasks; -using FluentAssertions; using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Models; using Xunit; diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiResponseTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiResponseTests.cs index 5026a0549..14d14e4be 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiResponseTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiResponseTests.cs @@ -5,7 +5,6 @@ using System.Globalization; using System.IO; using System.Threading.Tasks; -using FluentAssertions; using Microsoft.OpenApi.Any; using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Interfaces; @@ -201,7 +200,7 @@ public async Task SerializeBasicResponseWorks( // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Fact] @@ -244,7 +243,7 @@ public async Task SerializeAdvancedResponseAsV3JsonWorks() // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Fact] @@ -277,7 +276,7 @@ public async Task SerializeAdvancedResponseAsV3YamlWorks() // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Fact] @@ -314,7 +313,7 @@ public async Task SerializeAdvancedResponseAsV2JsonWorks() // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Fact] @@ -344,7 +343,7 @@ public async Task SerializeAdvancedResponseAsV2YamlWorks() // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Theory] diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiSecurityRequirementTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiSecurityRequirementTests.cs index 8dcebc315..b555b9311 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiSecurityRequirementTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiSecurityRequirementTests.cs @@ -83,7 +83,7 @@ public async Task SerializeBasicSecurityRequirementAsV3JsonWorks() // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Theory] @@ -129,7 +129,7 @@ public async Task SerializeSecurityRequirementWithReferencedSecuritySchemeAsV3Js // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Fact] @@ -158,7 +158,7 @@ public async Task SerializeSecurityRequirementWithReferencedSecuritySchemeAsV2Js // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Fact] @@ -183,7 +183,7 @@ public async Task SerializeSecurityRequirementWithUnreferencedSecuritySchemeAsV3 // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Fact] @@ -209,7 +209,7 @@ public async Task SerializeSecurityRequirementWithUnreferencedSecuritySchemeAsV2 // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Fact] diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiSecuritySchemeTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiSecuritySchemeTests.cs index 345a75387..9c59ca4bd 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiSecuritySchemeTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiSecuritySchemeTests.cs @@ -5,7 +5,6 @@ using System.Globalization; using System.IO; using System.Threading.Tasks; -using FluentAssertions; using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Models.References; diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiServerTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiServerTests.cs index 1d4cc248c..bbfacf01c 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiServerTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiServerTests.cs @@ -3,7 +3,6 @@ using System.Collections.Generic; using System.Threading.Tasks; -using FluentAssertions; using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Models; using Xunit; @@ -65,7 +64,7 @@ public async Task SerializeBasicServerAsV3JsonWorks() // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Fact] @@ -103,7 +102,7 @@ public async Task SerializeAdvancedServerAsV3JsonWorks() // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } } } diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiServerVariableTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiServerVariableTests.cs index 032b9c7f3..255bfe908 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiServerVariableTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiServerVariableTests.cs @@ -2,7 +2,6 @@ // Licensed under the MIT license. using System.Threading.Tasks; -using FluentAssertions; using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Models; using Xunit; @@ -36,7 +35,7 @@ public async Task SerializeBasicServerVariableAsV3Works(OpenApiFormat format, st // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Fact] @@ -61,7 +60,7 @@ public async Task SerializeAdvancedServerVariableAsV3JsonWorks() // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Fact] @@ -83,7 +82,7 @@ public async Task SerializeAdvancedServerVariableAsV3YamlWorks() // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } } } diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiTagTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiTagTests.cs index 62616fe25..508779adf 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiTagTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiTagTests.cs @@ -5,7 +5,6 @@ using System.Globalization; using System.IO; using System.Threading.Tasks; -using FluentAssertions; using Microsoft.OpenApi.Interfaces; using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Models.References; @@ -82,7 +81,7 @@ public void SerializeBasicTagAsV3YamlWithoutReferenceWorks() // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Fact] @@ -101,7 +100,7 @@ public async Task SerializeBasicTagAsV2YamlWithoutReferenceWorks() // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Fact] @@ -128,7 +127,7 @@ public async Task SerializeAdvancedTagAsV3YamlWithoutReferenceWorks() // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Fact] @@ -155,7 +154,7 @@ public async Task SerializeAdvancedTagAsV2YamlWithoutReferenceWorks() // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Theory] @@ -214,7 +213,7 @@ public async Task SerializeAdvancedTagAsV3YamlWorks() // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Fact] @@ -239,7 +238,7 @@ public async Task SerializeAdvancedTagAsV2YamlWorks() // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Theory] @@ -293,7 +292,7 @@ public async Task SerializeReferencedTagAsV3YamlWorks() // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Fact] @@ -313,7 +312,7 @@ public async Task SerializeReferencedTagAsV2YamlWorks() // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } } } diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiXmlTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiXmlTests.cs index 45c13500c..9ff3569d4 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiXmlTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiXmlTests.cs @@ -3,7 +3,6 @@ using System.Collections.Generic; using System.Threading.Tasks; -using FluentAssertions; using Microsoft.OpenApi.Any; using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Interfaces; @@ -44,7 +43,7 @@ public async Task SerializeBasicXmlWorks( // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be("{ }"); + Assert.Equal("{ }", actual); } [Theory] @@ -71,7 +70,7 @@ public async Task SerializeAdvancedXmlAsJsonWorks(OpenApiSpecVersion version) // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Theory] @@ -96,7 +95,7 @@ public async Task SerializeAdvancedXmlAsYamlWorks(OpenApiSpecVersion version) // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } } } From 0cca61ac59f94e69308fa98994039c43cb9988d0 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Wed, 15 Jan 2025 10:21:23 -0500 Subject: [PATCH 62/90] chore: additional FA replacementtttttttttt Signed-off-by: Vincent Biret --- .../V3Tests/OpenApiDocumentTests.cs | 4 ++-- .../V3Tests/OpenApiSchemaTests.cs | 2 +- .../Expressions/RuntimeExpressionTests.cs | 8 ++++---- .../Extensions/OpenApiServerExtensionsTests.cs | 4 ++-- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDocumentTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDocumentTests.cs index 03f310f6e..8e9c5208e 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDocumentTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDocumentTests.cs @@ -107,7 +107,7 @@ public void ParseInlineStringWithoutProvidingFormatSucceeds() """; var readResult = OpenApiDocument.Parse(stringOpenApiDoc); - readResult.Document.Info.Title.Should().Be("Sample API"); + Assert.Equal("Sample API", readResult.Document.Info.Title); } [Fact] @@ -1401,7 +1401,7 @@ public void ParseBasicDocumentWithServerVariableAndNoDefaultShouldFail() paths: {} """, "yaml"); - result.Diagnostic.Errors.Should().NotBeEmpty(); + Assert.NotEmpty(result.Diagnostic.Errors); } [Fact] diff --git a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiSchemaTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiSchemaTests.cs index 3110ef251..2ec8704c5 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiSchemaTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiSchemaTests.cs @@ -386,7 +386,7 @@ public async Task ParseAdvancedSchemaWithReferenceShouldSucceed() var expected = await expectedComponents.SerializeAsYamlAsync(OpenApiSpecVersion.OpenApi3_0); // Assert - actual.Should().Be(expected); + Assert.Equal(expected, actual); } } } diff --git a/test/Microsoft.OpenApi.Tests/Expressions/RuntimeExpressionTests.cs b/test/Microsoft.OpenApi.Tests/Expressions/RuntimeExpressionTests.cs index fe6fde3d6..abd9833a4 100644 --- a/test/Microsoft.OpenApi.Tests/Expressions/RuntimeExpressionTests.cs +++ b/test/Microsoft.OpenApi.Tests/Expressions/RuntimeExpressionTests.cs @@ -223,9 +223,9 @@ public void CompositeRuntimeExpressionWithMultipleRuntimeExpressionsAndFakeBrace // Assert Assert.NotNull(runtimeExpression); - runtimeExpression.Should().BeOfType(typeof(CompositeExpression)); + Assert.IsType(runtimeExpression); var response = (CompositeExpression)runtimeExpression; - response.Expression.Should().Be(expression); + Assert.Equal(expression, response.Expression); var compositeExpression = runtimeExpression as CompositeExpression; compositeExpression.ContainedExpressions.Should().BeEquivalentTo(new List @@ -263,9 +263,9 @@ public void CompositeRuntimeExpressionWithoutRecognizedRuntimeExpressions(string // Assert Assert.NotNull(runtimeExpression); - runtimeExpression.Should().BeOfType(typeof(CompositeExpression)); + Assert.IsType(runtimeExpression); var response = (CompositeExpression)runtimeExpression; - response.Expression.Should().Be(expression); + Assert.Equal(expression, response.Expression); var compositeExpression = runtimeExpression as CompositeExpression; diff --git a/test/Microsoft.OpenApi.Tests/Extensions/OpenApiServerExtensionsTests.cs b/test/Microsoft.OpenApi.Tests/Extensions/OpenApiServerExtensionsTests.cs index b8f581541..24337549f 100644 --- a/test/Microsoft.OpenApi.Tests/Extensions/OpenApiServerExtensionsTests.cs +++ b/test/Microsoft.OpenApi.Tests/Extensions/OpenApiServerExtensionsTests.cs @@ -24,7 +24,7 @@ public void ShouldSubstituteServerVariableWithProvidedValues() var url = variable.ReplaceServerUrlVariables(new Dictionary {{"version", "v2"}}); - url.Should().Be("http://example.com/api/v2"); + Assert.Equal("http://example.com/api/v2", url); } [Fact] @@ -42,7 +42,7 @@ public void ShouldSubstituteServerVariableWithDefaultValues() var url = variable.ReplaceServerUrlVariables(new Dictionary(0)); - url.Should().Be("http://example.com/api/v1"); + Assert.Equal("http://example.com/api/v1", url); } [Fact] From 4ecf8a4123c6d190ab39e9ad59bc9c3ca8cde45b Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Wed, 15 Jan 2025 10:30:27 -0500 Subject: [PATCH 63/90] chore: additional batch of FA replacement Signed-off-by: Vincent Biret --- .../V31Tests/OpenApiDocumentTests.cs | 4 ++-- .../Extensions/OpenApiServerExtensionsTests.cs | 1 - .../Extensions/OpenApiTypeMapperTests.cs | 2 +- .../Models/OpenApiEncodingTests.cs | 7 +++---- .../Models/OpenApiExternalDocsTests.cs | 7 +++---- .../Models/OpenApiMediaTypeTests.cs | 2 +- .../Models/OpenApiOAuthFlowTests.cs | 9 ++++----- .../Models/OpenApiParameterTests.cs | 13 ++++++------- 8 files changed, 20 insertions(+), 25 deletions(-) diff --git a/test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiDocumentTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiDocumentTests.cs index 842f7172a..9f4b82472 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiDocumentTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiDocumentTests.cs @@ -499,7 +499,7 @@ public async Task ExternalDocumentDereferenceToOpenApiDocumentUsingJsonPointerWo // Assert result.Document.Workspace.Contains("./externalResource.yaml"); - responseSchema.Properties.Count.Should().Be(2); // reference has been resolved + Assert.Equal(2, responseSchema.Properties.Count); // reference has been resolved } [Fact] @@ -522,7 +522,7 @@ public async Task ParseExternalDocumentDereferenceToOpenApiDocumentByIdWorks() result.Document.Workspace.RegisterComponents(doc2); // Assert - requestBodySchema.Properties.Count.Should().Be(2); // reference has been resolved + Assert.Equal(2, requestBodySchema.Properties.Count); // reference has been resolved } [Fact] diff --git a/test/Microsoft.OpenApi.Tests/Extensions/OpenApiServerExtensionsTests.cs b/test/Microsoft.OpenApi.Tests/Extensions/OpenApiServerExtensionsTests.cs index 24337549f..e15527c64 100644 --- a/test/Microsoft.OpenApi.Tests/Extensions/OpenApiServerExtensionsTests.cs +++ b/test/Microsoft.OpenApi.Tests/Extensions/OpenApiServerExtensionsTests.cs @@ -1,6 +1,5 @@ using System; using System.Collections.Generic; -using FluentAssertions; using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Models; using Xunit; diff --git a/test/Microsoft.OpenApi.Tests/Extensions/OpenApiTypeMapperTests.cs b/test/Microsoft.OpenApi.Tests/Extensions/OpenApiTypeMapperTests.cs index deec23c4e..a8abcf511 100644 --- a/test/Microsoft.OpenApi.Tests/Extensions/OpenApiTypeMapperTests.cs +++ b/test/Microsoft.OpenApi.Tests/Extensions/OpenApiTypeMapperTests.cs @@ -77,7 +77,7 @@ public void MapOpenApiSchemaTypeToSimpleTypeShouldSucceed(OpenApiSchema schema, var actual = OpenApiTypeMapper.MapOpenApiPrimitiveTypeToSimpleType(schema); // Assert - actual.Should().Be(expected); + Assert.Equal(expected, actual); } } } diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiEncodingTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiEncodingTests.cs index c9ce9d217..fd0b21c9d 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiEncodingTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiEncodingTests.cs @@ -2,7 +2,6 @@ // Licensed under the MIT license. using System.Threading.Tasks; -using FluentAssertions; using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Models; using Xunit; @@ -33,7 +32,7 @@ public async Task SerializeBasicEncodingAsV3Works(OpenApiFormat format, string e // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Fact] @@ -56,7 +55,7 @@ public async Task SerializeAdvanceEncodingAsV3JsonWorks() // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Fact] @@ -77,7 +76,7 @@ public async Task SerializeAdvanceEncodingAsV3YamlWorks() // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } } } diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiExternalDocsTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiExternalDocsTests.cs index 59c81865f..a2bee2e58 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiExternalDocsTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiExternalDocsTests.cs @@ -2,7 +2,6 @@ // Licensed under the MIT license. using System.Threading.Tasks; -using FluentAssertions; using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Models; using Xunit; @@ -33,7 +32,7 @@ public async Task SerializeBasicExternalDocsAsV3Works(OpenApiFormat format, stri // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Fact] @@ -54,7 +53,7 @@ public async Task SerializeAdvanceExDocsAsV3JsonWorks() // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Fact] @@ -73,7 +72,7 @@ public async Task SerializeAdvanceExDocsAsV3YamlWorks() // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } #endregion diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiMediaTypeTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiMediaTypeTests.cs index 4a7b25440..e062bfda3 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiMediaTypeTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiMediaTypeTests.cs @@ -441,7 +441,7 @@ public void MediaTypeCopyConstructorWorks() // Assert MediaTypeWithObjectExamples.Examples.Should().NotBeEquivalentTo(clone.Examples); - MediaTypeWithObjectExamples.Example.Should().Be(null); + Assert.Null(MediaTypeWithObjectExamples.Example); } } } diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiOAuthFlowTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiOAuthFlowTests.cs index e47d1db9b..b3e788625 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiOAuthFlowTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiOAuthFlowTests.cs @@ -3,7 +3,6 @@ using System.Collections.Generic; using System.Threading.Tasks; -using FluentAssertions; using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Models; using Xunit; @@ -54,7 +53,7 @@ public async Task SerializeBasicOAuthFlowAsV3JsonWorks() // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Fact] @@ -70,7 +69,7 @@ public async Task SerializeBasicOAuthFlowAsV3YamlWorks() // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Fact] @@ -94,7 +93,7 @@ public async Task SerializePartialOAuthFlowAsV3JsonWorks() // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Fact] @@ -120,7 +119,7 @@ public async Task SerializeCompleteOAuthFlowAsV3JsonWorks() // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } } } diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiParameterTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiParameterTests.cs index 8b4d8a42a..1c2e3329f 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiParameterTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiParameterTests.cs @@ -5,7 +5,6 @@ using System.Globalization; using System.IO; using System.Threading.Tasks; -using FluentAssertions; using Microsoft.OpenApi.Any; using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Models; @@ -184,7 +183,7 @@ public void WhenStyleIsFormTheDefaultValueOfExplodeShouldBeTrueOtherwiseFalse(Pa }; // Act & Assert - parameter.Explode.Should().Be(expectedExplode); + Assert.Equal(expectedExplode, parameter.Explode); } [Theory] @@ -208,7 +207,7 @@ public async Task WhenStyleAndInIsNullTheDefaultValueOfStyleShouldBeSimple(Param parameter.SerializeAsV3(writer); await writer.FlushAsync(); - parameter.Style.Should().Be(expectedStyle); + Assert.Equal(expectedStyle, parameter.Style); } [Fact] @@ -226,7 +225,7 @@ public async Task SerializeQueryParameterWithMissingStyleSucceeds() var actual = await QueryParameterWithMissingStyle.SerializeAsYamlAsync(OpenApiSpecVersion.OpenApi3_0); // Assert - actual.MakeLineBreaksEnvironmentNeutral().Should().Be(expected.MakeLineBreaksEnvironmentNeutral()); + Assert.Equal(expected.MakeLineBreaksEnvironmentNeutral(), actual.MakeLineBreaksEnvironmentNeutral()); } [Fact] @@ -247,7 +246,7 @@ public async Task SerializeBasicParameterAsV3JsonWorks() // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Fact] @@ -291,7 +290,7 @@ public async Task SerializeAdvancedParameterAsV3JsonWorks() // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Fact] @@ -321,7 +320,7 @@ public async Task SerializeAdvancedParameterAsV2JsonWorks() // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().Be(expected); + Assert.Equal(expected, actual); } [Theory] From d0bacd20409f65ebb230cb96ad3af852f73ffd37 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Wed, 15 Jan 2025 10:50:15 -0500 Subject: [PATCH 64/90] chore: additional FA replacement batch Signed-off-by: Vincent Biret --- .../V2Tests/OpenApiOperationTests.cs | 102 +----------------- .../V2Tests/OpenApiParameterTests.cs | 30 +++--- .../V3Tests/OpenApiParameterTests.cs | 32 +++--- .../Models/OpenApiDocumentTests.cs | 10 +- 4 files changed, 41 insertions(+), 133 deletions(-) diff --git a/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiOperationTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiOperationTests.cs index c3212b802..18b5be243 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiOperationTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiOperationTests.cs @@ -57,104 +57,6 @@ public class OpenApiOperationTests } }; - private static readonly OpenApiOperation _operationWithFormData = - new OpenApiOperation - { - Summary = "Updates a pet in the store with form data", - Description = "", - OperationId = "updatePetWithForm", - Parameters = new List - { - new OpenApiParameter - { - Name = "petId", - In = ParameterLocation.Path, - Description = "ID of pet that needs to be updated", - Required = true, - Schema = new() - { - Type = JsonSchemaType.String - } - } - }, - RequestBody = new OpenApiRequestBody - { - Content = - { - ["application/x-www-form-urlencoded"] = new OpenApiMediaType - { - Schema = new() - { - Type = JsonSchemaType.Object, - Properties = - { - ["name"] = new() - { - Description = "Updated name of the pet", - Type = JsonSchemaType.String - }, - ["status"] = new() - { - Description = "Updated status of the pet", - Type = JsonSchemaType.String - } - }, - Required = new HashSet - { - "name" - } - } - }, - ["multipart/form-data"] = new OpenApiMediaType - { - Schema = new() - { - Type = JsonSchemaType.Object, - Properties = - { - ["name"] = new() - { - Description = "Updated name of the pet", - Type = JsonSchemaType.String - }, - ["status"] = new() - { - Description = "Updated status of the pet", - Type = JsonSchemaType.String - } - }, - Required = new HashSet - { - "name" - } - } - } - } - }, - Responses = new OpenApiResponses - { - ["200"] = new OpenApiResponse - { - Description = "Pet updated.", - Content = new Dictionary - { - ["application/json"] = new OpenApiMediaType(), - ["application/xml"] = new OpenApiMediaType() - } - - }, - ["405"] = new OpenApiResponse - { - Description = "Invalid input", - Content = new Dictionary - { - ["application/json"] = new OpenApiMediaType(), - ["application/xml"] = new OpenApiMediaType() - } - } - } - }; - private static readonly OpenApiOperation _operationWithBody = new OpenApiOperation { Summary = "Updates a pet in the store with request body", @@ -230,7 +132,7 @@ public void ParseBasicOperationShouldSucceed() var operation = OpenApiV2Deserializer.LoadOperation(node); // Assert - operation.Should().BeEquivalentTo(_basicOperation); + Assert.Equivalent(_basicOperation, operation); } [Fact] @@ -248,7 +150,7 @@ public async Task ParseBasicOperationTwiceShouldYieldSameObject() var operation = OpenApiV2Deserializer.LoadOperation(node); // Assert - operation.Should().BeEquivalentTo(_basicOperation); + Assert.Equivalent(_basicOperation, operation); } [Fact] diff --git a/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiParameterTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiParameterTests.cs index d89080f6d..334b54865 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiParameterTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiParameterTests.cs @@ -50,7 +50,7 @@ public void ParsePathParameterShouldSucceed() var parameter = OpenApiV2Deserializer.LoadParameter(node); // Assert - parameter.Should().BeEquivalentTo( + Assert.Equivalent( new OpenApiParameter { In = ParameterLocation.Path, @@ -61,7 +61,8 @@ public void ParsePathParameterShouldSucceed() { Type = JsonSchemaType.String } - }); + }, + parameter); } [Fact] @@ -78,7 +79,7 @@ public void ParseQueryParameterShouldSucceed() var parameter = OpenApiV2Deserializer.LoadParameter(node); // Assert - parameter.Should().BeEquivalentTo( + Assert.Equivalent( new OpenApiParameter { In = ParameterLocation.Query, @@ -95,7 +96,8 @@ public void ParseQueryParameterShouldSucceed() }, Style = ParameterStyle.Form, Explode = true - }); + }, + parameter); } [Fact] @@ -112,7 +114,7 @@ public void ParseParameterWithNullLocationShouldSucceed() var parameter = OpenApiV2Deserializer.LoadParameter(node); // Assert - parameter.Should().BeEquivalentTo( + Assert.Equivalent( new OpenApiParameter { In = null, @@ -123,7 +125,8 @@ public void ParseParameterWithNullLocationShouldSucceed() { Type = JsonSchemaType.String } - }); + }, + parameter); } [Fact] @@ -140,7 +143,7 @@ public void ParseParameterWithNoLocationShouldSucceed() var parameter = OpenApiV2Deserializer.LoadParameter(node); // Assert - parameter.Should().BeEquivalentTo( + Assert.Equivalent( new OpenApiParameter { In = null, @@ -151,7 +154,8 @@ public void ParseParameterWithNoLocationShouldSucceed() { Type = JsonSchemaType.String } - }); + }, + parameter); } [Fact] @@ -168,14 +172,15 @@ public void ParseParameterWithNoSchemaShouldSucceed() var parameter = OpenApiV2Deserializer.LoadParameter(node); // Assert - parameter.Should().BeEquivalentTo( + Assert.Equivalent( new OpenApiParameter { In = null, Name = "username", Description = "username to fetch", Required = false - }); + }, + parameter); } [Fact] @@ -192,7 +197,7 @@ public void ParseParameterWithUnknownLocationShouldSucceed() var parameter = OpenApiV2Deserializer.LoadParameter(node); // Assert - parameter.Should().BeEquivalentTo( + Assert.Equivalent( new OpenApiParameter { In = null, @@ -203,7 +208,8 @@ public void ParseParameterWithUnknownLocationShouldSucceed() { Type = JsonSchemaType.String } - }); + }, + parameter); } [Fact] diff --git a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiParameterTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiParameterTests.cs index af79a64d3..7d36d7cff 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiParameterTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiParameterTests.cs @@ -32,7 +32,7 @@ public async Task ParsePathParameterShouldSucceed() var parameter = await OpenApiModelFactory.LoadAsync(stream, OpenApiSpecVersion.OpenApi3_0); // Assert - parameter.Should().BeEquivalentTo( + Assert.Equivalent( new OpenApiParameter { In = ParameterLocation.Path, @@ -43,7 +43,7 @@ public async Task ParsePathParameterShouldSucceed() { Type = JsonSchemaType.String } - }); + }, parameter); } [Fact] @@ -53,7 +53,7 @@ public async Task ParseQueryParameterShouldSucceed() var parameter = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "queryParameter.yaml"), OpenApiSpecVersion.OpenApi3_0); // Assert - parameter.Should().BeEquivalentTo( + Assert.Equivalent( new OpenApiParameter { In = ParameterLocation.Query, @@ -70,7 +70,7 @@ public async Task ParseQueryParameterShouldSucceed() }, Style = ParameterStyle.Form, Explode = true - }); + }, parameter); } [Fact] @@ -80,7 +80,7 @@ public async Task ParseQueryParameterWithObjectTypeShouldSucceed() var parameter = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "queryParameterWithObjectType.yaml"), OpenApiSpecVersion.OpenApi3_0); // Assert - parameter.Should().BeEquivalentTo( + Assert.Equivalent( new OpenApiParameter { In = ParameterLocation.Query, @@ -94,7 +94,7 @@ public async Task ParseQueryParameterWithObjectTypeShouldSucceed() } }, Style = ParameterStyle.Form - }); + }, parameter); } [Fact] @@ -107,7 +107,7 @@ public async Task ParseQueryParameterWithObjectTypeAndContentShouldSucceed() var parameter = await OpenApiModelFactory.LoadAsync(stream, OpenApiSpecVersion.OpenApi3_0); // Assert - parameter.Should().BeEquivalentTo( + Assert.Equivalent( new OpenApiParameter { In = ParameterLocation.Query, @@ -138,7 +138,7 @@ public async Task ParseQueryParameterWithObjectTypeAndContentShouldSucceed() } } } - }); + }, parameter); } [Fact] @@ -148,7 +148,7 @@ public async Task ParseHeaderParameterShouldSucceed() var parameter = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "headerParameter.yaml"), OpenApiSpecVersion.OpenApi3_0); // Assert - parameter.Should().BeEquivalentTo( + Assert.Equivalent( new OpenApiParameter { In = ParameterLocation.Header, @@ -166,7 +166,7 @@ public async Task ParseHeaderParameterShouldSucceed() Format = "int64", } } - }); + }, parameter); } [Fact] @@ -176,7 +176,7 @@ public async Task ParseParameterWithNullLocationShouldSucceed() var parameter = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "parameterWithNullLocation.yaml"), OpenApiSpecVersion.OpenApi3_0); // Assert - parameter.Should().BeEquivalentTo( + Assert.Equivalent( new OpenApiParameter { In = null, @@ -187,7 +187,7 @@ public async Task ParseParameterWithNullLocationShouldSucceed() { Type = JsonSchemaType.String } - }); + }, parameter); } [Fact] @@ -200,7 +200,7 @@ public async Task ParseParameterWithNoLocationShouldSucceed() var parameter = await OpenApiModelFactory.LoadAsync(stream, OpenApiSpecVersion.OpenApi3_0); // Assert - parameter.Should().BeEquivalentTo( + Assert.Equivalent( new OpenApiParameter { In = null, @@ -211,7 +211,7 @@ public async Task ParseParameterWithNoLocationShouldSucceed() { Type = JsonSchemaType.String } - }); + }, parameter); } [Fact] @@ -224,7 +224,7 @@ public async Task ParseParameterWithUnknownLocationShouldSucceed() var parameter = await OpenApiModelFactory.LoadAsync(stream, OpenApiSpecVersion.OpenApi3_0); // Assert - parameter.Should().BeEquivalentTo( + Assert.Equivalent( new OpenApiParameter { In = null, @@ -235,7 +235,7 @@ public async Task ParseParameterWithUnknownLocationShouldSucceed() { Type = JsonSchemaType.String } - }); + }, parameter); } [Fact] diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiDocumentTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiDocumentTests.cs index afb06929d..5a2587620 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiDocumentTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiDocumentTests.cs @@ -1961,7 +1961,7 @@ public async Task SerializeDocumentWithWebhooksAsV3YamlWorks() // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); - actual.Should().BeEquivalentTo(expected); + Assert.Equal(expected, actual); } [Fact] @@ -1989,7 +1989,7 @@ public async Task SerializeDocumentWithRootJsonSchemaDialectPropertyWorks() var actual = await doc.SerializeAsYamlAsync(OpenApiSpecVersion.OpenApi3_1); // Assert - actual.MakeLineBreaksEnvironmentNeutral().Should().BeEquivalentTo(expected.MakeLineBreaksEnvironmentNeutral()); + Assert.Equal(expected.MakeLineBreaksEnvironmentNeutral(), actual.MakeLineBreaksEnvironmentNeutral()); } [Fact] @@ -2015,7 +2015,7 @@ public async Task SerializeV31DocumentWithRefsInWebhooksWorks() webhooks[OperationType.Get].SerializeAsV31(writer); var actual = stringWriter.ToString(); - actual.MakeLineBreaksEnvironmentNeutral().Should().BeEquivalentTo(expected.MakeLineBreaksEnvironmentNeutral()); + Assert.Equal(expected.MakeLineBreaksEnvironmentNeutral(), actual.MakeLineBreaksEnvironmentNeutral()); } [Fact] @@ -2063,7 +2063,7 @@ public async Task SerializeDocWithDollarIdInDollarRefSucceeds() "; var doc = (await OpenApiDocument.LoadAsync("Models/Samples/docWithDollarId.yaml")).Document; var actual = await doc.SerializeAsYamlAsync(OpenApiSpecVersion.OpenApi3_1); - actual.MakeLineBreaksEnvironmentNeutral().Should().BeEquivalentTo(expected.MakeLineBreaksEnvironmentNeutral()); + Assert.Equal(expected.MakeLineBreaksEnvironmentNeutral(), actual.MakeLineBreaksEnvironmentNeutral()); } [Fact] @@ -2117,7 +2117,7 @@ public async Task SerializeDocumentTagsWithMultipleExtensionsWorks() }; var actual = await doc.SerializeAsJsonAsync(OpenApiSpecVersion.OpenApi3_0); - actual.MakeLineBreaksEnvironmentNeutral().Should().BeEquivalentTo(expected.MakeLineBreaksEnvironmentNeutral()); + Assert.Equal(expected.MakeLineBreaksEnvironmentNeutral(), actual.MakeLineBreaksEnvironmentNeutral()); } } } From d841a2ae249761037639068a3e021bdc1f746606 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Wed, 15 Jan 2025 10:58:16 -0500 Subject: [PATCH 65/90] chore: additional FA replacement batch Signed-off-by: Vincent Biret --- .../V3Tests/OpenApiMediaTypeTests.cs | 3 +-- .../Expressions/RuntimeExpressionTests.cs | 3 ++- test/Microsoft.OpenApi.Tests/Models/OpenApiDocumentTests.cs | 2 +- .../Models/OpenApiSecurityRequirementTests.cs | 6 +++--- .../Validations/OpenApiParameterValidationTests.cs | 4 ++-- .../Validations/OpenApiPathsValidationTests.cs | 6 +++--- 6 files changed, 12 insertions(+), 12 deletions(-) diff --git a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiMediaTypeTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiMediaTypeTests.cs index 8ade58ca5..1718028da 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiMediaTypeTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiMediaTypeTests.cs @@ -110,8 +110,7 @@ public async Task ParseMediaTypeWithEmptyArrayInExamplesWorks() var serialized = await mediaType.SerializeAsJsonAsync(OpenApiSpecVersion.OpenApi3_0); // Assert - serialized.MakeLineBreaksEnvironmentNeutral() - .Should().BeEquivalentTo(expected.MakeLineBreaksEnvironmentNeutral()); + Assert.Equal(expected.MakeLineBreaksEnvironmentNeutral(), serialized.MakeLineBreaksEnvironmentNeutral()); } } } diff --git a/test/Microsoft.OpenApi.Tests/Expressions/RuntimeExpressionTests.cs b/test/Microsoft.OpenApi.Tests/Expressions/RuntimeExpressionTests.cs index abd9833a4..285366c0a 100644 --- a/test/Microsoft.OpenApi.Tests/Expressions/RuntimeExpressionTests.cs +++ b/test/Microsoft.OpenApi.Tests/Expressions/RuntimeExpressionTests.cs @@ -244,7 +244,8 @@ public void CompositeRuntimeExpressionWithInvalidRuntimeExpressions(string expre Action test = () => RuntimeExpression.Build(expression); // Assert - test.Should().Throw().WithMessage(String.Format(SRResource.RuntimeExpressionHasInvalidFormat, invalidExpression)); + var result = Assert.Throws(test); + Assert.Equal(result.Message, string.Format(SRResource.RuntimeExpressionHasInvalidFormat, invalidExpression)); } [Theory] diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiDocumentTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiDocumentTests.cs index 5a2587620..ef3e26221 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiDocumentTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiDocumentTests.cs @@ -1898,7 +1898,7 @@ public void SerializeExamplesDoesNotThrowNullReferenceException() }; OpenApiJsonWriter apiWriter = new OpenApiJsonWriter(new StringWriter()); - doc.Invoking(d => d.SerializeAsV3(apiWriter)).Should().NotThrow(); + doc.SerializeAsV3(apiWriter); } [Theory] diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiSecurityRequirementTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiSecurityRequirementTests.cs index b555b9311..af0343f57 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiSecurityRequirementTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiSecurityRequirementTests.cs @@ -277,10 +277,10 @@ public void SchemesShouldConsiderOnlyReferenceIdForEquality() // Assert // Only the first two should be added successfully since the latter two are duplicates of securityScheme1. // Duplicate determination only considers Reference.Id. - addSecurityScheme1Duplicate.Should().Throw(); - addSecurityScheme1WithDifferentProperties.Should().Throw(); + Assert.Throws(addSecurityScheme1Duplicate); + Assert.Throws(addSecurityScheme1WithDifferentProperties); - securityRequirement.Should().HaveCount(2); + Assert.Equal(2, securityRequirement.Count); securityRequirement.Should().BeEquivalentTo( new OpenApiSecurityRequirement diff --git a/test/Microsoft.OpenApi.Tests/Validations/OpenApiParameterValidationTests.cs b/test/Microsoft.OpenApi.Tests/Validations/OpenApiParameterValidationTests.cs index 83d1a2e1a..87214c74b 100644 --- a/test/Microsoft.OpenApi.Tests/Validations/OpenApiParameterValidationTests.cs +++ b/test/Microsoft.OpenApi.Tests/Validations/OpenApiParameterValidationTests.cs @@ -28,7 +28,7 @@ public void ValidateFieldIsRequiredInParameter() var errors = parameter.Validate(ValidationRuleSet.GetDefaultRuleSet()); // Assert - errors.Should().NotBeEmpty(); + Assert.NotEmpty(errors); errors.Select(e => e.Message).Should().BeEquivalentTo(new[] { nameError, @@ -53,7 +53,7 @@ public void ValidateRequiredIsTrueWhenInIsPathInParameter() walker.Walk(parameter); var errors = validator.Errors; // Assert - errors.Should().NotBeEmpty(); + Assert.NotEmpty(errors); errors.Select(e => e.Message).Should().BeEquivalentTo(new[] { "\"required\" must be true when parameter location is \"path\"" diff --git a/test/Microsoft.OpenApi.Tests/Validations/OpenApiPathsValidationTests.cs b/test/Microsoft.OpenApi.Tests/Validations/OpenApiPathsValidationTests.cs index bbe15c66e..4051a0a91 100644 --- a/test/Microsoft.OpenApi.Tests/Validations/OpenApiPathsValidationTests.cs +++ b/test/Microsoft.OpenApi.Tests/Validations/OpenApiPathsValidationTests.cs @@ -23,7 +23,7 @@ public void ValidatePathsMustBeginWithSlash() var errors = paths.Validate(ValidationRuleSet.GetDefaultRuleSet()); // Assert - errors.Should().NotBeEmpty(); + Assert.NotEmpty(errors); errors.Select(e => e.Message).Should().BeEquivalentTo(error); } @@ -42,7 +42,7 @@ public void ValidatePathsAreUnique() var errors = paths.Validate(ValidationRuleSet.GetDefaultRuleSet()); // Assert - errors.Should().NotBeEmpty(); + Assert.NotEmpty(errors); errors.Select(e => e.Message).Should().BeEquivalentTo(error); } [Fact] @@ -76,7 +76,7 @@ public void ValidatePathsAreUniqueConsidersMultiParametersAsIdentical() var errors = paths.Validate(ValidationRuleSet.GetDefaultRuleSet()); // Assert - errors.Should().NotBeEmpty(); + Assert.NotEmpty(errors); } } } From c3a1fabff35f468ec16606f038666130a6d0412c Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Wed, 15 Jan 2025 14:40:34 -0500 Subject: [PATCH 66/90] chore: additional FA replacement Signed-off-by: Vincent Biret --- .../V31Tests/OpenApiSchemaTests.cs | 7 ++++--- .../Models/OpenApiMediaTypeTests.cs | 6 ++++-- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiSchemaTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiSchemaTests.cs index b3b26c079..5ef68c078 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiSchemaTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiSchemaTests.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.IO; +using System.Linq; using System.Text.Json.Nodes; using System.Threading.Tasks; using FluentAssertions; @@ -298,9 +299,9 @@ public void CloningSchemaWithExamplesAndEnumsShouldSucceed() clone.Default = 6; // Assert - clone.Enum.Should().NotBeEquivalentTo(schema.Enum); - clone.Examples.Should().NotBeEquivalentTo(schema.Examples); - clone.Default.Should().NotBeEquivalentTo(schema.Default); + Assert.Equivalent(new int[] {1, 2, 3, 4}, clone.Enum.Select(static x => x.GetValue()).ToArray()); + Assert.Equivalent(new int[] {2, 3, 4}, clone.Examples.Select(static x => x.GetValue()).ToArray()); + Assert.Equivalent(6, clone.Default.GetValue()); } [Fact] diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiMediaTypeTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiMediaTypeTests.cs index e062bfda3..b1f6ca474 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiMediaTypeTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiMediaTypeTests.cs @@ -4,7 +4,6 @@ using System.Collections.Generic; using System.Text.Json.Nodes; using System.Threading.Tasks; -using FluentAssertions; using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Interfaces; using Microsoft.OpenApi.Models; @@ -440,7 +439,10 @@ public void MediaTypeCopyConstructorWorks() }; // Assert - MediaTypeWithObjectExamples.Examples.Should().NotBeEquivalentTo(clone.Examples); + Assert.Equal(42, clone.Example.GetValue()); + Assert.Empty(clone.Examples); + Assert.Empty(clone.Encoding); + Assert.Empty(clone.Extensions); Assert.Null(MediaTypeWithObjectExamples.Example); } } From 19d7935ac2d78716e43d496cb2b90ec1da1251dc Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Wed, 15 Jan 2025 15:07:53 -0500 Subject: [PATCH 67/90] chore: additional FA replacement batch Signed-off-by: Vincent Biret --- .../V2Tests/ComparisonTests.cs | 2 +- .../V2Tests/OpenApiDocumentTests.cs | 4 +-- .../V2Tests/OpenApiPathItemTests.cs | 3 +- .../V2Tests/OpenApiSecuritySchemeTests.cs | 25 +++++++-------- .../V2Tests/OpenApiServerTests.cs | 5 ++- .../V31Tests/OpenApiDocumentTests.cs | 9 +++--- .../V31Tests/OpenApiInfoTests.cs | 5 ++- .../V31Tests/OpenApiLicenseTests.cs | 5 ++- .../V31Tests/OpenApiSchemaTests.cs | 8 ++--- .../V3Tests/OpenApiCallbackTests.cs | 29 ++++++++--------- .../V3Tests/OpenApiContactTests.cs | 7 ++-- .../V3Tests/OpenApiDiscriminatorTests.cs | 5 ++- .../V3Tests/OpenApiDocumentTests.cs | 32 +++++++++---------- .../V3Tests/OpenApiEncodingTests.cs | 9 +++--- .../V3Tests/OpenApiInfoTests.cs | 8 ++--- .../V3Tests/OpenApiSchemaTests.cs | 30 ++++++++--------- .../V3Tests/OpenApiSecuritySchemeTests.cs | 21 ++++++------ .../V3Tests/OpenApiXmlTests.cs | 5 ++- .../Extensions/OpenApiTypeMapperTests.cs | 3 +- 19 files changed, 102 insertions(+), 113 deletions(-) diff --git a/test/Microsoft.OpenApi.Readers.Tests/V2Tests/ComparisonTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V2Tests/ComparisonTests.cs index 209edcc4d..ae725bcb1 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V2Tests/ComparisonTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V2Tests/ComparisonTests.cs @@ -30,7 +30,7 @@ public async Task EquivalentV2AndV3DocumentsShouldProduceEquivalentObjects(strin result2.Document.Should().BeEquivalentTo(result1.Document, options => options.Excluding(x => x.Workspace).Excluding(y => y.BaseUri)); - result1.Diagnostic.Errors.Should().BeEquivalentTo(result2.Diagnostic.Errors); + Assert.Equivalent(result2.Diagnostic.Errors, result1.Diagnostic.Errors); } } } diff --git a/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiDocumentTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiDocumentTests.cs index a9bd8291d..02938f4b0 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiDocumentTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiDocumentTests.cs @@ -280,11 +280,11 @@ public async Task ShouldAssignSchemaToAllResponses() var json = response.Value.Content["application/json"]; Assert.NotNull(json); - json.Schema.Should().BeEquivalentTo(targetSchema); + Assert.Equivalent(targetSchema, json.Schema); var xml = response.Value.Content["application/xml"]; Assert.NotNull(xml); - xml.Schema.Should().BeEquivalentTo(targetSchema); + Assert.Equivalent(targetSchema, xml.Schema); } } diff --git a/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiPathItemTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiPathItemTests.cs index 47f3903fa..f8f022167 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiPathItemTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiPathItemTests.cs @@ -5,7 +5,6 @@ using System.Collections.Generic; using System.IO; using System.Linq; -using FluentAssertions; using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Reader.ParseNodes; using Microsoft.OpenApi.Reader.V2; @@ -260,7 +259,7 @@ public void ParseBasicPathItemWithFormDataShouldSucceed() var pathItem = OpenApiV2Deserializer.LoadPathItem(node); // Assert - pathItem.Should().BeEquivalentTo(_basicPathItemWithFormData); + Assert.Equivalent(_basicPathItemWithFormData, pathItem); } [Fact] diff --git a/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiSecuritySchemeTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiSecuritySchemeTests.cs index 82565facd..fd3b863a5 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiSecuritySchemeTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiSecuritySchemeTests.cs @@ -4,7 +4,6 @@ using System; using System.IO; using System.Linq; -using FluentAssertions; using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Reader; using Microsoft.OpenApi.Reader.ParseNodes; @@ -36,12 +35,12 @@ public void ParseHttpSecuritySchemeShouldSucceed() var securityScheme = OpenApiV2Deserializer.LoadSecurityScheme(node); // Assert - securityScheme.Should().BeEquivalentTo( + Assert.Equivalent( new OpenApiSecurityScheme { Type = SecuritySchemeType.Http, Scheme = OpenApiConstants.Basic - }); + }, securityScheme); } [Fact] @@ -61,13 +60,13 @@ public void ParseApiKeySecuritySchemeShouldSucceed() var securityScheme = OpenApiV2Deserializer.LoadSecurityScheme(node); // Assert - securityScheme.Should().BeEquivalentTo( + Assert.Equivalent( new OpenApiSecurityScheme { Type = SecuritySchemeType.ApiKey, Name = "api_key", In = ParameterLocation.Header - }); + }, securityScheme); } [Fact] @@ -86,7 +85,7 @@ public void ParseOAuth2ImplicitSecuritySchemeShouldSucceed() var securityScheme = OpenApiV2Deserializer.LoadSecurityScheme(node); // Assert - securityScheme.Should().BeEquivalentTo( + Assert.Equivalent( new OpenApiSecurityScheme { Type = SecuritySchemeType.OAuth2, @@ -102,7 +101,7 @@ public void ParseOAuth2ImplicitSecuritySchemeShouldSucceed() } } } - }); + }, securityScheme); } [Fact] @@ -121,7 +120,7 @@ public void ParseOAuth2PasswordSecuritySchemeShouldSucceed() var securityScheme = OpenApiV2Deserializer.LoadSecurityScheme(node); // Assert - securityScheme.Should().BeEquivalentTo( + Assert.Equivalent( new OpenApiSecurityScheme { Type = SecuritySchemeType.OAuth2, @@ -137,7 +136,7 @@ public void ParseOAuth2PasswordSecuritySchemeShouldSucceed() } } } - }); + }, securityScheme); } [Fact] @@ -156,7 +155,7 @@ public void ParseOAuth2ApplicationSecuritySchemeShouldSucceed() var securityScheme = OpenApiV2Deserializer.LoadSecurityScheme(node); // Assert - securityScheme.Should().BeEquivalentTo( + Assert.Equivalent( new OpenApiSecurityScheme { Type = SecuritySchemeType.OAuth2, @@ -172,7 +171,7 @@ public void ParseOAuth2ApplicationSecuritySchemeShouldSucceed() } } } - }); + }, securityScheme); } [Fact] @@ -192,7 +191,7 @@ public void ParseOAuth2AccessCodeSecuritySchemeShouldSucceed() var securityScheme = OpenApiV2Deserializer.LoadSecurityScheme(node); // Assert - securityScheme.Should().BeEquivalentTo( + Assert.Equivalent( new OpenApiSecurityScheme { Type = SecuritySchemeType.OAuth2, @@ -208,7 +207,7 @@ public void ParseOAuth2AccessCodeSecuritySchemeShouldSucceed() } } } - }); + }, securityScheme); } static YamlDocument LoadYamlDocument(Stream input) diff --git a/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiServerTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiServerTests.cs index 6f72dccb7..95452e6ad 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiServerTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiServerTests.cs @@ -1,5 +1,4 @@ using System.Linq; -using FluentAssertions; using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Reader; using Xunit; @@ -305,7 +304,7 @@ public void InvalidHostShouldYieldError() var result = OpenApiDocument.Parse(input, "yaml", settings); Assert.Empty(result.Document.Servers); - result.Diagnostic.Should().BeEquivalentTo( + Assert.Equivalent( new OpenApiDiagnostic { Errors = @@ -313,7 +312,7 @@ public void InvalidHostShouldYieldError() new OpenApiError("#/", "Invalid host") }, SpecificationVersion = OpenApiSpecVersion.OpenApi2_0 - }); + }, result.Diagnostic); } } } diff --git a/test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiDocumentTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiDocumentTests.cs index 9f4b82472..faa0ebf78 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiDocumentTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiDocumentTests.cs @@ -11,6 +11,7 @@ using Microsoft.OpenApi.Writers; using Xunit; using VerifyXunit; +using VerifyTests; namespace Microsoft.OpenApi.Readers.Tests.V31Tests { @@ -198,7 +199,7 @@ public async Task ParseDocumentWithWebhooksShouldSucceed() }; // Assert - actual.Diagnostic.Should().BeEquivalentTo(new OpenApiDiagnostic() { SpecificationVersion = OpenApiSpecVersion.OpenApi3_1 }); + Assert.Equivalent(new OpenApiDiagnostic() { SpecificationVersion = OpenApiSpecVersion.OpenApi3_1 }, actual.Diagnostic); actual.Document.Should().BeEquivalentTo(expected, options => options.Excluding(x => x.Workspace).Excluding(y => y.BaseUri)); } @@ -389,8 +390,8 @@ public async Task ParseDocumentsWithReusablePathItemInWebhooksSucceeds() .Excluding(x => x.Webhooks["pets"].Reference) .Excluding(x => x.Workspace) .Excluding(y => y.BaseUri)); - actual.Diagnostic.Should().BeEquivalentTo( - new OpenApiDiagnostic() { SpecificationVersion = OpenApiSpecVersion.OpenApi3_1 }); + Assert.Equivalent( + new OpenApiDiagnostic() { SpecificationVersion = OpenApiSpecVersion.OpenApi3_1 }, actual.Diagnostic); } [Fact] @@ -461,7 +462,7 @@ public async Task ParseDocumentWithPatternPropertiesInSchemaWorks() var actualMediaType = await mediaType.SerializeAsYamlAsync(OpenApiSpecVersion.OpenApi3_1); // Assert - actualSchema.Should().BeEquivalentTo(expectedSchema); + Assert.Equivalent(expectedSchema, actualSchema); actualMediaType.MakeLineBreaksEnvironmentNeutral().Should().BeEquivalentTo(expectedMediaType.MakeLineBreaksEnvironmentNeutral()); } diff --git a/test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiInfoTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiInfoTests.cs index 8ecfcf7d5..6fb2d85ab 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiInfoTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiInfoTests.cs @@ -1,7 +1,6 @@ using System; using System.IO; using System.Linq; -using FluentAssertions; using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Reader; using Microsoft.OpenApi.Reader.ParseNodes; @@ -33,7 +32,7 @@ public void ParseBasicInfoShouldSucceed() var openApiInfo = OpenApiV31Deserializer.LoadInfo(node); // Assert - openApiInfo.Should().BeEquivalentTo( + Assert.Equivalent( new OpenApiInfo { Title = "Basic Info", @@ -52,7 +51,7 @@ public void ParseBasicInfoShouldSucceed() Name = "Apache 2.0", Url = new Uri("http://www.apache.org/licenses/LICENSE-2.0.html") } - }); + }, openApiInfo); } } } diff --git a/test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiLicenseTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiLicenseTests.cs index cb617064e..9ac47c730 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiLicenseTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiLicenseTests.cs @@ -3,7 +3,6 @@ using System.IO; using System.Linq; -using FluentAssertions; using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Reader; using Microsoft.OpenApi.Reader.ParseNodes; @@ -36,12 +35,12 @@ public void ParseLicenseWithSpdxIdentifierShouldSucceed() var license = OpenApiV31Deserializer.LoadLicense(node); // Assert - license.Should().BeEquivalentTo( + Assert.Equivalent( new OpenApiLicense { Name = "Apache 2.0", Identifier = "Apache-2.0" - }); + }, license); } } } diff --git a/test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiSchemaTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiSchemaTests.cs index 5ef68c078..04775e901 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiSchemaTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiSchemaTests.cs @@ -86,10 +86,10 @@ public async Task ParseBasicV31SchemaShouldSucceed() // Act var schema = await OpenApiModelFactory.LoadAsync( - System.IO.Path.Combine(SampleFolderPath, "jsonSchema.json"), OpenApiSpecVersion.OpenApi3_1); + Path.Combine(SampleFolderPath, "jsonSchema.json"), OpenApiSpecVersion.OpenApi3_1); // Assert - schema.Should().BeEquivalentTo(expectedObject); + Assert.Equivalent(expectedObject, schema); } [Fact] @@ -115,7 +115,7 @@ public void ParseSchemaWithTypeArrayWorks() var actual = OpenApiModelFactory.Parse(schema, OpenApiSpecVersion.OpenApi3_1, out _); // Assert - actual.Should().BeEquivalentTo(expected); + Assert.Equivalent(expected, actual); } [Fact] @@ -176,7 +176,7 @@ public async Task ParseV31SchemaShouldSucceed() }; // Assert - schema.Should().BeEquivalentTo(expectedSchema); + Assert.Equivalent(expectedSchema, schema); } [Fact] diff --git a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiCallbackTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiCallbackTests.cs index 1e50ca6e0..5899a3a65 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiCallbackTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiCallbackTests.cs @@ -4,7 +4,6 @@ using System.IO; using System.Linq; using System.Threading.Tasks; -using FluentAssertions; using Microsoft.OpenApi.Expressions; using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Reader; @@ -28,7 +27,7 @@ public async Task ParseBasicCallbackShouldSucceed() var callback = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "basicCallback.yaml"), OpenApiSpecVersion.OpenApi3_0); // Assert - callback.Should().BeEquivalentTo( + Assert.Equivalent( new OpenApiCallback { PathItems = @@ -59,7 +58,7 @@ public async Task ParseBasicCallbackShouldSucceed() } } } - }); + }, callback); } [Fact] @@ -76,10 +75,10 @@ public async Task ParseCallbackWithReferenceShouldSucceed() var callback = subscribeOperation.Callbacks["simpleHook"]; - result.Diagnostic.Should().BeEquivalentTo( - new OpenApiDiagnostic() { SpecificationVersion = OpenApiSpecVersion.OpenApi3_0 }); + Assert.Equivalent( + new OpenApiDiagnostic() { SpecificationVersion = OpenApiSpecVersion.OpenApi3_0 }, result.Diagnostic); - callback.Should().BeEquivalentTo( + Assert.Equivalent( new OpenApiCallback { PathItems = @@ -117,7 +116,7 @@ public async Task ParseCallbackWithReferenceShouldSucceed() Id = "simpleHook", HostDocument = result.Document } - }); + }, callback); } [Fact] @@ -130,12 +129,12 @@ public async Task ParseMultipleCallbacksWithReferenceShouldSucceed() var path = result.Document.Paths.First().Value; var subscribeOperation = path.Operations[OperationType.Post]; - result.Diagnostic.Should().BeEquivalentTo( - new OpenApiDiagnostic() { SpecificationVersion = OpenApiSpecVersion.OpenApi3_0 }); + Assert.Equivalent( + new OpenApiDiagnostic() { SpecificationVersion = OpenApiSpecVersion.OpenApi3_0 }, result.Diagnostic); var callback1 = subscribeOperation.Callbacks["simpleHook"]; - callback1.Should().BeEquivalentTo( + Assert.Equivalent( new OpenApiCallback { PathItems = @@ -173,10 +172,10 @@ public async Task ParseMultipleCallbacksWithReferenceShouldSucceed() Id = "simpleHook", HostDocument = result.Document } - }); + }, callback1); var callback2 = subscribeOperation.Callbacks["callback2"]; - callback2.Should().BeEquivalentTo( + Assert.Equivalent( new OpenApiCallback { PathItems = @@ -209,10 +208,10 @@ public async Task ParseMultipleCallbacksWithReferenceShouldSucceed() }, } } - }); + }, callback2); var callback3 = subscribeOperation.Callbacks["callback3"]; - callback3.Should().BeEquivalentTo( + Assert.Equivalent( new OpenApiCallback { PathItems = @@ -252,7 +251,7 @@ public async Task ParseMultipleCallbacksWithReferenceShouldSucceed() } } } - }); + }, callback3); } } } diff --git a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiContactTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiContactTests.cs index d6d0422c4..b2617ecf6 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiContactTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiContactTests.cs @@ -1,7 +1,6 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. -using FluentAssertions; using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Reader; using Xunit; @@ -26,15 +25,15 @@ public void ParseStringContactFragmentShouldSucceed() var contact = OpenApiModelFactory.Parse(input, OpenApiSpecVersion.OpenApi3_0, out var diagnostic, OpenApiConstants.Json); // Assert - diagnostic.Should().BeEquivalentTo(new OpenApiDiagnostic()); + Assert.Equivalent(new OpenApiDiagnostic(), diagnostic); - contact.Should().BeEquivalentTo( + Assert.Equivalent( new OpenApiContact { Email = "support@swagger.io", Name = "API Support", Url = new("http://www.swagger.io/support") - }); + }, contact); } } } diff --git a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDiscriminatorTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDiscriminatorTests.cs index ba62c7f33..476d3a93a 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDiscriminatorTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDiscriminatorTests.cs @@ -3,7 +3,6 @@ using System.IO; using System.Threading.Tasks; -using FluentAssertions; using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Reader; using Xunit; @@ -34,7 +33,7 @@ public async Task ParseBasicDiscriminatorShouldSucceed() var discriminator = OpenApiModelFactory.Load(memoryStream, OpenApiSpecVersion.OpenApi3_0, OpenApiConstants.Yaml, out var diagnostic); // Assert - discriminator.Should().BeEquivalentTo( + Assert.Equivalent( new OpenApiDiscriminator { PropertyName = "pet_type", @@ -43,7 +42,7 @@ public async Task ParseBasicDiscriminatorShouldSucceed() ["puppy"] = "#/components/schemas/Dog", ["kitten"] = "Cat" } - }); + }, discriminator); } } } diff --git a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDocumentTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDocumentTests.cs index 8e9c5208e..d67de2258 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDocumentTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDocumentTests.cs @@ -88,11 +88,11 @@ public void ParseDocumentFromInlineStringShouldSucceed() Paths = new OpenApiPaths() }, options => options.Excluding(x => x.Workspace).Excluding(y => y.BaseUri)); - result.Diagnostic.Should().BeEquivalentTo( + Assert.Equivalent( new OpenApiDiagnostic() { SpecificationVersion = OpenApiSpecVersion.OpenApi3_0 - }); + }, result.Diagnostic); } [Fact] @@ -162,7 +162,7 @@ public async Task ParseBrokenMinimalDocumentShouldYieldExpectedDiagnostic() Paths = new OpenApiPaths() }, options => options.Excluding(x => x.Workspace).Excluding(y => y.BaseUri)); - result.Diagnostic.Should().BeEquivalentTo( + Assert.Equivalent( new OpenApiDiagnostic { Errors = @@ -170,7 +170,7 @@ public async Task ParseBrokenMinimalDocumentShouldYieldExpectedDiagnostic() new OpenApiValidatorError(nameof(OpenApiInfoRules.InfoRequiredFields),"#/info/title", "The field 'title' in 'info' object is REQUIRED.") }, SpecificationVersion = OpenApiSpecVersion.OpenApi3_0 - }); + }, result.Diagnostic); } [Fact] @@ -189,11 +189,11 @@ public async Task ParseMinimalDocumentShouldSucceed() Paths = new OpenApiPaths() }, options => options.Excluding(x => x.Workspace).Excluding(y => y.BaseUri)); - result.Diagnostic.Should().BeEquivalentTo( + Assert.Equivalent( new OpenApiDiagnostic() { SpecificationVersion = OpenApiSpecVersion.OpenApi3_0 - }); + }, result.Diagnostic); } [Fact] @@ -578,8 +578,8 @@ public async Task ParseStandardPetStoreDocumentShouldSucceed() actual.Document.Should().BeEquivalentTo(expectedDoc, options => options.Excluding(x => x.Workspace).Excluding(y => y.BaseUri)); - actual.Diagnostic.Should().BeEquivalentTo( - new OpenApiDiagnostic() { SpecificationVersion = OpenApiSpecVersion.OpenApi3_0 }); + Assert.Equivalent( + new OpenApiDiagnostic() { SpecificationVersion = OpenApiSpecVersion.OpenApi3_0 }, actual.Diagnostic); } [Fact] @@ -1089,8 +1089,8 @@ public async Task ParseModifiedPetStoreDocumentWithTagAndSecurityShouldSucceed() .Excluding(x => x.Workspace) .Excluding(y => y.BaseUri)); - actual.Diagnostic.Should().BeEquivalentTo( - new OpenApiDiagnostic() { SpecificationVersion = OpenApiSpecVersion.OpenApi3_0 }); + Assert.Equivalent( + new OpenApiDiagnostic() { SpecificationVersion = OpenApiSpecVersion.OpenApi3_0 }, actual.Diagnostic); } [Fact] @@ -1100,8 +1100,8 @@ public async Task ParsePetStoreExpandedShouldSucceed() // TODO: Create the object in memory and compare with the one read from YAML file. - actual.Diagnostic.Should().BeEquivalentTo( - new OpenApiDiagnostic() { SpecificationVersion = OpenApiSpecVersion.OpenApi3_0 }); + Assert.Equivalent( + new OpenApiDiagnostic() { SpecificationVersion = OpenApiSpecVersion.OpenApi3_0 }, actual.Diagnostic); } [Fact] @@ -1211,14 +1211,14 @@ public async Task ParseDocumentWithJsonSchemaReferencesWorks() var expectedSchema = new OpenApiSchemaReference("User", result.Document); // Assert - actualSchema.Should().BeEquivalentTo(expectedSchema); + Assert.Equivalent(expectedSchema, actualSchema); } [Fact] public async Task ValidateExampleShouldNotHaveDataTypeMismatch() { // Act - var result = await OpenApiDocument.LoadAsync(System.IO.Path.Combine(SampleFolderPath, "documentWithDateExampleInSchema.yaml"), new OpenApiReaderSettings + var result = await OpenApiDocument.LoadAsync(Path.Combine(SampleFolderPath, "documentWithDateExampleInSchema.yaml"), new OpenApiReaderSettings { ReferenceResolution = ReferenceResolutionSetting.ResolveLocalReferences @@ -1375,11 +1375,11 @@ public void ParseBasicDocumentWithServerVariableShouldSucceed() Paths = new() }; - result.Diagnostic.Should().BeEquivalentTo( + Assert.Equivalent( new OpenApiDiagnostic { SpecificationVersion = OpenApiSpecVersion.OpenApi3_0 - }); + }, result.Diagnostic); result.Document.Should().BeEquivalentTo(expected, options => options.Excluding(x => x.BaseUri)); } diff --git a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiEncodingTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiEncodingTests.cs index 91e428c49..6f9fb5346 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiEncodingTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiEncodingTests.cs @@ -3,7 +3,6 @@ using System.IO; using System.Threading.Tasks; -using FluentAssertions; using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Reader; using Xunit; @@ -27,11 +26,11 @@ public async Task ParseBasicEncodingShouldSucceed() var encoding = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "basicEncoding.yaml"), OpenApiSpecVersion.OpenApi3_0); // Assert - encoding.Should().BeEquivalentTo( + Assert.Equivalent( new OpenApiEncoding { ContentType = "application/xml; charset=utf-8" - }); + }, encoding); } [Fact] @@ -43,7 +42,7 @@ public async Task ParseAdvancedEncodingShouldSucceed() var encoding = await OpenApiModelFactory.LoadAsync(stream, OpenApiSpecVersion.OpenApi3_0); // Assert - encoding.Should().BeEquivalentTo( + Assert.Equivalent( new OpenApiEncoding { ContentType = "image/png, image/jpeg", @@ -59,7 +58,7 @@ public async Task ParseAdvancedEncodingShouldSucceed() } } } - }); + }, encoding); } } } diff --git a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiInfoTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiInfoTests.cs index fdd5ae8ee..a9138ce78 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiInfoTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiInfoTests.cs @@ -87,7 +87,7 @@ public async Task ParseBasicInfoShouldSucceed() var openApiInfo = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "basicInfo.yaml"), OpenApiSpecVersion.OpenApi3_0); // Assert - openApiInfo.Should().BeEquivalentTo( + Assert.Equivalent( new OpenApiInfo { Title = "Basic Info", @@ -105,7 +105,7 @@ public async Task ParseBasicInfoShouldSucceed() Name = "Apache 2.0", Url = new Uri("http://www.apache.org/licenses/LICENSE-2.0.html") } - }); + }, openApiInfo); } [Fact] @@ -117,12 +117,12 @@ public async Task ParseMinimalInfoShouldSucceed() var openApiInfo = await OpenApiModelFactory.LoadAsync(stream, OpenApiSpecVersion.OpenApi3_0); // Assert - openApiInfo.Should().BeEquivalentTo( + Assert.Equivalent( new OpenApiInfo { Title = "Minimal Info", Version = "1.0.1" - }); + }, openApiInfo); } } } diff --git a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiSchemaTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiSchemaTests.cs index 2ec8704c5..9a77e678e 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiSchemaTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiSchemaTests.cs @@ -47,14 +47,14 @@ public void ParsePrimitiveSchemaShouldSucceed() var schema = OpenApiV3Deserializer.LoadSchema(node); // Assert - diagnostic.Should().BeEquivalentTo(new OpenApiDiagnostic()); + Assert.Equivalent(new OpenApiDiagnostic(), diagnostic); - schema.Should().BeEquivalentTo( + Assert.Equivalent( new OpenApiSchema { Type = JsonSchemaType.String, Format = "email" - }); + }, schema); } [Fact] @@ -70,7 +70,7 @@ public void ParseExampleStringFragmentShouldSucceed() var openApiAny = OpenApiModelFactory.Parse(input, OpenApiSpecVersion.OpenApi3_0, out var diagnostic); // Assert - diagnostic.Should().BeEquivalentTo(new OpenApiDiagnostic()); + Assert.Equivalent(new OpenApiDiagnostic(), diagnostic); openApiAny.Should().BeEquivalentTo(new OpenApiAny( new JsonObject @@ -93,7 +93,7 @@ public void ParseEnumFragmentShouldSucceed() var openApiAny = OpenApiModelFactory.Parse(input, OpenApiSpecVersion.OpenApi3_0, out var diagnostic); // Assert - diagnostic.Should().BeEquivalentTo(new OpenApiDiagnostic()); + Assert.Equivalent(new OpenApiDiagnostic(), diagnostic); openApiAny.Should().BeEquivalentTo(new OpenApiAny( new JsonArray @@ -118,9 +118,9 @@ public void ParsePathFragmentShouldSucceed() var openApiAny = OpenApiModelFactory.Parse(input, OpenApiSpecVersion.OpenApi3_0, out var diagnostic, "yaml"); // Assert - diagnostic.Should().BeEquivalentTo(new OpenApiDiagnostic()); + Assert.Equivalent(new OpenApiDiagnostic(), diagnostic); - openApiAny.Should().BeEquivalentTo( + Assert.Equivalent( new OpenApiPathItem { Summary = "externally referenced path item", @@ -137,7 +137,7 @@ public void ParsePathFragmentShouldSucceed() } } } - }); + }, openApiAny); } [Fact] @@ -159,9 +159,9 @@ public void ParseDictionarySchemaShouldSucceed() var schema = OpenApiV3Deserializer.LoadSchema(node); // Assert - diagnostic.Should().BeEquivalentTo(new OpenApiDiagnostic()); + Assert.Equivalent(new OpenApiDiagnostic(), diagnostic); - schema.Should().BeEquivalentTo( + Assert.Equivalent( new OpenApiSchema { Type = JsonSchemaType.Object, @@ -169,7 +169,7 @@ public void ParseDictionarySchemaShouldSucceed() { Type = JsonSchemaType.String } - }); + }, schema); } } @@ -191,7 +191,7 @@ public void ParseBasicSchemaWithExampleShouldSucceed() var schema = OpenApiV3Deserializer.LoadSchema(node); // Assert - diagnostic.Should().BeEquivalentTo(new OpenApiDiagnostic()); + Assert.Equivalent(new OpenApiDiagnostic(), diagnostic); schema.Should().BeEquivalentTo( new OpenApiSchema @@ -235,11 +235,11 @@ public async Task ParseBasicSchemaWithReferenceShouldSucceed() // Assert var components = result.Document.Components; - result.Diagnostic.Should().BeEquivalentTo( + Assert.Equivalent( new OpenApiDiagnostic() { SpecificationVersion = OpenApiSpecVersion.OpenApi3_0 - }); + }, result.Diagnostic); var expectedComponents = new OpenApiComponents { @@ -289,7 +289,7 @@ public async Task ParseBasicSchemaWithReferenceShouldSucceed() } }; - components.Should().BeEquivalentTo(expectedComponents); + Assert.Equivalent(expectedComponents, components); } [Fact] diff --git a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiSecuritySchemeTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiSecuritySchemeTests.cs index 3f99bb2c5..dd090e344 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiSecuritySchemeTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiSecuritySchemeTests.cs @@ -4,7 +4,6 @@ using System; using System.IO; using System.Threading.Tasks; -using FluentAssertions; using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Reader; using Xunit; @@ -27,12 +26,12 @@ public async Task ParseHttpSecuritySchemeShouldSucceed() var securityScheme = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "httpSecurityScheme.yaml"), OpenApiSpecVersion.OpenApi3_0); // Assert - securityScheme.Should().BeEquivalentTo( + Assert.Equivalent( new OpenApiSecurityScheme { Type = SecuritySchemeType.Http, Scheme = OpenApiConstants.Basic - }); + }, securityScheme); } [Fact] @@ -42,13 +41,13 @@ public async Task ParseApiKeySecuritySchemeShouldSucceed() var securityScheme = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "apiKeySecurityScheme.yaml"), OpenApiSpecVersion.OpenApi3_0); // Assert - securityScheme.Should().BeEquivalentTo( + Assert.Equivalent( new OpenApiSecurityScheme { Type = SecuritySchemeType.ApiKey, Name = "api_key", In = ParameterLocation.Header - }); + }, securityScheme); } [Fact] @@ -58,13 +57,13 @@ public async Task ParseBearerSecuritySchemeShouldSucceed() var securityScheme = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "bearerSecurityScheme.yaml"), OpenApiSpecVersion.OpenApi3_0); // Assert - securityScheme.Should().BeEquivalentTo( + Assert.Equivalent( new OpenApiSecurityScheme { Type = SecuritySchemeType.Http, Scheme = OpenApiConstants.Bearer, BearerFormat = OpenApiConstants.Jwt - }); + }, securityScheme); } [Fact] @@ -74,7 +73,7 @@ public async Task ParseOAuth2SecuritySchemeShouldSucceed() var securityScheme = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "oauth2SecurityScheme.yaml"), OpenApiSpecVersion.OpenApi3_0); // Assert - securityScheme.Should().BeEquivalentTo( + Assert.Equivalent( new OpenApiSecurityScheme { Type = SecuritySchemeType.OAuth2, @@ -90,7 +89,7 @@ public async Task ParseOAuth2SecuritySchemeShouldSucceed() } } } - }); + }, securityScheme); } [Fact] @@ -100,13 +99,13 @@ public async Task ParseOpenIdConnectSecuritySchemeShouldSucceed() var securityScheme = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "openIdConnectSecurityScheme.yaml"), OpenApiSpecVersion.OpenApi3_0); // Assert - securityScheme.Should().BeEquivalentTo( + Assert.Equivalent( new OpenApiSecurityScheme { Type = SecuritySchemeType.OpenIdConnect, Description = "Sample Description", OpenIdConnectUrl = new Uri("http://www.example.com") - }); + }, securityScheme); } } } diff --git a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiXmlTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiXmlTests.cs index fc23865ba..d90076516 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiXmlTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiXmlTests.cs @@ -4,7 +4,6 @@ using System; using System.IO; using System.Threading.Tasks; -using FluentAssertions; using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Reader; using Xunit; @@ -28,14 +27,14 @@ public async Task ParseBasicXmlShouldSucceed() var xml = await OpenApiModelFactory.LoadAsync(Resources.GetStream(Path.Combine(SampleFolderPath, "basicXml.yaml")), OpenApiSpecVersion.OpenApi3_0); // Assert - xml.Should().BeEquivalentTo( + Assert.Equivalent( new OpenApiXml { Name = "name1", Namespace = new Uri("http://example.com/schema/namespaceSample"), Prefix = "samplePrefix", Wrapped = true - }); + }, xml); } } } diff --git a/test/Microsoft.OpenApi.Tests/Extensions/OpenApiTypeMapperTests.cs b/test/Microsoft.OpenApi.Tests/Extensions/OpenApiTypeMapperTests.cs index a8abcf511..c41bd6e98 100644 --- a/test/Microsoft.OpenApi.Tests/Extensions/OpenApiTypeMapperTests.cs +++ b/test/Microsoft.OpenApi.Tests/Extensions/OpenApiTypeMapperTests.cs @@ -3,7 +3,6 @@ using System; using System.Collections.Generic; -using FluentAssertions; using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Models; using Xunit; @@ -66,7 +65,7 @@ public void MapTypeToOpenApiPrimitiveTypeShouldSucceed(Type type, OpenApiSchema var actual = OpenApiTypeMapper.MapTypeToOpenApiPrimitiveType(type); // Assert - actual.Should().BeEquivalentTo(expected); + Assert.Equivalent(expected, actual); } [Theory] From a704fad361bf9f49613d33ed9d665ff3980d36c8 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Wed, 15 Jan 2025 15:21:39 -0500 Subject: [PATCH 68/90] chore: additional FA replacement batch Signed-off-by: Vincent Biret --- .../Models/OpenApiDocumentTests.cs | 1 - .../OpenApiParameterValidationTests.cs | 17 ++++++------- .../OpenApiPathsValidationTests.cs | 5 ++-- .../Walkers/WalkerLocationTests.cs | 25 +++++++++---------- 4 files changed, 22 insertions(+), 26 deletions(-) diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiDocumentTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiDocumentTests.cs index ef3e26221..752ec7d9f 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiDocumentTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiDocumentTests.cs @@ -6,7 +6,6 @@ using System.Globalization; using System.IO; using System.Threading.Tasks; -using FluentAssertions; using Microsoft.OpenApi.Any; using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Interfaces; diff --git a/test/Microsoft.OpenApi.Tests/Validations/OpenApiParameterValidationTests.cs b/test/Microsoft.OpenApi.Tests/Validations/OpenApiParameterValidationTests.cs index 87214c74b..cacf3d7fa 100644 --- a/test/Microsoft.OpenApi.Tests/Validations/OpenApiParameterValidationTests.cs +++ b/test/Microsoft.OpenApi.Tests/Validations/OpenApiParameterValidationTests.cs @@ -4,7 +4,6 @@ using System.Collections.Generic; using System.Linq; using System.Text.Json.Nodes; -using FluentAssertions; using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Properties; @@ -29,11 +28,11 @@ public void ValidateFieldIsRequiredInParameter() // Assert Assert.NotEmpty(errors); - errors.Select(e => e.Message).Should().BeEquivalentTo(new[] + Assert.Equivalent(new[] { nameError, inError - }); + }, errors.Select(e => e.Message)); } [Fact] @@ -54,10 +53,10 @@ public void ValidateRequiredIsTrueWhenInIsPathInParameter() var errors = validator.Errors; // Assert Assert.NotEmpty(errors); - errors.Select(e => e.Message).Should().BeEquivalentTo(new[] + Assert.Equivalent(new[] { "\"required\" must be true when parameter location is \"path\"" - }); + }, errors.Select(e => e.Message)); } [Fact] @@ -183,14 +182,14 @@ public void PathParameterNotInThePathShouldReturnAnError() // Assert Assert.True(result); - errors.OfType().Select(e => e.RuleName).Should().BeEquivalentTo(new[] + Assert.Equivalent(new[] { "PathParameterShouldBeInThePath" - }); - errors.Select(e => e.Pointer).Should().BeEquivalentTo(new[] + }, errors.OfType().Select(e => e.RuleName)); + Assert.Equivalent(new[] { "#/in" - }); + }, errors.Select(e => e.Pointer)); } [Fact] diff --git a/test/Microsoft.OpenApi.Tests/Validations/OpenApiPathsValidationTests.cs b/test/Microsoft.OpenApi.Tests/Validations/OpenApiPathsValidationTests.cs index 4051a0a91..09223e7b8 100644 --- a/test/Microsoft.OpenApi.Tests/Validations/OpenApiPathsValidationTests.cs +++ b/test/Microsoft.OpenApi.Tests/Validations/OpenApiPathsValidationTests.cs @@ -1,5 +1,4 @@ using System.Linq; -using FluentAssertions; using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Properties; @@ -24,7 +23,7 @@ public void ValidatePathsMustBeginWithSlash() // Assert Assert.NotEmpty(errors); - errors.Select(e => e.Message).Should().BeEquivalentTo(error); + Assert.Equivalent(new string[] {error}, errors.Select(e => e.Message).ToArray()); } [Fact] @@ -43,7 +42,7 @@ public void ValidatePathsAreUnique() // Assert Assert.NotEmpty(errors); - errors.Select(e => e.Message).Should().BeEquivalentTo(error); + Assert.Equivalent(new string[] {error}, errors.Select(e => e.Message).ToArray()); } [Fact] public void ValidatePathsAreUniqueDoesNotConsiderMultiParametersAsIdentical() diff --git a/test/Microsoft.OpenApi.Tests/Walkers/WalkerLocationTests.cs b/test/Microsoft.OpenApi.Tests/Walkers/WalkerLocationTests.cs index bec1f3602..d48c88b2b 100644 --- a/test/Microsoft.OpenApi.Tests/Walkers/WalkerLocationTests.cs +++ b/test/Microsoft.OpenApi.Tests/Walkers/WalkerLocationTests.cs @@ -3,7 +3,6 @@ using System.Collections.Generic; using System.Linq; -using FluentAssertions; using Microsoft.OpenApi.Interfaces; using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Models.References; @@ -23,12 +22,12 @@ public void LocateTopLevelObjects() var walker = new OpenApiWalker(locator); walker.Walk(doc); - locator.Locations.Should().BeEquivalentTo(new List { + Assert.Equivalent(new List { "#/info", "#/servers", "#/paths", "#/tags" - }); + }, locator.Locations); } [Fact] @@ -51,7 +50,7 @@ public void LocateTopLevelArrayItems() var walker = new OpenApiWalker(locator); walker.Walk(doc); - locator.Locations.Should().BeEquivalentTo(new List { + Assert.Equivalent(new List { "#/info", "#/servers", "#/servers/0", @@ -59,7 +58,7 @@ public void LocateTopLevelArrayItems() "#/paths", "#/tags", "#/tags/0" - }); + }, locator.Locations); } [Fact] @@ -96,7 +95,7 @@ public void LocatePathOperationContentSchema() var walker = new OpenApiWalker(locator); walker.Walk(doc); - locator.Locations.Should().BeEquivalentTo(new List { + Assert.Equivalent(new List { "#/info", "#/servers", "#/paths", @@ -110,9 +109,9 @@ public void LocatePathOperationContentSchema() "#/paths/~1test/get/tags", "#/tags", - }); + }, locator.Locations); - locator.Keys.Should().BeEquivalentTo(new List { "/test", "Get", "200", "application/json" }); + Assert.Equivalent(new List { "/test", "Get", "200", "application/json" }, locator.Keys); } [Fact] @@ -144,7 +143,7 @@ public void WalkDOMWithCycles() var walker = new OpenApiWalker(locator); walker.Walk(doc); - locator.Locations.Should().BeEquivalentTo(new List { + Assert.Equivalent(new List { "#/info", "#/servers", "#/paths", @@ -152,7 +151,7 @@ public void WalkDOMWithCycles() "#/components/schemas/loopy", "#/components/schemas/loopy/properties/name", "#/tags" - }); + }, locator.Locations); } /// @@ -237,13 +236,13 @@ public void LocateReferences() var walker = new OpenApiWalker(locator); walker.Walk(doc); - locator.Locations.Where(l => l.StartsWith("referenceAt:")).Should().BeEquivalentTo(new List { + Assert.Equivalent(new List { "referenceAt: #/paths/~1/get/responses/200/content/application~1json/schema", "referenceAt: #/paths/~1/get/responses/200/headers/test-header/schema", "referenceAt: #/components/schemas/derived/anyOf/0", "referenceAt: #/components/securitySchemes/test-secScheme", "referenceAt: #/components/headers/test-header/schema" - }); + }, locator.Locations.Where(l => l.StartsWith("referenceAt:"))); } } @@ -278,7 +277,7 @@ public override void Visit(OpenApiPathItem pathItem) Locations.Add(this.PathString); } - public override void Visit(OpenApiResponses responses) + public override void Visit(OpenApiResponses response) { Locations.Add(this.PathString); } From 06e13ffac201aa5a0f22d655bb8aa6b61d5a0558 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 15 Jan 2025 21:38:08 +0000 Subject: [PATCH 69/90] chore(deps): bump System.Formats.Asn1 and Microsoft.Windows.Compatibility Bumps [System.Formats.Asn1](https://github.com/dotnet/runtime) and [Microsoft.Windows.Compatibility](https://github.com/dotnet/windowsdesktop). These dependencies needed to be updated together. Updates `System.Formats.Asn1` from 9.0.1 to 9.0.1 - [Release notes](https://github.com/dotnet/runtime/releases) - [Commits](https://github.com/dotnet/runtime/compare/v9.0.1...v9.0.1) Updates `Microsoft.Windows.Compatibility` from 9.0.0 to 9.0.1 - [Release notes](https://github.com/dotnet/windowsdesktop/releases) - [Commits](https://github.com/dotnet/windowsdesktop/compare/v9.0.0...v9.0.1) --- updated-dependencies: - dependency-name: System.Formats.Asn1 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: Microsoft.Windows.Compatibility dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Workbench.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Workbench/Microsoft.OpenApi.Workbench.csproj b/src/Microsoft.OpenApi.Workbench/Microsoft.OpenApi.Workbench.csproj index b8b9633c0..32229a9ad 100644 --- a/src/Microsoft.OpenApi.Workbench/Microsoft.OpenApi.Workbench.csproj +++ b/src/Microsoft.OpenApi.Workbench/Microsoft.OpenApi.Workbench.csproj @@ -13,7 +13,7 @@ runtime; build; native; contentfiles; analyzers; buildtransitive all - + From c4a446c70eda6cadcf1f21ec5f7342ec90b94fe0 Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Thu, 16 Jan 2025 10:59:58 +0300 Subject: [PATCH 70/90] Ensure trimmer preserves metadata for DisplayAttribute properties --- src/Microsoft.OpenApi/Extensions/StringExtensions.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi/Extensions/StringExtensions.cs b/src/Microsoft.OpenApi/Extensions/StringExtensions.cs index f272bfea9..7f5b0f89d 100644 --- a/src/Microsoft.OpenApi/Extensions/StringExtensions.cs +++ b/src/Microsoft.OpenApi/Extensions/StringExtensions.cs @@ -45,7 +45,8 @@ internal static class StringExtensions result = default; return false; } - private static ReadOnlyDictionary GetEnumValues([DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicFields)] Type enumType) where T : Enum + private static ReadOnlyDictionary GetEnumValues([DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicFields + | DynamicallyAccessedMemberTypes.PublicProperties)] Type enumType) where T : Enum { var result = new Dictionary(StringComparer.OrdinalIgnoreCase); foreach (var field in enumType.GetFields(BindingFlags.Public | BindingFlags.Static)) From 0bf3dbbf13783257a89372548dfc08219729931e Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Thu, 16 Jan 2025 15:27:56 +0300 Subject: [PATCH 71/90] Ignore warning --- .../Microsoft.OpenApi.Trimming.Tests.csproj | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/Microsoft.OpenApi.Trimming.Tests/Microsoft.OpenApi.Trimming.Tests.csproj b/test/Microsoft.OpenApi.Trimming.Tests/Microsoft.OpenApi.Trimming.Tests.csproj index 68c02953d..1a0a95a22 100644 --- a/test/Microsoft.OpenApi.Trimming.Tests/Microsoft.OpenApi.Trimming.Tests.csproj +++ b/test/Microsoft.OpenApi.Trimming.Tests/Microsoft.OpenApi.Trimming.Tests.csproj @@ -8,6 +8,8 @@ true false true + IL3000 + NU1903 false From 99c082428ebbd202da6723daeadd556e27596b96 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Thu, 16 Jan 2025 07:35:10 -0500 Subject: [PATCH 72/90] chore: additional FA replacement batch Signed-off-by: Vincent Biret --- .../V2Tests/OpenApiOperationTests.cs | 2 +- .../V31Tests/OpenApiDocumentTests.cs | 2 +- .../V31Tests/OpenApiSchemaTests.cs | 4 ++-- .../V3Tests/OpenApiDocumentTests.cs | 2 +- .../V3Tests/OpenApiResponseTests.cs | 2 +- test/Microsoft.OpenApi.Tests/Models/OpenApiSchemaTests.cs | 2 +- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiOperationTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiOperationTests.cs index 18b5be243..331810a1f 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiOperationTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiOperationTests.cs @@ -287,7 +287,7 @@ public void ParseOperationWithEmptyProducesArraySetsResponseSchemaIfExists() // Assert var actual = stringBuilder.ToString(); - actual.MakeLineBreaksEnvironmentNeutral().Should().BeEquivalentTo(expected.MakeLineBreaksEnvironmentNeutral()); + Assert.Equal(expected.MakeLineBreaksEnvironmentNeutral(), actual.MakeLineBreaksEnvironmentNeutral()); } [Fact] diff --git a/test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiDocumentTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiDocumentTests.cs index faa0ebf78..5f8c9e9bb 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiDocumentTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiDocumentTests.cs @@ -463,7 +463,7 @@ public async Task ParseDocumentWithPatternPropertiesInSchemaWorks() // Assert Assert.Equivalent(expectedSchema, actualSchema); - actualMediaType.MakeLineBreaksEnvironmentNeutral().Should().BeEquivalentTo(expectedMediaType.MakeLineBreaksEnvironmentNeutral()); + Assert.Equal(expectedMediaType.MakeLineBreaksEnvironmentNeutral(), actualMediaType.MakeLineBreaksEnvironmentNeutral()); } [Fact] diff --git a/test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiSchemaTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiSchemaTests.cs index 840d552c7..abcaa9df6 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiSchemaTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiSchemaTests.cs @@ -148,10 +148,10 @@ public void TestSchemaCopyConstructorWithTypeArrayWorks() }; // Assert - schemaWithArrayCopy.Type.Should().NotBe(schemaWithTypeArray.Type); + Assert.NotEqual(schemaWithTypeArray.Type, schemaWithArrayCopy.Type); schemaWithTypeArray.Type = JsonSchemaType.String | JsonSchemaType.Null; - simpleSchemaCopy.Type.Should().NotBe(simpleSchema.Type); + Assert.NotEqual(simpleSchema.Type, simpleSchemaCopy.Type); simpleSchema.Type = JsonSchemaType.String; } diff --git a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDocumentTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDocumentTests.cs index daf44a6ed..870c2c361 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDocumentTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDocumentTests.cs @@ -1325,7 +1325,7 @@ public async Task ParseDocWithRefsUsingProxyReferencesSucceeds() .Excluding(x => x.Schema.Default.Parent) .Excluding(x => x.Schema.Default.Options) .IgnoringCyclicReferences()); - outputDoc.Should().BeEquivalentTo(expectedSerializedDoc.MakeLineBreaksEnvironmentNeutral()); + Assert.Equal(expectedSerializedDoc.MakeLineBreaksEnvironmentNeutral(), outputDoc); } [Fact] diff --git a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiResponseTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiResponseTests.cs index 3a9ef0bd8..2d41ed2e2 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiResponseTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiResponseTests.cs @@ -30,7 +30,7 @@ public async Task ResponseWithReferencedHeaderShouldReferenceComponent() var expected = response.Headers.First().Value; var actual = result.Document.Components.Headers.First().Value; - actual.Description.Should().BeEquivalentTo(expected.Description); + Assert.Equal(expected.Description, actual.Description); } } } diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiSchemaTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiSchemaTests.cs index 145d7f535..5edd1c0d0 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiSchemaTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiSchemaTests.cs @@ -458,7 +458,7 @@ public async Task SerializeAsV2ShouldSetFormatPropertyInParentSchemaIfPresentInC """.MakeLineBreaksEnvironmentNeutral(); // Assert - expectedV2Schema.Should().BeEquivalentTo(v2Schema); + Assert.Equal(v2Schema, expectedV2Schema); } [Fact] From 18ec0d0514def714d1fef2e5bbe9d3589f481208 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Thu, 16 Jan 2025 07:41:24 -0500 Subject: [PATCH 73/90] chore: naming convention Signed-off-by: Vincent Biret --- .../Expressions/RuntimeExpressionTests.cs | 2 +- .../Expressions/SourceExpressionTests.cs | 2 +- .../Validations/OpenApiComponentsValidationTests.cs | 2 +- .../Validations/OpenApiContactValidationTests.cs | 2 +- .../Validations/OpenApiExternalDocsValidationTests.cs | 2 +- .../Validations/OpenApiInfoValidationTests.cs | 4 ++-- .../Validations/OpenApiLicenseValidationTests.cs | 2 +- .../Validations/OpenApiOAuthFlowValidationTests.cs | 4 ++-- .../Validations/OpenApiResponseValidationTests.cs | 2 +- .../Validations/OpenApiServerValidationTests.cs | 2 +- .../Validations/OpenApiTagValidationTests.cs | 4 ++-- 11 files changed, 14 insertions(+), 14 deletions(-) diff --git a/test/Microsoft.OpenApi.Tests/Expressions/RuntimeExpressionTests.cs b/test/Microsoft.OpenApi.Tests/Expressions/RuntimeExpressionTests.cs index 285366c0a..a1b6c8200 100644 --- a/test/Microsoft.OpenApi.Tests/Expressions/RuntimeExpressionTests.cs +++ b/test/Microsoft.OpenApi.Tests/Expressions/RuntimeExpressionTests.cs @@ -39,7 +39,7 @@ public void BuildRuntimeExpressionThrowsInvalidFormat(string expression) // Assert var exception = Assert.Throws(test); - Assert.Equal(String.Format(SRResource.RuntimeExpressionHasInvalidFormat, expression), exception.Message); + Assert.Equal(string.Format(SRResource.RuntimeExpressionHasInvalidFormat, expression), exception.Message); } [Fact] diff --git a/test/Microsoft.OpenApi.Tests/Expressions/SourceExpressionTests.cs b/test/Microsoft.OpenApi.Tests/Expressions/SourceExpressionTests.cs index 5ed80bf6e..8e9523946 100644 --- a/test/Microsoft.OpenApi.Tests/Expressions/SourceExpressionTests.cs +++ b/test/Microsoft.OpenApi.Tests/Expressions/SourceExpressionTests.cs @@ -25,7 +25,7 @@ public void BuildSourceExpressionThrowsInvalidFormat(string expression) // Assert var exception = Assert.Throws(test); - Assert.Equal(String.Format(SRResource.SourceExpressionHasInvalidFormat, expression), exception.Message); + Assert.Equal(string.Format(SRResource.SourceExpressionHasInvalidFormat, expression), exception.Message); } [Fact] diff --git a/test/Microsoft.OpenApi.Tests/Validations/OpenApiComponentsValidationTests.cs b/test/Microsoft.OpenApi.Tests/Validations/OpenApiComponentsValidationTests.cs index f6ce92ead..1bae78aba 100644 --- a/test/Microsoft.OpenApi.Tests/Validations/OpenApiComponentsValidationTests.cs +++ b/test/Microsoft.OpenApi.Tests/Validations/OpenApiComponentsValidationTests.cs @@ -37,7 +37,7 @@ public void ValidateKeyMustMatchRegularExpressionInComponents() Assert.False(result); Assert.NotNull(errors); var error = Assert.Single(errors); - Assert.Equal(String.Format(SRResource.Validation_ComponentsKeyMustMatchRegularExpr, key, "responses", OpenApiComponentsRules.KeyRegex.ToString()), + Assert.Equal(string.Format(SRResource.Validation_ComponentsKeyMustMatchRegularExpr, key, "responses", OpenApiComponentsRules.KeyRegex.ToString()), error.Message); } } diff --git a/test/Microsoft.OpenApi.Tests/Validations/OpenApiContactValidationTests.cs b/test/Microsoft.OpenApi.Tests/Validations/OpenApiContactValidationTests.cs index 3ad7130ad..73836ed9a 100644 --- a/test/Microsoft.OpenApi.Tests/Validations/OpenApiContactValidationTests.cs +++ b/test/Microsoft.OpenApi.Tests/Validations/OpenApiContactValidationTests.cs @@ -31,7 +31,7 @@ public void ValidateEmailFieldIsEmailAddressInContact() Assert.False(result); Assert.NotNull(errors); var error = Assert.Single(errors); - Assert.Equal(String.Format(SRResource.Validation_StringMustBeEmailAddress, testEmail), error.Message); + Assert.Equal(string.Format(SRResource.Validation_StringMustBeEmailAddress, testEmail), error.Message); } } } diff --git a/test/Microsoft.OpenApi.Tests/Validations/OpenApiExternalDocsValidationTests.cs b/test/Microsoft.OpenApi.Tests/Validations/OpenApiExternalDocsValidationTests.cs index aebb11c0a..dbc27cfb9 100644 --- a/test/Microsoft.OpenApi.Tests/Validations/OpenApiExternalDocsValidationTests.cs +++ b/test/Microsoft.OpenApi.Tests/Validations/OpenApiExternalDocsValidationTests.cs @@ -28,7 +28,7 @@ public void ValidateUrlIsRequiredInExternalDocs() Assert.True(result); Assert.NotNull(errors); var error = Assert.Single(errors); - Assert.Equal(String.Format(SRResource.Validation_FieldIsRequired, "url", "External Documentation"), error.Message); + Assert.Equal(string.Format(SRResource.Validation_FieldIsRequired, "url", "External Documentation"), error.Message); } } } diff --git a/test/Microsoft.OpenApi.Tests/Validations/OpenApiInfoValidationTests.cs b/test/Microsoft.OpenApi.Tests/Validations/OpenApiInfoValidationTests.cs index 95dde7942..3e88923d6 100644 --- a/test/Microsoft.OpenApi.Tests/Validations/OpenApiInfoValidationTests.cs +++ b/test/Microsoft.OpenApi.Tests/Validations/OpenApiInfoValidationTests.cs @@ -16,8 +16,8 @@ public class OpenApiInfoValidationTests public void ValidateFieldIsRequiredInInfo() { // Arrange - var titleError = String.Format(SRResource.Validation_FieldIsRequired, "title", "info"); - var versionError = String.Format(SRResource.Validation_FieldIsRequired, "version", "info"); + var titleError = string.Format(SRResource.Validation_FieldIsRequired, "title", "info"); + var versionError = string.Format(SRResource.Validation_FieldIsRequired, "version", "info"); var info = new OpenApiInfo(); // Act diff --git a/test/Microsoft.OpenApi.Tests/Validations/OpenApiLicenseValidationTests.cs b/test/Microsoft.OpenApi.Tests/Validations/OpenApiLicenseValidationTests.cs index 0f30b0580..def52b32f 100644 --- a/test/Microsoft.OpenApi.Tests/Validations/OpenApiLicenseValidationTests.cs +++ b/test/Microsoft.OpenApi.Tests/Validations/OpenApiLicenseValidationTests.cs @@ -32,7 +32,7 @@ public void ValidateFieldIsRequiredInLicense() Assert.False(result); Assert.NotNull(errors); var error = Assert.Single(errors); - Assert.Equal(String.Format(SRResource.Validation_FieldIsRequired, "name", "license"), error.Message); + Assert.Equal(string.Format(SRResource.Validation_FieldIsRequired, "name", "license"), error.Message); } } } diff --git a/test/Microsoft.OpenApi.Tests/Validations/OpenApiOAuthFlowValidationTests.cs b/test/Microsoft.OpenApi.Tests/Validations/OpenApiOAuthFlowValidationTests.cs index a49b3f9bb..ad8e5f387 100644 --- a/test/Microsoft.OpenApi.Tests/Validations/OpenApiOAuthFlowValidationTests.cs +++ b/test/Microsoft.OpenApi.Tests/Validations/OpenApiOAuthFlowValidationTests.cs @@ -17,8 +17,8 @@ public class OpenApiOAuthFlowValidationTests public void ValidateFixedFieldsIsRequiredInResponse() { // Arrange - var authorizationUrlError = String.Format(SRResource.Validation_FieldIsRequired, "authorizationUrl", "OAuth Flow"); - var tokenUrlError = String.Format(SRResource.Validation_FieldIsRequired, "tokenUrl", "OAuth Flow"); + var authorizationUrlError = string.Format(SRResource.Validation_FieldIsRequired, "authorizationUrl", "OAuth Flow"); + var tokenUrlError = string.Format(SRResource.Validation_FieldIsRequired, "tokenUrl", "OAuth Flow"); IEnumerable errors; var oAuthFlow = new OpenApiOAuthFlow(); diff --git a/test/Microsoft.OpenApi.Tests/Validations/OpenApiResponseValidationTests.cs b/test/Microsoft.OpenApi.Tests/Validations/OpenApiResponseValidationTests.cs index b967ebab6..ca73e6b0c 100644 --- a/test/Microsoft.OpenApi.Tests/Validations/OpenApiResponseValidationTests.cs +++ b/test/Microsoft.OpenApi.Tests/Validations/OpenApiResponseValidationTests.cs @@ -32,7 +32,7 @@ public void ValidateDescriptionIsRequiredInResponse() Assert.False(result); Assert.NotNull(errors); var error = Assert.Single(errors) as OpenApiValidatorError; - Assert.Equal(String.Format(SRResource.Validation_FieldIsRequired, "description", "response"), error.Message); + Assert.Equal(string.Format(SRResource.Validation_FieldIsRequired, "description", "response"), error.Message); Assert.Equal("#/description", error.Pointer); } } diff --git a/test/Microsoft.OpenApi.Tests/Validations/OpenApiServerValidationTests.cs b/test/Microsoft.OpenApi.Tests/Validations/OpenApiServerValidationTests.cs index aa6d6ecd0..14fe5be0b 100644 --- a/test/Microsoft.OpenApi.Tests/Validations/OpenApiServerValidationTests.cs +++ b/test/Microsoft.OpenApi.Tests/Validations/OpenApiServerValidationTests.cs @@ -29,7 +29,7 @@ public void ValidateFieldIsRequiredInServer() Assert.False(result); Assert.NotNull(errors); var error = Assert.Single(errors); - Assert.Equal(String.Format(SRResource.Validation_FieldIsRequired, "url", "server"), error.Message); + Assert.Equal(string.Format(SRResource.Validation_FieldIsRequired, "url", "server"), error.Message); } } } diff --git a/test/Microsoft.OpenApi.Tests/Validations/OpenApiTagValidationTests.cs b/test/Microsoft.OpenApi.Tests/Validations/OpenApiTagValidationTests.cs index 2bdec4ba2..545e4d2e0 100644 --- a/test/Microsoft.OpenApi.Tests/Validations/OpenApiTagValidationTests.cs +++ b/test/Microsoft.OpenApi.Tests/Validations/OpenApiTagValidationTests.cs @@ -31,7 +31,7 @@ public void ValidateNameIsRequiredInTag() Assert.False(result); Assert.NotNull(errors); var error = Assert.Single(errors); - Assert.Equal(String.Format(SRResource.Validation_FieldIsRequired, "name", "tag"), error.Message); + Assert.Equal(string.Format(SRResource.Validation_FieldIsRequired, "name", "tag"), error.Message); } [Fact] @@ -55,7 +55,7 @@ public void ValidateExtensionNameStartsWithXDashInTag() Assert.False(result); Assert.NotNull(errors); var error = Assert.Single(errors); - Assert.Equal(String.Format(SRResource.Validation_ExtensionNameMustBeginWithXDash, "tagExt", "#/extensions"), error.Message); + Assert.Equal(string.Format(SRResource.Validation_ExtensionNameMustBeginWithXDash, "tagExt", "#/extensions"), error.Message); } } } From a8153e9117a3516436c795320ee29ccaafb160a8 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Thu, 16 Jan 2025 07:43:54 -0500 Subject: [PATCH 74/90] chore: additional FA removal batch Signed-off-by: Vincent Biret --- .../Expressions/RuntimeExpressionTests.cs | 9 ++++----- .../Services/OpenApiValidatorTests.cs | 17 ++++++++--------- .../OpenApiComponentsValidationTests.cs | 1 - .../OpenApiContactValidationTests.cs | 1 - .../OpenApiExternalDocsValidationTests.cs | 1 - .../Validations/OpenApiInfoValidationTests.cs | 1 - .../OpenApiLicenseValidationTests.cs | 1 - .../OpenApiResponseValidationTests.cs | 1 - .../Validations/OpenApiServerValidationTests.cs | 1 - .../Validations/OpenApiTagValidationTests.cs | 1 - 10 files changed, 12 insertions(+), 22 deletions(-) diff --git a/test/Microsoft.OpenApi.Tests/Expressions/RuntimeExpressionTests.cs b/test/Microsoft.OpenApi.Tests/Expressions/RuntimeExpressionTests.cs index a1b6c8200..4b79c786a 100644 --- a/test/Microsoft.OpenApi.Tests/Expressions/RuntimeExpressionTests.cs +++ b/test/Microsoft.OpenApi.Tests/Expressions/RuntimeExpressionTests.cs @@ -4,7 +4,6 @@ using System; using System.Collections.Generic; using System.Linq; -using FluentAssertions; using Microsoft.OpenApi.Exceptions; using Microsoft.OpenApi.Expressions; using Microsoft.OpenApi.Properties; @@ -184,11 +183,11 @@ public void CompositeRuntimeExpressionContainsMultipleExpressions() var compositeExpression = runtimeExpression as CompositeExpression; Assert.Equal(2, compositeExpression.ContainedExpressions.Count); - compositeExpression.ContainedExpressions.Should().BeEquivalentTo(new List + Assert.Equivalent(new List { new UrlExpression(), new RequestExpression(new HeaderExpression("foo")) - }); + }, compositeExpression.ContainedExpressions); } [Fact] @@ -228,11 +227,11 @@ public void CompositeRuntimeExpressionWithMultipleRuntimeExpressionsAndFakeBrace Assert.Equal(expression, response.Expression); var compositeExpression = runtimeExpression as CompositeExpression; - compositeExpression.ContainedExpressions.Should().BeEquivalentTo(new List + Assert.Equivalent(new List { new UrlExpression(), new RequestExpression(new HeaderExpression("foo")) - }); + }, compositeExpression.ContainedExpressions); } [Theory] diff --git a/test/Microsoft.OpenApi.Tests/Services/OpenApiValidatorTests.cs b/test/Microsoft.OpenApi.Tests/Services/OpenApiValidatorTests.cs index e5fcc346f..ca56ff75c 100644 --- a/test/Microsoft.OpenApi.Tests/Services/OpenApiValidatorTests.cs +++ b/test/Microsoft.OpenApi.Tests/Services/OpenApiValidatorTests.cs @@ -5,7 +5,6 @@ using System.Collections.Generic; using System.Text.Json; using System.Text.Json.Nodes; -using FluentAssertions; using Microsoft.OpenApi.Any; using Microsoft.OpenApi.Interfaces; using Microsoft.OpenApi.Models; @@ -54,12 +53,12 @@ public void ResponseMustHaveADescription() var walker = new OpenApiWalker(validator); walker.Walk(openApiDocument); - validator.Errors.Should().BeEquivalentTo( + Assert.Equivalent( new List { new OpenApiValidatorError(nameof(OpenApiResponseRules.ResponseRequiredFields),"#/paths/~1test/get/responses/200/description", - String.Format(SRResource.Validation_FieldIsRequired, "description", "response")) - }); + string.Format(SRResource.Validation_FieldIsRequired, "description", "response")) + }, validator.Errors); } [Fact] @@ -88,12 +87,12 @@ public void ServersShouldBeReferencedByIndex() var walker = new OpenApiWalker(validator); walker.Walk(openApiDocument); - validator.Errors.Should().BeEquivalentTo( + Assert.Equivalent( new List { new OpenApiValidatorError(nameof(OpenApiServerRules.ServerRequiredFields), "#/servers/1/url", - String.Format(SRResource.Validation_FieldIsRequired, "url", "server")) - }); + string.Format(SRResource.Validation_FieldIsRequired, "url", "server")) + }, validator.Errors); } [Fact] @@ -135,11 +134,11 @@ public void ValidateCustomExtension() var walker = new OpenApiWalker(validator); walker.Walk(openApiDocument); - validator.Errors.Should().BeEquivalentTo( + Assert.Equivalent( new List { new OpenApiValidatorError("FooExtensionRule", "#/info/x-foo", "Don't say hey") - }); + }, validator.Errors); } [Fact] diff --git a/test/Microsoft.OpenApi.Tests/Validations/OpenApiComponentsValidationTests.cs b/test/Microsoft.OpenApi.Tests/Validations/OpenApiComponentsValidationTests.cs index 1bae78aba..fe2a230e2 100644 --- a/test/Microsoft.OpenApi.Tests/Validations/OpenApiComponentsValidationTests.cs +++ b/test/Microsoft.OpenApi.Tests/Validations/OpenApiComponentsValidationTests.cs @@ -1,7 +1,6 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. -using System; using System.Collections.Generic; using System.Linq; using Microsoft.OpenApi.Extensions; diff --git a/test/Microsoft.OpenApi.Tests/Validations/OpenApiContactValidationTests.cs b/test/Microsoft.OpenApi.Tests/Validations/OpenApiContactValidationTests.cs index 73836ed9a..213e2138f 100644 --- a/test/Microsoft.OpenApi.Tests/Validations/OpenApiContactValidationTests.cs +++ b/test/Microsoft.OpenApi.Tests/Validations/OpenApiContactValidationTests.cs @@ -1,7 +1,6 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. -using System; using System.Linq; using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Models; diff --git a/test/Microsoft.OpenApi.Tests/Validations/OpenApiExternalDocsValidationTests.cs b/test/Microsoft.OpenApi.Tests/Validations/OpenApiExternalDocsValidationTests.cs index dbc27cfb9..3098d631a 100644 --- a/test/Microsoft.OpenApi.Tests/Validations/OpenApiExternalDocsValidationTests.cs +++ b/test/Microsoft.OpenApi.Tests/Validations/OpenApiExternalDocsValidationTests.cs @@ -1,7 +1,6 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. -using System; using System.Linq; using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Models; diff --git a/test/Microsoft.OpenApi.Tests/Validations/OpenApiInfoValidationTests.cs b/test/Microsoft.OpenApi.Tests/Validations/OpenApiInfoValidationTests.cs index 3e88923d6..12c818a21 100644 --- a/test/Microsoft.OpenApi.Tests/Validations/OpenApiInfoValidationTests.cs +++ b/test/Microsoft.OpenApi.Tests/Validations/OpenApiInfoValidationTests.cs @@ -1,7 +1,6 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. -using System; using System.Linq; using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Models; diff --git a/test/Microsoft.OpenApi.Tests/Validations/OpenApiLicenseValidationTests.cs b/test/Microsoft.OpenApi.Tests/Validations/OpenApiLicenseValidationTests.cs index def52b32f..94b9d82d0 100644 --- a/test/Microsoft.OpenApi.Tests/Validations/OpenApiLicenseValidationTests.cs +++ b/test/Microsoft.OpenApi.Tests/Validations/OpenApiLicenseValidationTests.cs @@ -1,7 +1,6 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. -using System; using System.Collections.Generic; using System.Linq; using Microsoft.OpenApi.Models; diff --git a/test/Microsoft.OpenApi.Tests/Validations/OpenApiResponseValidationTests.cs b/test/Microsoft.OpenApi.Tests/Validations/OpenApiResponseValidationTests.cs index ca73e6b0c..c1b4ce62d 100644 --- a/test/Microsoft.OpenApi.Tests/Validations/OpenApiResponseValidationTests.cs +++ b/test/Microsoft.OpenApi.Tests/Validations/OpenApiResponseValidationTests.cs @@ -1,7 +1,6 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. -using System; using System.Collections.Generic; using System.Linq; using Microsoft.OpenApi.Models; diff --git a/test/Microsoft.OpenApi.Tests/Validations/OpenApiServerValidationTests.cs b/test/Microsoft.OpenApi.Tests/Validations/OpenApiServerValidationTests.cs index 14fe5be0b..88be49e73 100644 --- a/test/Microsoft.OpenApi.Tests/Validations/OpenApiServerValidationTests.cs +++ b/test/Microsoft.OpenApi.Tests/Validations/OpenApiServerValidationTests.cs @@ -1,7 +1,6 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. -using System; using System.Collections.Generic; using System.Linq; using Microsoft.OpenApi.Models; diff --git a/test/Microsoft.OpenApi.Tests/Validations/OpenApiTagValidationTests.cs b/test/Microsoft.OpenApi.Tests/Validations/OpenApiTagValidationTests.cs index 545e4d2e0..d956e2cd0 100644 --- a/test/Microsoft.OpenApi.Tests/Validations/OpenApiTagValidationTests.cs +++ b/test/Microsoft.OpenApi.Tests/Validations/OpenApiTagValidationTests.cs @@ -1,7 +1,6 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. -using System; using System.Collections.Generic; using System.Linq; using Microsoft.OpenApi.Any; From faca076cbcbf8119ad426f3827f32aacb1f9e0c1 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Thu, 16 Jan 2025 07:48:41 -0500 Subject: [PATCH 75/90] chore: linting Signed-off-by: Vincent Biret --- .../V3Tests/OpenApiDocumentTests.cs | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDocumentTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDocumentTests.cs index 870c2c361..7a9649bbc 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDocumentTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDocumentTests.cs @@ -113,7 +113,7 @@ public void ParseInlineStringWithoutProvidingFormatSucceeds() [Fact] public async Task ParseBasicDocumentWithMultipleServersShouldSucceed() { - var path = System.IO.Path.Combine(SampleFolderPath, "basicDocumentWithMultipleServers.yaml"); + var path = Path.Combine(SampleFolderPath, "basicDocumentWithMultipleServers.yaml"); var result = await OpenApiDocument.LoadAsync(path); Assert.Empty(result.Diagnostic.Errors); @@ -144,13 +144,13 @@ public async Task ParseBasicDocumentWithMultipleServersShouldSucceed() [Fact] public async Task ParseBrokenMinimalDocumentShouldYieldExpectedDiagnostic() { - using var stream = Resources.GetStream(System.IO.Path.Combine(SampleFolderPath, "brokenMinimalDocument.yaml")); + using var stream = Resources.GetStream(Path.Combine(SampleFolderPath, "brokenMinimalDocument.yaml")); // Copy stream to MemoryStream using var memoryStream = new MemoryStream(); await stream.CopyToAsync(memoryStream); memoryStream.Position = 0; - var result = OpenApiDocument.Load(memoryStream); + var result = await OpenApiDocument.LoadAsync(memoryStream); result.Document.Should().BeEquivalentTo( new OpenApiDocument @@ -176,7 +176,7 @@ public async Task ParseBrokenMinimalDocumentShouldYieldExpectedDiagnostic() [Fact] public async Task ParseMinimalDocumentShouldSucceed() { - var result = await OpenApiDocument.LoadAsync(System.IO.Path.Combine(SampleFolderPath, "minimalDocument.yaml")); + var result = await OpenApiDocument.LoadAsync(Path.Combine(SampleFolderPath, "minimalDocument.yaml")); result.Document.Should().BeEquivalentTo( new OpenApiDocument @@ -199,7 +199,7 @@ public async Task ParseMinimalDocumentShouldSucceed() [Fact] public async Task ParseStandardPetStoreDocumentShouldSucceed() { - using var stream = Resources.GetStream(System.IO.Path.Combine(SampleFolderPath, "petStore.yaml")); + using var stream = Resources.GetStream(Path.Combine(SampleFolderPath, "petStore.yaml")); var actual = await OpenApiDocument.LoadAsync(stream, OpenApiConstants.Yaml); var components = new OpenApiComponents @@ -585,7 +585,7 @@ public async Task ParseStandardPetStoreDocumentShouldSucceed() [Fact] public async Task ParseModifiedPetStoreDocumentWithTagAndSecurityShouldSucceed() { - using var stream = Resources.GetStream(System.IO.Path.Combine(SampleFolderPath, "petStoreWithTagAndSecurity.yaml")); + using var stream = Resources.GetStream(Path.Combine(SampleFolderPath, "petStoreWithTagAndSecurity.yaml")); var actual = await OpenApiDocument.LoadAsync(stream, OpenApiConstants.Yaml); var components = new OpenApiComponents @@ -1089,7 +1089,7 @@ public async Task ParseModifiedPetStoreDocumentWithTagAndSecurityShouldSucceed() [Fact] public async Task ParsePetStoreExpandedShouldSucceed() { - var actual = await OpenApiDocument.LoadAsync(System.IO.Path.Combine(SampleFolderPath, "petStoreExpanded.yaml")); + var actual = await OpenApiDocument.LoadAsync(Path.Combine(SampleFolderPath, "petStoreExpanded.yaml")); // TODO: Create the object in memory and compare with the one read from YAML file. @@ -1100,7 +1100,7 @@ public async Task ParsePetStoreExpandedShouldSucceed() [Fact] public async Task GlobalSecurityRequirementShouldReferenceSecurityScheme() { - var result = await OpenApiDocument.LoadAsync(System.IO.Path.Combine(SampleFolderPath, "securedApi.yaml")); + var result = await OpenApiDocument.LoadAsync(Path.Combine(SampleFolderPath, "securedApi.yaml")); var securityRequirement = result.Document.SecurityRequirements[0]; @@ -1111,7 +1111,7 @@ public async Task GlobalSecurityRequirementShouldReferenceSecurityScheme() [Fact] public async Task HeaderParameterShouldAllowExample() { - var result = await OpenApiDocument.LoadAsync(System.IO.Path.Combine(SampleFolderPath, "apiWithFullHeaderComponent.yaml")); + var result = await OpenApiDocument.LoadAsync(Path.Combine(SampleFolderPath, "apiWithFullHeaderComponent.yaml")); var exampleHeader = result.Document.Components?.Headers?["example-header"]; Assert.NotNull(exampleHeader); @@ -1179,7 +1179,7 @@ public async Task ParseDocumentWithReferencedSecuritySchemeWorks() ReferenceResolution = ReferenceResolutionSetting.ResolveLocalReferences }; - var result = await OpenApiDocument.LoadAsync(System.IO.Path.Combine(SampleFolderPath, "docWithSecuritySchemeReference.yaml"), settings); + var result = await OpenApiDocument.LoadAsync(Path.Combine(SampleFolderPath, "docWithSecuritySchemeReference.yaml"), settings); var securityScheme = result.Document.Components.SecuritySchemes["OAuth2"]; // Assert @@ -1191,7 +1191,7 @@ public async Task ParseDocumentWithReferencedSecuritySchemeWorks() public async Task ParseDocumentWithJsonSchemaReferencesWorks() { // Arrange - using var stream = Resources.GetStream(System.IO.Path.Combine(SampleFolderPath, "docWithJsonSchema.yaml")); + using var stream = Resources.GetStream(Path.Combine(SampleFolderPath, "docWithJsonSchema.yaml")); // Act var settings = new OpenApiReaderSettings @@ -1311,7 +1311,7 @@ public async Task ParseDocWithRefsUsingProxyReferencesSucceeds() format: int32 default: 10"; - using var stream = Resources.GetStream(System.IO.Path.Combine(SampleFolderPath, "minifiedPetStore.yaml")); + using var stream = Resources.GetStream(Path.Combine(SampleFolderPath, "minifiedPetStore.yaml")); // Act var doc = (await OpenApiDocument.LoadAsync(stream)).Document; @@ -1400,7 +1400,7 @@ public void ParseBasicDocumentWithServerVariableAndNoDefaultShouldFail() [Fact] public async Task ParseDocumentWithEmptyPathsSucceeds() { - var result = await OpenApiDocument.LoadAsync(System.IO.Path.Combine(SampleFolderPath, "docWithEmptyPaths.yaml")); + var result = await OpenApiDocument.LoadAsync(Path.Combine(SampleFolderPath, "docWithEmptyPaths.yaml")); Assert.Empty(result.Diagnostic.Errors); } } From 268a39819d7bc247a93cb1834868eacea6c56442 Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Thu, 16 Jan 2025 16:16:15 +0300 Subject: [PATCH 76/90] Fix trimming errors --- src/Microsoft.OpenApi/Extensions/StringExtensions.cs | 5 ++--- .../Microsoft.OpenApi.Trimming.Tests.csproj | 4 +--- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/src/Microsoft.OpenApi/Extensions/StringExtensions.cs b/src/Microsoft.OpenApi/Extensions/StringExtensions.cs index 7f5b0f89d..b644050ab 100644 --- a/src/Microsoft.OpenApi/Extensions/StringExtensions.cs +++ b/src/Microsoft.OpenApi/Extensions/StringExtensions.cs @@ -34,7 +34,7 @@ internal static class StringExtensions { var type = typeof(T); - var displayMap = EnumDisplayCache.GetOrAdd(type, GetEnumValues); + var displayMap = EnumDisplayCache.GetOrAdd(type, _=> GetEnumValues(type)); if (displayMap.TryGetValue(displayName, out var cachedValue)) { @@ -45,8 +45,7 @@ internal static class StringExtensions result = default; return false; } - private static ReadOnlyDictionary GetEnumValues([DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicFields - | DynamicallyAccessedMemberTypes.PublicProperties)] Type enumType) where T : Enum + private static ReadOnlyDictionary GetEnumValues([DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicFields)] Type enumType) where T : Enum { var result = new Dictionary(StringComparer.OrdinalIgnoreCase); foreach (var field in enumType.GetFields(BindingFlags.Public | BindingFlags.Static)) diff --git a/test/Microsoft.OpenApi.Trimming.Tests/Microsoft.OpenApi.Trimming.Tests.csproj b/test/Microsoft.OpenApi.Trimming.Tests/Microsoft.OpenApi.Trimming.Tests.csproj index 1a0a95a22..fad2dc289 100644 --- a/test/Microsoft.OpenApi.Trimming.Tests/Microsoft.OpenApi.Trimming.Tests.csproj +++ b/test/Microsoft.OpenApi.Trimming.Tests/Microsoft.OpenApi.Trimming.Tests.csproj @@ -8,9 +8,7 @@ true false true - IL3000 - - NU1903 + NU1903; IL3000 false From 3a35cb9328b7dec61b900372bc7f86331664df2d Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Thu, 16 Jan 2025 18:36:19 +0300 Subject: [PATCH 77/90] Add MSBuild property to identify project-specific trimmer warnings --- src/Microsoft.OpenApi.Readers/Microsoft.OpenApi.Readers.csproj | 1 + src/Microsoft.OpenApi/Microsoft.OpenApi.csproj | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Readers/Microsoft.OpenApi.Readers.csproj b/src/Microsoft.OpenApi.Readers/Microsoft.OpenApi.Readers.csproj index cd1b4d2ae..0bcee86ba 100644 --- a/src/Microsoft.OpenApi.Readers/Microsoft.OpenApi.Readers.csproj +++ b/src/Microsoft.OpenApi.Readers/Microsoft.OpenApi.Readers.csproj @@ -8,6 +8,7 @@ OpenAPI.NET Readers for JSON and YAML documents true true + true true NU5048 diff --git a/src/Microsoft.OpenApi/Microsoft.OpenApi.csproj b/src/Microsoft.OpenApi/Microsoft.OpenApi.csproj index e071cff42..4156863b5 100644 --- a/src/Microsoft.OpenApi/Microsoft.OpenApi.csproj +++ b/src/Microsoft.OpenApi/Microsoft.OpenApi.csproj @@ -6,7 +6,8 @@ 2.0.0-preview4 .NET models with JSON and YAML writers for OpenAPI specification true - true + true + true true NU5048 From 7e512ab29567c65f7a42b6e21cd3b4ac194818d9 Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Thu, 16 Jan 2025 18:36:57 +0300 Subject: [PATCH 78/90] Resolve trimmer warnings --- src/Microsoft.OpenApi/Models/OpenApiSchema.cs | 4 ++++ .../Microsoft.OpenApi.Trimming.Tests.csproj | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi/Models/OpenApiSchema.cs b/src/Microsoft.OpenApi/Models/OpenApiSchema.cs index 0ebe9eab9..d2ffa88ed 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiSchema.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiSchema.cs @@ -846,7 +846,11 @@ where Type.Value.HasFlag(flag) writer.WriteOptionalCollection(OpenApiConstants.Type, list, (w, s) => w.WriteValue(s)); } +#if NET5_0_OR_GREATER + private static readonly Array jsonSchemaTypeValues = System.Enum.GetValues(); +#else private static readonly Array jsonSchemaTypeValues = System.Enum.GetValues(typeof(JsonSchemaType)); +#endif private void DowncastTypeArrayToV2OrV3(JsonSchemaType schemaType, IOpenApiWriter writer, OpenApiSpecVersion version) { diff --git a/test/Microsoft.OpenApi.Trimming.Tests/Microsoft.OpenApi.Trimming.Tests.csproj b/test/Microsoft.OpenApi.Trimming.Tests/Microsoft.OpenApi.Trimming.Tests.csproj index fad2dc289..68c02953d 100644 --- a/test/Microsoft.OpenApi.Trimming.Tests/Microsoft.OpenApi.Trimming.Tests.csproj +++ b/test/Microsoft.OpenApi.Trimming.Tests/Microsoft.OpenApi.Trimming.Tests.csproj @@ -8,7 +8,7 @@ true false true - NU1903; IL3000 + NU1903 false From 7a821741c5dc7c78a2a229c66a6488e0152fd041 Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Thu, 16 Jan 2025 18:57:32 +0300 Subject: [PATCH 79/90] Revert change --- .../Microsoft.OpenApi.Trimming.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Trimming.Tests/Microsoft.OpenApi.Trimming.Tests.csproj b/test/Microsoft.OpenApi.Trimming.Tests/Microsoft.OpenApi.Trimming.Tests.csproj index 68c02953d..fad2dc289 100644 --- a/test/Microsoft.OpenApi.Trimming.Tests/Microsoft.OpenApi.Trimming.Tests.csproj +++ b/test/Microsoft.OpenApi.Trimming.Tests/Microsoft.OpenApi.Trimming.Tests.csproj @@ -8,7 +8,7 @@ true false true - NU1903 + NU1903; IL3000 false From 962e929703a6ccbc5836924e8c0d692bac3f3cea Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Fri, 17 Jan 2025 11:16:20 +0300 Subject: [PATCH 80/90] Replicate copying logic for other component types --- .../References/OpenApiCallbackReference.cs | 12 +- .../References/OpenApiExampleReference.cs | 10 +- .../References/OpenApiHeaderReference.cs | 10 +- .../Models/References/OpenApiLinkReference.cs | 10 +- .../References/OpenApiParameterReference.cs | 10 +- .../References/OpenApiPathItemReference.cs | 10 +- .../References/OpenApiRequestBodyReference.cs | 10 +- .../References/OpenApiResponseReference.cs | 10 +- .../References/OpenApiSchemaReference.cs | 2 +- .../OpenApiSecuritySchemeReference.cs | 10 +- .../Services/CopyReferences.cs | 177 ++++++++++++------ 11 files changed, 194 insertions(+), 77 deletions(-) diff --git a/src/Microsoft.OpenApi/Models/References/OpenApiCallbackReference.cs b/src/Microsoft.OpenApi/Models/References/OpenApiCallbackReference.cs index 632aa485f..2d610336f 100644 --- a/src/Microsoft.OpenApi/Models/References/OpenApiCallbackReference.cs +++ b/src/Microsoft.OpenApi/Models/References/OpenApiCallbackReference.cs @@ -12,12 +12,20 @@ namespace Microsoft.OpenApi.Models.References /// /// Callback Object Reference: A reference to a map of possible out-of band callbacks related to the parent operation. /// - public class OpenApiCallbackReference : OpenApiCallback + public class OpenApiCallbackReference : OpenApiCallback, IOpenApiReferenceable { +#nullable enable internal OpenApiCallback _target; private readonly OpenApiReference _reference; - private OpenApiCallback Target + /// + /// Gets the target callback. + /// + /// + /// If the reference is not resolved, this will return null. + /// + public OpenApiCallback Target +#nullable restore { get { diff --git a/src/Microsoft.OpenApi/Models/References/OpenApiExampleReference.cs b/src/Microsoft.OpenApi/Models/References/OpenApiExampleReference.cs index 310ff0a8e..d471977f6 100644 --- a/src/Microsoft.OpenApi/Models/References/OpenApiExampleReference.cs +++ b/src/Microsoft.OpenApi/Models/References/OpenApiExampleReference.cs @@ -12,14 +12,20 @@ namespace Microsoft.OpenApi.Models.References /// /// Example Object Reference. /// - public class OpenApiExampleReference : OpenApiExample + public class OpenApiExampleReference : OpenApiExample, IOpenApiReferenceable { internal OpenApiExample _target; private readonly OpenApiReference _reference; private string _summary; private string _description; - private OpenApiExample Target + /// + /// Gets the target example. + /// + /// + /// If the reference is not resolved, this will return null. + /// + public OpenApiExample Target { get { diff --git a/src/Microsoft.OpenApi/Models/References/OpenApiHeaderReference.cs b/src/Microsoft.OpenApi/Models/References/OpenApiHeaderReference.cs index 2ffb0c3de..a3961be76 100644 --- a/src/Microsoft.OpenApi/Models/References/OpenApiHeaderReference.cs +++ b/src/Microsoft.OpenApi/Models/References/OpenApiHeaderReference.cs @@ -12,13 +12,19 @@ namespace Microsoft.OpenApi.Models.References /// /// Header Object Reference. /// - public class OpenApiHeaderReference : OpenApiHeader + public class OpenApiHeaderReference : OpenApiHeader, IOpenApiReferenceable { internal OpenApiHeader _target; private readonly OpenApiReference _reference; private string _description; - private OpenApiHeader Target + /// + /// Gets the target header. + /// + /// + /// If the reference is not resolved, this will return null. + /// + public OpenApiHeader Target { get { diff --git a/src/Microsoft.OpenApi/Models/References/OpenApiLinkReference.cs b/src/Microsoft.OpenApi/Models/References/OpenApiLinkReference.cs index a3c33503e..55574666c 100644 --- a/src/Microsoft.OpenApi/Models/References/OpenApiLinkReference.cs +++ b/src/Microsoft.OpenApi/Models/References/OpenApiLinkReference.cs @@ -11,13 +11,19 @@ namespace Microsoft.OpenApi.Models.References /// /// Link Object Reference. /// - public class OpenApiLinkReference : OpenApiLink + public class OpenApiLinkReference : OpenApiLink, IOpenApiReferenceable { internal OpenApiLink _target; private readonly OpenApiReference _reference; private string _description; - private OpenApiLink Target + /// + /// Gets the target link. + /// + /// + /// If the reference is not resolved, this will return null. + /// + public OpenApiLink Target { get { diff --git a/src/Microsoft.OpenApi/Models/References/OpenApiParameterReference.cs b/src/Microsoft.OpenApi/Models/References/OpenApiParameterReference.cs index 2c2a6c90d..c0549798f 100644 --- a/src/Microsoft.OpenApi/Models/References/OpenApiParameterReference.cs +++ b/src/Microsoft.OpenApi/Models/References/OpenApiParameterReference.cs @@ -12,7 +12,7 @@ namespace Microsoft.OpenApi.Models.References /// /// Parameter Object Reference. /// - public class OpenApiParameterReference : OpenApiParameter + public class OpenApiParameterReference : OpenApiParameter, IOpenApiReferenceable { internal OpenApiParameter _target; private readonly OpenApiReference _reference; @@ -20,7 +20,13 @@ public class OpenApiParameterReference : OpenApiParameter private bool? _explode; private ParameterStyle? _style; - private OpenApiParameter Target + /// + /// Gets the target parameter. + /// + /// + /// If the reference is not resolved, this will return null. + /// + public OpenApiParameter Target { get { diff --git a/src/Microsoft.OpenApi/Models/References/OpenApiPathItemReference.cs b/src/Microsoft.OpenApi/Models/References/OpenApiPathItemReference.cs index f757b7a07..d22c8340f 100644 --- a/src/Microsoft.OpenApi/Models/References/OpenApiPathItemReference.cs +++ b/src/Microsoft.OpenApi/Models/References/OpenApiPathItemReference.cs @@ -11,14 +11,20 @@ namespace Microsoft.OpenApi.Models.References /// /// Path Item Object Reference: to describe the operations available on a single path. /// - public class OpenApiPathItemReference : OpenApiPathItem + public class OpenApiPathItemReference : OpenApiPathItem, IOpenApiReferenceable { internal OpenApiPathItem _target; private readonly OpenApiReference _reference; private string _description; private string _summary; - private OpenApiPathItem Target + /// + /// Gets the target path item. + /// + /// + /// If the reference is not resolved, this will return null. + /// + public OpenApiPathItem Target { get { diff --git a/src/Microsoft.OpenApi/Models/References/OpenApiRequestBodyReference.cs b/src/Microsoft.OpenApi/Models/References/OpenApiRequestBodyReference.cs index 8e3a81ad8..89375d665 100644 --- a/src/Microsoft.OpenApi/Models/References/OpenApiRequestBodyReference.cs +++ b/src/Microsoft.OpenApi/Models/References/OpenApiRequestBodyReference.cs @@ -11,13 +11,19 @@ namespace Microsoft.OpenApi.Models.References /// /// Request Body Object Reference. /// - public class OpenApiRequestBodyReference : OpenApiRequestBody + public class OpenApiRequestBodyReference : OpenApiRequestBody, IOpenApiReferenceable { internal OpenApiRequestBody _target; private readonly OpenApiReference _reference; private string _description; - private OpenApiRequestBody Target + /// + /// Gets the target request body. + /// + /// + /// If the reference is not resolved, this will return null. + /// + public OpenApiRequestBody Target { get { diff --git a/src/Microsoft.OpenApi/Models/References/OpenApiResponseReference.cs b/src/Microsoft.OpenApi/Models/References/OpenApiResponseReference.cs index c24652504..437d34c19 100644 --- a/src/Microsoft.OpenApi/Models/References/OpenApiResponseReference.cs +++ b/src/Microsoft.OpenApi/Models/References/OpenApiResponseReference.cs @@ -11,13 +11,19 @@ namespace Microsoft.OpenApi.Models.References /// /// Response Object Reference. /// - public class OpenApiResponseReference : OpenApiResponse + public class OpenApiResponseReference : OpenApiResponse, IOpenApiReferenceable { internal OpenApiResponse _target; private readonly OpenApiReference _reference; private string _description; - private OpenApiResponse Target + /// + /// Gets the target response. + /// + /// + /// If the reference is not resolved, this will return null. + /// + public OpenApiResponse Target { get { diff --git a/src/Microsoft.OpenApi/Models/References/OpenApiSchemaReference.cs b/src/Microsoft.OpenApi/Models/References/OpenApiSchemaReference.cs index 62cb0bae4..b5b7fb4a1 100644 --- a/src/Microsoft.OpenApi/Models/References/OpenApiSchemaReference.cs +++ b/src/Microsoft.OpenApi/Models/References/OpenApiSchemaReference.cs @@ -12,7 +12,7 @@ namespace Microsoft.OpenApi.Models.References /// /// Schema reference object /// - public class OpenApiSchemaReference : OpenApiSchema + public class OpenApiSchemaReference : OpenApiSchema, IOpenApiReferenceable { #nullable enable private OpenApiSchema? _target; diff --git a/src/Microsoft.OpenApi/Models/References/OpenApiSecuritySchemeReference.cs b/src/Microsoft.OpenApi/Models/References/OpenApiSecuritySchemeReference.cs index faf6ae3bc..7b5064309 100644 --- a/src/Microsoft.OpenApi/Models/References/OpenApiSecuritySchemeReference.cs +++ b/src/Microsoft.OpenApi/Models/References/OpenApiSecuritySchemeReference.cs @@ -11,13 +11,19 @@ namespace Microsoft.OpenApi.Models.References /// /// Security Scheme Object Reference. /// - public class OpenApiSecuritySchemeReference : OpenApiSecurityScheme + public class OpenApiSecuritySchemeReference : OpenApiSecurityScheme, IOpenApiReferenceable { internal OpenApiSecurityScheme _target; private readonly OpenApiReference _reference; private string _description; - private OpenApiSecurityScheme Target + /// + /// Gets the target security scheme. + /// + /// + /// If the reference is not resolved, this will return null. + /// + public OpenApiSecurityScheme Target { get { diff --git a/src/Microsoft.OpenApi/Services/CopyReferences.cs b/src/Microsoft.OpenApi/Services/CopyReferences.cs index f12b11f28..c122d5132 100644 --- a/src/Microsoft.OpenApi/Services/CopyReferences.cs +++ b/src/Microsoft.OpenApi/Services/CopyReferences.cs @@ -26,80 +26,54 @@ public override void Visit(IOpenApiReferenceable referenceable) case OpenApiSchema schema: AddSchemaToComponents(schema); break; - + case OpenApiParameterReference openApiParameterReference: + AddParameterToComponents(openApiParameterReference.Target, openApiParameterReference.Reference.Id); + break; case OpenApiParameter parameter: - EnsureComponentsExist(); - EnsureParametersExist(); - if (!Components.Parameters.ContainsKey(parameter.Reference.Id)) - { - Components.Parameters.Add(parameter.Reference.Id, parameter); - } + AddParameterToComponents(parameter); + break; + case OpenApiResponseReference openApiResponseReference: + AddResponseToComponents(openApiResponseReference.Target, openApiResponseReference.Reference.Id); break; - case OpenApiResponse response: - EnsureComponentsExist(); - EnsureResponsesExist(); - if (!Components.Responses.ContainsKey(response.Reference.Id)) - { - Components.Responses.Add(response.Reference.Id, response); - } + AddResponseToComponents(response); + break; + case OpenApiRequestBodyReference openApiRequestBodyReference: + AddRequestBodyToComponents(openApiRequestBodyReference.Target, openApiRequestBodyReference.Reference.Id); break; - case OpenApiRequestBody requestBody: - EnsureComponentsExist(); - EnsureResponsesExist(); - EnsureRequestBodiesExist(); - if (!Components.RequestBodies.ContainsKey(requestBody.Reference.Id)) - { - Components.RequestBodies.Add(requestBody.Reference.Id, requestBody); - } + AddRequestBodyToComponents(requestBody); + break; + case OpenApiExampleReference openApiExampleReference: + AddExampleToComponents(openApiExampleReference.Target, openApiExampleReference.Reference.Id); break; - case OpenApiExample example: - EnsureComponentsExist(); - EnsureExamplesExist(); - if (!Components.Examples.ContainsKey(example.Reference.Id)) - { - Components.Examples.Add(example.Reference.Id, example); - } + AddExampleToComponents(example); + break; + case OpenApiHeaderReference openApiHeaderReference: + AddHeaderToComponents(openApiHeaderReference.Target, openApiHeaderReference.Reference.Id); break; - case OpenApiHeader header: - EnsureComponentsExist(); - EnsureHeadersExist(); - if (!Components.Headers.ContainsKey(header.Reference.Id)) - { - Components.Headers.Add(header.Reference.Id, header); - } + AddHeaderToComponents(header); + break; + case OpenApiCallbackReference openApiCallbackReference: + AddCallbackToComponents(openApiCallbackReference.Target, openApiCallbackReference.Reference.Id); break; - case OpenApiCallback callback: - EnsureComponentsExist(); - EnsureCallbacksExist(); - if (!Components.Callbacks.ContainsKey(callback.Reference.Id)) - { - Components.Callbacks.Add(callback.Reference.Id, callback); - } + AddCallbackToComponents(callback); + break; + case OpenApiLinkReference openApiLinkReference: + AddLinkToComponents(openApiLinkReference.Target, openApiLinkReference.Reference.Id); break; - case OpenApiLink link: - EnsureComponentsExist(); - EnsureLinksExist(); - if (!Components.Links.ContainsKey(link.Reference.Id)) - { - Components.Links.Add(link.Reference.Id, link); - } + AddLinkToComponents(link); + break; + case OpenApiSecuritySchemeReference openApiSecuritySchemeReference: + AddSecuritySchemeToComponents(openApiSecuritySchemeReference.Target, openApiSecuritySchemeReference.Reference.Id); break; - case OpenApiSecurityScheme securityScheme: - EnsureComponentsExist(); - EnsureSecuritySchemesExist(); - if (!Components.SecuritySchemes.ContainsKey(securityScheme.Reference.Id)) - { - Components.SecuritySchemes.Add(securityScheme.Reference.Id, securityScheme); - } + AddSecuritySchemeToComponents(securityScheme); break; - default: break; } @@ -117,6 +91,89 @@ private void AddSchemaToComponents(OpenApiSchema schema, string referenceId = nu } } + private void AddParameterToComponents(OpenApiParameter parameter, string referenceId = null) + { + EnsureComponentsExist(); + EnsureParametersExist(); + if (!Components.Parameters.ContainsKey(referenceId ?? parameter.Reference.Id)) + { + Components.Parameters.Add(referenceId ?? parameter.Reference.Id, parameter); + } + } + + private void AddResponseToComponents(OpenApiResponse response, string referenceId = null) + { + EnsureComponentsExist(); + EnsureResponsesExist(); + if (!Components.Responses.ContainsKey(referenceId ?? response.Reference.Id)) + { + Components.Responses.Add(referenceId ?? response.Reference.Id, response); + } + } + private void AddRequestBodyToComponents(OpenApiRequestBody requestBody, string referenceId = null) + { + EnsureComponentsExist(); + EnsureRequestBodiesExist(); + if (!Components.RequestBodies.ContainsKey(referenceId ?? requestBody.Reference.Id)) + { + Components.RequestBodies.Add(referenceId ?? requestBody.Reference.Id, requestBody); + } + } + private void AddLinkToComponents(OpenApiLink link, string referenceId = null) + { + EnsureComponentsExist(); + EnsureLinksExist(); + if (!Components.Links.ContainsKey(referenceId ?? link.Reference.Id)) + { + Components.Links.Add(referenceId ?? link.Reference.Id, link); + } + } + private void AddCallbackToComponents(OpenApiCallback callback, string referenceId = null) + { + EnsureComponentsExist(); + EnsureCallbacksExist(); + if (!Components.Callbacks.ContainsKey(referenceId ?? callback.Reference.Id)) + { + Components.Callbacks.Add(referenceId ?? callback.Reference.Id, callback); + } + } + private void AddHeaderToComponents(OpenApiHeader header, string referenceId = null) + { + EnsureComponentsExist(); + EnsureHeadersExist(); + if (!Components.Headers.ContainsKey(referenceId ?? header.Reference.Id)) + { + Components.Headers.Add(referenceId ?? header.Reference.Id, header); + } + } + private void AddExampleToComponents(OpenApiExample example, string referenceId = null) + { + EnsureComponentsExist(); + EnsureExamplesExist(); + if (!Components.Examples.ContainsKey(referenceId ?? example.Reference.Id)) + { + Components.Examples.Add(referenceId ?? example.Reference.Id, example); + } + } + private void AddPathItemToComponents(OpenApiPathItem pathItem, string referenceId = null) + { + EnsureComponentsExist(); + EnsurePathItemsExist(); + if (!Components.PathItems.ContainsKey(referenceId ?? pathItem.Reference.Id)) + { + Components.PathItems.Add(referenceId ?? pathItem.Reference.Id, pathItem); + } + } + private void AddSecuritySchemeToComponents(OpenApiSecurityScheme securityScheme, string referenceId = null) + { + EnsureComponentsExist(); + EnsureSecuritySchemesExist(); + if (!Components.SecuritySchemes.ContainsKey(referenceId ?? securityScheme.Reference.Id)) + { + Components.SecuritySchemes.Add(referenceId ?? securityScheme.Reference.Id, securityScheme); + } + } + /// public override void Visit(OpenApiSchema schema) { @@ -181,4 +238,8 @@ private void EnsureSecuritySchemesExist() { _target.Components.SecuritySchemes ??= new Dictionary(); } + private void EnsurePathItemsExist() + { + _target.Components.PathItems ??= new Dictionary(); + } } From dbf4d3907dca01e5a47920dba33516da580d764d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 17 Jan 2025 21:57:01 +0000 Subject: [PATCH 81/90] chore(deps): bump FluentAssertions from 7.0.0 to 7.1.0 Bumps [FluentAssertions](https://github.com/fluentassertions/fluentassertions) from 7.0.0 to 7.1.0. - [Release notes](https://github.com/fluentassertions/fluentassertions/releases) - [Changelog](https://github.com/fluentassertions/fluentassertions/blob/main/AcceptApiChanges.ps1) - [Commits](https://github.com/fluentassertions/fluentassertions/compare/7.0.0...7.1.0) --- updated-dependencies: - dependency-name: FluentAssertions dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Readers.Tests.csproj | 2 +- test/Microsoft.OpenApi.Tests/Microsoft.OpenApi.Tests.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/test/Microsoft.OpenApi.Readers.Tests/Microsoft.OpenApi.Readers.Tests.csproj b/test/Microsoft.OpenApi.Readers.Tests/Microsoft.OpenApi.Readers.Tests.csproj index 02033b3d2..e4b76df72 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/Microsoft.OpenApi.Readers.Tests.csproj +++ b/test/Microsoft.OpenApi.Readers.Tests/Microsoft.OpenApi.Readers.Tests.csproj @@ -18,7 +18,7 @@ - + diff --git a/test/Microsoft.OpenApi.Tests/Microsoft.OpenApi.Tests.csproj b/test/Microsoft.OpenApi.Tests/Microsoft.OpenApi.Tests.csproj index 60b5f8eb8..ae05fc92f 100644 --- a/test/Microsoft.OpenApi.Tests/Microsoft.OpenApi.Tests.csproj +++ b/test/Microsoft.OpenApi.Tests/Microsoft.OpenApi.Tests.csproj @@ -10,7 +10,7 @@ - + From 70694469c1426489632f8d2794a68acf6a5b53af Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Mon, 20 Jan 2025 11:09:22 +0300 Subject: [PATCH 82/90] Implement an interface for IOpenApiReferenceable items with a target object --- .../IOpenApiReferenceableWithTarget.cs | 17 +++++++++++++++++ .../References/OpenApiCallbackReference.cs | 2 +- .../References/OpenApiExampleReference.cs | 2 +- .../Models/References/OpenApiHeaderReference.cs | 2 +- .../Models/References/OpenApiLinkReference.cs | 2 +- .../References/OpenApiParameterReference.cs | 2 +- .../References/OpenApiPathItemReference.cs | 2 +- .../References/OpenApiRequestBodyReference.cs | 2 +- .../References/OpenApiResponseReference.cs | 2 +- .../Models/References/OpenApiSchemaReference.cs | 2 +- .../OpenApiSecuritySchemeReference.cs | 2 +- .../Models/References/OpenApiTagReference.cs | 2 +- 12 files changed, 28 insertions(+), 11 deletions(-) create mode 100644 src/Microsoft.OpenApi/Interfaces/IOpenApiReferenceableWithTarget.cs diff --git a/src/Microsoft.OpenApi/Interfaces/IOpenApiReferenceableWithTarget.cs b/src/Microsoft.OpenApi/Interfaces/IOpenApiReferenceableWithTarget.cs new file mode 100644 index 000000000..fc4c1daed --- /dev/null +++ b/src/Microsoft.OpenApi/Interfaces/IOpenApiReferenceableWithTarget.cs @@ -0,0 +1,17 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT license. + +namespace Microsoft.OpenApi.Interfaces +{ + /// + /// A generic interface for OpenApiReferenceable objects that have a target. + /// + /// + public interface IOpenApiReferenceableWithTarget : IOpenApiReferenceable + { + /// + /// Gets the resolved target object. + /// + T Target { get; } + } +} diff --git a/src/Microsoft.OpenApi/Models/References/OpenApiCallbackReference.cs b/src/Microsoft.OpenApi/Models/References/OpenApiCallbackReference.cs index 2d610336f..81985cb12 100644 --- a/src/Microsoft.OpenApi/Models/References/OpenApiCallbackReference.cs +++ b/src/Microsoft.OpenApi/Models/References/OpenApiCallbackReference.cs @@ -12,7 +12,7 @@ namespace Microsoft.OpenApi.Models.References /// /// Callback Object Reference: A reference to a map of possible out-of band callbacks related to the parent operation. /// - public class OpenApiCallbackReference : OpenApiCallback, IOpenApiReferenceable + public class OpenApiCallbackReference : OpenApiCallback, IOpenApiReferenceableWithTarget { #nullable enable internal OpenApiCallback _target; diff --git a/src/Microsoft.OpenApi/Models/References/OpenApiExampleReference.cs b/src/Microsoft.OpenApi/Models/References/OpenApiExampleReference.cs index d471977f6..c36c43d9a 100644 --- a/src/Microsoft.OpenApi/Models/References/OpenApiExampleReference.cs +++ b/src/Microsoft.OpenApi/Models/References/OpenApiExampleReference.cs @@ -12,7 +12,7 @@ namespace Microsoft.OpenApi.Models.References /// /// Example Object Reference. /// - public class OpenApiExampleReference : OpenApiExample, IOpenApiReferenceable + public class OpenApiExampleReference : OpenApiExample, IOpenApiReferenceableWithTarget { internal OpenApiExample _target; private readonly OpenApiReference _reference; diff --git a/src/Microsoft.OpenApi/Models/References/OpenApiHeaderReference.cs b/src/Microsoft.OpenApi/Models/References/OpenApiHeaderReference.cs index a3961be76..e8275c23c 100644 --- a/src/Microsoft.OpenApi/Models/References/OpenApiHeaderReference.cs +++ b/src/Microsoft.OpenApi/Models/References/OpenApiHeaderReference.cs @@ -12,7 +12,7 @@ namespace Microsoft.OpenApi.Models.References /// /// Header Object Reference. /// - public class OpenApiHeaderReference : OpenApiHeader, IOpenApiReferenceable + public class OpenApiHeaderReference : OpenApiHeader, IOpenApiReferenceableWithTarget { internal OpenApiHeader _target; private readonly OpenApiReference _reference; diff --git a/src/Microsoft.OpenApi/Models/References/OpenApiLinkReference.cs b/src/Microsoft.OpenApi/Models/References/OpenApiLinkReference.cs index 55574666c..05817ddc9 100644 --- a/src/Microsoft.OpenApi/Models/References/OpenApiLinkReference.cs +++ b/src/Microsoft.OpenApi/Models/References/OpenApiLinkReference.cs @@ -11,7 +11,7 @@ namespace Microsoft.OpenApi.Models.References /// /// Link Object Reference. /// - public class OpenApiLinkReference : OpenApiLink, IOpenApiReferenceable + public class OpenApiLinkReference : OpenApiLink, IOpenApiReferenceableWithTarget { internal OpenApiLink _target; private readonly OpenApiReference _reference; diff --git a/src/Microsoft.OpenApi/Models/References/OpenApiParameterReference.cs b/src/Microsoft.OpenApi/Models/References/OpenApiParameterReference.cs index c0549798f..9df1e7be2 100644 --- a/src/Microsoft.OpenApi/Models/References/OpenApiParameterReference.cs +++ b/src/Microsoft.OpenApi/Models/References/OpenApiParameterReference.cs @@ -12,7 +12,7 @@ namespace Microsoft.OpenApi.Models.References /// /// Parameter Object Reference. /// - public class OpenApiParameterReference : OpenApiParameter, IOpenApiReferenceable + public class OpenApiParameterReference : OpenApiParameter, IOpenApiReferenceableWithTarget { internal OpenApiParameter _target; private readonly OpenApiReference _reference; diff --git a/src/Microsoft.OpenApi/Models/References/OpenApiPathItemReference.cs b/src/Microsoft.OpenApi/Models/References/OpenApiPathItemReference.cs index d22c8340f..fad8922ae 100644 --- a/src/Microsoft.OpenApi/Models/References/OpenApiPathItemReference.cs +++ b/src/Microsoft.OpenApi/Models/References/OpenApiPathItemReference.cs @@ -11,7 +11,7 @@ namespace Microsoft.OpenApi.Models.References /// /// Path Item Object Reference: to describe the operations available on a single path. /// - public class OpenApiPathItemReference : OpenApiPathItem, IOpenApiReferenceable + public class OpenApiPathItemReference : OpenApiPathItem, IOpenApiReferenceableWithTarget { internal OpenApiPathItem _target; private readonly OpenApiReference _reference; diff --git a/src/Microsoft.OpenApi/Models/References/OpenApiRequestBodyReference.cs b/src/Microsoft.OpenApi/Models/References/OpenApiRequestBodyReference.cs index 89375d665..598d70310 100644 --- a/src/Microsoft.OpenApi/Models/References/OpenApiRequestBodyReference.cs +++ b/src/Microsoft.OpenApi/Models/References/OpenApiRequestBodyReference.cs @@ -11,7 +11,7 @@ namespace Microsoft.OpenApi.Models.References /// /// Request Body Object Reference. /// - public class OpenApiRequestBodyReference : OpenApiRequestBody, IOpenApiReferenceable + public class OpenApiRequestBodyReference : OpenApiRequestBody, IOpenApiReferenceableWithTarget { internal OpenApiRequestBody _target; private readonly OpenApiReference _reference; diff --git a/src/Microsoft.OpenApi/Models/References/OpenApiResponseReference.cs b/src/Microsoft.OpenApi/Models/References/OpenApiResponseReference.cs index 437d34c19..0e4ac30ac 100644 --- a/src/Microsoft.OpenApi/Models/References/OpenApiResponseReference.cs +++ b/src/Microsoft.OpenApi/Models/References/OpenApiResponseReference.cs @@ -11,7 +11,7 @@ namespace Microsoft.OpenApi.Models.References /// /// Response Object Reference. /// - public class OpenApiResponseReference : OpenApiResponse, IOpenApiReferenceable + public class OpenApiResponseReference : OpenApiResponse, IOpenApiReferenceableWithTarget { internal OpenApiResponse _target; private readonly OpenApiReference _reference; diff --git a/src/Microsoft.OpenApi/Models/References/OpenApiSchemaReference.cs b/src/Microsoft.OpenApi/Models/References/OpenApiSchemaReference.cs index b5b7fb4a1..da2f9b745 100644 --- a/src/Microsoft.OpenApi/Models/References/OpenApiSchemaReference.cs +++ b/src/Microsoft.OpenApi/Models/References/OpenApiSchemaReference.cs @@ -12,7 +12,7 @@ namespace Microsoft.OpenApi.Models.References /// /// Schema reference object /// - public class OpenApiSchemaReference : OpenApiSchema, IOpenApiReferenceable + public class OpenApiSchemaReference : OpenApiSchema, IOpenApiReferenceableWithTarget { #nullable enable private OpenApiSchema? _target; diff --git a/src/Microsoft.OpenApi/Models/References/OpenApiSecuritySchemeReference.cs b/src/Microsoft.OpenApi/Models/References/OpenApiSecuritySchemeReference.cs index 7b5064309..dcd5009b1 100644 --- a/src/Microsoft.OpenApi/Models/References/OpenApiSecuritySchemeReference.cs +++ b/src/Microsoft.OpenApi/Models/References/OpenApiSecuritySchemeReference.cs @@ -11,7 +11,7 @@ namespace Microsoft.OpenApi.Models.References /// /// Security Scheme Object Reference. /// - public class OpenApiSecuritySchemeReference : OpenApiSecurityScheme, IOpenApiReferenceable + public class OpenApiSecuritySchemeReference : OpenApiSecurityScheme, IOpenApiReferenceableWithTarget { internal OpenApiSecurityScheme _target; private readonly OpenApiReference _reference; diff --git a/src/Microsoft.OpenApi/Models/References/OpenApiTagReference.cs b/src/Microsoft.OpenApi/Models/References/OpenApiTagReference.cs index ddf7ad4e2..ae15b4085 100644 --- a/src/Microsoft.OpenApi/Models/References/OpenApiTagReference.cs +++ b/src/Microsoft.OpenApi/Models/References/OpenApiTagReference.cs @@ -12,7 +12,7 @@ namespace Microsoft.OpenApi.Models.References /// /// Tag Object Reference /// - public class OpenApiTagReference : OpenApiTag, IOpenApiReferenceable + public class OpenApiTagReference : OpenApiTag, IOpenApiReferenceableWithTarget { internal OpenApiTag _target; From 32f75a1fa3e33521e1b1fd80fcfe50adcfb363fa Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Mon, 20 Jan 2025 11:09:39 +0300 Subject: [PATCH 83/90] Add reusable pathItems to components --- src/Microsoft.OpenApi/Services/CopyReferences.cs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/Microsoft.OpenApi/Services/CopyReferences.cs b/src/Microsoft.OpenApi/Services/CopyReferences.cs index c122d5132..22f1c5ad3 100644 --- a/src/Microsoft.OpenApi/Services/CopyReferences.cs +++ b/src/Microsoft.OpenApi/Services/CopyReferences.cs @@ -74,6 +74,12 @@ public override void Visit(IOpenApiReferenceable referenceable) case OpenApiSecurityScheme securityScheme: AddSecuritySchemeToComponents(securityScheme); break; + case OpenApiPathItemReference openApiPathItemReference: + AddPathItemToComponents(openApiPathItemReference.Target, openApiPathItemReference.Reference.Id); + break; + case OpenApiPathItem pathItem: + AddPathItemToComponents(pathItem); + break; default: break; } From 733185f4ea2b659cd695b797b7b3bbd4034f30be Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Mon, 20 Jan 2025 11:15:23 +0300 Subject: [PATCH 84/90] Add test and update API surface --- .../References/OpenApiHeaderReferenceTests.cs | 33 +++++++++++++++-- .../PublicApi/PublicApi.approved.txt | 35 +++++++++++++------ 2 files changed, 55 insertions(+), 13 deletions(-) diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiHeaderReferenceTests.cs b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiHeaderReferenceTests.cs index 70eca5e9e..d7fef6396 100644 --- a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiHeaderReferenceTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiHeaderReferenceTests.cs @@ -19,7 +19,7 @@ namespace Microsoft.OpenApi.Tests.Models.References public class OpenApiHeaderReferenceTests { // OpenApi doc with external $ref - private const string OpenApi= @" + private const string OpenApi = @" openapi: 3.0.0 info: title: Sample API @@ -149,7 +149,7 @@ public async Task SerializeHeaderReferenceAsV2JsonWorksAsync(bool produceTerseOu { // Arrange var outputStringWriter = new StringWriter(CultureInfo.InvariantCulture); - var writer = new OpenApiJsonWriter(outputStringWriter, new OpenApiJsonWriterSettings { Terse = produceTerseOutput, InlineLocalReferences = true}); + var writer = new OpenApiJsonWriter(outputStringWriter, new OpenApiJsonWriterSettings { Terse = produceTerseOutput, InlineLocalReferences = true }); // Act _localHeaderReference.SerializeAsV2(writer); @@ -158,5 +158,34 @@ public async Task SerializeHeaderReferenceAsV2JsonWorksAsync(bool produceTerseOu // Assert await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput); } + + [Fact] + public void OpenApiHeaderTargetShouldResolveReference() + { + var doc = new OpenApiDocument + { + Components = new OpenApiComponents + { + Headers = new System.Collections.Generic.Dictionary + { + { "header1", new OpenApiHeader + { + Description = "test header", + Schema = new OpenApiSchema + { + Type = JsonSchemaType.String + } + } + } + } + } + }; + + doc.Workspace.RegisterComponents(doc); + + var headerReference = new OpenApiHeaderReference("header1", doc); + Assert.Equal("test header", headerReference.Description); + Assert.Equal(JsonSchemaType.String, headerReference.Schema.Type); + } } } diff --git a/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt b/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt index ecdfd05c2..101624970 100644 --- a/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt +++ b/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt @@ -222,6 +222,10 @@ namespace Microsoft.OpenApi.Interfaces Microsoft.OpenApi.Models.OpenApiReference Reference { get; set; } bool UnresolvedReference { get; set; } } + public interface IOpenApiReferenceableWithTarget : Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiReferenceable, Microsoft.OpenApi.Interfaces.IOpenApiSerializable + { + T Target { get; } + } public interface IOpenApiSerializable : Microsoft.OpenApi.Interfaces.IOpenApiElement { void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer); @@ -1095,17 +1099,19 @@ namespace Microsoft.OpenApi.Models } namespace Microsoft.OpenApi.Models.References { - public class OpenApiCallbackReference : Microsoft.OpenApi.Models.OpenApiCallback + public class OpenApiCallbackReference : Microsoft.OpenApi.Models.OpenApiCallback, Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiReferenceable, Microsoft.OpenApi.Interfaces.IOpenApiReferenceableWithTarget, Microsoft.OpenApi.Interfaces.IOpenApiSerializable { public OpenApiCallbackReference(string referenceId, Microsoft.OpenApi.Models.OpenApiDocument hostDocument, string externalResource = null) { } + public Microsoft.OpenApi.Models.OpenApiCallback Target { get; } public override System.Collections.Generic.IDictionary Extensions { get; set; } public override System.Collections.Generic.Dictionary PathItems { get; set; } public override void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public override void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } } - public class OpenApiExampleReference : Microsoft.OpenApi.Models.OpenApiExample + public class OpenApiExampleReference : Microsoft.OpenApi.Models.OpenApiExample, Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiReferenceable, Microsoft.OpenApi.Interfaces.IOpenApiReferenceableWithTarget, Microsoft.OpenApi.Interfaces.IOpenApiSerializable { public OpenApiExampleReference(string referenceId, Microsoft.OpenApi.Models.OpenApiDocument hostDocument, string externalResource = null) { } + public Microsoft.OpenApi.Models.OpenApiExample Target { get; } public override string Description { get; set; } public override System.Collections.Generic.IDictionary Extensions { get; set; } public override string ExternalValue { get; set; } @@ -1114,9 +1120,10 @@ namespace Microsoft.OpenApi.Models.References public override void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public override void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } } - public class OpenApiHeaderReference : Microsoft.OpenApi.Models.OpenApiHeader + public class OpenApiHeaderReference : Microsoft.OpenApi.Models.OpenApiHeader, Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiReferenceable, Microsoft.OpenApi.Interfaces.IOpenApiReferenceableWithTarget, Microsoft.OpenApi.Interfaces.IOpenApiSerializable { public OpenApiHeaderReference(string referenceId, Microsoft.OpenApi.Models.OpenApiDocument hostDocument, string externalResource = null) { } + public Microsoft.OpenApi.Models.OpenApiHeader Target { get; } public override bool AllowEmptyValue { get; set; } public override bool AllowReserved { get; set; } public override System.Collections.Generic.IDictionary Content { get; set; } @@ -1133,9 +1140,10 @@ namespace Microsoft.OpenApi.Models.References public override void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public override void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } } - public class OpenApiLinkReference : Microsoft.OpenApi.Models.OpenApiLink + public class OpenApiLinkReference : Microsoft.OpenApi.Models.OpenApiLink, Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiReferenceable, Microsoft.OpenApi.Interfaces.IOpenApiReferenceableWithTarget, Microsoft.OpenApi.Interfaces.IOpenApiSerializable { public OpenApiLinkReference(string referenceId, Microsoft.OpenApi.Models.OpenApiDocument hostDocument, string externalResource = null) { } + public Microsoft.OpenApi.Models.OpenApiLink Target { get; } public override string Description { get; set; } public override System.Collections.Generic.IDictionary Extensions { get; set; } public override string OperationId { get; set; } @@ -1146,9 +1154,10 @@ namespace Microsoft.OpenApi.Models.References public override void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public override void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } } - public class OpenApiParameterReference : Microsoft.OpenApi.Models.OpenApiParameter + public class OpenApiParameterReference : Microsoft.OpenApi.Models.OpenApiParameter, Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiReferenceable, Microsoft.OpenApi.Interfaces.IOpenApiReferenceableWithTarget, Microsoft.OpenApi.Interfaces.IOpenApiSerializable { public OpenApiParameterReference(string referenceId, Microsoft.OpenApi.Models.OpenApiDocument hostDocument, string externalResource = null) { } + public Microsoft.OpenApi.Models.OpenApiParameter Target { get; } public override bool AllowEmptyValue { get; set; } public override bool AllowReserved { get; set; } public override System.Collections.Generic.IDictionary Content { get; set; } @@ -1167,9 +1176,10 @@ namespace Microsoft.OpenApi.Models.References public override void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public override void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } } - public class OpenApiPathItemReference : Microsoft.OpenApi.Models.OpenApiPathItem + public class OpenApiPathItemReference : Microsoft.OpenApi.Models.OpenApiPathItem, Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiReferenceable, Microsoft.OpenApi.Interfaces.IOpenApiReferenceableWithTarget, Microsoft.OpenApi.Interfaces.IOpenApiSerializable { public OpenApiPathItemReference(string referenceId, Microsoft.OpenApi.Models.OpenApiDocument hostDocument, string externalResource = null) { } + public Microsoft.OpenApi.Models.OpenApiPathItem Target { get; } public override string Description { get; set; } public override System.Collections.Generic.IDictionary Extensions { get; set; } public override System.Collections.Generic.IDictionary Operations { get; set; } @@ -1178,9 +1188,10 @@ namespace Microsoft.OpenApi.Models.References public override string Summary { get; set; } public override void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } } - public class OpenApiRequestBodyReference : Microsoft.OpenApi.Models.OpenApiRequestBody + public class OpenApiRequestBodyReference : Microsoft.OpenApi.Models.OpenApiRequestBody, Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiReferenceable, Microsoft.OpenApi.Interfaces.IOpenApiReferenceableWithTarget, Microsoft.OpenApi.Interfaces.IOpenApiSerializable { public OpenApiRequestBodyReference(string referenceId, Microsoft.OpenApi.Models.OpenApiDocument hostDocument, string externalResource = null) { } + public Microsoft.OpenApi.Models.OpenApiRequestBody Target { get; } public override System.Collections.Generic.IDictionary Content { get; set; } public override string Description { get; set; } public override System.Collections.Generic.IDictionary Extensions { get; set; } @@ -1188,9 +1199,10 @@ namespace Microsoft.OpenApi.Models.References public override void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public override void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } } - public class OpenApiResponseReference : Microsoft.OpenApi.Models.OpenApiResponse + public class OpenApiResponseReference : Microsoft.OpenApi.Models.OpenApiResponse, Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiReferenceable, Microsoft.OpenApi.Interfaces.IOpenApiReferenceableWithTarget, Microsoft.OpenApi.Interfaces.IOpenApiSerializable { public OpenApiResponseReference(string referenceId, Microsoft.OpenApi.Models.OpenApiDocument hostDocument, string externalResource = null) { } + public Microsoft.OpenApi.Models.OpenApiResponse Target { get; } public override System.Collections.Generic.IDictionary Content { get; set; } public override string Description { get; set; } public override System.Collections.Generic.IDictionary Extensions { get; set; } @@ -1200,7 +1212,7 @@ namespace Microsoft.OpenApi.Models.References public override void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public override void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } } - public class OpenApiSchemaReference : Microsoft.OpenApi.Models.OpenApiSchema + public class OpenApiSchemaReference : Microsoft.OpenApi.Models.OpenApiSchema, Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiReferenceable, Microsoft.OpenApi.Interfaces.IOpenApiReferenceableWithTarget, Microsoft.OpenApi.Interfaces.IOpenApiSerializable { public OpenApiSchemaReference(string referenceId, Microsoft.OpenApi.Models.OpenApiDocument hostDocument, string externalResource = null) { } public Microsoft.OpenApi.Models.OpenApiSchema? Target { get; } @@ -1259,9 +1271,10 @@ namespace Microsoft.OpenApi.Models.References public override void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public override void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } } - public class OpenApiSecuritySchemeReference : Microsoft.OpenApi.Models.OpenApiSecurityScheme + public class OpenApiSecuritySchemeReference : Microsoft.OpenApi.Models.OpenApiSecurityScheme, Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiReferenceable, Microsoft.OpenApi.Interfaces.IOpenApiReferenceableWithTarget, Microsoft.OpenApi.Interfaces.IOpenApiSerializable { public OpenApiSecuritySchemeReference(string referenceId, Microsoft.OpenApi.Models.OpenApiDocument hostDocument, string externalResource = null) { } + public Microsoft.OpenApi.Models.OpenApiSecurityScheme Target { get; } public override string BearerFormat { get; set; } public override string Description { get; set; } public override System.Collections.Generic.IDictionary Extensions { get; set; } @@ -1275,7 +1288,7 @@ namespace Microsoft.OpenApi.Models.References public override void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public override void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } } - public class OpenApiTagReference : Microsoft.OpenApi.Models.OpenApiTag, Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiReferenceable, Microsoft.OpenApi.Interfaces.IOpenApiSerializable + public class OpenApiTagReference : Microsoft.OpenApi.Models.OpenApiTag, Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiReferenceable, Microsoft.OpenApi.Interfaces.IOpenApiReferenceableWithTarget, Microsoft.OpenApi.Interfaces.IOpenApiSerializable { public OpenApiTagReference(Microsoft.OpenApi.Models.References.OpenApiTagReference source) { } public OpenApiTagReference(string referenceId, Microsoft.OpenApi.Models.OpenApiDocument hostDocument) { } From 613a8e0e4850e0ed23cf8527ed47a5fc1a0f3e5d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 Jan 2025 21:26:32 +0000 Subject: [PATCH 85/90] chore(deps): bump docker/build-push-action from 6.11.0 to 6.12.0 Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 6.11.0 to 6.12.0. - [Release notes](https://github.com/docker/build-push-action/releases) - [Commits](https://github.com/docker/build-push-action/compare/v6.11.0...v6.12.0) --- updated-dependencies: - dependency-name: docker/build-push-action dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .github/workflows/docker.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index f2aa17fb8..b4f6003dc 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -30,13 +30,13 @@ jobs: id: getversion - name: Push to registry - Nightly if: ${{ github.ref == 'refs/heads/dev' }} - uses: docker/build-push-action@v6.11.0 + uses: docker/build-push-action@v6.12.0 with: push: true tags: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:nightly - name: Push to registry - Release if: ${{ github.ref == 'refs/heads/main' || github.ref == 'refs/heads/support/v1' }} - uses: docker/build-push-action@v6.11.0 + uses: docker/build-push-action@v6.12.0 with: push: true tags: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest,${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.getversion.outputs.version }} From e0f976318de738e287f404a4ad04324492900923 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 Jan 2025 21:30:48 +0000 Subject: [PATCH 86/90] chore(deps): bump coverlet.msbuild from 6.0.3 to 6.0.4 Bumps [coverlet.msbuild](https://github.com/coverlet-coverage/coverlet) from 6.0.3 to 6.0.4. - [Release notes](https://github.com/coverlet-coverage/coverlet/releases) - [Commits](https://github.com/coverlet-coverage/coverlet/compare/v6.0.3...v6.0.4) --- updated-dependencies: - dependency-name: coverlet.msbuild dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- .../Microsoft.OpenApi.Readers.Tests.csproj | 2 +- test/Microsoft.OpenApi.Tests/Microsoft.OpenApi.Tests.csproj | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index ad4dff3fb..c009e1f06 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -11,7 +11,7 @@ - + diff --git a/test/Microsoft.OpenApi.Readers.Tests/Microsoft.OpenApi.Readers.Tests.csproj b/test/Microsoft.OpenApi.Readers.Tests/Microsoft.OpenApi.Readers.Tests.csproj index e4b76df72..b809464ae 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/Microsoft.OpenApi.Readers.Tests.csproj +++ b/test/Microsoft.OpenApi.Readers.Tests/Microsoft.OpenApi.Readers.Tests.csproj @@ -16,7 +16,7 @@ - + diff --git a/test/Microsoft.OpenApi.Tests/Microsoft.OpenApi.Tests.csproj b/test/Microsoft.OpenApi.Tests/Microsoft.OpenApi.Tests.csproj index ae05fc92f..98e86783f 100644 --- a/test/Microsoft.OpenApi.Tests/Microsoft.OpenApi.Tests.csproj +++ b/test/Microsoft.OpenApi.Tests/Microsoft.OpenApi.Tests.csproj @@ -9,7 +9,7 @@ - + From 445b6284807c5cf013c61de467d84f380834c8cb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 Jan 2025 21:48:12 +0000 Subject: [PATCH 87/90] chore(deps): bump coverlet.collector from 6.0.3 to 6.0.4 Bumps [coverlet.collector](https://github.com/coverlet-coverage/coverlet) from 6.0.3 to 6.0.4. - [Release notes](https://github.com/coverlet-coverage/coverlet/releases) - [Commits](https://github.com/coverlet-coverage/coverlet/compare/v6.0.3...v6.0.4) --- updated-dependencies: - dependency-name: coverlet.collector dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- .../Microsoft.OpenApi.Readers.Tests.csproj | 2 +- test/Microsoft.OpenApi.Tests/Microsoft.OpenApi.Tests.csproj | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index c009e1f06..b611d0b32 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -16,7 +16,7 @@ - + diff --git a/test/Microsoft.OpenApi.Readers.Tests/Microsoft.OpenApi.Readers.Tests.csproj b/test/Microsoft.OpenApi.Readers.Tests/Microsoft.OpenApi.Readers.Tests.csproj index b809464ae..eb42a0b5b 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/Microsoft.OpenApi.Readers.Tests.csproj +++ b/test/Microsoft.OpenApi.Readers.Tests/Microsoft.OpenApi.Readers.Tests.csproj @@ -15,7 +15,7 @@ - + diff --git a/test/Microsoft.OpenApi.Tests/Microsoft.OpenApi.Tests.csproj b/test/Microsoft.OpenApi.Tests/Microsoft.OpenApi.Tests.csproj index 98e86783f..f8f8930e2 100644 --- a/test/Microsoft.OpenApi.Tests/Microsoft.OpenApi.Tests.csproj +++ b/test/Microsoft.OpenApi.Tests/Microsoft.OpenApi.Tests.csproj @@ -8,7 +8,7 @@ - + From 4a7238776505cbad489cadd8eb0dcc642058b3a4 Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Tue, 21 Jan 2025 09:16:18 +0300 Subject: [PATCH 88/90] Bump preview versions --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- .../Microsoft.OpenApi.Readers.csproj | 4 ++-- src/Microsoft.OpenApi/Microsoft.OpenApi.csproj | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 46c9a1977..1e13eb157 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -9,7 +9,7 @@ enable hidi ./../../artifacts - 2.0.0-preview4 + 2.0.0-preview5 OpenAPI.NET CLI tool for slicing OpenAPI documents true diff --git a/src/Microsoft.OpenApi.Readers/Microsoft.OpenApi.Readers.csproj b/src/Microsoft.OpenApi.Readers/Microsoft.OpenApi.Readers.csproj index 0bcee86ba..624fe822f 100644 --- a/src/Microsoft.OpenApi.Readers/Microsoft.OpenApi.Readers.csproj +++ b/src/Microsoft.OpenApi.Readers/Microsoft.OpenApi.Readers.csproj @@ -1,10 +1,10 @@ - + netstandard2.0;net8.0; latest true - 2.0.0-preview4 + 2.0.0-preview5 OpenAPI.NET Readers for JSON and YAML documents true true diff --git a/src/Microsoft.OpenApi/Microsoft.OpenApi.csproj b/src/Microsoft.OpenApi/Microsoft.OpenApi.csproj index 4156863b5..46cb80f08 100644 --- a/src/Microsoft.OpenApi/Microsoft.OpenApi.csproj +++ b/src/Microsoft.OpenApi/Microsoft.OpenApi.csproj @@ -3,7 +3,7 @@ netstandard2.0;net8.0 Latest true - 2.0.0-preview4 + 2.0.0-preview5 .NET models with JSON and YAML writers for OpenAPI specification true true From a3d05417d17f18462e755a4f5691142cbcf210df Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Tue, 21 Jan 2025 10:14:35 +0300 Subject: [PATCH 89/90] pass host document for reference resolution --- .../Reader/V3/OpenApiRequestBodyDeserializer.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi/Reader/V3/OpenApiRequestBodyDeserializer.cs b/src/Microsoft.OpenApi/Reader/V3/OpenApiRequestBodyDeserializer.cs index 435b576e1..75cdb8fe3 100644 --- a/src/Microsoft.OpenApi/Reader/V3/OpenApiRequestBodyDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V3/OpenApiRequestBodyDeserializer.cs @@ -52,7 +52,7 @@ public static OpenApiRequestBody LoadRequestBody(ParseNode node, OpenApiDocument var requestBody = new OpenApiRequestBody(); foreach (var property in mapNode) { - property.ParseField(requestBody, _requestBodyFixedFields, _requestBodyPatternFields); + property.ParseField(requestBody, _requestBodyFixedFields, _requestBodyPatternFields, hostDocument); } return requestBody; From c39fa84b4d43f9a7ce053ad5cb351407be5d7fc6 Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Tue, 21 Jan 2025 10:14:58 +0300 Subject: [PATCH 90/90] Add test --- .../V3Tests/OpenApiDocumentTests.cs | 12 ++++ .../docWithExampleReferences.yaml | 68 +++++++++++++++++++ 2 files changed, 80 insertions(+) create mode 100644 test/Microsoft.OpenApi.Readers.Tests/V3Tests/Samples/OpenApiDocument/docWithExampleReferences.yaml diff --git a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDocumentTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDocumentTests.cs index 864bb5aaa..9ddadd239 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDocumentTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDocumentTests.cs @@ -1411,5 +1411,17 @@ public async Task ParseDocumentWithEmptyPathsSucceeds() var result = await OpenApiDocument.LoadAsync(System.IO.Path.Combine(SampleFolderPath, "docWithEmptyPaths.yaml")); result.Diagnostic.Errors.Should().BeEmpty(); } + + [Fact] + public async Task ParseDocumentWithExampleReferencesPasses() + { + // Act & Assert: Ensure no NullReferenceException is thrown + Func act = async () => + { + await OpenApiDocument.LoadAsync(System.IO.Path.Combine(SampleFolderPath, "docWithExampleReferences.yaml")); + }; + + await act.Should().NotThrowAsync(); + } } } diff --git a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/Samples/OpenApiDocument/docWithExampleReferences.yaml b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/Samples/OpenApiDocument/docWithExampleReferences.yaml new file mode 100644 index 000000000..da2708545 --- /dev/null +++ b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/Samples/OpenApiDocument/docWithExampleReferences.yaml @@ -0,0 +1,68 @@ +openapi: 3.0.3 +info: + version: 1.1.4 + title: GitHub v3 REST API + description: GitHub's v3 REST API. +paths: + /actions/hosted-runners/{hosted_runner_id}: + get: + summary: Get a GitHub-hosted runner for an organization + description: |- + Gets a GitHub-hosted runner configured in an organization. + OAuth app tokens and personal access tokens (classic) need the `manage_runners:org` scope to use this endpoint. + responses: + '200': + description: Response + content: + application/json: + schema: + "$ref": "#/components/schemas/actions-hosted-runner" + examples: + default: + "$ref": "#/components/examples/actions-hosted-runner" + /oidc/customization/sub: + get: + summary: Get the customization template for an OIDC subject claim for an organization + description: |- + Gets the customization template for an OpenID Connect (OIDC) subject claim. + OAuth app tokens and personal access tokens (classic) need the `read:org` scope to use this endpoint. + requestBody: + required: true + content: + application/json: + schema: + "$ref": "#/components/schemas/oidc-custom-sub" + examples: + default: + "$ref": "#/components/examples/oidc-custom-sub" + responses: + '200': + description: A JSON serialized template for OIDC subject claim customization + content: + application/json: + schema: + "$ref": "#/components/schemas/oidc-custom-sub" +components: + schemas: + actions-hosted-runner: + title: GitHub-hosted runner + type: object + oidc-custom-sub: + title: Actions OIDC Subject customization + description: Actions OIDC Subject customization + type: object + examples: + actions-hosted-runner: + value: + id: 5 + name: My hosted ubuntu runner + runner_group_id: 2 + platform: linux-x64 + oidc-custom-sub: + value: + include_claim_keys: + - repo + - context + + + \ No newline at end of file