/// <summary> /// Create new anonymous cart /// </summary> /// <param name="websiteId"></param> /// <param name="anonymousCartModel"></param> /// <returns></returns> public async Task CreateAsync(int websiteId, AnonymousCartCreateModel anonymousCartModel) { var anonymousCartRepository = unitOfWork.GetRepository <AnonymousCart>(); var existedCart = await anonymousCartRepository.FindByAsync(x => !x.DeletedDate.HasValue && x.WebsiteId == websiteId && x.IdentityCode == anonymousCartModel.IdentityCode.ToString() && x.ProductId == anonymousCartModel.ProductId); if (existedCart != null) { existedCart.Quantity += anonymousCartModel.Quantity; anonymousCartRepository.Update(existedCart); await unitOfWork.CommitAsync(); return; } var productRepository = unitOfWork.GetRepository <Product>(); var product = await productRepository.FindByAsync(x => x.WebsiteId == websiteId && x.Id == anonymousCartModel.ProductId); if (product == null) { throw new NotFoundException(string.Format( MessageResponse.NotFoundError, nameof(Product), anonymousCartModel.ProductId)); } var anonymousCart = mapper.Map <AnonymousCart>(anonymousCartModel); anonymousCart.WebsiteId = websiteId; anonymousCart.CreatedDate = DateTime.UtcNow; anonymousCartRepository.Add(anonymousCart); await unitOfWork.CommitAsync(); }
public void TestCreateAsync_WithValidData_ShouldNotThrowAnyException() { var cartCreateModel = new AnonymousCartCreateModel { IdentityCode = Guid.Parse(identityCode), ProductId = 3, Quantity = 5 }; Assert.DoesNotThrowAsync(() => anonymousCartService.CreateAsync(1, cartCreateModel)); }
public void TestCreateAsync_WithNotFoundProduct_ShouldThrowNotFoundException() { var cartCreateModel = new AnonymousCartCreateModel { IdentityCode = Guid.Parse(identityCode), ProductId = 4, Quantity = 5 }; var ex = Assert.ThrowsAsync <NotFoundException>(() => anonymousCartService.CreateAsync(1, cartCreateModel)); Assert.AreEqual(string.Format(MessageResponse.NotFoundError, nameof(Product), cartCreateModel.ProductId), ex.Message); }
public void TestCreateAsync_WithExistedCartHasSameIdentityCode_ShouldUpdateQuantity() { var cartCreateModel = new AnonymousCartCreateModel { IdentityCode = Guid.Parse(identityCode), ProductId = 1, Quantity = 5 }; Assert.DoesNotThrowAsync(() => anonymousCartService.CreateAsync(1, cartCreateModel)); var existedCart = anonymousCarts.FirstOrDefault(x => x.ProductId == cartCreateModel.ProductId); Assert.AreEqual(6, existedCart.Quantity); }
public async Task <IActionResult> Post(AnonymousCartCreateModel anonymousCartModel) { await this.anonymousCartService.CreateAsync(this.WebsiteId, anonymousCartModel); return(Ok(new ApiResponse <AnonymousCartModel>())); }