public async Task CreateChallengeAsync_ShouldBeOfTypeValidationResultWithErrors() { // Arrange TestMock.ChallengePayoutStrategy.Setup(payout => payout.GetChallengePayout(It.IsAny <ChallengePayoutEntries>(), It.IsAny <EntryFee>())).Verifiable(); TestMock.ChallengePayoutFactory.Setup(payout => payout.CreateInstance()).Returns(TestMock.ChallengePayoutStrategy.Object).Verifiable(); var service = new ChallengeService(TestMock.ChallengePayoutFactory.Object, TestMock.ChallengeRepository.Object); var bucket = new ChallengePayoutBucket(ChallengePayoutBucketPrize.Consolation, ChallengePayoutBucketSize.Individual); var buckets = new ChallengePayoutBuckets( new List <ChallengePayoutBucket> { bucket }); var payoutEntries = new ChallengePayoutEntries(buckets); // Act var result = await service.CreateChallengeAsync(new ChallengeId(), payoutEntries, new EntryFee(5000, CurrencyType.Token)); // Assert result.Should().BeOfType <DomainValidationResult <IChallenge> >(); result.Errors.Should().NotBeEmpty(); TestMock.ChallengePayoutStrategy.Verify(payout => payout.GetChallengePayout(It.IsAny <ChallengePayoutEntries>(), It.IsAny <EntryFee>()), Times.Once); TestMock.ChallengePayoutFactory.Verify(payout => payout.CreateInstance(), Times.Once); }
public void GetPayout_WithoutEntries_ShouldBeNull() { // Arrange var payoutStrategy = new DefaultChallengePayoutStrategy(); var buckets = new ChallengePayoutBuckets(new List <ChallengePayoutBucket>()); var payoutEntries = new ChallengePayoutEntries(buckets); // Act var action = new Func <IChallengePayout>(() => payoutStrategy.GetChallengePayout(payoutEntries, new EntryFee(5000, CurrencyType.Token))); // Assert action.Should().Throw <NotSupportedException>(); }
public IChallengePayout GetChallengePayout(ChallengePayoutEntries entries, EntryFee entryFee) { var charts = FileStorage.ChallengePayouts[entries].ToList(); if (charts.IsNullOrEmpty()) { throw new NotSupportedException($"Payout entries value ({entries}) is not supported."); } var prize = entryFee.GetPayoutBucketPrizeOrDefault(); var buckets = new ChallengePayoutBuckets(charts.Select(chart => new ChallengePayoutBucket(prize.Apply(chart), chart.Size))); return(new ChallengePayout(entryFee, buckets)); }
public void GetPayout_WithEntries_ShouldNotBeNull() { // Arrange var payoutStrategy = new DefaultChallengePayoutStrategy(); var bucket = new ChallengePayoutBucket(ChallengePayoutBucketPrize.Consolation, ChallengePayoutBucketSize.Individual); var buckets = new ChallengePayoutBuckets( new List <ChallengePayoutBucket> { bucket }); var payoutEntries = new ChallengePayoutEntries(buckets); // Act var payout = payoutStrategy.GetChallengePayout(payoutEntries, new EntryFee(5000, CurrencyType.Token)); // Assert payout.Should().NotBeNull(); }