mirror of
https://github.com/ckaczor/sqltoolsservice.git
synced 2026-01-14 01:25:40 -05:00
Filtering Schema Compare error from warnings (#1212)
* Filtering Schema Compare error from warnings * SchemaCompare added comparison result error message validations to existing tests * Extra semi-colon noticed and removed from the code * Added new test case to validate warning message exclusions from SC result * SC test asserions comment added * Edge case scenario fixed and tests are 100% passed
This commit is contained in:
committed by
GitHub
parent
64a6b6a85c
commit
37b2b26edf
@@ -120,9 +120,13 @@ namespace Microsoft.SqlTools.ServiceLayer.SchemaCompare
|
||||
}
|
||||
}
|
||||
|
||||
// Appending the set of errors that are stopping the schema compare to the ErrorMessage
|
||||
var errorsList = ComparisonResult.GetErrors().Select(e => e.Message).Distinct().ToList();
|
||||
ErrorMessage = string.Join("\n", errorsList);
|
||||
// Appending the set of errors that are stopping the schema compare to the ErrorMessage
|
||||
// GetErrors return all type of warnings, and error messages. Only filtering the error type messages here
|
||||
var errorsList = ComparisonResult.GetErrors().Where(x => x.MessageType.Equals(Microsoft.SqlServer.Dac.DacMessageType.Error)).Select(e => e.Message).Distinct().ToList();
|
||||
if (errorsList.Count > 0)
|
||||
{
|
||||
ErrorMessage = string.Join("\n", errorsList);
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
|
||||
@@ -138,6 +138,7 @@ END
|
||||
SchemaCompareOperation schemaCompareOperation1 = new SchemaCompareOperation(schemaCompareParams1, null, null);
|
||||
schemaCompareOperation1.Execute(TaskExecutionMode.Execute);
|
||||
Assert.True(schemaCompareOperation1.ComparisonResult.IsEqual);
|
||||
Assert.IsNull(schemaCompareOperation1.ErrorMessage);
|
||||
|
||||
var schemaCompareParams2 = new SchemaCompareParams
|
||||
{
|
||||
@@ -150,6 +151,7 @@ END
|
||||
schemaCompareOperation2.Execute(TaskExecutionMode.Execute);
|
||||
Assert.False(schemaCompareOperation2.ComparisonResult.IsEqual);
|
||||
Assert.NotNull(schemaCompareOperation2.ComparisonResult.Differences);
|
||||
Assert.IsNull(schemaCompareOperation2.ErrorMessage);
|
||||
|
||||
// cleanup
|
||||
SchemaCompareTestUtils.VerifyAndCleanup(sourceDacpacFilePath);
|
||||
@@ -193,6 +195,7 @@ END
|
||||
Assert.True(schemaCompareOperation1.ComparisonResult.IsValid);
|
||||
Assert.True(schemaCompareOperation1.ComparisonResult.IsEqual);
|
||||
Assert.NotNull(schemaCompareOperation1.ComparisonResult.Differences);
|
||||
Assert.IsNull(schemaCompareOperation1.ErrorMessage);
|
||||
|
||||
var schemaCompareParams2 = new SchemaCompareParams
|
||||
{
|
||||
@@ -205,6 +208,7 @@ END
|
||||
schemaCompareOperation2.Execute(TaskExecutionMode.Execute);
|
||||
Assert.False(schemaCompareOperation2.ComparisonResult.IsEqual);
|
||||
Assert.NotNull(schemaCompareOperation2.ComparisonResult.Differences);
|
||||
Assert.IsNull(schemaCompareOperation2.ErrorMessage);
|
||||
}
|
||||
finally
|
||||
{
|
||||
@@ -247,6 +251,7 @@ END
|
||||
Assert.True(schemaCompareOperation1.ComparisonResult.IsValid);
|
||||
Assert.True(schemaCompareOperation1.ComparisonResult.IsEqual);
|
||||
Assert.NotNull(schemaCompareOperation1.ComparisonResult.Differences);
|
||||
Assert.IsNull(schemaCompareOperation1.ErrorMessage);
|
||||
|
||||
// generate script
|
||||
var generateScriptParams1 = new SchemaCompareGenerateScriptParams
|
||||
@@ -283,6 +288,7 @@ END
|
||||
Assert.True(schemaCompareOperation2.ComparisonResult.IsValid);
|
||||
Assert.False(schemaCompareOperation2.ComparisonResult.IsEqual);
|
||||
Assert.NotNull(schemaCompareOperation2.ComparisonResult.Differences);
|
||||
Assert.IsNull(schemaCompareOperation2.ErrorMessage);
|
||||
|
||||
// generate script
|
||||
var generateScriptParams2 = new SchemaCompareGenerateScriptParams
|
||||
|
||||
@@ -402,6 +402,8 @@ WITH VALUES
|
||||
Assert.True(schemaCompareOperation.ComparisonResult.IsValid);
|
||||
Assert.False(schemaCompareOperation.ComparisonResult.IsEqual);
|
||||
Assert.NotNull(schemaCompareOperation.ComparisonResult.Differences);
|
||||
Assert.IsNull(schemaCompareOperation.ErrorMessage);
|
||||
|
||||
var enumerator = schemaCompareOperation.ComparisonResult.Differences.GetEnumerator();
|
||||
enumerator.MoveNext();
|
||||
Assert.True(enumerator.Current.SourceObject.Name.ToString().Equals("[dbo].[table1]"));
|
||||
@@ -426,6 +428,7 @@ WITH VALUES
|
||||
Assert.True(schemaCompareOperation.ComparisonResult.IsValid);
|
||||
Assert.True(schemaCompareOperation.ComparisonResult.IsEqual);
|
||||
Assert.That(schemaCompareOperation.ComparisonResult.Differences, Is.Empty);
|
||||
Assert.IsNull(schemaCompareOperation.ErrorMessage);
|
||||
}
|
||||
finally
|
||||
{
|
||||
@@ -736,6 +739,7 @@ WITH VALUES
|
||||
}
|
||||
|
||||
Assert.Null(schemaCompareOperation.ComparisonResult.Differences);
|
||||
Assert.AreEqual("The operation was canceled.", schemaCompareOperation.ErrorMessage);
|
||||
}
|
||||
finally
|
||||
{
|
||||
@@ -851,6 +855,7 @@ WITH VALUES
|
||||
Assert.True(schemaCompareOperation.ComparisonResult.IsValid);
|
||||
Assert.False(schemaCompareOperation.ComparisonResult.IsEqual);
|
||||
Assert.NotNull(schemaCompareOperation.ComparisonResult.Differences);
|
||||
Assert.IsNull(schemaCompareOperation.ErrorMessage);
|
||||
|
||||
// try to exclude
|
||||
DiffEntry t2Diff = SchemaCompareUtils.CreateDiffEntry(schemaCompareOperation.ComparisonResult.Differences.Where(x => x.SourceObject != null && x.SourceObject.Name.Parts[1] == "t2").First(), null);
|
||||
@@ -914,6 +919,57 @@ WITH VALUES
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Verify the schema compare warning messages being excluded
|
||||
/// </summary>
|
||||
[Test]
|
||||
public async Task VerifySchemaCompareWarningsBeingExcluded()
|
||||
{
|
||||
var result = SchemaCompareTestUtils.GetLiveAutoCompleteTestObjects();
|
||||
SqlTestDb sourceDb = await SqlTestDb.CreateNewAsync(TestServerType.OnPrem, false, null, null, "SchemaCompareSource");
|
||||
SqlTestDb targetDb = await SqlTestDb.CreateNewAsync(TestServerType.OnPrem, false, null, TargetScript, "SchemaCompareTarget");
|
||||
|
||||
try
|
||||
{
|
||||
SchemaCompareEndpointInfo sourceInfo = new SchemaCompareEndpointInfo();
|
||||
SchemaCompareEndpointInfo targetInfo = new SchemaCompareEndpointInfo();
|
||||
|
||||
sourceInfo.EndpointType = SchemaCompareEndpointType.Database;
|
||||
sourceInfo.DatabaseName = sourceDb.DatabaseName;
|
||||
targetInfo.EndpointType = SchemaCompareEndpointType.Database;
|
||||
targetInfo.DatabaseName = targetDb.DatabaseName;
|
||||
|
||||
var schemaCompareParams = new SchemaCompareParams
|
||||
{
|
||||
SourceEndpointInfo = sourceInfo,
|
||||
TargetEndpointInfo = targetInfo
|
||||
};
|
||||
|
||||
// Do Schema compare
|
||||
SchemaCompareOperation schemaCompareOperation = new SchemaCompareOperation(schemaCompareParams, result.ConnectionInfo, result.ConnectionInfo);
|
||||
schemaCompareOperation.Execute(TaskExecutionMode.Execute);
|
||||
|
||||
// Expected 'data loss could occur' warning messages while comparing
|
||||
var warnings = schemaCompareOperation.ComparisonResult.GetErrors().Where(x => x.MessageType.Equals(Microsoft.SqlServer.Dac.DacMessageType.Warning)).Select(e => e.Message).Distinct().ToList();
|
||||
var errors = schemaCompareOperation.ComparisonResult.GetErrors().Where(x => x.MessageType.Equals(Microsoft.SqlServer.Dac.DacMessageType.Error)).Select(e => e.Message).Distinct().ToList();
|
||||
|
||||
// Assertions:
|
||||
// Target database have two tables created and will be shown as two differnces
|
||||
Assert.AreEqual(2, schemaCompareOperation.ComparisonResult.Differences.Count());
|
||||
// These two warnings are "data loss could occur" messages for two tables
|
||||
Assert.AreEqual(2, warnings.Count);
|
||||
// SC is successful with no errors, hence error message should be empty
|
||||
Assert.AreEqual(0, errors.Count);
|
||||
Assert.IsNull(schemaCompareOperation.ErrorMessage, "Error message should be empty as the warnings being excluded");
|
||||
}
|
||||
finally
|
||||
{
|
||||
// cleanup
|
||||
sourceDb.Cleanup();
|
||||
targetDb.Cleanup();
|
||||
}
|
||||
}
|
||||
|
||||
private void ValidateSchemaCompareWithExcludeIncludeResults(SchemaCompareOperation schemaCompareOperation)
|
||||
{
|
||||
schemaCompareOperation.Execute(TaskExecutionMode.Execute);
|
||||
@@ -921,6 +977,7 @@ WITH VALUES
|
||||
Assert.True(schemaCompareOperation.ComparisonResult.IsValid);
|
||||
Assert.False(schemaCompareOperation.ComparisonResult.IsEqual);
|
||||
Assert.NotNull(schemaCompareOperation.ComparisonResult.Differences);
|
||||
Assert.IsNull(schemaCompareOperation.ErrorMessage);
|
||||
|
||||
// create Diff Entry from Difference
|
||||
DiffEntry diff = SchemaCompareUtils.CreateDiffEntry(schemaCompareOperation.ComparisonResult.Differences.First(), null);
|
||||
@@ -963,6 +1020,7 @@ WITH VALUES
|
||||
Assert.True(schemaCompareOperation.ComparisonResult.IsValid);
|
||||
Assert.False(schemaCompareOperation.ComparisonResult.IsEqual);
|
||||
Assert.NotNull(schemaCompareOperation.ComparisonResult.Differences);
|
||||
Assert.IsNull(schemaCompareOperation.ErrorMessage);
|
||||
|
||||
SchemaCompareGenerateScriptOperation generateScriptOperation = new SchemaCompareGenerateScriptOperation(generateScriptParams, schemaCompareOperation.ComparisonResult);
|
||||
generateScriptOperation.Execute(TaskExecutionMode.Script);
|
||||
|
||||
Reference in New Issue
Block a user