コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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());
        }