예제 #1
0
        public void Clearing_Items_From_Basket_Should_Clear_All_Items_In_The_Basket()
        {
            var       customerId   = Faker.Random.Int(min: 1);
            var       itemId       = Faker.Random.Int(min: 1);
            const int fromQuantity = 2;

            var itemStockChecker = new Mock <IItemStockChecker>();

            itemStockChecker.Setup(mr => mr.IsAvaliable(itemId, fromQuantity)).Returns(Task.FromResult(true));

            var basketCreatedEvent   = new BasketCreatedEvent(customerId);
            var basketItemAddedEvent = new BasketItemAddedEvent(customerId, itemId, fromQuantity);
            var basketCleanedEvent   = new BasketCleanedEvent(customerId);

            var basket = Basket.Create(customerId);

            basket.AddItem(itemId, fromQuantity, itemStockChecker.Object);
            basket.Clear();

            basket.Items.Count.Should().Be(0);
            basket.ShouldPublishDomainEvents(basketCreatedEvent, basketItemAddedEvent, basketCleanedEvent);
        }
예제 #2
0
        public void Clearing_Items_From_Basket_Should_Be_Idempotent()
        {
            //-----------------------------------------------------------------------------------------------------------
            // Arrange
            //-----------------------------------------------------------------------------------------------------------
            Guid basketId           = Faker.Random.Uuid();
            var  basketCreatedEvent = new BasketCreatedEvent(basketId);

            //-----------------------------------------------------------------------------------------------------------
            // Act
            //-----------------------------------------------------------------------------------------------------------
            Basket basket = Basket.Create(basketId);

            basket.Clear();
            basket.Clear();

            //-----------------------------------------------------------------------------------------------------------
            // Assert
            //-----------------------------------------------------------------------------------------------------------
            basket.Items.Count.Should().Be(0);
            basket.ShouldPublishDomainEvents(basketCreatedEvent);
        }
예제 #3
0
        public void BasketItem_Quantity_Should_Be_Changed_And_Product_Should_Be_Removed_When_Quantity_Is_Zero()
        {
            var       customerId   = Faker.Random.Int(min: 1);
            var       itemId       = Faker.Random.Int(min: 1);
            const int fromQuantity = 2;
            const int toQuantity   = 0;

            var itemStockChecker = new Mock <IItemStockChecker>();

            itemStockChecker.Setup(mr => mr.IsAvaliable(itemId, fromQuantity)).Returns(Task.FromResult(true));
            itemStockChecker.Setup(mr => mr.IsAvaliable(itemId, toQuantity)).Returns(Task.FromResult(true));

            var basketCreatedEvent     = new BasketCreatedEvent(customerId);
            var basketItemAddedEvent   = new BasketItemAddedEvent(customerId, itemId, fromQuantity);
            var basketItemRemovedEvent = new BasketItemRemovedEvent(customerId, itemId);

            var basket = Basket.Create(customerId);

            basket.AddItem(itemId, fromQuantity, itemStockChecker.Object);
            basket.ChangeItemQuantity(itemId, toQuantity, itemStockChecker.Object);

            basket.Items.Count.Should().Be(0);
            basket.ShouldPublishDomainEvents(basketCreatedEvent, basketItemAddedEvent, basketItemRemovedEvent);
        }
예제 #4
0
 private void When(BasketCreatedEvent @event)
 {
     Id = @event.BasketId;
 }