예제 #1
0
        public Result Execute(int productId, int amount = 1)
        {
            if (amount <= 0)
            {
                return(Fail(() => InvalidAmount, "Указано некорректное количество товаров: " + amount));
            }

            // получаем корзину
            var cartResult = _getCartCmd.Execute(GetShoppingCartCommand.FetchMode.GetOrCreate);

            if (cartResult.HasErrors)
            {
                return(cartResult.Outcome);
            }
            var cart = cartResult.Value;

            // добавляем товар
            var item = cart.Items.FirstOrDefault(c => c.ProductId == productId);

            if (item == null)
            {
                item = new CartItem
                {
                    ProductId = productId,
                };
                cart.Items.Add(item);
            }
            item.Amount += amount;

            return(Ok());
        }
예제 #2
0
        public void When_user_is_not_signed_in_and_has_no_cart_Must_return_new_cart_and_store_id_in_session()
        {
            // Arrange

            var session = new Dictionary<string, object>();

            // Act

            var cmd = new GetShoppingCartCommand(Db, null, session);
            var result = cmd.Execute();

            // Assert

            AssertSuccess(result);
            Assert.IsNotNull(result.Value, "Не вернулась корзина");
            Assert.AreEqual(result.Value.Id, session[GetShoppingCartCommand.CART_SESSION_KEY], "Id корзины не сохранился в сессию");
        }
예제 #3
0
        public void When_there_is_no_cart_for_user_Must_create_new()
        {
            // Arrange

            CreateCart(); // просто корзина, не привязанная к пользователю
            var user = CreateUser();
            Db.SaveChanges();

            // Act

            var cmd = new GetShoppingCartCommand(Db, user);
            var result = cmd.Execute();

            // Assert

            AssertSuccess(result);
            Assert.IsNotNull(result.Value, "Не вернулась корзина");
            Assert.AreEqual(user.Id, result.Value.User.Id, "Вернулась чужая корзина");
            Assert.AreEqual(1, Db.ShoppingCarts.Count(c => c.User.Id == user.Id), "Не создалась новая корзина, либо появилась лишняя");
        }
예제 #4
0
        public Result Execute(string userEmail)
        {
            if (!IsValidEmail(userEmail))
            {
                return(Fail(() => InvalidEmail, "Невалидный email: " + userEmail));
            }

            var request = new RegistrationRequest
            {
                Id    = Guid.NewGuid(),
                Email = userEmail
            };

            if (IsEmailRegistered(userEmail))
            {
                return(Fail(() => EmailAlreadyRegistered, "Пользователь с таким email уже существует"));
            }

            // получаем корзину
            var cartResult = _getCartCmd.Execute(GetShoppingCartCommand.FetchMode.GetOrCreate);

            if (cartResult.HasErrors)
            {
                return(cartResult.Outcome);
            }

            // если корзина не пуста, созраняем ссылку в заявке
            if (cartResult.Value.Items.Any())
            {
                request.Cart = cartResult.Value;
            }

            // добавляем заявку
            _db.RegistrationRequests.Add(request);

            // отправляем письмо
            _mailService.SendUserConfirmatiom(userEmail, request.Id.ToString());

            return(Ok());
        }
예제 #5
0
        public void When_there_is_cart_for_user_Must_return_existing_cart()
        {
            // Arrange

            CreateCart();
            var user = CreateUser();
            var cart = CreateCart(user); // тестируемая корзина
            CreateCart();
            Db.SaveChanges();

            // Act

            var cmd = new GetShoppingCartCommand(Db, user);
            var result = cmd.Execute();

            // Assert

            AssertSuccess(result);
            Assert.IsNotNull(result.Value, "Не вернулась корзина");
            Assert.AreEqual(1, Db.ShoppingCarts.Count(c => c.User.Id == user.Id), "Создалась новая корзина, либо удалилась старая");
            Assert.AreEqual(cart.Id, result.Value.Id, "Вернулась чужая корзина");
        }
예제 #6
0
        public void When_user_is_not_signed_in_Must_return_existing_cart_for_session()
        {
            // Arrange

            var cart = CreateCart();
            Db.SaveChanges();
            var session = new Dictionary<string, object>();
            session[GetShoppingCartCommand.CART_SESSION_KEY] = cart.Id;

            // Act

            var cmd = new GetShoppingCartCommand(Db, null, session);
            var result = cmd.Execute();

            // Assert

            AssertSuccess(result);
            Assert.IsNotNull(result.Value, "Не вернулась корзина");
            Assert.AreEqual(cart.Id, result.Value.Id, "Вернулась чужая корзина");
        }