public async Task <IActionResult> LaunchBet([FromBody] LaunchBetInput input)
        {
            var command = new LaunchBetCommand(input.BetId, input.EndDate, input.Coins, input.Description);
            await _module.ExecuteCommandAsync(command);

            return(Ok());
        }
Esempio n. 2
0
        public async Task ShouldCreateBet()
        {
            //arrange
            IDateTimeProvider dtNow  = new FakeDateTimeProvider(new DateTime(2021, 5, 6, 0, 0, 0));
            var endDate              = new DateTime(2021, 5, 7, 0, 0, 0);
            var command              = new LaunchBetCommand(_betId, endDate, coins, description);
            var domainEventsListener = new DomainEventsAccessor();
            var betRepository        = new InMemoryBetRepository(domainEventsListener);
            var member           = new Member(new MemberId(_creatorId), "name", 25);
            var memberRepository = new InMemoryMemberRepository(new List <Member>()
            {
                member
            });
            var      handler     = new LaunchBetCommandHandler(betRepository, memberRepository, new InMemoryAuthenticationGateway(true, _creatorId), dtNow);
            BetState expectedBet = new(_betId, member, endDate, description, coins, dtNow.Now, new List <AnswerState>(), null, null);

            //act
            await handler.Handle(command, default);

            //assert
            Bet actualBet = await betRepository.GetByIdAsync(new(_betId));

            IDomainEvent domainEvent = domainEventsListener.GetDomainEvents()
                                       .SingleOrDefault(x => x.GetType() == typeof(BetCreated));

            Assert.Equal(expectedBet.BetId, actualBet.State.BetId);
            Assert.Equal(expectedBet.Description, actualBet.State.Description);
            Assert.Equal(expectedBet.EndDate, actualBet.State.EndDate);
            Assert.Equal(expectedBet.Creator.Id, actualBet.State.Creator.Id);
            Assert.Equal(expectedBet.Creator.Name, actualBet.State.Creator.Name);
            Assert.Equal(expectedBet.Creator.Wallet, actualBet.State.Creator.Wallet);
            Assert.Equal(expectedBet.Coins, actualBet.State.Coins);
            Assert.Equal(expectedBet.CreationDate, actualBet.State.CreationDate);
            Assert.False(actualBet.IsClosed());
            Assert.True(expectedBet.EndDate > actualBet.State.CreationDate);
            Assert.True(actualBet.GetEndDateToAnswer().CompareTo(new DateTime(2021, 5, 6, 6, 0, 0)) == 0);
            Assert.NotNull(domainEvent);
            Assert.Equal(_betId, ((BetCreated)domainEvent).BetId.Value);
            Assert.Equal(_creatorId, ((BetCreated)domainEvent).CreatorId.Value);
        }