public void TestHandleUserNotExist() { var publishedEvents = new List <IEvent>(); var depositServiceMock = new Mock <IAggregateService <DepositAggregate> >(); var accountServiceMock = new Mock <IAggregateService <AccountAggregate> >(); accountServiceMock.Setup(m => m.Load(It.IsAny <Guid>())).Returns(() => new AccountAggregate()); var eventPublisherMock = new Mock <IEventPublisher>(); eventPublisherMock.Setup(m => m.Publish(It.IsAny <IEvent>())).Callback((IEvent e) => publishedEvents.Add(e)); var commandHandler = new CreateDepositCommandHandler(depositServiceMock.Object, accountServiceMock.Object, eventPublisherMock.Object); var accountId = Guid.NewGuid(); ICommand command = new CreateDepositCommand { AccountId = accountId }; commandHandler.Handle(command); Assert.Single(publishedEvents); var publishedEvent = publishedEvents.First(); Assert.True(publishedEvent is ErrorEvent); Assert.Equal("Account not found", ((ErrorEvent)publishedEvent).ErrorMessage); Assert.Equal(JsonSerializer.Serialize(new AccountAggregate()), ((ErrorEvent)publishedEvent).ErrorDataJson); }
public async Task <IActionResult> Deposit(CreateDepositCommand query) { if (!ModelState.IsValid) { return(View(await _mediator.Send(new GetAccountTransferDataQuery { CustomerId = query.CustomerId }))); } else { try { await _mediator.Send(query); TempData["successMessage"] = "Deposit successful"; return(RedirectToAction("Deposit", new { customerId = query.CustomerId })); } catch (Exception ex) { ModelState.AddModelError("", ex.Message); return(View(await _mediator.Send(new GetAccountTransferDataQuery { CustomerId = query.CustomerId }))); } } }
public void TestDepositGuidIsTaken() { var accountId = Guid.NewGuid(); var publishedEvents = new List <IEvent>(); var depositServiceMock = new Mock <IAggregateService <DepositAggregate> >(); var counter = 0; var depositGuid = Guid.Empty; depositServiceMock.Setup(m => m.Load(It.IsAny <Guid>())).Returns((Guid guid) => { var aggregate = new DepositAggregate(); if (counter > 3) { depositGuid = guid; return(aggregate); } counter++; aggregate.Apply(new CreateDepositEvent { ItemGuid = guid }); return(aggregate); }); var accountServiceMock = new Mock <IAggregateService <AccountAggregate> >(); accountServiceMock.Setup(m => m.Load(It.IsAny <Guid>())).Returns(() => new MockAggregate(accountId)); var eventPublisherMock = new Mock <IEventPublisher>(); eventPublisherMock.Setup(m => m.Publish(It.IsAny <IEvent>())).Callback((IEvent e) => publishedEvents.Add(e)); var commandHandler = new CreateDepositCommandHandler(depositServiceMock.Object, accountServiceMock.Object, eventPublisherMock.Object); var command = new CreateDepositCommand { AccountId = accountId }; commandHandler.Handle(command); Assert.Equal(2, publishedEvents.Count); var first = publishedEvents[0]; Assert.True(first is CreateDepositEvent); var createDepositEvent = (CreateDepositEvent)first; Assert.NotEqual(Guid.Empty, depositGuid); Assert.Equal(depositGuid, createDepositEvent.ItemGuid); Assert.Equal(Guid.Empty, publishedEvents[0].EventGuid); Assert.Equal(Guid.Empty, publishedEvents[1].EventGuid); }
public void TestCanHandle() { var depositServiceMock = new Mock <IAggregateService <DepositAggregate> >(); var accountServiceMock = new Mock <IAggregateService <AccountAggregate> >(); var eventPublisherMock = new Mock <IEventPublisher>(); var commandHandler = new CreateDepositCommandHandler(depositServiceMock.Object, accountServiceMock.Object, eventPublisherMock.Object); var accountId = Guid.Empty; ICommand command = new CreateDepositCommand { AccountId = accountId }; var canHandle = commandHandler.CanHandle(command); Assert.True(canHandle); }
public async Task <ActionResult <bool> > CreateDepositAsync([FromBody] CreateDepositCommand createWalletCommand) { _logger.LogInformation( "----- Sending command: {CommandName} - {IdProperty}: {CommandId} ({@Command})", createWalletCommand.GetGenericTypeName(), nameof(createWalletCommand.UserId), createWalletCommand.UserId, createWalletCommand); var result = await Mediator.Send(createWalletCommand); if (result) { return(Ok()); } return(StatusCode(500, new { error = "Deposit can't be created." })); }
public void TestHandle() { var accountId = Guid.NewGuid(); var publishedEvents = new List <IEvent>(); var depositServiceMock = new Mock <IAggregateService <DepositAggregate> >(); depositServiceMock.Setup(m => m.Load(It.IsAny <Guid>())).Returns((Guid guid) => new DepositAggregate()); var accountServiceMock = new Mock <IAggregateService <AccountAggregate> >(); accountServiceMock.Setup(m => m.Load(It.IsAny <Guid>())).Returns(() => new MockAggregate(accountId)); var eventPublisherMock = new Mock <IEventPublisher>(); eventPublisherMock.Setup(m => m.Publish(It.IsAny <IEvent>())).Callback((IEvent e) => publishedEvents.Add(e)); var commandHandler = new CreateDepositCommandHandler(depositServiceMock.Object, accountServiceMock.Object, eventPublisherMock.Object); var command = new CreateDepositCommand { AccountId = accountId }; commandHandler.Handle(command); Assert.Equal(2, publishedEvents.Count); var first = publishedEvents[0]; Assert.True(first is CreateDepositEvent); var createDepositEvent = (CreateDepositEvent)first; var second = publishedEvents[1]; Assert.True(second is AddDepositToAccountEvent); var addDepositToAccountEvent = (AddDepositToAccountEvent)second; Assert.Equal(createDepositEvent.ItemGuid, addDepositToAccountEvent.DepositId); Assert.Equal(createDepositEvent.AccountGuid, addDepositToAccountEvent.ItemGuid); }
public void TestHandleEmptyGuid() { var publishedEvents = new List <IEvent>(); var depositServiceMock = new Mock <IAggregateService <DepositAggregate> >(); var accountServiceMock = new Mock <IAggregateService <AccountAggregate> >(); var eventPublisherMock = new Mock <IEventPublisher>(); eventPublisherMock.Setup(m => m.Publish(It.IsAny <IEvent>())).Callback((IEvent e) => publishedEvents.Add(e)); var commandHandler = new CreateDepositCommandHandler(depositServiceMock.Object, accountServiceMock.Object, eventPublisherMock.Object); var accountId = Guid.Empty; ICommand command = new CreateDepositCommand { AccountId = accountId }; commandHandler.Handle(command); Assert.Single(publishedEvents); var publishedEvent = publishedEvents.First(); Assert.True(publishedEvent is ErrorEvent); Assert.Equal("Account Guid empty", ((ErrorEvent)publishedEvent).ErrorMessage); Assert.Equal("{\"AccountId\":\"" + Guid.Empty + "\"}", ((ErrorEvent)publishedEvent).ErrorDataJson); }
public CommandResult CreateDeposit(CreateDepositCommand command) { var handler = new DepositCommandHandler(); return(handler.Handle(command)); }