Beispiel #1
0
        public async Task UpdateSaleStatistics_RepositoryHasTheStatistic_UpdateExitingStatistic()
        {
            // Arrange
            var id = Guid.NewGuid();

            var statistic = new SalesStatistic
            {
                Id          = id,
                Descripiton = "Initial"
            };

            await _repository.UpdateSaleStatistics(statistic);

            // Act
            var expectedEtatistic = new SalesStatistic
            {
                Id          = id,
                Descripiton = "Expected"
            };

            await _repository.UpdateSaleStatistics(expectedEtatistic);

            // Assert
            var statistics = await _repository.GetSaleStatistics();

            Assert.That(statistics.Count(), Is.EqualTo(1), "Only one updated statistics should exist in repository");
            Assert.That(statistics.First().Id, Is.EqualTo(id), "Wrong statistic persited");
            Assert.That(statistics.First().Descripiton, Is.EqualTo("Expected"), "Wrong statistic persited");
        }
Beispiel #2
0
        public Task UpdateSaleStatistics(SalesStatistic statistics)
        {
            var db = _redis.GetDatabase();

            db.StringSet($"{KeyPattern}{statistics.Id}", JsonConvert.SerializeObject(statistics));

            return(Task.CompletedTask);
        }
Beispiel #3
0
        public async Task Handle_HappyPath_SaveStatistics()
        {
            // Arrange
            var sales = new List <Sale>
            {
                new Sale(Guid.NewGuid(), 1, "First agent"),
                new Sale(Guid.NewGuid(), 2, "Second agent"),
                new Sale(Guid.NewGuid(), 3, "Third agent"),
                new Sale(Guid.NewGuid(), 1, "First agent"),
                new Sale(Guid.NewGuid(), 1, "First agent"),
                new Sale(Guid.NewGuid(), 2, "Second agent"),
                new Sale(Guid.NewGuid(), 1, "First agent")
            };

            var statistic = new SalesStatistic
            {
                Id = Guid.NewGuid(),

                DateCreated = DateTime.UtcNow,
                DateUpdated = DateTime.UtcNow,
                Descripiton = "Test",
                Criteria    = new SaleStatisticCriteria
                {
                    Count  = 2,
                    Filter = "filter"
                },
                Items = new List <SaleStatisticItem>()
            };

            _saleServiceMock
            .Setup(x => x.ReadSales(statistic.Criteria.Filter))
            .ReturnsAsync(sales);

            _saleStatisticRepositoryMock
            .Setup(x => x.GetSaleStatistics())
            .ReturnsAsync(new[] { statistic });

            var command = new UpdateTopSalesStatisticsCommand();

            // Act
            await _handler.Handle(command, CancellationToken.None);

            // Assert
            _saleStatisticRepositoryMock.Verify(x => x.GetSaleStatistics(), Times.Once);
            _saleStatisticRepositoryMock.Verify(x => x.UpdateSaleStatistics(statistic), Times.Once);

            Assert.That(statistic.Items.Count(), Is.EqualTo(2), "Top two statistics should be created");
            Assert.That(statistic.Items.First().RealEstateAgent, Is.EqualTo("First agent"), "'First Agent' should in the top");
            Assert.That(statistic.Items.First().SalesCount, Is.EqualTo(4), "Incorect sales count for 'First Agent'");
            Assert.That(statistic.Items.ElementAt(1).RealEstateAgent, Is.EqualTo("Second agent"), "'Second Agent' should in the second position of the top");
            Assert.That(statistic.Items.ElementAt(1).SalesCount, Is.EqualTo(2), "Incorect sales count for 'Second Agent'");
        }
Beispiel #4
0
        public static void Seed(IHost host)
        {
            using (var scope = host.Services.CreateScope())
            {
                var services   = scope.ServiceProvider;
                var repository = scope.ServiceProvider.GetService <ISaleStatisticRepository>();

                var statistics = repository.GetSaleStatistics().Result;

                if (statistics.All(x => x.Criteria.Filter != AmsterdamSalesFilter))
                {
                    var topSalesAgentsStatistics = new SalesStatistic
                    {
                        Id          = Guid.NewGuid(),
                        Descripiton = "Top 10 real estate agents by sale objects in Amsterdam!",
                        DateCreated = DateTime.UtcNow,
                        DateUpdated = DateTime.UtcNow,
                        Criteria    = new SaleStatisticCriteria
                        {
                            Count  = TopCount,
                            Filter = AmsterdamSalesFilter
                        },
                        Items = new Collection <SaleStatisticItem>()
                    };

                    repository.UpdateSaleStatistics(topSalesAgentsStatistics).Wait();
                }

                if (statistics.All(x => x.Criteria.Filter != AmsterdamWithGarenSalesFilter))
                {
                    var topSalesWithGardenAgentsStatistics = new SalesStatistic
                    {
                        Id          = Guid.NewGuid(),
                        Descripiton = "Top 10 real estate agents by sale objects with garden in Amsterdam!",
                        DateCreated = DateTime.UtcNow,
                        DateUpdated = DateTime.UtcNow,
                        Criteria    = new SaleStatisticCriteria
                        {
                            Count  = TopCount,
                            Filter = AmsterdamWithGarenSalesFilter
                        },
                        Items = new Collection <SaleStatisticItem>()
                    };

                    repository.UpdateSaleStatistics(topSalesWithGardenAgentsStatistics).Wait();
                }
            }
        }
Beispiel #5
0
        public Task UpdateSaleStatistics(SalesStatistic statistics)
        {
            lock (_storage)
            {
                if (_storage.ContainsKey(statistics.Id))
                {
                    _storage[statistics.Id] = statistics;
                }
                else
                {
                    _storage.Add(statistics.Id, statistics);
                }
            }

            return(Task.CompletedTask);
        }
Beispiel #6
0
        public async Task GetSaleStatistics_UpdateSaleStatistics_RepositoryNotEmpty_ReturnStatistics()
        {
            // Arrange
            var id = Guid.NewGuid();

            var statistic = new SalesStatistic
            {
                Id = id
            };

            await _repository.UpdateSaleStatistics(statistic);

            // Act
            var statistics = await _repository.GetSaleStatistics();

            // Assert
            Assert.That(statistics.Count(), Is.EqualTo(1), "Only one statistics should exist in repository");
            Assert.That(statistics.First().Id, Is.EqualTo(id), "Wrong statistic persited");
        }
Beispiel #7
0
        public async Task Handle_NoSalesForSpecifiedStatistics_SaveEmptyStatistics()
        {
            // Arrange
            var statistic = new SalesStatistic
            {
                Id = Guid.NewGuid(),

                DateCreated = DateTime.UtcNow,
                DateUpdated = DateTime.UtcNow,
                Descripiton = "Test",
                Criteria    = new SaleStatisticCriteria
                {
                    Count  = 1,
                    Filter = "filter"
                },
                Items = new List <SaleStatisticItem>
                {
                    new SaleStatisticItem()
                }
            };

            _saleServiceMock
            .Setup(x => x.ReadSales(statistic.Criteria.Filter))
            .ReturnsAsync(Enumerable.Empty <Sale>());

            _saleStatisticRepositoryMock
            .Setup(x => x.GetSaleStatistics())
            .ReturnsAsync(new[] { statistic });

            var command = new UpdateTopSalesStatisticsCommand();

            // Act
            await _handler.Handle(command, CancellationToken.None);

            // Assert
            _saleStatisticRepositoryMock.Verify(x => x.GetSaleStatistics(), Times.Once);
            _saleStatisticRepositoryMock.Verify(x => x.UpdateSaleStatistics(statistic), Times.Once);

            Assert.That(statistic.Items.Count(), Is.EqualTo(0));
        }