Skip to content

Commit 0c69700

Browse files
Correct deprecated version aggregation. Fixes #719
1 parent 778e451 commit 0c69700

File tree

2 files changed

+37
-10
lines changed

2 files changed

+37
-10
lines changed

src/Common/Versioning/ApiVersionModelExtensions.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,8 @@ public static ApiVersionModel Aggregate( this ApiVersionModel version, IEnumerab
5959
deprecated.UnionWith( otherVersion.DeprecatedApiVersions );
6060
}
6161

62+
deprecated.ExceptWith( supported );
63+
6264
return new ApiVersionModel( version, implemented.ToSortedReadOnlyList(), supported.ToSortedReadOnlyList(), deprecated.ToSortedReadOnlyList() );
6365
}
6466

@@ -94,6 +96,8 @@ public static ApiVersionModel Aggregate( this IEnumerable<ApiVersionModel> versi
9496
}
9597
}
9698

99+
deprecated.ExceptWith( supported );
100+
97101
return new ApiVersionModel( supported, deprecated );
98102
}
99103
}

test/Test.Common/Versioning/ApiVersionModelExtensionsTest.cs

Lines changed: 33 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,11 @@ public void aggregate_should_merge_api_version_info()
2525
aggregatedModel.Should().BeEquivalentTo(
2626
new
2727
{
28-
IsApiVersionNeutral = expected.IsApiVersionNeutral,
29-
DeclaredApiVersions = expected.DeclaredApiVersions,
30-
ImplementedApiVersions = expected.ImplementedApiVersions,
31-
SupportedApiVersions = expected.SupportedApiVersions,
32-
DeprecatedApiVersions = expected.DeprecatedApiVersions
28+
expected.IsApiVersionNeutral,
29+
expected.DeclaredApiVersions,
30+
expected.ImplementedApiVersions,
31+
expected.SupportedApiVersions,
32+
expected.DeprecatedApiVersions
3333
} );
3434
}
3535

@@ -54,11 +54,34 @@ public void aggregate_should_merge_api_version_info_sequence()
5454
aggregatedModel.Should().BeEquivalentTo(
5555
new
5656
{
57-
IsApiVersionNeutral = expected.IsApiVersionNeutral,
58-
DeclaredApiVersions = expected.DeclaredApiVersions,
59-
ImplementedApiVersions = expected.ImplementedApiVersions,
60-
SupportedApiVersions = expected.SupportedApiVersions,
61-
DeprecatedApiVersions = expected.DeprecatedApiVersions
57+
expected.IsApiVersionNeutral,
58+
expected.DeclaredApiVersions,
59+
expected.ImplementedApiVersions,
60+
expected.SupportedApiVersions,
61+
expected.DeprecatedApiVersions
62+
} );
63+
}
64+
65+
[Fact]
66+
public void aggregate_should_not_merge_deprecated_api_version_when_also_supported()
67+
{
68+
// arrange
69+
var model1 = new ApiVersionModel( new[] { new ApiVersion( 1, 0 ) }, Enumerable.Empty<ApiVersion>() );
70+
var model2 = new ApiVersionModel( new[] { new ApiVersion( 2, 0 ) }, new[] { new ApiVersion( 1, 0 ) } );
71+
var expected = new ApiVersionModel( new[] { new ApiVersion( 1, 0 ), new ApiVersion( 2, 0 ) }, Enumerable.Empty<ApiVersion>() );
72+
73+
// act
74+
var aggregatedModel = model1.Aggregate( model2 );
75+
76+
// assert
77+
aggregatedModel.Should().BeEquivalentTo(
78+
new
79+
{
80+
expected.IsApiVersionNeutral,
81+
expected.DeclaredApiVersions,
82+
expected.ImplementedApiVersions,
83+
expected.SupportedApiVersions,
84+
expected.DeprecatedApiVersions
6285
} );
6386
}
6487
}

0 commit comments

Comments
 (0)