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); }
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); }
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); }
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); }