Exemplo n.º 1
0
        public async Task ReleaseReservations_SingleReservation_ReturnsCorrectResult()
        {
            const int reservedAmount     = 1;
            const int storedUnits        = 3;
            var       productId          = Guid.NewGuid();
            var       customerId         = Guid.NewGuid();
            var       productReservation = new ProductReservationDto
            {
                CustomerId     = customerId,
                ProductId      = productId,
                Expiration     = DateTime.Now.Add(new TimeSpan(1, 0, 0)),
                ReservedAmount = reservedAmount
            };
            var productRepositoryMock = new FacadeMockManager().ConfigureGetRepositoryMock(new Song {
                StoredUnits = storedUnits
            });
            var productFacade = CreateOrderFacadeForReservationTesting(productRepositoryMock);

            await productFacade.ReserveProductAsync(productReservation);

            productFacade.ReleaseReservations(customerId);

            var actualReservedUnits = storedUnits - await productFacade.GetCurrentlyAvailableUnitsAsync(productId);

            Assert.AreEqual(0, actualReservedUnits);
        }
Exemplo n.º 2
0
        public async Task GetProductsAsync_ExistingProduct_ReturnsCorrectCustomer()
        {
            const int storedAmount    = 10;
            const int reservedAmount  = 3;
            var       firstProductId  = Guid.NewGuid();
            var       secondProductId = Guid.NewGuid();
            var       returnedResult  = new QueryResultDto <ProductDto, ProductFilterDto>
            {
                Filter = new ProductFilterDto(),
                Items  = new List <ProductDto> {
                    new ProductDto {
                        Id = firstProductId, StoredUnits = storedAmount
                    },
                    new ProductDto {
                        Id = secondProductId, StoredUnits = storedAmount
                    }
                },
                TotalItemsCount = 2
            };
            var productReservation = new ProductReservationDto
            {
                CustomerId     = Guid.NewGuid(),
                Expiration     = DateTime.Now.Add(new TimeSpan(1, 0, 0)),
                ProductId      = firstProductId,
                ReservedAmount = reservedAmount
            };

            var expectedResult = new List <ProductDto> {
                new ProductDto {
                    Id = firstProductId, StoredUnits = storedAmount, CurrentlyAvailableUnits = storedAmount - reservedAmount
                },
                new ProductDto {
                    Id = secondProductId, StoredUnits = storedAmount, CurrentlyAvailableUnits = storedAmount
                }
            };


            var mockManager            = new FacadeMockManager();
            var productRepositoryMock  = mockManager.ConfigureRepositoryMock <Song>();
            var categoryRepositoryMock = mockManager.ConfigureRepositoryMock <Album>();
            var productQueryMock       = mockManager.ConfigureQueryObjectMock <ProductDto, Song, ProductFilterDto>(returnedResult);
            var categoryQueryMock      = mockManager.ConfigureQueryObjectMock <CategoryDto, Album, CategoryFilterDto>(null);
            var productFacade          = await CreateProductFacade(productQueryMock, productRepositoryMock, categoryRepositoryMock, categoryQueryMock, productReservation);

            productQueryMock.Setup(query => query.ExecuteQuery(It.IsAny <ProductFilterDto>())).ReturnsAsync(returnedResult);
            productRepositoryMock.Setup(repo => repo.GetAsync(It.IsAny <Guid>()))
            .ReturnsAsync(new Song {
                StoredUnits = storedAmount
            });

            var actualResult = (await productFacade.GetProductsAsync(new ProductFilterDto())).Items;

            Assert.AreEqual(expectedResult, actualResult);
        }
Exemplo n.º 3
0
        public async Task GetProductAsync_ExistingProductWithReservations_ReturnsCorrectCustomerAsync()
        {
            var          productId          = Guid.NewGuid();
            const string productName        = "Samsung Galaxy S8";
            const int    storedAmount       = 3;
            const int    reservedAmount     = 2;
            var          expectedProductDto = new ProductDto
            {
                Id                      = productId,
                StoredUnits             = storedAmount,
                CurrentlyAvailableUnits = storedAmount - reservedAmount,
                Name                    = productName
            };
            var expectedProduct = new Song
            {
                Id          = productId,
                StoredUnits = storedAmount,
                Name        = productName
            };
            var productReservation = new ProductReservationDto
            {
                CustomerId     = Guid.NewGuid(),
                Expiration     = DateTime.Now.Add(new TimeSpan(1, 0, 0)),
                ProductId      = productId,
                ReservedAmount = reservedAmount
            };
            var mockManager            = new FacadeMockManager();
            var productRepositoryMock  = mockManager.ConfigureGetRepositoryMock(expectedProduct);
            var categoryRepositoryMock = mockManager.ConfigureRepositoryMock <Album>();
            var productQueryMock       = mockManager.ConfigureQueryObjectMock <ProductDto, Song, ProductFilterDto>(null);
            var categoryQueryMock      = mockManager.ConfigureQueryObjectMock <CategoryDto, Album, CategoryFilterDto>(null);
            var productFacade          = await CreateProductFacade(productQueryMock, productRepositoryMock, categoryRepositoryMock, categoryQueryMock, productReservation);

            var actualProductDto = await productFacade.GetProductAsync(productId);

            Assert.AreEqual(actualProductDto, expectedProductDto);
        }
Exemplo n.º 4
0
        private static async Task <ProductFacade> CreateProductFacade(Mock <QueryObjectBase <ProductDto, Song, ProductFilterDto, IQuery <Song> > > productQueryMock, Mock <IRepository <Song> > productRepositoryMock, Mock <IRepository <Album> > categoryRepositoryMock, Mock <QueryObjectBase <CategoryDto, Album, CategoryFilterDto, IQuery <Album> > > categoryQueryMock, ProductReservationDto reservation = null)
        {
            var uowMock            = FacadeMockManager.ConfigureUowMock();
            var mapperMock         = FacadeMockManager.ConfigureRealMapper();
            var productService     = new ProductService(mapperMock, productQueryMock.Object, productRepositoryMock.Object);
            var categoryService    = new CategoryService(mapperMock, categoryRepositoryMock.Object, categoryQueryMock.Object);
            var reservationService = new ReservationService(mapperMock, productRepositoryMock.Object);

            if (reservation != null)
            {
                await reservationService.ReserveProduct(reservation);
            }
            var productFacade = new ProductFacade(uowMock.Object, categoryService, productService, reservationService);

            return(productFacade);
        }