public void DateDiagnosticsAreReported()
        {
            //Arrange
            var collection = new SnapshotCollection();

            var beforeDates = new[]
            {
                DateTime.Parse("2020-10-11 10:35"),
                DateTime.Parse("2020-10-11 10:36"),
                DateTime.Parse("2020-10-11 10:37"),
                DateTime.Parse("2020-10-11 10:38"),
            };

            var afterDates = new[]
            {
                DateTime.Parse("2020-10-11 10:35"),
                DateTime.Parse("2020-10-11 10:36"),
                DateTime.Parse("2020-10-11 10:39"),
                DateTime.Parse("2020-10-11 10:40"),
                DateTime.Parse("2020-10-11 10:41"),
            };

            var beforeBuilder = collection.NewSnapshot("before");

            collection.DefineTable("Dates").PrimaryKey("Key").IsUnpredictable("Date");

            beforeDates.Select((bd, ix) => new { Key = ix, Date = bd, Other = "o", OtherDate = DateTime.MinValue }).ToSnapshotTable(beforeBuilder, "Dates");
            var deleteRow = beforeBuilder.AddNewRow("Dates");

            deleteRow["Key"]       = 100;
            deleteRow["Date"]      = DateTime.Parse("2020-10-18 11:19");
            deleteRow["Other"]     = "o";
            deleteRow["OtherDate"] = DateTime.MinValue;

            var afterBuilder = collection.NewSnapshot("after");

            afterDates.Select((bd, ix) => new { Key = ix, Date = bd, Other = "a", OtherDate = DateTime.MaxValue }).ToSnapshotTable(afterBuilder, "Dates");

            var before      = collection.GetSnapshot("before");
            var after       = collection.GetSnapshot("after");
            var differences = SnapshotDifferenceAnalyser.ExtractDifferences(collection, before, after);

            var output = new Output();

            //Act
            var ranges = new List <NamedTimeRange>
            {
                new NamedTimeRange(beforeDates[0], beforeDates[3], "before"),
                new NamedTimeRange(afterDates[2], afterDates[3], "after"),
            };

            DateDiagnosticReporter.Report(output, ranges, before, after, differences);

            //Assert
            output.Report.Verify();
        }
예제 #2
0
        public void DeletedRowMakesSnapshotUnequal()
        {
            //Arrange
            var before = MakeSnapshot("Test", 1, 5);
            var after  = MakeSnapshot("Test2", 2, 4);

            //Act
            var result = SnapshotDifferenceAnalyser.Match(_collection, before, after);

            //Assert
            result.Should().BeFalse();
        }
예제 #3
0
        public void EqualSnapshotsReturnEqualStatus()
        {
            //Arrange
            var before = MakeSnapshot("Test");
            var after  = MakeSnapshot("Test2");

            //Act
            var result = SnapshotDifferenceAnalyser.Match(_collection, before, after);

            //Assert
            result.Should().BeTrue();
        }
예제 #4
0
        public void NonKeyValueDifferenceMakesSnapshotUnequal()
        {
            //Arrange
            var before = MakeSnapshot("Test", 1, 1, MakeValueSet(5));
            var after  = MakeSnapshot("Test2", 1, 1, MakeValueSet(6));

            //Act
            var result = SnapshotDifferenceAnalyser.Match(_collection, before, after);

            //Assert
            result.Should().BeFalse();
        }
예제 #5
0
        public void SnapshotShouldNotConsiderExcludedTables()
        {
            //Arrange
            var before = MakeSnapshot("Test", 1, 1, MakeValueSet(5));
            var after  = MakeSnapshot("Test2", 1, 1, MakeValueSet(6));

            _collection.DefineTable(TableName).ExcludeFromComparison();

            //Act
            var result = SnapshotDifferenceAnalyser.Match(_collection, before, after);

            //Assert
            result.Should().BeTrue(); //it can only be a match if the table is ignored
        }
예제 #6
0
        public void SubstitutionsCanBeSuppressed()
        {
            //Arrange
            var collection = new SnapshotCollection();

            collection.DefineTable("TheTable")
            .PrimaryKey("Id")
            .IsUnpredictable("Id");

            void AddRow(SnapshotBuilder snapshot, int id, string name)
            {
                var add = snapshot.AddNewRow("TheTable");

                add["Id"]   = id;
                add["Name"] = name;
            }

            void AddData(SnapshotBuilder snapshot, string names)
            {
                var id = 1;

                foreach (var name in names.Split(','))
                {
                    AddRow(snapshot, id++, name);
                }
            }

            var beforeBuilder = collection.NewSnapshot("Before");

            AddData(beforeBuilder, "A,B,C");

            var afterBuilder = collection.NewSnapshot("After");

            AddData(afterBuilder, "D,E,F");

            var before = collection.GetSnapshot("Before");
            var after  = collection.GetSnapshot("After");
            var diffs  = SnapshotDifferenceAnalyser.ExtractDifferences(collection, before, after, ChangeReportOptions.NoSubs);

            //Act
            var result = SnapshotDifferenceSorter.SortDifferences(collection, diffs.TableDifferences.ToList());

            //Assert
            var output = new Output();

            result.Report(output);
            output.Report.Verify();
        }
예제 #7
0
        public void DifferenceDataIsSortedDescending()
        {
            //Arrange
            var collection = new SnapshotCollection();

            collection.DefineTable("TheTable").PrimaryKey("Id").SortDescending("Name");

            void AddRow(SnapshotBuilder snapshot, int id, string name)
            {
                var add = snapshot.AddNewRow("TheTable");

                add["Id"]   = id;
                add["Name"] = name;
            }

            var beforeBuilder = collection.NewSnapshot("Before");

            AddRow(beforeBuilder, 1, "Alice");
            AddRow(beforeBuilder, 2, "Xavier");
            AddRow(beforeBuilder, 3, "Zed");

            var afterBuilder = collection.NewSnapshot("After");

            AddRow(afterBuilder, 1, "Alice+");
            AddRow(afterBuilder, 2, "Xavier+");
            AddRow(afterBuilder, 3, "Zed+");

            var before = collection.GetSnapshot("Before");
            var after  = collection.GetSnapshot("After");
            var diffs  = SnapshotDifferenceAnalyser.ExtractDifferences(collection, before, after);

            //Act
            var result = SnapshotDifferenceSorter.SortDifferences(collection, diffs.TableDifferences.ToList());

            //Assert
            var output = new Output();

            result.Report(output);
            output.Report.Verify();
        }
예제 #8
0
        public void MatchResultShouldContainDifferences()
        {
            //Arrange
            var before = MakeSnapshot("Test", 1, 3, MakeValueSet(5), MakeValueSet(6), MakeValueSet(7));
            var after  = MakeSnapshot("Test2", 1, 3, MakeValueSet(6), MakeValueSet(6), MakeValueSet(6));

            //Act
            var result = SnapshotDifferenceAnalyser.ExtractDifferences(_collection, before, after);

            //Assert
            var output = new Output();

            foreach (var tableDiffs in result.TableDifferences)
            {
                var report = tableDiffs
                             .RowDifferences
                             .AsReport(rep => AttachDiffs(rep, tableDiffs));

                output.FormatTable(report);
            }


            output.Report.Verify();
        }
예제 #9
0
        public void DifferenceDataIsSortedByMultipleColumns()
        {
            //Arrange
            var collection = new SnapshotCollection();

            collection.DefineTable("TheTable")
            .PrimaryKey("Id")
            .Sort("ColAsc1")
            .SortDescending("ColDesc1")
            .Sort("ColAsc2")
            .SortDescending("ColDesc2");

            void AddRow(SnapshotBuilder snapshot, int id, string asc1, string desc1, string asc2, string desc2)
            {
                var add = snapshot.AddNewRow("TheTable");

                add["Id"]       = id;
                add["ColAsc1"]  = asc1;
                add["ColDesc1"] = desc1;
                add["ColAsc2"]  = asc2;
                add["ColDesc2"] = desc2;
            }

            void AddData(SnapshotBuilder snapshot, string ascData, string descData)
            {
                var id = 1;

                foreach (var colAsc1 in ascData.Split(','))
                {
                    foreach (var colDesc1 in descData.Split(','))
                    {
                        foreach (var colAsc2 in ascData.Split(','))
                        {
                            foreach (var colDesc2 in descData.Split(','))
                            {
                                AddRow(snapshot, id++, colAsc1, colDesc1, colAsc2, colDesc2);
                            }
                        }
                    }
                }
            }

            var beforeBuilder = collection.NewSnapshot("Before");

            AddData(beforeBuilder, "A,B,C", "C,B,A");

            var afterBuilder = collection.NewSnapshot("After");

            AddData(afterBuilder, "A+,B+,C+", "C+,B+,A+");

            var before = collection.GetSnapshot("Before");
            var after  = collection.GetSnapshot("After");
            var diffs  = SnapshotDifferenceAnalyser.ExtractDifferences(collection, before, after);

            //Act
            var result = SnapshotDifferenceSorter.SortDifferences(collection, diffs.TableDifferences.ToList());

            //Assert
            var output = new Output();

            result.Report(output);
            output.Report.Verify();
        }