Skip to content

Commit 654cf53

Browse files
committed
- adds unit tests for ms extensions
Signed-off-by: Vincent Biret <[email protected]>
1 parent c957e3c commit 654cf53

File tree

7 files changed

+442
-1
lines changed

7 files changed

+442
-1
lines changed

src/Microsoft.OpenApi/MicrosoftExtensions/OpenApiPagingExtension.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ namespace Microsoft.OpenApi.MicrosoftExtensions;
1515
/// Extension element for OpenAPI to add pageable information.
1616
/// Based of the AutoRest specification https://github.com/Azure/autorest/blob/main/docs/extensions/readme.md#x-ms-pageable
1717
/// </summary>
18-
internal class OpenApiPagingExtension : IOpenApiExtension
18+
public class OpenApiPagingExtension : IOpenApiExtension
1919
{
2020
/// <summary>
2121
/// Name of the extension as used in the description.
Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
using System;
2+
using System.IO;
3+
using Microsoft.OpenApi.MicrosoftExtensions;
4+
using Microsoft.OpenApi.Any;
5+
using Microsoft.OpenApi.Writers;
6+
using Xunit;
7+
8+
namespace Microsoft.OpenApi.Tests.MicrosoftExtensions;
9+
10+
public class OpenApiDeprecationExtensionTests
11+
{
12+
[Fact]
13+
public void ExtensionNameMatchesExpected()
14+
{
15+
// Act
16+
string name = OpenApiDeprecationExtension.Name;
17+
string expectedName = "x-ms-deprecation";
18+
19+
// Assert
20+
Assert.Equal(expectedName, name);
21+
}
22+
23+
[Fact]
24+
public void WritesNothingWhenNoValues()
25+
{
26+
// Arrange
27+
OpenApiDeprecationExtension extension = new();
28+
using TextWriter sWriter = new StringWriter();
29+
OpenApiJsonWriter writer = new(sWriter);
30+
31+
// Act
32+
extension.Write(writer, OpenApiSpecVersion.OpenApi3_0);
33+
string result = sWriter.ToString();
34+
35+
// Assert
36+
Assert.Null(extension.Date);
37+
Assert.Null(extension.RemovalDate);
38+
Assert.Empty(extension.Version);
39+
Assert.Empty(extension.Description);
40+
Assert.Empty(result);
41+
}
42+
43+
[Fact]
44+
public void WritesAllValues()
45+
{
46+
// Arrange
47+
OpenApiDeprecationExtension extension = new() {
48+
Date = new DateTime(2020, 1, 1),
49+
RemovalDate = new DateTime(2021, 1, 1),
50+
Version = "1.0.0",
51+
Description = "This is a test"
52+
};
53+
using TextWriter sWriter = new StringWriter();
54+
OpenApiJsonWriter writer = new(sWriter);
55+
56+
// Act
57+
extension.Write(writer, OpenApiSpecVersion.OpenApi3_0);
58+
string result = sWriter.ToString();
59+
60+
// Assert
61+
Assert.NotNull(extension.Date);
62+
Assert.NotNull(extension.RemovalDate);
63+
Assert.NotNull(extension.Version);
64+
Assert.NotNull(extension.Description);
65+
Assert.Contains("2021-01-01T00:00:00.000000", result);
66+
Assert.Contains("removalDate", result);
67+
Assert.Contains("version", result);
68+
Assert.Contains("1.0.0", result);
69+
Assert.Contains("description", result);
70+
Assert.Contains("This is a test", result);
71+
}
72+
[Fact]
73+
public void Parses()
74+
{
75+
var oaiValue = new OpenApiObject
76+
{
77+
{ "date", new OpenApiDateTime(new DateTimeOffset(2023,05,04, 16, 0, 0, 0, 0, new TimeSpan(4, 0, 0)))},
78+
{ "removalDate", new OpenApiDateTime(new DateTimeOffset(2023,05,04, 16, 0, 0, 0, 0, new TimeSpan(4, 0, 0)))},
79+
{ "version", new OpenApiString("v1.0")},
80+
{ "description", new OpenApiString("removing")}
81+
};
82+
var value = OpenApiDeprecationExtension.Parse(oaiValue);
83+
Assert.NotNull(value);
84+
Assert.Equal("v1.0", value.Version);
85+
Assert.Equal("removing", value.Description);
86+
Assert.Equal(new DateTimeOffset(2023, 05, 04, 16, 0, 0, 0, 0, new TimeSpan(4, 0, 0)), value.Date);
87+
Assert.Equal(new DateTimeOffset(2023, 05, 04, 16, 0, 0, 0, 0, new TimeSpan(4, 0, 0)), value.RemovalDate);
88+
}
89+
[Fact]
90+
public void Serializes()
91+
{
92+
var value = new OpenApiDeprecationExtension
93+
{
94+
Date = new DateTimeOffset(2023, 05, 04, 16, 0, 0, 0, 0, new TimeSpan(4, 0, 0)),
95+
RemovalDate = new DateTimeOffset(2023, 05, 04, 16, 0, 0, 0, 0, new TimeSpan(4, 0, 0)),
96+
Version = "v1.0",
97+
Description = "removing"
98+
};
99+
using TextWriter sWriter = new StringWriter();
100+
OpenApiJsonWriter writer = new(sWriter);
101+
102+
103+
value.Write(writer, OpenApiSpecVersion.OpenApi3_0);
104+
var result = sWriter.ToString();
105+
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);
106+
}
107+
}
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
using System.IO;
2+
using Microsoft.OpenApi.MicrosoftExtensions;
3+
4+
using Microsoft.OpenApi.Writers;
5+
6+
using Xunit;
7+
8+
namespace Microsoft.OpenApi.Tests.MicrosoftExtensions;
9+
10+
public class OpenApiEnumFlagsExtensionTests
11+
{
12+
[Fact]
13+
public void ExtensionNameMatchesExpected()
14+
{
15+
// Act
16+
string name = OpenApiEnumFlagsExtension.Name;
17+
string expectedName = "x-ms-enum-flags";
18+
19+
// Assert
20+
Assert.Equal(expectedName, name);
21+
}
22+
23+
[Fact]
24+
public void WritesDefaultValues()
25+
{
26+
// Arrange
27+
OpenApiEnumFlagsExtension extension = new();
28+
using TextWriter sWriter = new StringWriter();
29+
OpenApiJsonWriter writer = new(sWriter);
30+
31+
// Act
32+
extension.Write(writer, OpenApiSpecVersion.OpenApi3_0);
33+
string result = sWriter.ToString();
34+
35+
// Assert
36+
Assert.Contains("\"isFlags\": false", result);
37+
Assert.DoesNotContain("\"style\"", result);
38+
Assert.False(extension.IsFlags);
39+
}
40+
41+
[Fact]
42+
public void WritesAllDefaultValues()
43+
{
44+
// Arrange
45+
OpenApiEnumFlagsExtension extension = new()
46+
{
47+
IsFlags = true
48+
};
49+
using TextWriter sWriter = new StringWriter();
50+
OpenApiJsonWriter writer = new(sWriter);
51+
52+
// Act
53+
extension.Write(writer, OpenApiSpecVersion.OpenApi3_0);
54+
string result = sWriter.ToString();
55+
56+
// Assert
57+
Assert.Contains("\"isFlags\": true", result);
58+
Assert.True(extension.IsFlags);
59+
}
60+
61+
[Fact]
62+
public void WritesAllValues()
63+
{
64+
// Arrange
65+
OpenApiEnumFlagsExtension extension = new()
66+
{
67+
IsFlags = true
68+
};
69+
using TextWriter sWriter = new StringWriter();
70+
OpenApiJsonWriter writer = new(sWriter);
71+
72+
// Act
73+
extension.Write(writer, OpenApiSpecVersion.OpenApi3_0);
74+
string result = sWriter.ToString();
75+
76+
// Assert
77+
Assert.True(extension.IsFlags);
78+
Assert.Contains("\"isFlags\": true", result);
79+
}
80+
}
81+
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
using System.Collections.Generic;
2+
using System.IO;
3+
using Microsoft.OpenApi.MicrosoftExtensions;
4+
using Microsoft.OpenApi.Writers;
5+
using Moq;
6+
using Xunit;
7+
8+
namespace Microsoft.OpenApi.Tests.MicrosoftExtensions;
9+
10+
public class OpenApiEnumValuesDescriptionExtensionTests
11+
{
12+
[Fact]
13+
public void ExtensionNameMatchesExpected()
14+
{
15+
// Act
16+
string name = OpenApiEnumValuesDescriptionExtension.Name;
17+
string expectedName = "x-ms-enum";
18+
19+
// Assert
20+
Assert.Equal(expectedName, name);
21+
}
22+
[Fact]
23+
public void WritesNothingWhenNoValues()
24+
{
25+
// Arrange
26+
OpenApiEnumValuesDescriptionExtension extension = new();
27+
using TextWriter sWriter = new StringWriter();
28+
OpenApiJsonWriter writer = new(sWriter);
29+
30+
// Act
31+
extension.Write(writer, OpenApiSpecVersion.OpenApi3_0);
32+
string result = sWriter.ToString();
33+
34+
// Assert
35+
Assert.Empty(extension.EnumName);
36+
Assert.Empty(extension.ValuesDescriptions);
37+
Assert.Empty(result);
38+
}
39+
[Fact]
40+
public void WritesEnumDescription()
41+
{
42+
// Arrange
43+
OpenApiEnumValuesDescriptionExtension extension = new()
44+
{
45+
EnumName = "TestEnum",
46+
ValuesDescriptions = new()
47+
{
48+
new() {
49+
Description = "TestDescription",
50+
Value = "TestValue",
51+
Name = "TestName"
52+
}
53+
}
54+
};
55+
using TextWriter sWriter = new StringWriter();
56+
OpenApiJsonWriter writer = new(sWriter);
57+
58+
// Act
59+
extension.Write(writer, OpenApiSpecVersion.OpenApi3_0);
60+
string result = sWriter.ToString();
61+
62+
// Assert
63+
Assert.Contains("values", result);
64+
Assert.Contains("modelAsString\": false", result);
65+
Assert.Contains("name\": \"TestEnum", result);
66+
Assert.Contains("description\": \"TestDescription", result);
67+
Assert.Contains("value\": \"TestValue", result);
68+
Assert.Contains("name\": \"TestName", result);
69+
}
70+
}
71+
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
using System;
2+
using System.IO;
3+
using Microsoft.OpenApi.MicrosoftExtensions;
4+
using Microsoft.OpenApi.Any;
5+
using Microsoft.OpenApi.Writers;
6+
using Xunit;
7+
8+
namespace Microsoft.OpenApi.Tests.MicrosoftExtensions;
9+
10+
public class OpenApiPagingExtensionsTests
11+
{
12+
[Fact]
13+
public void ExtensionNameMatchesExpected()
14+
{
15+
// Act
16+
string name = OpenApiPagingExtension.Name;
17+
var expectedName = "x-ms-pageable";
18+
19+
// Assert
20+
Assert.Equal(expectedName, name);
21+
}
22+
23+
[Fact]
24+
public void ThrowsOnMissingWriter()
25+
{
26+
// Arrange
27+
OpenApiPagingExtension extension = new();
28+
29+
// Act
30+
// Assert
31+
Assert.Throws<ArgumentNullException>(() => extension.Write(null, OpenApiSpecVersion.OpenApi3_0));
32+
}
33+
34+
[Fact]
35+
public void WritesNothingWhenNoValues()
36+
{
37+
// Arrange
38+
OpenApiPagingExtension extension = new();
39+
using TextWriter sWriter = new StringWriter();
40+
OpenApiJsonWriter writer = new(sWriter);
41+
42+
// Act
43+
extension.Write(writer, OpenApiSpecVersion.OpenApi3_0);
44+
var result = sWriter.ToString();
45+
46+
// Assert
47+
Assert.Equal("value", extension.ItemName);
48+
Assert.Equal("nextLink", extension.NextLinkName);
49+
Assert.Empty(extension.OperationName);
50+
}
51+
52+
[Fact]
53+
public void WritesPagingInfo()
54+
{
55+
// Arrange
56+
OpenApiPagingExtension extension = new();
57+
extension.NextLinkName = "nextLink";
58+
extension.OperationName = "usersGet";
59+
using TextWriter sWriter = new StringWriter();
60+
OpenApiJsonWriter writer = new(sWriter);
61+
62+
// Act
63+
extension.Write(writer, OpenApiSpecVersion.OpenApi3_0);
64+
var result = sWriter.ToString();
65+
66+
// Assert
67+
Assert.Contains("value", result);
68+
Assert.Contains("itemName\": \"value", result);
69+
Assert.Contains("nextLinkName\": \"nextLink", result);
70+
Assert.Contains("operationName\": \"usersGet", result);
71+
}
72+
73+
[Fact]
74+
public void ParsesPagingInfo()
75+
{
76+
// Arrange
77+
var obj = new OpenApiObject
78+
{
79+
["nextLinkName"] = new OpenApiString("@odata.nextLink"),
80+
["operationName"] = new OpenApiString("more"),
81+
["itemName"] = new OpenApiString("item"),
82+
};
83+
84+
// Act
85+
var extension = OpenApiPagingExtension.Parse(obj);
86+
87+
// Assert
88+
Assert.Equal("@odata.nextLink", extension.NextLinkName);
89+
Assert.Equal("item", extension.ItemName);
90+
Assert.Equal("more", extension.OperationName);
91+
}
92+
}

0 commit comments

Comments
 (0)