using System.Collections.Generic; using Microsoft.VisualStudio.TestTools.UnitTesting; using SyncEngine.Configuration; using SyncEngine.SqlServer; namespace SyncEngine.Tests { [TestClass] public class SqlSchemaKeyBuilderTests { [TestMethod] public void BuildPrimaryKeyAlterSql_FormatsConstraint() { var sql = SqlSchemaKeyBuilder.BuildPrimaryKeyAlterSql( "[dbo].[tblProduct]", "PK_tblProduct", new[] { "lngProductID" }); Assert.AreEqual( "ALTER TABLE [dbo].[tblProduct] ADD CONSTRAINT [PK_tblProduct] PRIMARY KEY CLUSTERED ([lngProductID])", sql); } [TestMethod] public void BuildCreateIndexSql_UniqueIndex() { var sql = SqlSchemaKeyBuilder.BuildCreateIndexSql( "[dbo].[tblProduct]", "UQ_tblProduct_strCode", new[] { "strCode" }, true); Assert.AreEqual( "CREATE UNIQUE NONCLUSTERED INDEX [UQ_tblProduct_strCode] ON [dbo].[tblProduct] ([strCode])", sql); } [TestMethod] public void BuildCreateIndexSql_UniqueIndexWithNullableFilter() { var filter = SqlSchemaKeyBuilder.BuildNullableUniqueFilter(new[] { "strCode" }); var sql = SqlSchemaKeyBuilder.BuildCreateIndexSql( "[dbo].[tblProduct]", "UQ_tblProduct_strCode", new[] { "strCode" }, true, filter); Assert.AreEqual( "CREATE UNIQUE NONCLUSTERED INDEX [UQ_tblProduct_strCode] ON [dbo].[tblProduct] ([strCode]) WHERE [strCode] IS NOT NULL", sql); } [TestMethod] public void BuildCreateIndexSql_NonUniqueIndex() { var sql = SqlSchemaKeyBuilder.BuildCreateIndexSql( "[dbo].[tblProduct]", "IX_tblProduct_refCategoryID", new[] { "refCategoryID" }, false); StringAssert.Contains(sql, "CREATE NONCLUSTERED INDEX"); StringAssert.Contains(sql, "[refCategoryID]"); } [TestMethod] public void ShouldSkipIndex_WhenSyncColumnPresent() { var index = new AccessIndexInfo { TableName = "tblProduct", Columns = new List { "_sync_row_hash" } }; Assert.IsTrue(SqlSchemaKeyBuilder.ShouldSkipIndex(index)); } [TestMethod] public void NormalizeColumnKey_IsOrderSensitive() { var left = SqlSchemaKeyBuilder.NormalizeColumnKey(new[] { "A", "B" }); var right = SqlSchemaKeyBuilder.NormalizeColumnKey(new[] { "B", "A" }); Assert.AreNotEqual(left, right); } } }