/// <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);
        }
Beispiel #5
0
        public async Task <IActionResult> Post(AnonymousCartCreateModel anonymousCartModel)
        {
            await this.anonymousCartService.CreateAsync(this.WebsiteId, anonymousCartModel);

            return(Ok(new ApiResponse <AnonymousCartModel>()));
        }