Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

releases 1.6.8 #1335

Merged
merged 11 commits into from
Sep 7, 2023
Prev Previous commit
Next Next commit
- adds unit tests for ms extensions
Signed-off-by: Vincent Biret <vibiret@microsoft.com>
  • Loading branch information
baywet committed Sep 6, 2023
commit 654cf53de3ce9c43aa2b55c53043cb9962300b81
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ namespace Microsoft.OpenApi.MicrosoftExtensions;
/// Extension element for OpenAPI to add pageable information.
/// Based of the AutoRest specification https://github.com/Azure/autorest/blob/main/docs/extensions/readme.md#x-ms-pageable
/// </summary>
internal class OpenApiPagingExtension : IOpenApiExtension
public class OpenApiPagingExtension : IOpenApiExtension
{
/// <summary>
/// Name of the extension as used in the description.
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
using System;
using System.IO;
using Microsoft.OpenApi.MicrosoftExtensions;
using Microsoft.OpenApi.Any;
using Microsoft.OpenApi.Writers;
using Xunit;

namespace Microsoft.OpenApi.Tests.MicrosoftExtensions;

public class OpenApiDeprecationExtensionTests
{
[Fact]
public void ExtensionNameMatchesExpected()
{
// Act
string name = OpenApiDeprecationExtension.Name;
string expectedName = "x-ms-deprecation";

// Assert
Assert.Equal(expectedName, name);
}

[Fact]
public void WritesNothingWhenNoValues()
{
// Arrange
OpenApiDeprecationExtension extension = new();
using TextWriter sWriter = new StringWriter();
OpenApiJsonWriter writer = new(sWriter);

// Act
extension.Write(writer, OpenApiSpecVersion.OpenApi3_0);
string result = sWriter.ToString();

// Assert
Assert.Null(extension.Date);
Assert.Null(extension.RemovalDate);
Assert.Empty(extension.Version);
Assert.Empty(extension.Description);
Assert.Empty(result);
}

[Fact]
public void WritesAllValues()
{
// Arrange
OpenApiDeprecationExtension extension = new() {
Date = new DateTime(2020, 1, 1),
RemovalDate = new DateTime(2021, 1, 1),
Version = "1.0.0",
Description = "This is a test"
};
using TextWriter sWriter = new StringWriter();
OpenApiJsonWriter writer = new(sWriter);

// Act
extension.Write(writer, OpenApiSpecVersion.OpenApi3_0);
string result = sWriter.ToString();

// Assert
Assert.NotNull(extension.Date);
Assert.NotNull(extension.RemovalDate);
Assert.NotNull(extension.Version);
Assert.NotNull(extension.Description);
Assert.Contains("2021-01-01T00:00:00.000000", result);
Assert.Contains("removalDate", result);
Assert.Contains("version", result);
Assert.Contains("1.0.0", result);
Assert.Contains("description", result);
Assert.Contains("This is a test", result);
}
[Fact]
public void Parses()
{
var oaiValue = new OpenApiObject
{
{ "date", new OpenApiDateTime(new DateTimeOffset(2023,05,04, 16, 0, 0, 0, 0, new TimeSpan(4, 0, 0)))},
{ "removalDate", new OpenApiDateTime(new DateTimeOffset(2023,05,04, 16, 0, 0, 0, 0, new TimeSpan(4, 0, 0)))},
{ "version", new OpenApiString("v1.0")},
{ "description", new OpenApiString("removing")}
};
var value = OpenApiDeprecationExtension.Parse(oaiValue);
Assert.NotNull(value);
Assert.Equal("v1.0", value.Version);
Assert.Equal("removing", value.Description);
Assert.Equal(new DateTimeOffset(2023, 05, 04, 16, 0, 0, 0, 0, new TimeSpan(4, 0, 0)), value.Date);
Assert.Equal(new DateTimeOffset(2023, 05, 04, 16, 0, 0, 0, 0, new TimeSpan(4, 0, 0)), value.RemovalDate);
}
[Fact]
public void Serializes()
{
var value = new OpenApiDeprecationExtension
{
Date = new DateTimeOffset(2023, 05, 04, 16, 0, 0, 0, 0, new TimeSpan(4, 0, 0)),
RemovalDate = new DateTimeOffset(2023, 05, 04, 16, 0, 0, 0, 0, new TimeSpan(4, 0, 0)),
Version = "v1.0",
Description = "removing"
};
using TextWriter sWriter = new StringWriter();
OpenApiJsonWriter writer = new(sWriter);


value.Write(writer, OpenApiSpecVersion.OpenApi3_0);
var result = sWriter.ToString();
Assert.Equal("{\n \"removalDate\": \"2023-05-04T16:00:00.0000000+04:00\",\n \"date\": \"2023-05-04T16:00:00.0000000+04:00\",\n \"version\": \"v1.0\",\n \"description\": \"removing\"\n}", result);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
using System.IO;
using Microsoft.OpenApi.MicrosoftExtensions;

using Microsoft.OpenApi.Writers;

using Xunit;

namespace Microsoft.OpenApi.Tests.MicrosoftExtensions;

public class OpenApiEnumFlagsExtensionTests
{
[Fact]
public void ExtensionNameMatchesExpected()
{
// Act
string name = OpenApiEnumFlagsExtension.Name;
string expectedName = "x-ms-enum-flags";

// Assert
Assert.Equal(expectedName, name);
}

[Fact]
public void WritesDefaultValues()
{
// Arrange
OpenApiEnumFlagsExtension extension = new();
using TextWriter sWriter = new StringWriter();
OpenApiJsonWriter writer = new(sWriter);

// Act
extension.Write(writer, OpenApiSpecVersion.OpenApi3_0);
string result = sWriter.ToString();

// Assert
Assert.Contains("\"isFlags\": false", result);
Assert.DoesNotContain("\"style\"", result);
Assert.False(extension.IsFlags);
}

[Fact]
public void WritesAllDefaultValues()
{
// Arrange
OpenApiEnumFlagsExtension extension = new()
{
IsFlags = true
};
using TextWriter sWriter = new StringWriter();
OpenApiJsonWriter writer = new(sWriter);

// Act
extension.Write(writer, OpenApiSpecVersion.OpenApi3_0);
string result = sWriter.ToString();

// Assert
Assert.Contains("\"isFlags\": true", result);
Assert.True(extension.IsFlags);
}

[Fact]
public void WritesAllValues()
{
// Arrange
OpenApiEnumFlagsExtension extension = new()
{
IsFlags = true
};
using TextWriter sWriter = new StringWriter();
OpenApiJsonWriter writer = new(sWriter);

// Act
extension.Write(writer, OpenApiSpecVersion.OpenApi3_0);
string result = sWriter.ToString();

// Assert
Assert.True(extension.IsFlags);
Assert.Contains("\"isFlags\": true", result);
}
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
using System.Collections.Generic;
using System.IO;
using Microsoft.OpenApi.MicrosoftExtensions;
using Microsoft.OpenApi.Writers;
using Moq;
using Xunit;

namespace Microsoft.OpenApi.Tests.MicrosoftExtensions;

public class OpenApiEnumValuesDescriptionExtensionTests
{
[Fact]
public void ExtensionNameMatchesExpected()
{
// Act
string name = OpenApiEnumValuesDescriptionExtension.Name;
string expectedName = "x-ms-enum";

// Assert
Assert.Equal(expectedName, name);
}
[Fact]
public void WritesNothingWhenNoValues()
{
// Arrange
OpenApiEnumValuesDescriptionExtension extension = new();
using TextWriter sWriter = new StringWriter();
OpenApiJsonWriter writer = new(sWriter);

// Act
extension.Write(writer, OpenApiSpecVersion.OpenApi3_0);
string result = sWriter.ToString();

// Assert
Assert.Empty(extension.EnumName);
Assert.Empty(extension.ValuesDescriptions);
Assert.Empty(result);
}
[Fact]
public void WritesEnumDescription()
{
// Arrange
OpenApiEnumValuesDescriptionExtension extension = new()
{
EnumName = "TestEnum",
ValuesDescriptions = new()
{
new() {
Description = "TestDescription",
Value = "TestValue",
Name = "TestName"
}
}
};
using TextWriter sWriter = new StringWriter();
OpenApiJsonWriter writer = new(sWriter);

// Act
extension.Write(writer, OpenApiSpecVersion.OpenApi3_0);
string result = sWriter.ToString();

// Assert
Assert.Contains("values", result);
Assert.Contains("modelAsString\": false", result);
Assert.Contains("name\": \"TestEnum", result);
Assert.Contains("description\": \"TestDescription", result);
Assert.Contains("value\": \"TestValue", result);
Assert.Contains("name\": \"TestName", result);
}
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
using System;
using System.IO;
using Microsoft.OpenApi.MicrosoftExtensions;
using Microsoft.OpenApi.Any;
using Microsoft.OpenApi.Writers;
using Xunit;

namespace Microsoft.OpenApi.Tests.MicrosoftExtensions;

public class OpenApiPagingExtensionsTests
{
[Fact]
public void ExtensionNameMatchesExpected()
{
// Act
string name = OpenApiPagingExtension.Name;
var expectedName = "x-ms-pageable";

// Assert
Assert.Equal(expectedName, name);
}

[Fact]
public void ThrowsOnMissingWriter()
{
// Arrange
OpenApiPagingExtension extension = new();

// Act
// Assert
Assert.Throws<ArgumentNullException>(() => extension.Write(null, OpenApiSpecVersion.OpenApi3_0));
}

[Fact]
public void WritesNothingWhenNoValues()
{
// Arrange
OpenApiPagingExtension extension = new();
using TextWriter sWriter = new StringWriter();
OpenApiJsonWriter writer = new(sWriter);

// Act
extension.Write(writer, OpenApiSpecVersion.OpenApi3_0);
var result = sWriter.ToString();

// Assert
Assert.Equal("value", extension.ItemName);
Assert.Equal("nextLink", extension.NextLinkName);
Assert.Empty(extension.OperationName);
}

[Fact]
public void WritesPagingInfo()
{
// Arrange
OpenApiPagingExtension extension = new();
extension.NextLinkName = "nextLink";
extension.OperationName = "usersGet";
using TextWriter sWriter = new StringWriter();
OpenApiJsonWriter writer = new(sWriter);

// Act
extension.Write(writer, OpenApiSpecVersion.OpenApi3_0);
var result = sWriter.ToString();

// Assert
Assert.Contains("value", result);
Assert.Contains("itemName\": \"value", result);
Assert.Contains("nextLinkName\": \"nextLink", result);
Assert.Contains("operationName\": \"usersGet", result);
}

[Fact]
public void ParsesPagingInfo()
{
// Arrange
var obj = new OpenApiObject
{
["nextLinkName"] = new OpenApiString("@odata.nextLink"),
["operationName"] = new OpenApiString("more"),
["itemName"] = new OpenApiString("item"),
};

// Act
var extension = OpenApiPagingExtension.Parse(obj);

// Assert
Assert.Equal("@odata.nextLink", extension.NextLinkName);
Assert.Equal("item", extension.ItemName);
Assert.Equal("more", extension.OperationName);
}
}
Loading