Skip to content

Commit 5502b35

Browse files
author
Andrew Omondi
committed
Squash commit with signed
1 parent 35362bb commit 5502b35

29 files changed

+207
-32
lines changed

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

+12
Original file line numberDiff line numberDiff line change
@@ -317,6 +317,18 @@ public static OpenApiSchema CreateEnumTypeSchema(this ODataContext context, IEdm
317317
// whose value is the value of the unqualified annotation Core.Description of the enumeration type.
318318
Description = context.Model.GetDescriptionAnnotation(enumType)
319319
};
320+
321+
// If the enum is flagged, add the extension info to the description
322+
if (context.Settings.AddEnumFlagsExtension && enumType.IsFlags)
323+
{
324+
var enumFlagsExtension = new OpenApiEnumFlagsExtension
325+
{
326+
IsFlags = true,
327+
Style = "simple"
328+
};
329+
schema.Extensions.Add(enumFlagsExtension.Name, enumFlagsExtension);
330+
}
331+
320332
var extension = (context.Settings.OpenApiSpecVersion == OpenApiSpecVersion.OpenApi2_0 ||
321333
context.Settings.OpenApiSpecVersion == OpenApiSpecVersion.OpenApi3_0 ) &&
322334
context.Settings.AddEnumDescriptionExtension ?

src/Microsoft.OpenApi.OData.Reader/Microsoft.OpenAPI.OData.Reader.csproj

+2-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
<TargetFrameworks>netstandard2.0</TargetFrameworks>
1616
<PackageId>Microsoft.OpenApi.OData</PackageId>
1717
<SignAssembly>true</SignAssembly>
18-
<Version>1.5.0-preview2</Version>
18+
<Version>1.5.0-preview3</Version>
1919
<Description>This package contains the codes you need to convert OData CSDL to Open API Document of Model.</Description>
2020
<Copyright>© Microsoft Corporation. All rights reserved.</Copyright>
2121
<PackageTags>Microsoft OpenApi OData EDM</PackageTags>
@@ -24,6 +24,7 @@
2424
- Resolves operation ids for $count and overloaded functions paths #382, #383
2525
- Updates README #13, #253, #40
2626
- Fixes casing in default propertyName for `innerError` in the `ErrorMainSchema`
27+
- Adds support for `x-ms-enum-flags` extension for flagged enums
2728
</PackageReleaseNotes>
2829
<AssemblyName>Microsoft.OpenApi.OData.Reader</AssemblyName>
2930
<AssemblyOriginatorKeyFile>..\..\tool\Microsoft.OpenApi.OData.snk</AssemblyOriginatorKeyFile>

src/Microsoft.OpenApi.OData.Reader/OpenApiConvertSettings.cs

+6
Original file line numberDiff line numberDiff line change
@@ -261,6 +261,11 @@ public string PathPrefix
261261
/// </summary>
262262
public bool AddEnumDescriptionExtension { get; set; } = false;
263263

264+
/// <summary>
265+
/// Gets/sets a value indicating whether or not to add a "x-ms-enum-flags" extension to the enum type schema.
266+
/// </summary>
267+
public bool AddEnumFlagsExtension { get; set; } = true;
268+
264269
/// <summary>
265270
/// Gets/sets a value indicating whether the error responses should be described as a default response or as 4XX and 5XX error responses.
266271
/// </summary>
@@ -377,6 +382,7 @@ internal OpenApiConvertSettings Clone()
377382
RequireDerivedTypesConstraintForODataTypeCastSegments = this.RequireDerivedTypesConstraintForODataTypeCastSegments,
378383
EnableDeprecationInformation = this.EnableDeprecationInformation,
379384
AddEnumDescriptionExtension = this.AddEnumDescriptionExtension,
385+
AddEnumFlagsExtension = this.AddEnumFlagsExtension,
380386
ErrorResponsesAsDefault = this.ErrorResponsesAsDefault,
381387
InnerErrorComplexTypeName = this.InnerErrorComplexTypeName,
382388
RequireRestrictionAnnotationsToGenerateComplexPropertyPaths = this.RequireRestrictionAnnotationsToGenerateComplexPropertyPaths,
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
// ------------------------------------------------------------
2+
// Copyright (c) Microsoft Corporation. All rights reserved.
3+
// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.
4+
// ------------------------------------------------------------
5+
6+
using System;
7+
using Microsoft.OpenApi.Interfaces;
8+
using Microsoft.OpenApi.OData.Common;
9+
using Microsoft.OpenApi.Writers;
10+
11+
namespace Microsoft.OpenApi.OData.OpenApiExtensions;
12+
13+
/// <summary>
14+
/// Extension element for OpenAPI to add deprecation information. x-ms-enum-flags
15+
/// </summary>
16+
public class OpenApiEnumFlagsExtension : IOpenApiExtension
17+
{
18+
/// <summary>
19+
/// Name of the extension as used in the description.
20+
/// </summary>
21+
public string Name => "x-ms-enum-flags";
22+
/// <summary>
23+
/// Whether the enum is a flagged enum.
24+
/// </summary>
25+
public bool IsFlags { get; set; }
26+
/// <summary>
27+
/// The serialization style of the flagged enum.
28+
/// </summary>
29+
public string Style { get; set; }
30+
/// <inheritdoc />
31+
public void Write(IOpenApiWriter writer, OpenApiSpecVersion specVersion)
32+
{
33+
if(writer == null)
34+
throw new ArgumentNullException(nameof(writer));
35+
36+
writer.WriteStartObject();
37+
writer.WriteProperty(nameof(IsFlags).ToFirstCharacterLowerCase(), IsFlags);
38+
writer.WriteProperty(nameof(Style).ToFirstCharacterLowerCase(),Style);
39+
writer.WriteEndObject();
40+
}
41+
}

src/Microsoft.OpenApi.OData.Reader/PublicAPI.Unshipped.txt

+10
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ Microsoft.OpenApi.OData.Edm.ODataSegment.GetPathItemName(Microsoft.OpenApi.OData
1717
Microsoft.OpenApi.OData.Edm.ODataTypeCastSegment.ODataTypeCastSegment(Microsoft.OData.Edm.IEdmStructuredType structuredType, Microsoft.OData.Edm.IEdmModel model) -> void
1818
Microsoft.OpenApi.OData.OpenApiConvertSettings.AddAlternateKeyPaths.get -> bool
1919
Microsoft.OpenApi.OData.OpenApiConvertSettings.AddAlternateKeyPaths.set -> void
20+
Microsoft.OpenApi.OData.OpenApiConvertSettings.AddEnumFlagsExtension.get -> bool
21+
Microsoft.OpenApi.OData.OpenApiConvertSettings.AddEnumFlagsExtension.set -> void
2022
Microsoft.OpenApi.OData.OpenApiConvertSettings.AppendBoundOperationsOnDerivedTypeCastSegments.get -> bool
2123
Microsoft.OpenApi.OData.OpenApiConvertSettings.AppendBoundOperationsOnDerivedTypeCastSegments.set -> void
2224
Microsoft.OpenApi.OData.OpenApiConvertSettings.CustomHttpMethodLinkRelMapping.get -> System.Collections.Generic.Dictionary<Microsoft.OpenApi.OData.Vocabulary.Core.LinkRelKey, string>
@@ -48,6 +50,14 @@ Microsoft.OpenApi.OData.OpenApiConvertSettings.ShowExternalDocs.get -> bool
4850
Microsoft.OpenApi.OData.OpenApiConvertSettings.ShowExternalDocs.set -> void
4951
Microsoft.OpenApi.OData.OpenApiConvertSettings.UseSuccessStatusCodeRange.get -> bool
5052
Microsoft.OpenApi.OData.OpenApiConvertSettings.UseSuccessStatusCodeRange.set -> void
53+
Microsoft.OpenApi.OData.OpenApiExtensions.OpenApiEnumFlagsExtension
54+
Microsoft.OpenApi.OData.OpenApiExtensions.OpenApiEnumFlagsExtension.IsFlags.get -> bool
55+
Microsoft.OpenApi.OData.OpenApiExtensions.OpenApiEnumFlagsExtension.IsFlags.set -> void
56+
Microsoft.OpenApi.OData.OpenApiExtensions.OpenApiEnumFlagsExtension.Name.get -> string
57+
Microsoft.OpenApi.OData.OpenApiExtensions.OpenApiEnumFlagsExtension.OpenApiEnumFlagsExtension() -> void
58+
Microsoft.OpenApi.OData.OpenApiExtensions.OpenApiEnumFlagsExtension.Style.get -> string
59+
Microsoft.OpenApi.OData.OpenApiExtensions.OpenApiEnumFlagsExtension.Style.set -> void
60+
Microsoft.OpenApi.OData.OpenApiExtensions.OpenApiEnumFlagsExtension.Write(Microsoft.OpenApi.Writers.IOpenApiWriter writer, Microsoft.OpenApi.OpenApiSpecVersion specVersion) -> void
5161
Microsoft.OpenApi.OData.Vocabulary.Core.LinkRelKey
5262
Microsoft.OpenApi.OData.Vocabulary.Core.LinkRelKey.Action = 6 -> Microsoft.OpenApi.OData.Vocabulary.Core.LinkRelKey
5363
Microsoft.OpenApi.OData.Vocabulary.Core.LinkRelKey.Create = 2 -> Microsoft.OpenApi.OData.Vocabulary.Core.LinkRelKey

test/Microsoft.OpenAPI.OData.Reader.Tests/EdmModelOpenApiExtensionsTest.cs

+2
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,7 @@ public void TripServiceMetadataToOpenApiYamlWorks(OpenApiSpecVersion specVersion
243243
// Arrange
244244
IEdmModel model = EdmModelHelper.TripServiceModel;
245245

246+
#pragma warning disable CS0618 // Type or member is obsolete
246247
OpenApiConvertSettings settings = new OpenApiConvertSettings
247248
{
248249
EnableKeyAsSegment = true,
@@ -255,6 +256,7 @@ public void TripServiceMetadataToOpenApiYamlWorks(OpenApiSpecVersion specVersion
255256
AppendBoundOperationsOnDerivedTypeCastSegments = true,
256257
IncludeAssemblyInfo = false
257258
};
259+
#pragma warning restore CS0618 // Type or member is obsolete
258260

259261
// Act
260262
string yaml = WriteEdmModelAsOpenApi(model, OpenApiFormat.Yaml, settings);

test/Microsoft.OpenAPI.OData.Reader.Tests/Generator/OpenApiParameterGeneratorTests.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -299,7 +299,7 @@ public void CreateKeyParametersForAlternateKeyWithSinglePropertyWorks()
299299

300300
// Assert
301301
Assert.NotNull(parameters);
302-
Assert.Equal(1, parameters.Count);
302+
Assert.Single(parameters);
303303
string json = altParameter.SerializeAsJson(OpenApiSpecVersion.OpenApi3_0);
304304
Assert.Equal(@"{
305305
""name"": ""AltId"",

test/Microsoft.OpenAPI.OData.Reader.Tests/Generator/OpenApiSchemaGeneratorTests.cs

+3-3
Original file line numberDiff line numberDiff line change
@@ -523,7 +523,7 @@ public void CreateComplexTypeWithBaseSchemaReturnCorrectSchema()
523523
Assert.Null(declaredSchema.OneOf);
524524

525525
Assert.NotNull(declaredSchema.Properties);
526-
Assert.Equal(1, declaredSchema.Properties.Count);
526+
Assert.Single(declaredSchema.Properties);
527527
var property = Assert.Single(declaredSchema.Properties);
528528
Assert.Equal("Price", property.Key);
529529
Assert.Equal("decimal", property.Value.OneOf.FirstOrDefault(x => !string.IsNullOrEmpty(x.Format))?.Format);
@@ -674,7 +674,7 @@ public void CreateEntityTypeWithBaseSchemaReturnCorrectSchema()
674674
Assert.Null(declaredSchema.OneOf);
675675

676676
Assert.NotNull(declaredSchema.Properties);
677-
Assert.Equal(1, declaredSchema.Properties.Count);
677+
Assert.Single(declaredSchema.Properties);
678678
var property = Assert.Single(declaredSchema.Properties);
679679
Assert.Equal("Name", property.Key);
680680
Assert.Equal("string", property.Value.Type);
@@ -750,7 +750,7 @@ public void CreateEntityTypeWithCrossReferenceBaseSchemaReturnCorrectSchema()
750750
Assert.Null(declaredSchema.OneOf);
751751

752752
Assert.NotNull(declaredSchema.Properties);
753-
Assert.Equal(1, declaredSchema.Properties.Count);
753+
Assert.Single(declaredSchema.Properties);
754754
var property = Assert.Single(declaredSchema.Properties);
755755
Assert.Equal("Extra", property.Key);
756756
Assert.Equal("integer", property.Value.Type);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
// ------------------------------------------------------------
2+
// Copyright (c) Microsoft Corporation. All rights reserved.
3+
// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.
4+
// ------------------------------------------------------------
5+
6+
using System.IO;
7+
using Microsoft.OpenApi.Writers;
8+
using Xunit;
9+
10+
namespace Microsoft.OpenApi.OData.OpenApiExtensions.Tests;
11+
12+
public class OpenApiEnumFlagsExtensionTests
13+
{
14+
[Fact]
15+
public void ExtensionNameMatchesExpected()
16+
{
17+
// Arrange
18+
OpenApiEnumFlagsExtension extension = new();
19+
20+
// Act
21+
string name = extension.Name;
22+
string expectedName = "x-ms-enum-flags";
23+
24+
// Assert
25+
Assert.Equal(expectedName, name);
26+
}
27+
28+
[Fact]
29+
public void WritesDefaultValues()
30+
{
31+
// Arrange
32+
OpenApiEnumFlagsExtension extension = new();
33+
using TextWriter sWriter = new StringWriter();
34+
OpenApiJsonWriter writer = new(sWriter);
35+
36+
// Act
37+
extension.Write(writer, OpenApiSpecVersion.OpenApi3_0);
38+
string result = sWriter.ToString();
39+
40+
// Assert
41+
Assert.False(extension.IsFlags);
42+
Assert.Null(extension.Style);
43+
Assert.Contains("\"isFlags\": false", result);
44+
Assert.DoesNotContain("\"style\"", result);
45+
}
46+
47+
[Fact]
48+
public void WritesAllDefaultValues()
49+
{
50+
// Arrange
51+
OpenApiEnumFlagsExtension extension = new() {
52+
IsFlags = true
53+
};
54+
using TextWriter sWriter = new StringWriter();
55+
OpenApiJsonWriter writer = new(sWriter);
56+
57+
// Act
58+
extension.Write(writer, OpenApiSpecVersion.OpenApi3_0);
59+
string result = sWriter.ToString();
60+
61+
// Assert
62+
Assert.True(extension.IsFlags);
63+
Assert.Null(extension.Style);
64+
Assert.Contains("\"isFlags\": true", result);
65+
Assert.DoesNotContain("\"style\":", result);
66+
}
67+
68+
[Fact]
69+
public void WritesAllValues()
70+
{
71+
// Arrange
72+
OpenApiEnumFlagsExtension extension = new() {
73+
IsFlags = true,
74+
Style = "simple"
75+
};
76+
using TextWriter sWriter = new StringWriter();
77+
OpenApiJsonWriter writer = new(sWriter);
78+
79+
// Act
80+
extension.Write(writer, OpenApiSpecVersion.OpenApi3_0);
81+
string result = sWriter.ToString();
82+
83+
// Assert
84+
Assert.True(extension.IsFlags);
85+
Assert.NotNull(extension.Style);
86+
Assert.Contains("\"isFlags\": true", result);
87+
Assert.Contains("\"style\": \"simple\"", result);
88+
}
89+
}

test/Microsoft.OpenAPI.OData.Reader.Tests/Operation/ComplexPropertyPatchOperationHandlerTests.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ public void CreateComplexPropertyDeleteOperationReturnsCorrectOperationForSingle
4141
Assert.Equal("Update the BillingAddress value.", patch.Description);
4242

4343
Assert.NotNull(patch.Parameters);
44-
Assert.Equal(1, patch.Parameters.Count); //id
44+
Assert.Single(patch.Parameters); //id
4545

4646
Assert.NotNull(patch.Responses);
4747
Assert.Equal(2, patch.Responses.Count);
@@ -85,7 +85,7 @@ public void CreateComplexPropertyPatchOperationReturnsCorrectOperationForCollect
8585
Assert.Equal("Update the BillingAddress value.", patch.Description);
8686

8787
Assert.NotNull(patch.Parameters);
88-
Assert.Equal(1, patch.Parameters.Count); //id
88+
Assert.Single(patch.Parameters); //id
8989

9090
Assert.NotNull(patch.Responses);
9191
Assert.Equal(2, patch.Responses.Count);

test/Microsoft.OpenAPI.OData.Reader.Tests/Operation/ComplexPropertyPutOperationHandlerTests.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ public void CreateComplexPropertyPutOperationReturnsCorrectOperationForSingle(bo
4444
Assert.Equal("Update the BillingAddress value.", put.Description);
4545

4646
Assert.NotNull(put.Parameters);
47-
Assert.Equal(1, put.Parameters.Count); //id
47+
Assert.Single(put.Parameters); //id
4848

4949
Assert.NotNull(put.Responses);
5050
Assert.Equal(2, put.Responses.Count);
@@ -95,7 +95,7 @@ public void CreateComplexPropertyPutOperationReturnsCorrectOperationForCollectio
9595
Assert.Equal("Update the BillingAddress value.", put.Description);
9696

9797
Assert.NotNull(put.Parameters);
98-
Assert.Equal(1, put.Parameters.Count); //id
98+
Assert.Single(put.Parameters); //id
9999

100100
Assert.NotNull(put.Responses);
101101
Assert.Equal(2, put.Responses.Count);

test/Microsoft.OpenAPI.OData.Reader.Tests/Operation/EdmActionOperationHandlerTests.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ public void CreateOperationForEdmActionReturnsCorrectOperation()
4343
Assert.Equal("People.Actions", tag.Name);
4444

4545
Assert.NotNull(operation.Parameters);
46-
Assert.Equal(1, operation.Parameters.Count);
46+
Assert.Single(operation.Parameters);
4747
Assert.Equal(new string[] { "UserName" }, operation.Parameters.Select(p => p.Name));
4848

4949
Assert.NotNull(operation.RequestBody);
@@ -82,7 +82,7 @@ public void CreateOperationForEdmActionReturnsCorrectOperationHierarchicalClass(
8282
Assert.Equal($"{entitySetName}.Actions", tag.Name);
8383

8484
Assert.NotNull(operation.Parameters);
85-
Assert.Equal(1, operation.Parameters.Count);
85+
Assert.Single(operation.Parameters);
8686
Assert.Equal(new string[] { "id" }, operation.Parameters.Select(p => p.Name));
8787

8888
Assert.NotNull(operation.RequestBody);

test/Microsoft.OpenAPI.OData.Reader.Tests/Operation/EdmFunctionOperationHandlerTests.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ public void CreateOperationForEdmFunctionReturnsCorrectOperation(bool useHTTPSta
102102
Assert.Equal("People.Functions", tag.Name);
103103

104104
Assert.NotNull(operation.Parameters);
105-
Assert.Equal(1, operation.Parameters.Count);
105+
Assert.Single(operation.Parameters);
106106
Assert.Equal(new string[] { "UserName" }, operation.Parameters.Select(p => p.Name));
107107

108108
Assert.Null(operation.RequestBody);

test/Microsoft.OpenAPI.OData.Reader.Tests/Operation/EntityPatchOperationHandlerTests.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ public void CreateEntityPatchOperationReturnsCorrectOperation(bool enableOperati
4646
Assert.Equal("Customers.Customer", tag.Name);
4747

4848
Assert.NotNull(patch.Parameters);
49-
Assert.Equal(1, patch.Parameters.Count);
49+
Assert.Single(patch.Parameters);
5050

5151
Assert.NotNull(patch.RequestBody);
5252

test/Microsoft.OpenAPI.OData.Reader.Tests/Operation/EntityPutOperationHandlerTests.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ public void CreateEntityPutOperationReturnsCorrectOperation(bool enableOperation
4646
Assert.Equal("Customers.Customer", tag.Name);
4747

4848
Assert.NotNull(putOperation.Parameters);
49-
Assert.Equal(1, putOperation.Parameters.Count);
49+
Assert.Single(putOperation.Parameters);
5050

5151
Assert.NotNull(putOperation.RequestBody);
5252

test/Microsoft.OpenAPI.OData.Reader.Tests/Operation/EntitySetPostOperationHandlerTests.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -105,11 +105,11 @@ private void VerifyEntitySetPostOperation(string annotation, bool enableOperatio
105105
{
106106
// RequestBody
107107
Assert.NotNull(post.RequestBody);
108-
Assert.Equal(1, post.RequestBody.Content.Keys.Count);
108+
Assert.Single(post.RequestBody.Content.Keys);
109109
Assert.True(post.RequestBody.Content.ContainsKey(Constants.ApplicationJsonMediaType));
110110

111111
// Response
112-
Assert.Equal(1, post.Responses[Constants.StatusCode201].Content.Keys.Count);
112+
Assert.Single(post.Responses[Constants.StatusCode201].Content.Keys);
113113
Assert.True(post.Responses[Constants.StatusCode201].Content.ContainsKey(Constants.ApplicationJsonMediaType));
114114
}
115115

test/Microsoft.OpenAPI.OData.Reader.Tests/Operation/MediaEntityGetOperationHandlerTests.cs

+3-3
Original file line numberDiff line numberDiff line change
@@ -101,13 +101,13 @@ private void VerifyMediaEntityGetOperation(string annotation, bool enableOperati
101101
Assert.True(getOperation.Responses[statusCode].Content.ContainsKey("image/jpeg"));
102102
Assert.Equal("The logo image.", getOperation.Description);
103103

104-
Assert.Equal(1, getOperation2.Responses[statusCode].Content.Keys.Count);
104+
Assert.Single(getOperation2.Responses[statusCode].Content.Keys);
105105
Assert.True(getOperation2.Responses[statusCode].Content.ContainsKey(Constants.ApplicationOctetStreamMediaType));
106106
}
107107
else
108108
{
109-
Assert.Equal(1, getOperation.Responses[statusCode].Content.Keys.Count);
110-
Assert.Equal(1, getOperation2.Responses[statusCode].Content.Keys.Count);
109+
Assert.Single(getOperation.Responses[statusCode].Content.Keys);
110+
Assert.Single(getOperation2.Responses[statusCode].Content.Keys);
111111
Assert.True(getOperation.Responses[statusCode].Content.ContainsKey(Constants.ApplicationOctetStreamMediaType));
112112
Assert.True(getOperation2.Responses[statusCode].Content.ContainsKey(Constants.ApplicationOctetStreamMediaType));
113113
}

test/Microsoft.OpenAPI.OData.Reader.Tests/Operation/MediaEntityPutOperationHandlerTests.cs

+3-3
Original file line numberDiff line numberDiff line change
@@ -122,13 +122,13 @@ private void VerifyMediaEntityPutOperation(string annotation, bool enableOperati
122122
Assert.True(putOperation.RequestBody.Content.ContainsKey("image/jpeg"));
123123
Assert.Equal("The logo image.", putOperation.Description);
124124

125-
Assert.Equal(1, putOperation2.RequestBody.Content.Keys.Count);
125+
Assert.Single(putOperation2.RequestBody.Content.Keys);
126126
Assert.True(putOperation2.RequestBody.Content.ContainsKey(Constants.ApplicationOctetStreamMediaType));
127127
}
128128
else
129129
{
130-
Assert.Equal(1, putOperation.RequestBody.Content.Keys.Count);
131-
Assert.Equal(1, putOperation2.RequestBody.Content.Keys.Count);
130+
Assert.Single(putOperation.RequestBody.Content.Keys);
131+
Assert.Single(putOperation2.RequestBody.Content.Keys);
132132
Assert.True(putOperation.RequestBody.Content.ContainsKey(Constants.ApplicationOctetStreamMediaType));
133133
Assert.True(putOperation2.RequestBody.Content.ContainsKey(Constants.ApplicationOctetStreamMediaType));
134134
}

0 commit comments

Comments
 (0)