public async Task <Result <EntityId> > Handle(OpenBankAccountCommand command)
        {
            var newBankAccount = new BankAccount();

            newBankAccount.Open(command.Name);

            await entityStore.Save(newBankAccount);

            return(Result <EntityId> .Ok(newBankAccount.Id));
        }
        public async void WhenAOpenAccountCommandIsSentOnTheCommandBus_ThenTheCorrectHandlerShouldBeCalled()
        {
            var command = new OpenBankAccountCommand
            {
                Name = "Jane Doe"
            };

            await commandBus.Handle(command);

            mockOpenBankAccountHandler.Verify(mock => mock.Handle(command));
        }
        public async void ShouldOpenBankAccountAndSaveEntity()
        {
            var entityStore = new Mock <IEntityStore>();
            var handler     = new OpenBankAccountHandler(entityStore.Object);
            var command     = new OpenBankAccountCommand
            {
                Name = "Bob Smith"
            };

            await handler.Handle(command);

            entityStore.Verify(m => m.Save(It.IsAny <BankAccount>()));
        }
        public async void ShouldReturnAccountIdOnSuccess()
        {
            var entityStore = new Mock <IEntityStore>();
            var handler     = new OpenBankAccountHandler(entityStore.Object);
            var command     = new OpenBankAccountCommand
            {
                Name = "Jane Smith"
            };

            var result = await handler.Handle(command);

            result.Success.Should().Be(true);
            result.Value.Value.GetType().Should().Be(typeof(Guid));
        }
        public async Task <IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Function, "post", Route = "account")] HttpRequest req,
            ILogger log)
        {
            var validationResult = await req.ValidateRequest <CreateAccountRequest, CreateAccountRequestValidator>();

            if (!validationResult.IsValid)
            {
                log.LogInformation("Invalid request.");
                return(validationResult.ToBadRequest());
            }

            var validatedRequest = validationResult.Value;

            var command = new OpenBankAccountCommand
            {
                Name = validatedRequest.Name
            };

            var result = await commandBus.Handle(command);

            return(new OkObjectResult(new CreateAccountResponse(result.Value.Value)));
        }