public void MissingColumnsAreAddedToDifferences() { //Arrange var table1 = _om.Make <SnapshotObjectMother.Table>(1, 2, 3, 4, 5); var table2 = _om.Make <SnapshotObjectMother.Table2>(1, 2, 3, 4, 5); var refTable1 = _om.Make <SnapshotObjectMother.ReferencingTable>((1, 1), (2, 1)); var refTable2 = _om.Make <SnapshotObjectMother.ReferencingTable2>((1, 3), (2, 4)); void TakeSnapshot(string name) { var builder = _om.NewSnapshot(name); table1.ToSnapshotTable(builder); table2.ToSnapshotTable(builder); refTable1.ToSnapshotTable(builder); refTable2.ToSnapshotTable(builder); } foreach (var item in table2) { item.OtherVariable = $"other {item.Id}"; } TakeSnapshot("Before"); table1[0].Variable = "edited"; table2[1].Variable = "edited"; refTable1[0].Variable = "edited"; refTable1[1].ParentId = 3; //will required table1 row with key of 3 and also 2 because that is the before refTable2[0].Variable = "edited"; refTable2[1].ParentId = 5; //will required table2 row with key of 5 but not 2 (the before) because it is edited and therefore already present TakeSnapshot("After"); var before = _om.GetSnapshot("Before"); var after = _om.GetSnapshot("After"); var diffs = SnapshotDifferenceCalculator.GetDifferences(_om.Collection, before, after); //Act var tableDefinition = _om.Collection.GetTableDefinition(nameof(SnapshotObjectMother.Table2)); var requiredColumns = new [] { nameof(SnapshotObjectMother.Table2.OtherVariable) }; var result = DifferenceColumnAdder.RequireColumns(_om.Collection, diffs, tableDefinition, requiredColumns, before); //Assert var output = new Output(); result.Report(output); output.Report.Verify(); }
public void IfThereAreNoMissingColumnsTheOriginalDiffsAreReturned() { //Arrange var table1 = _om.Make <SnapshotObjectMother.Table>(1, 2, 3, 4, 5); var table2 = _om.Make <SnapshotObjectMother.Table2>(1, 2, 3, 4, 5); var refTable1 = _om.Make <SnapshotObjectMother.ReferencingTable>((1, 1), (2, 1)); var refTable2 = _om.Make <SnapshotObjectMother.ReferencingTable2>((1, 3), (2, 4)); void TakeSnapshot(string name) { var builder = _om.NewSnapshot(name); table1.ToSnapshotTable(builder); table2.ToSnapshotTable(builder); refTable1.ToSnapshotTable(builder); refTable2.ToSnapshotTable(builder); } foreach (var item in table2) { item.OtherVariable = $"other {item.Id}"; } TakeSnapshot("Before"); table1[0].Variable = "edited"; table2[1].Variable = "edited"; TakeSnapshot("After"); var before = _om.GetSnapshot("Before"); var after = _om.GetSnapshot("After"); var diffs = SnapshotDifferenceCalculator.GetDifferences(_om.Collection, before, after); //Act var tableDefinition = _om.Collection.GetTableDefinition(nameof(SnapshotObjectMother.Table2)); var requiredColumns = new [] { nameof(SnapshotObjectMother.Table2.OtherVariable) }; var result = DifferenceColumnAdder.RequireColumns(_om.Collection, diffs, tableDefinition, new List <string>(), before); //Assert var zipped = result.SelectMany(r => r.RowDifferences).Zip(diffs.SelectMany(d => d.RowDifferences)); zipped.All(z => ReferenceEquals(z.First, z.Second)) .Should().BeTrue(); }