public async Task ShouldThrowBetUnknownExceptionIfBetIdUnknown() { var betRepository = new InMemoryBetRepository(); var betId = Guid.NewGuid(); var memberRepository = new InMemoryMemberRepository(); var command = new UpdateWalletMembersCommand(betId); var handler = new UpdateWalletMembersCommandHandler(betRepository, memberRepository); var record = await Record.ExceptionAsync(() => handler.Handle(command, default)); Assert.IsType <BetUnknownException>(record); Assert.Equal($"This bet with id {betId} is unknown", record.Message); }
public async Task ShouldCreateMember() { var memberId = Guid.Parse("01c1da98-b4b7-45dc-8352-c98ece06dab1"); var command = new CreateMemberCommand(memberId, "toto"); var memberRepository = new InMemoryMemberRepository(); var handler = new CreateMemberCommandHandler(memberRepository); await handler.Handle(command, default); var member = await memberRepository.GetByIdAsync(new(Guid.Parse("01c1da98-b4b7-45dc-8352-c98ece06dab1"))); Assert.Equal(memberId, member.Id.Value); Assert.Equal("toto", member.Name); Assert.Equal(1000, member.Wallet); Assert.Collection(member.DomainEvents, x => { Assert.Equal(memberId, (x as MemberCreated).MemberId); }); }
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); }