public async Task HandleAsync_WhenChallengeClosedIntegrationEventIsValid_ShouldBeCompletedTask() { // Arrange TestMock.UserService.Setup(userService => userService.SendEmailAsync(It.IsAny <UserId>(), It.IsAny <string>(), It.IsAny <object>())) .Returns(Task.CompletedTask) .Verifiable(); var handler = new ChallengeClosedIntegrationEventHandler(TestMock.UserService.Object, TestMock.SendgridOptions.Object); var integrationEvent = new ChallengeClosedIntegrationEvent { ChallengeId = new ChallengeId(), PayoutPrizes = { { new UserId().ToString(), new CurrencyDto { Amount = 50.0m, Type = EnumCurrencyType.Money } } } }; // Act await handler.HandleAsync(integrationEvent); // Assert TestMock.UserService.Verify(userService => userService.SendEmailAsync(It.IsAny <UserId>(), It.IsAny <string>(), It.IsAny <object>()), Times.Once); }
public static async Task PublishChallengeClosedIntegrationEventAsync( this IServiceBusPublisher publisher, ChallengeId challengeId, ChallengeParticipantPayouts payouts ) { var integrationEvent = new ChallengeClosedIntegrationEvent { ChallengeId = challengeId, PayoutPrizes = { payouts.ToDictionary( payoutPrize => payoutPrize.Key.ToString(), payoutPrize => new CurrencyDto { Amount = payoutPrize.Value.Amount, Type = payoutPrize.Value.Type.ToEnum <EnumCurrencyType>() }) } }; await publisher.PublishAsync(integrationEvent); }
public async Task HandleAsync_WhenChallengeClosedIntegrationEventIsValid_ShouldBeCompletedTask() { // Arrange var challengeId = new ChallengeId(); var scoring = new Scoring { { new StatName(Game.LeagueOfLegends), new StatWeighting(50.0f) } }; var challenge = new Challenge( challengeId, new ChallengeName("test"), Game.LeagueOfLegends, BestOf.Five, Entries.Four, new ChallengeTimeline(new DateTimeProvider(DateTime.Now.AddDays(-1)), ChallengeDuration.OneDay), scoring); var mockLogger = new MockLogger <ChallengeClosedIntegrationEventHandler>(); TestMock.ChallengeService.Setup(challengeService => challengeService.ChallengeExistsAsync(It.IsAny <ChallengeId>())).ReturnsAsync(true).Verifiable(); TestMock.ChallengeService.Setup(challengeService => challengeService.FindChallengeAsync(It.IsAny <ChallengeId>())) .ReturnsAsync(challenge) .Verifiable(); TestMock.ChallengeService .Setup( challengeService => challengeService.CloseChallengeAsync( It.IsAny <Challenge>(), It.IsAny <IDateTimeProvider>(), It.IsAny <CancellationToken>())) .ReturnsAsync(new DomainValidationResult <IChallenge>()) .Verifiable(); var handler = new ChallengeClosedIntegrationEventHandler(TestMock.ChallengeService.Object, mockLogger.Object); var integrationEvent = new ChallengeClosedIntegrationEvent { ChallengeId = new ChallengeId(), PayoutPrizes = { { "test1", new CurrencyDto { Amount = 50.0m, Type = EnumCurrencyType.Money } } } }; // Act await handler.HandleAsync(integrationEvent); // Assert TestMock.ChallengeService.Verify(challengeService => challengeService.ChallengeExistsAsync(It.IsAny <ChallengeId>()), Times.Once); TestMock.ChallengeService.Verify(challengeService => challengeService.FindChallengeAsync(It.IsAny <ChallengeId>()), Times.Once); TestMock.ChallengeService.Verify( challengeService => challengeService.CloseChallengeAsync(It.IsAny <Challenge>(), It.IsAny <IDateTimeProvider>(), It.IsAny <CancellationToken>()), Times.Once); mockLogger.Verify(Times.Once()); }