Пример #1
0
        public async Task Given_PlaceOrderCommandWithDiscountCode_When_HandleAsync_Then_DiscountedOrderIsCreatedAndAddedToRepository()
        {
            //Arrange
            var discountCodeGenerator = new DiscountCodeGenerator();
            var sampleDiscount        = discountCodeGenerator.GenerateCodeForSubscriber(_identityProviderMock.Object.Next(), Guid.NewGuid());
            var command = new PlaceOrder
            {
                Id           = Guid.NewGuid(),
                Value        = 100,
                DiscountCode = sampleDiscount.GetCode()
            };
            Order placedOrder = null;

            _discountRepositoryMock.Setup(x => x.FindByCode(It.Is <string>(discountCode => discountCode == sampleDiscount.GetCode()), It.IsAny <CancellationToken>()))
            .ReturnsAsync(sampleDiscount);
            _orderRepositoryMock.Setup(x => x.Add(It.IsAny <Order>(), It.IsAny <CancellationToken>()))
            .Callback <Order, CancellationToken>((order, cancellationToken) => { placedOrder = order; });
            //Act
            await _sut.HandleAsync(command, CancellationToken.None);

            //Assert
            Assert.That(placedOrder.Summary.Value, Is.EqualTo(command.Value));
            Assert.That(placedOrder.Summary.DiscountValue, Is.EqualTo(CalculateDiscount(command.Value, sampleDiscount)));
            Assert.That(placedOrder.Summary.TotalValue, Is.EqualTo(command.Value - CalculateDiscount(command.Value, sampleDiscount)));
        }
        public void When_Make_Then_ReturnsNotEmptyCode()
        {
            //Arrange
            var codeGenerator = new DiscountCodeGenerator();
            //Act
            var discount = codeGenerator.GenerateCodeForSubscriber(Guid.NewGuid(), Guid.NewGuid());

            //Assert
            Assert.That(string.IsNullOrWhiteSpace(discount.Code), Is.False);
        }
        public void When_Make_Then_ReturnsUniqueDiscountCode()
        {
            //Arrange
            var codeGenerator = new DiscountCodeGenerator();
            //Act
            var discount1 = codeGenerator.GenerateCodeForSubscriber(Guid.NewGuid(), Guid.NewGuid());
            var discount2 = codeGenerator.GenerateCodeForSubscriber(Guid.NewGuid(), Guid.NewGuid());

            //Assert
            Assert.That(discount1.Code, Is.Not.EquivalentTo(discount2.Code));
        }