Ejemplo n.º 1
0
        public async Task UpdatesCustomerOrderStatusToPaidAfterTheReceivingOfOrderPaidNotification()
        {
            //Arrange
            var customerRepository       = new CustomerRepository(_dbContext);
            var suitAlterationRepository = new SuitAlterationRepository(_dbContext);
            var customer = CreateNewCustomer();
            await customerRepository.AddAsync(customer);

            customer.PlaceOrder(5, 5, 5, 5);
            await _unitOfWork.CommitAsync(CancellationToken.None);

            //Pre-assert
            var order = customer.SuitAlterations.Single();

            order.Status.Should().Be(SuitAlterationStatus.Created);

            //Act
            var markOrderAsPaidCommandHandler = new MarkOrderAsPaidCommandHandler(suitAlterationRepository);
            await markOrderAsPaidCommandHandler.Handle(new MarkOrderAsPaidCommand(order.Id), CancellationToken.None);

            await _unitOfWork.CommitAsync(CancellationToken.None);

            //Assert
            SuitAlteration paidOrder = await suitAlterationRepository.GetByIdAsync(order.Id);

            order.DomainEvents.Should().ContainEquivalentOf(new OrderPaidDomainEvent(order.Id));
            paidOrder.Status.Should().Be(SuitAlterationStatus.Paid);
            order.DomainEvents.Count.Should().Be(2);
        }
Ejemplo n.º 2
0
        public async Task ThrowsExceptionWhenOrderStatusIsPaidAndWeTriesToSetTheSameStatusAgain()
        {
            //Arrange
            var customerRepository       = new CustomerRepository(_dbContext);
            var suitAlterationRepository = new SuitAlterationRepository(_dbContext);

            var customer = CreateNewCustomer();
            await customerRepository.AddAsync(customer);

            customer.PlaceOrder(5, 5, 5, 5);
            await _unitOfWork.CommitAsync(CancellationToken.None);

            //Act
            var order = customer.SuitAlterations.Single();
            var markOrderAsPaidCommandHandler = new MarkOrderAsPaidCommandHandler(suitAlterationRepository);
            await markOrderAsPaidCommandHandler.Handle(new MarkOrderAsPaidCommand(order.Id), CancellationToken.None);

            await _unitOfWork.CommitAsync(CancellationToken.None);

            //Pre-assert
            order.DomainEvents.Should().ContainEquivalentOf(new OrderPaidDomainEvent(order.Id));
            //imagine that we got OrderPaidNotification second time
            Func <Task> action = async() => await markOrderAsPaidCommandHandler.Handle(new MarkOrderAsPaidCommand(order.Id), CancellationToken.None);

            //Assert
            action.Should().Throw <BusinessRuleValidationException>().WithMessage(
                $"Order has inconsistent status to be marked as paid. Status - {order.Status.ToString()}");
            order.DomainEvents.Count.Should().Be(2);
        }
Ejemplo n.º 3
0
        public void ThrowsExceptionWhenEntityIdNotFound()
        {
            //Arrange
            var suitAlterationRepository = new SuitAlterationRepository(_dbContext);
            var orderId = new SuitAlterationId(Guid.NewGuid());

            //Act
            Func <Task> action = async() => await suitAlterationRepository.GetByIdAsync(orderId);

            //Assert
            action.Should().Throw <EntityNotFoundException>()
            .WithMessage($"Entity with id={orderId} not found");
        }
Ejemplo n.º 4
0
        public async Task GetsExpectedSuitAlterationByCustomerId()
        {
            //Arrange
            var suitAlterationRepository = new SuitAlterationRepository(_dbContext);
            var customerRepository       = new CustomerRepository(_dbContext);

            var expectedCustomer = await RegisterCustomer();

            expectedCustomer.PlaceOrder(5, 5, 5, 5);

            var anotherCustomer = await RegisterCustomer();

            anotherCustomer.PlaceOrder(1, 1, 1, 1);
            await _unitOfWork.CommitAsync(CancellationToken.None);

            var expectedOrder = expectedCustomer.SuitAlterations.Single();
            SuitAlterationDto expectedCustomerSuitAlteration = null;

            _mapperMock.Setup(x => x.Map <SuitAlterationDto>(expectedOrder))
            .Returns((SuitAlteration suitAlteration) =>
            {
                expectedCustomerSuitAlteration = new SuitAlterationDto()
                {
                    Id = suitAlteration.Id.Value
                };
                return(expectedCustomerSuitAlteration);
            });

            //Act
            var customerOrdersQueryHandler = new GetCustomerSuitAlterationsQueryHandler(suitAlterationRepository, _mapperMock.Object);
            IReadOnlyList <SuitAlterationDto> customerSuitAlterations =
                await customerOrdersQueryHandler.Handle(new GetCustomerSuitAlterationsQuery(expectedCustomer.Id.Value), CancellationToken.None);

            //Assert
            customerSuitAlterations.Should().ContainSingle().Which.Id.Should().Be(expectedCustomerSuitAlteration.Id);

            async Task <Customer> RegisterCustomer()
            {
                var customer = CreateNewCustomer();
                await customerRepository.AddAsync(customer);

                return(customer);
            }
        }
Ejemplo n.º 5
0
        public async Task SuccessfullyPlacesCustomerOrderForNewSuitAlteration()
        {
            //Arrange
            var customerRepository = new CustomerRepository(_dbContext);
            var customer           = CreateNewCustomer();
            await customerRepository.AddAsync(customer);

            await _unitOfWork.CommitAsync(CancellationToken.None);

            var suitAlterationRepository = new SuitAlterationRepository(_dbContext);
            var customerOrders           = await LoadCustomerOrders();

            //Pre-assert
            customerOrders.Should().BeEmpty();

            //Act
            var placeCustomerOrderCommandHandler = new PlaceCustomerOrderCommandHandler(customerRepository);
            await placeCustomerOrderCommandHandler.Handle(new PlaceCustomerOrderCommand(5,
                                                                                        5,
                                                                                        5,
                                                                                        5,
                                                                                        customer.Id.Value), CancellationToken.None);

            await _unitOfWork.CommitAsync(CancellationToken.None);

            //Assert
            customerOrders = await LoadCustomerOrders();

            customerOrders.Should().ContainSingle();
            var createdOrder = customerOrders.Single();

            createdOrder.DomainEvents.Should().ContainSingle().And.BeEquivalentTo(new OrderPlacedDomainEvent(createdOrder.Id));
            createdOrder.Status.Should().Be(SuitAlterationStatus.Created);
            customer.SuitAlterations.Should().Contain(createdOrder);

            async Task <IReadOnlyList <SuitAlteration> > LoadCustomerOrders()
            {
                return(await suitAlterationRepository.GetByCustomerIdAsync(customer.Id));
            }
        }