public void Test01CompareSameMockDataOk() { //SETUP var efData = LoadJsonHelpers.DeserializeData <List <EfTableInfo> >("EfTableInfos01*.json"); var sqlData = LoadJsonHelpers.DeserializeData <SqlAllInfo>("SqlAllInfo01*.json"); var comparer = new EfCompare("SqlRefString", sqlData.TableInfos.ToDictionary(x => x.CombinedName)); //EXECUTE var status = comparer.CompareEfWithSql(efData, sqlData); //VERIFY status.ShouldBeValid(); }
public void Test16CompareMockDataRemoveColumnInToBeCheckedOk() { //SETUP var efData = LoadJsonHelpers.DeserializeArrayWithSingleRemoval <List <EfTableInfo> >("EfTableInfos01*.json", 1, "NormalCols", 1); var sqlData = LoadJsonHelpers.DeserializeData <SqlAllInfo>("SqlAllInfo01*.json"); var comparer = new EfCompare("SqlRefString", sqlData.TableInfos.ToDictionary(x => x.CombinedName)); //EXECUTE var status = comparer.CompareEfWithSql(efData, sqlData); //VERIFY status.ShouldBeValid(); string.Join(",", status.Warnings).ShouldEqual("Warning: SQL SqlRefString table [dbo].[DataChild] has a column called MyString (.NET type System.String) that EF does not access.", string.Join(",", status.Warnings)); }
public void Test15CompareMockDataChangeMaxLengthMaxLengthSqlOk() { //SETUP var efData = LoadJsonHelpers.DeserializeData <List <EfTableInfo> >("EfTableInfos01*.json"); var sqlData = LoadJsonHelpers.DeserializeObjectWithSingleAlteration <SqlAllInfo>("SqlAllInfo01*.json", -1, "TableInfos", 0, "ColumnInfos", 0, "MaxLength"); var comparer = new EfCompare("SqlRefString", sqlData.TableInfos.ToDictionary(x => x.CombinedName)); //EXECUTE var status = comparer.CompareEfWithSql(efData, sqlData); //VERIFY status.ShouldBeValid(); status.HasWarnings.ShouldEqual(true); string.Join(",", status.Warnings).ShouldEqual("Warning: MaxLength: The SQL SqlRefString column [dbo].[DataTop].DataTopId, type System.Int32, is at max length, but EF length is at 4."); }
public void Test26CompareMockDataChangeForeignKeyCascadeOk() { //SETUP var efData = LoadJsonHelpers.DeserializeData <List <EfTableInfo> >("EfTableInfos01*.json"); var sqlData = LoadJsonHelpers.DeserializeObjectWithSingleAlteration <SqlAllInfo>("SqlAllInfo01*.json", "NO_ACTION", "ForeignKeys", 2, "DeleteAction"); var comparer = new EfCompare("SqlRefString", sqlData.TableInfos.ToDictionary(x => x.CombinedName)); //EXECUTE var status = comparer.CompareEfWithSql(efData, sqlData); //VERIFY status.ShouldBeValid(false); status.GetAllErrors().ShouldEqual("Cascade Delete: The Many-to-Many relationship between AnotherTable.DataTops and DataTop has a foreign key FK_dbo.AnotherTable_AnotherTableId_dbo.DataTopToAnotherTable_AnotherTableId that is not CASCADE DELETE. All linking table foreign keys should have CASCADE DELETE.", status.GetAllErrors()); status.HasWarnings.ShouldEqual(false, string.Join(",", status.Warnings)); }
public void Test11CompareMockDataChangeColumnSqlTypeOk() { //SETUP var efData = LoadJsonHelpers.DeserializeArrayWithSingleAlteration <List <EfTableInfo> >("EfTableInfos01*.json", "varchar", 0, "NormalCols", 0, "SqlTypeName"); var sqlData = LoadJsonHelpers.DeserializeData <SqlAllInfo>("SqlAllInfo01*.json"); var comparer = new EfCompare("SqlRefString", sqlData.TableInfos.ToDictionary(x => x.CombinedName)); //EXECUTE var status = comparer.CompareEfWithSql(efData, sqlData); //VERIFY status.ShouldBeValid(false); status.GetAllErrors().ShouldEqual("Column Type: The SQL SqlRefString column [dbo].[DataTop].DataTopId type does not match EF. SQL type = int, EF type = varchar.", status.GetAllErrors()); status.HasWarnings.ShouldEqual(false, string.Join(",", status.Warnings)); }
public void Test14CompareMockDataChangeIsNullableOk() { //SETUP var efData = LoadJsonHelpers.DeserializeArrayWithSingleAlteration <List <EfTableInfo> >("EfTableInfos01*.json", true, 0, "NormalCols", 0, "IsNullable"); var sqlData = LoadJsonHelpers.DeserializeData <SqlAllInfo>("SqlAllInfo01*.json"); var comparer = new EfCompare("SqlRefString", sqlData.TableInfos.ToDictionary(x => x.CombinedName)); //EXECUTE var status = comparer.CompareEfWithSql(efData, sqlData); //VERIFY status.ShouldBeValid(false); status.GetAllErrors().ShouldEqual("Column Nullable: SQL SqlRefString column [dbo].[DataTop].DataTopId nullablity does not match. SQL is NOT NULL, EF is NULL.", status.GetAllErrors()); status.HasWarnings.ShouldEqual(false, string.Join(",", status.Warnings)); }
public void Test10CompareMockDataChangeColumnNameOk() { //SETUP var efData = LoadJsonHelpers.DeserializeArrayWithSingleAlteration <List <EfTableInfo> >("EfTableInfos01*.json", "BadName", 0, "NormalCols", 0, "SqlColumnName"); var sqlData = LoadJsonHelpers.DeserializeData <SqlAllInfo>("SqlAllInfo01*.json"); var comparer = new EfCompare("SqlRefString", sqlData.TableInfos.ToDictionary(x => x.CombinedName)); //EXECUTE var status = comparer.CompareEfWithSql(efData, sqlData); //VERIFY status.ShouldBeValid(false); status.GetAllErrors().ShouldEqual("Missing Column: The SQL SqlRefString table [dbo].[DataTop] does not contain a column called BadName. Needed by EF class DataTop.", status.GetAllErrors()); string.Join(",", status.Warnings).ShouldEqual("Warning: SQL SqlRefString table [dbo].[DataTop] has a column called DataTopId (.NET type System.Int32) that EF does not access.", string.Join(",", status.Warnings)); }
public void Test15CompareMockDataChangeMaxLengthOk() { //SETUP var efData = LoadJsonHelpers.DeserializeArrayWithSingleAlteration <List <EfTableInfo> >("EfTableInfos01*.json", 2, 0, "NormalCols", 0, "MaxLength"); var sqlData = LoadJsonHelpers.DeserializeData <SqlAllInfo>("SqlAllInfo01*.json"); var comparer = new EfCompare("SqlRefString", sqlData.TableInfos.ToDictionary(x => x.CombinedName)); //EXECUTE var status = comparer.CompareEfWithSql(efData, sqlData); //VERIFY status.ShouldBeValid(false); status.GetAllErrors().ShouldEqual("MaxLength: The SQL SqlRefString column [dbo].[DataTop].DataTopId, type System.Int32, length does not match EF. SQL length = 4, EF length = 2.", status.GetAllErrors()); status.HasWarnings.ShouldEqual(false, string.Join(",", status.Warnings)); }
public void Test27CompareMockDataChangeForeignKeyCascadeOk() { //SETUP var efData = LoadJsonHelpers.DeserializeData <List <EfTableInfo> >("EfTableInfos01*.json"); var sqlData = LoadJsonHelpers.DeserializeObjectWithSingleAlteration <SqlAllInfo>("SqlAllInfo01*.json", "CASCADE", "ForeignKeys", 3, "DeleteAction"); var comparer = new EfCompare("SqlRefString", sqlData.TableInfos.ToDictionary(x => x.CombinedName)); //EXECUTE var status = comparer.CompareEfWithSql(efData, sqlData); //VERIFY status.ShouldBeValid(false); status.GetAllErrors().ShouldEqual("Cascade Delete: The ZeroOrOne-to-One relationship between DataSingleton.Parent and DataTop has different cascade delete value. SQL foreign key say CASCADE, EF setting is NO_ACTION.", status.GetAllErrors()); status.HasWarnings.ShouldEqual(false, string.Join(",", status.Warnings)); }
public void Test13CompareMockDataChangePrimaryKeyOrderOk() { //SETUP var efData = LoadJsonHelpers.DeserializeArrayWithSingleAlteration <List <EfTableInfo> >("EfTableInfos01*.json", 2, 0, "NormalCols", 0, "PrimaryKeyOrder"); var sqlData = LoadJsonHelpers.DeserializeData <SqlAllInfo>("SqlAllInfo01*.json"); var comparer = new EfCompare("SqlRefString", sqlData.TableInfos.ToDictionary(x => x.CombinedName)); //EXECUTE var status = comparer.CompareEfWithSql(efData, sqlData); //VERIFY status.ShouldBeValid(false); status.GetAllErrors().ShouldEqual("Primary Key Order: The SQL SqlRefString column [dbo].[DataTop].DataTopId primary key order does not match. SQL order = 1, EF order = 2.", status.GetAllErrors()); status.HasWarnings.ShouldEqual(false, string.Join(",", status.Warnings)); }
public void Test23CompareMockDataChangeForeignKeyReferencedColNameOk() { //SETUP var efData = LoadJsonHelpers.DeserializeData <List <EfTableInfo> >("EfTableInfos01*.json"); var sqlData = LoadJsonHelpers.DeserializeObjectWithSingleAlteration <SqlAllInfo>("SqlAllInfo01*.json", "BadName", "ForeignKeys", 0, "ReferencedColName"); var comparer = new EfCompare("SqlRefString", sqlData.TableInfos.ToDictionary(x => x.CombinedName)); //EXECUTE var status = comparer.CompareEfWithSql(efData, sqlData); //VERIFY status.ShouldBeValid(false); status.GetAllErrors().ShouldEqual("Missing Foreign Key: EF has a Many-to-One relationship between DataChild.Parent and DataTop but we don't find that in SQL.", status.GetAllErrors()); status.HasWarnings.ShouldEqual(false, string.Join(",", status.Warnings)); }
public void Test21CompareMockDataChangeForeignKeyParentColNameOk() { //SETUP var efData = LoadJsonHelpers.DeserializeData <List <EfTableInfo> >("EfTableInfos01*.json"); var sqlData = LoadJsonHelpers.DeserializeObjectWithSingleAlteration <SqlAllInfo>("SqlAllInfo01*.json", "BadName", "ForeignKeys", 0, "ParentColName"); var comparer = new EfCompare("SqlRefString", sqlData.TableInfos.ToDictionary(x => x.CombinedName)); //EXECUTE var status = comparer.CompareEfWithSql(efData, sqlData); //VERIFY status.ShouldBeValid(false); status.GetAllErrors().ShouldEqual("Missing Foreign key: The 'RefUnitTest' SQL database has a foreign key Parent: DataChild.DataTopId, Referenced: DataTop.DataTopId, which is missing in the 'ToBeCheckUnitTest' database.", status.GetAllErrors()); string.Join(",", status.Warnings).ShouldEqual("Warning: The 'ToBeCheckUnitTest' database has a foreign key Parent: DataChild.BadName, Referenced: DataTop.DataTopId, which the 'RefUnitTest' database did not have.", string.Join(",", status.Warnings)); }
public void Test17CompareMockDataChangeMaxLengthNvarcharOk() { //SETUP var efData = LoadJsonHelpers.DeserializeData <List <EfTableInfo> >("EfTableInfos01*.json"); var sqlData = LoadJsonHelpers.DeserializeObjectWithSingleAlteration <SqlAllInfo>("SqlAllInfo01*.json", "20", "TableInfos", 1, "ColumnInfos", 3, "MaxLength"); var comparer = new EfCompare("SqlRefString", sqlData.TableInfos.ToDictionary(x => x.CombinedName)); //EXECUTE var status = comparer.CompareEfWithSql(efData, sqlData); //VERIFY status.ShouldBeValid(false); status.GetAllErrors().ShouldEqual("MaxLength: The SQL SqlRefString column [dbo].[DataChild].MyUnicodeString, type System.String, length does not match EF. SQL length = 10, EF length = 20.", status.GetAllErrors()); status.HasWarnings.ShouldEqual(false, string.Join(",", status.Warnings)); }
public void Test12CompareMockDataChangePrimaryKeyOk() { //SETUP var efData = LoadJsonHelpers.DeserializeData <List <EfTableInfo> >("EfTableInfos01*.json"); var sqlData = LoadJsonHelpers.DeserializeObjectWithSingleAlteration <SqlAllInfo>("SqlAllInfo01*.json", false, "TableInfos", 0, "ColumnInfos", 0, "IsPrimaryKey"); var comparer = new EfCompare("SqlRefString", sqlData.TableInfos.ToDictionary(x => x.CombinedName)); //EXECUTE var status = comparer.CompareEfWithSql(efData, sqlData); //VERIFY status.ShouldBeValid(false); status.GetAllErrors().ShouldEqual("Primary Key: The SQL SqlRefString column [dbo].[DataTop].DataTopId primary key settings don't match. SQL says it is NOT a key, EF says it is a key.\n" + "Missing Foreign Key: EF has a Many-to-One relationship between DataChild.Parent and DataTop but we don't find that in SQL.", status.GetAllErrors()); status.HasWarnings.ShouldEqual(false, string.Join(",", status.Warnings)); }
public void Test12CompareMockDataChangePrimaryKeyOk() { //SETUP var efData = LoadJsonHelpers.DeserializeArrayWithSingleAlteration <List <EfTableInfo> >("EfTableInfos01*.json", false, 0, "NormalCols", 0, "IsPrimaryKey"); var sqlData = LoadJsonHelpers.DeserializeData <SqlAllInfo>("SqlAllInfo01*.json"); var comparer = new EfCompare("SqlRefString", sqlData.TableInfos.ToDictionary(x => x.CombinedName)); //EXECUTE var status = comparer.CompareEfWithSql(efData, sqlData); //VERIFY status.ShouldBeValid(false); status.GetAllErrors().ShouldEqual("Primary Key: The SQL SqlRefString column [dbo].[DataTop].DataTopId primary key settings don't match. SQL says it is a key, EF says it is NOT a key.\n" + "Missing Link Table: EF has a Many-to-Many relationship between AnotherTable.DataTops and DataTop but we could not find a linking table with the right foreign keys.", status.GetAllErrors()); status.HasWarnings.ShouldEqual(false, string.Join(",", status.Warnings)); }
public void Test10CompareMockDataChangeColumnNameOk() { //SETUP var efData = LoadJsonHelpers.DeserializeData <List <EfTableInfo> >("EfTableInfos01*.json"); var sqlData = LoadJsonHelpers.DeserializeObjectWithSingleAlteration <SqlAllInfo>("SqlAllInfo01*.json", "BadColName", "TableInfos", 0, "ColumnInfos", 0, "ColumnName"); var comparer = new EfCompare("SqlRefString", sqlData.TableInfos.ToDictionary(x => x.CombinedName)); //EXECUTE var status = comparer.CompareEfWithSql(efData, sqlData); //VERIFY status.ShouldBeValid(false); status.GetAllErrors().ShouldEqual("Missing Column: The SQL SqlRefString table [dbo].[DataTop] does not contain a column called DataTopId. Needed by EF class DataTop.\n" + "Missing Foreign Key: EF has a Many-to-One relationship between DataChild.Parent and DataTop but we don't find that in SQL.", status.GetAllErrors()); string.Join(",", status.Warnings).ShouldEqual("Warning: SQL SqlRefString table [dbo].[DataTop] has a column called BadColName (.NET type System.Int32) that EF does not access.", string.Join(",", status.Warnings)); }
public void CompareStart(string sqlDbRefString, string sqlConnectionString) { if (sqlConnectionString == null) { throw new ArgumentNullException("sqlConnectionString"); } if (CompareStartCalled) { throw new InvalidOperationException("You have already called CompareStart."); } _sqlDbRefString = sqlDbRefString; _allSqlInfo = SqlAllInfo.SqlAllInfoFactory(sqlConnectionString); _sqlInfoDict = _allSqlInfo.TableInfos.ToDictionary(x => x.CombinedName); _comparer = new EfCompare(sqlDbRefString, _sqlInfoDict); }
public void Test16CompareMockDataRemoveColumnInToBeCheckedOk() { //SETUP var efData = LoadJsonHelpers.DeserializeData <List <EfTableInfo> >("EfTableInfos01*.json"); var sqlData = LoadJsonHelpers.DeserializeObjectWithSingleRemoval <SqlAllInfo>("SqlAllInfo01*.json", "TableInfos", 0, "ColumnInfos", 0); var comparer = new EfCompare("SqlRefString", sqlData.TableInfos.ToDictionary(x => x.CombinedName)); //EXECUTE var status = comparer.CompareEfWithSql(efData, sqlData); //VERIFY status.ShouldBeValid(false); status.GetAllErrors().ShouldEqual("Missing Column: The SQL SqlRefString table [dbo].[DataTop] does not contain a column called DataTopId. Needed by EF class DataTop.\n" + "Missing Foreign Key: EF has a Many-to-One relationship between DataChild.Parent and DataTop but we don't find that in SQL.\n" + "Missing Foreign Key: EF has a ZeroOrOne-to-One relationship between DataSingleton.Parent and DataTop but we don't find that in SQL.", status.GetAllErrors()); status.HasWarnings.ShouldEqual(false, string.Join(",", status.Warnings)); }
public void Test05CompareMockDataChangeTableNameOk() { //SETUP var efData = LoadJsonHelpers.DeserializeArrayWithSingleAlteration <List <EfTableInfo> >("EfTableInfos01*.json", "NewTableName", 0, "TableName"); var sqlData = LoadJsonHelpers.DeserializeData <SqlAllInfo>("SqlAllInfo01*.json"); var sqlInfoDict = sqlData.TableInfos.ToDictionary(x => x.CombinedName); var comparer = new EfCompare("SqlRefString", sqlInfoDict); //EXECUTE var status = comparer.CompareEfWithSql(efData, sqlData); //VERIFY status.ShouldBeValid(false); status.GetAllErrors().ShouldEqual("Missing Table: The SQL SqlRefString does not contain a table called [dbo].[NewTableName]. Needed by EF class DataTop.\n" + "Missing SQL Table: Could not find the SQL table called [dbo].[NewTableName].", status.GetAllErrors()); status.HasWarnings.ShouldEqual(false); sqlInfoDict.Keys.Count.ShouldEqual(1); sqlInfoDict.ContainsKey("[dbo].[DataTop]").ShouldEqual(true); }