示例#1
0
        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);
        }
示例#2
0
        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
                    })));
                }
            }
        }
示例#3
0
        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);
        }
示例#4
0
        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);
        }
示例#5
0
        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." }));
        }
示例#6
0
        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);
        }
示例#7
0
        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);
        }
示例#8
0
        public CommandResult CreateDeposit(CreateDepositCommand command)
        {
            var handler = new DepositCommandHandler();

            return(handler.Handle(command));
        }