public void FindsManyChangesAtOnce()
            {
                OldData.AddTransfer("Package1", "PackageA");
                OldData.AddTransfer("Package1", "PackageB");
                OldData.AddTransfer("Package2", "PackageC");
                OldData.AddTransfer("Package3", "PackageD");

                NewData.AddTransfer("Package1", "PackageA");
                NewData.AddTransfer("Package1", "PackageE");
                NewData.AddTransfer("Package4", "PackageC");
                NewData.AddTransfer("Package3", "Packaged");

                var changes = Target.ComparePopularityTransfers(OldData, NewData);

                Assert.Equal(3, changes.Count);
                Assert.Equal(new[] { "Package1", "Package2", "Package4" }, changes.Keys.ToArray());
                Assert.Equal(new[] { "PackageA", "PackageE" }, changes["Package1"]);
                Assert.Empty(changes["Package2"]);
                Assert.Equal(new[] { "PackageC" }, changes["Package4"]);

                TelemetryService.Verify(
                    x => x.TrackPopularityTransfersSetComparison(
                        /*oldCount: */ 3,
                        /*newCount: */ 3,
                        /*changeCount: */ 3,
                        It.IsAny <TimeSpan>()),
                    Times.Once);
            }
            public void FindsRemovedTransfers()
            {
                OldData.AddTransfer("PackageA", "PackageB");
                OldData.AddTransfer("PackageA", "PackageC");
                OldData.AddTransfer("Package1", "Package2");
                OldData.AddTransfer("Package1", "Package3");

                NewData.AddTransfer("PackageA", "PackageB");
                NewData.AddTransfer("PackageA", "PackageC");

                var changes = Target.ComparePopularityTransfers(OldData, NewData);

                var pair = Assert.Single(changes);

                Assert.Equal("Package1", pair.Key);
                Assert.Empty(pair.Value);

                TelemetryService.Verify(
                    x => x.TrackPopularityTransfersSetComparison(
                        /*oldCount: */ 2,
                        /*newCount: */ 1,
                        /*changeCount: */ 1,
                        It.IsAny <TimeSpan>()),
                    Times.Once);
            }
            public void IgnoresCaseChanges()
            {
                OldData.AddTransfer("PackageA", "packageb");
                OldData.AddTransfer("PackageA", "PackageC");

                NewData.AddTransfer("packagea", "PACKAGEB");
                NewData.AddTransfer("PackageA", "packageC");

                var changes = Target.ComparePopularityTransfers(OldData, NewData);

                Assert.Empty(changes);

                TelemetryService.Verify(
                    x => x.TrackPopularityTransfersSetComparison(
                        /*oldCount: */ 1,
                        /*newCount: */ 1,
                        /*changeCount: */ 0,
                        It.IsAny <TimeSpan>()),
                    Times.Once);
            }
            public void FindsNoChanges()
            {
                OldData.AddTransfer("PackageA", "PackageB");
                OldData.AddTransfer("PackageA", "PackageC");
                OldData.AddTransfer("Package1", "Package3");
                OldData.AddTransfer("Package1", "Package2");

                NewData.AddTransfer("PackageA", "PackageC");
                NewData.AddTransfer("PackageA", "PackageB");
                NewData.AddTransfer("Package1", "Package2");
                NewData.AddTransfer("Package1", "Package3");

                var changes = Target.ComparePopularityTransfers(OldData, NewData);

                Assert.Empty(changes);

                TelemetryService.Verify(
                    x => x.TrackPopularityTransfersSetComparison(
                        /*oldCount: */ 2,
                        /*newCount: */ 2,
                        /*changeCount: */ 0,
                        It.IsAny <TimeSpan>()),
                    Times.Once);
            }