using SQLInsight.Core.Instances; namespace SQLInsight.Core.Tests; public class SqlServerVersionTests { [Theory] [InlineData("8.00.2039", SqlServerRelease.SqlServer2000)] [InlineData("9.00.5000.00", SqlServerRelease.SqlServer2005)] [InlineData("10.0.6000.29", SqlServerRelease.SqlServer2008)] [InlineData("10.50.6000.34", SqlServerRelease.SqlServer2008R2)] [InlineData("11.0.7001.0", SqlServerRelease.SqlServer2012)] [InlineData("12.0.6024.0", SqlServerRelease.SqlServer2014)] [InlineData("13.0.6300.2", SqlServerRelease.SqlServer2016)] [InlineData("14.0.3456.2", SqlServerRelease.SqlServer2017)] [InlineData("15.0.4355.3", SqlServerRelease.SqlServer2019)] [InlineData("16.0.4135.4", SqlServerRelease.SqlServer2022)] [InlineData("17.0.1000.7", SqlServerRelease.SqlServer2025)] [InlineData("18.0.100.1", SqlServerRelease.Unknown)] public void Maps_product_version_to_release(string productVersion, SqlServerRelease expected) { Assert.Equal(expected, SqlServerVersion.Parse(productVersion).Release); } [Fact] public void Parses_sql2000_style_version_with_three_parts() { Assert.Equal(new SqlServerVersion(8, 0, 2039, 0), SqlServerVersion.Parse("8.00.2039")); } [Theory] [InlineData(null)] [InlineData("")] [InlineData("sixteen")] [InlineData("16")] [InlineData("16.0.1.2.3")] [InlineData("-16.0.1.2")] public void Rejects_invalid_versions(string? value) { Assert.False(SqlServerVersion.TryParse(value, out _)); } [Fact] public void Compares_by_build_not_by_text() { Assert.True(SqlServerVersion.Parse("13.0.5026.0") > SqlServerVersion.Parse("13.0.4001.0")); Assert.True(SqlServerVersion.Parse("10.50.1600.1") > SqlServerVersion.Parse("10.0.6000.29")); Assert.True(SqlServerVersion.Parse("9.0.1399.6") < SqlServerVersion.Parse("10.0.1600.22")); } }