Exemplo n.º 1
0
        public void RecalculateTotalDownloadCount(string packageId)
        {
            PackageDataAggregate packageDataAggregate = GetAggregate(packageId);

            packageDataAggregate.DownloadCount = _packageRepository.Collection.Where(p => p.Id == packageId).Sum(p => p.DownloadCount);
            _packageDataAggregateRepository.Update(packageDataAggregate);
            UpdatePublishedPackageDownloadCounts(packageId, packageDataAggregate.DownloadCount);
        }
Exemplo n.º 2
0
        public void IncrementDownloadForPackage(string packageId)
        {
            PackageDataAggregate packageDataAggregate = GetAggregate(packageId);

            packageDataAggregate.DownloadCount++;

            _packageDataAggregateRepository.Update(packageDataAggregate);
            UpdatePublishedPackageDownloadCounts(packageId, packageDataAggregate.DownloadCount);
        }
Exemplo n.º 3
0
        public void ShouldUpdateAggregate()
        {
            string packageId         = Guid.NewGuid().ToString();
            var    aggregateToUpdate = new PackageDataAggregate {
                PackageId = packageId
            };

            MockedPackageDataAggregateRepository.SetupGet(pdar => pdar.Collection).Returns(new[] { aggregateToUpdate }.AsQueryable());

            Updater.IncrementDownloadForPackage(packageId);

            MockedPackageDataAggregateRepository.Verify(pdar => pdar.Update(aggregateToUpdate), Times.Once(), "Aggregate was not updated.");
        }
Exemplo n.º 4
0
        public void ShouldIncrementPackageDownloadCountByOne()
        {
            const int originalDownloadCount = 5;
            var       packageDataAggregate  = new PackageDataAggregate {
                PackageId = Guid.NewGuid().ToString(), DownloadCount = originalDownloadCount
            };

            MockedPackageDataAggregateRepository.SetupGet(pdar => pdar.Collection).Returns(new[] { packageDataAggregate }.AsQueryable());

            Updater.IncrementDownloadForPackage(packageDataAggregate.PackageId);

            Assert.AreEqual(originalDownloadCount + 1, packageDataAggregate.DownloadCount, "Download count was not incremented.");
        }
Exemplo n.º 5
0
        public void ShouldNotCreateNewAggregateWhenOneWithGivenPackageIdExists()
        {
            var packageDataAggregate = new PackageDataAggregate {
                PackageId = Guid.NewGuid().ToString()
            };

            MockedPackageDataAggregateRepository.SetupGet(pdar => pdar.Collection).Returns(new[] { packageDataAggregate }.AsQueryable());

            Updater.IncrementDownloadForPackage(packageDataAggregate.PackageId);

            MockedPackageDataAggregateRepository.Verify(pdar => pdar.Create(It.IsAny <PackageDataAggregate>()), Times.Never(),
                                                        "Create should not have been invoked.");
        }
Exemplo n.º 6
0
        public void DownloadCountOnPublishedPackageShouldBeMappedToAggregateDownloadCountWhenItExists()
        {
            PackageDataAggregate existingAggregate = new PackageDataAggregate {
                PackageId = Guid.NewGuid().ToString(), DownloadCount = 45
            };

            MockedPackageDataAggregateRepository.SetupGet(pdar => pdar.Collection).Returns(new[] { existingAggregate }.AsQueryable());

            PublishedPackage publishedPackage = Mapper.Map <Package, PublishedPackage>(new Package {
                Id = existingAggregate.PackageId
            });

            Assert.AreEqual(existingAggregate.DownloadCount, publishedPackage.DownloadCount, "DownloadCount should have been mapped to aggregate rating.");
        }
Exemplo n.º 7
0
        public void ShouldUpdateDownloadCountOfPackageDataAggregate()
        {
            const string         packageId             = "PackageId";
            const int            expectedDownloadCount = 8;
            PackageDataAggregate aggregateToUpdate     = new PackageDataAggregate {
                PackageId = packageId, DownloadCount = 45
            };

            MockedPackageRepository.SetupGet(pr => pr.Collection).Returns(new[] { GetPackage(packageId), GetPackage(packageId) }.AsQueryable());
            MockedPackageDataAggregateRepository.SetupGet(pdar => pdar.Collection).Returns(new[] { aggregateToUpdate }.AsQueryable());

            Updater.RecalculateTotalDownloadCount(packageId);

            Assert.AreEqual(expectedDownloadCount, aggregateToUpdate.DownloadCount, "DownloadCount on PackageDataAggregate was not updated.");
        }
Exemplo n.º 8
0
        public void ShouldUpdateDownloadCountOfMatchingPublishedPackage()
        {
            PublishedPackage publishedPackageToUpdate = new PublishedPackage {
                Id = Guid.NewGuid().ToString(), DownloadCount = 38
            };
            IQueryable <PublishedPackage> publishedPackages = new[] { publishedPackageToUpdate, new PublishedPackage() }.AsQueryable();
            var aggregate = new PackageDataAggregate {
                PackageId = publishedPackageToUpdate.Id, DownloadCount = 5
            };
            int expectedDownloadCount = aggregate.DownloadCount + 1;

            MockedPackageDataAggregateRepository.SetupGet(pdar => pdar.Collection).Returns(new[] { aggregate }.AsQueryable());
            MockedPublishedPackageRepository.SetupGet(ppr => ppr.Collection).Returns(publishedPackages);

            Updater.IncrementDownloadForPackage(publishedPackageToUpdate.Id);

            Assert.AreEqual(expectedDownloadCount, publishedPackageToUpdate.DownloadCount, "DownloadCount for PublishedPackage was not updated.");
        }
Exemplo n.º 9
0
        private PackageDataAggregate UpdateAggregateRatingsForPackage(string packageId)
        {
            PackageDataAggregate packageDataAggregate = GetAggregate(packageId);
            IQueryable <Package> packages             = _packageRepository.Collection.Where(p => p.Id == packageId);

            int totalRatingsCount = packages.Sum(p => p.RatingsCount);

            packageDataAggregate.RatingsCount = totalRatingsCount;
            if (totalRatingsCount != 0)
            {
                double sumOfAllPackageRatings = packages.Sum(p => p.RatingAverage * p.RatingsCount);
                packageDataAggregate.Rating = sumOfAllPackageRatings / totalRatingsCount;
            }
            else
            {
                packageDataAggregate.Rating = 0;
            }
            _packageDataAggregateRepository.Update(packageDataAggregate);
            return(packageDataAggregate);
        }
Exemplo n.º 10
0
        private T GetAggregate <T>(string packageId, Func <PackageDataAggregate, T> aggregateToGet)
        {
            PackageDataAggregate packageDataAggregate = _packageDataAggregateRepository.Collection.SingleOrDefault(pda => pda.PackageId == packageId);

            return(packageDataAggregate != null?aggregateToGet(packageDataAggregate) : default(T));
        }