public void RemovesIncomingPopularityTransfer() { // A used to transfer to both B and C. // A now transfers to just B. PopularityTransfer = 1; DownloadData.SetDownloadCount("A", "1.0.0", 100); DownloadData.SetDownloadCount("B", "1.0.0", 5); DownloadData.SetDownloadCount("C", "1.0.0", 0); PopularityTransfers.AddTransfer("A", "B"); TransferChanges["A"] = new[] { "B" }; OldTransfers.AddTransfer("A", "B"); OldTransfers.AddTransfer("A", "C"); var result = Target.UpdateDownloadTransfers( DownloadData, DownloadChanges, OldTransfers, PopularityTransfers); Assert.Equal(new[] { "A", "B", "C" }, result.Keys); Assert.Equal(0, result["A"]); Assert.Equal(105, result["B"]); Assert.Equal(0, result["C"]); }
public async Task FlagDisablesPopularityTransfers() { var downloadChanges = new SortedDictionary <string, long>(StringComparer.OrdinalIgnoreCase) { { "Package1", 5 } }; DownloadSetComparer .Setup(c => c.Compare(It.IsAny <DownloadData>(), It.IsAny <DownloadData>())) .Returns <DownloadData, DownloadData>((oldData, newData) => { return(downloadChanges); }); OldTransfers.AddTransfer("Package1", "Package2"); NewTransfers.AddTransfer("Package1", "Package2"); FeatureFlags .Setup(x => x.IsPopularityTransferEnabled()) .Returns(false); await Target.ExecuteAsync(); PopularityTransferDataClient .Verify( c => c.ReadLatestIndexedAsync(It.IsAny <IAccessCondition>(), It.IsAny <StringCache>()), Times.Once); DatabaseFetcher .Verify( d => d.GetPopularityTransfersAsync(), Times.Never); // The popularity transfers should not be given to the download transferrer. DownloadTransferrer .Verify( x => x.UpdateDownloadTransfers( NewDownloadData, downloadChanges, OldTransfers, It.Is <PopularityTransferData>(d => d.Count == 0)), Times.Once); // Popularity transfers auxiliary file should be empty. PopularityTransferDataClient.Verify( c => c.ReplaceLatestIndexedAsync( It.Is <PopularityTransferData>(d => d.Count == 0), It.IsAny <IAccessCondition>()), Times.Once); }