public async Task FindChallengePayout_ShouldThrowNotFoundRpcException() { // Arrange var userId = new UserId(); const string email = "*****@*****.**"; var claims = new[] { new Claim(JwtClaimTypes.Subject, userId.ToString()), new Claim(JwtClaimTypes.Email, email) }; var host = TestHost.WithClaimsFromBearerAuthentication(claims); host.Server.CleanupDbContext(); await host.Server.UsingScopeAsync( async scope => { var accountService = scope.GetRequiredService <IAccountService>(); await accountService.CreateAccountAsync(userId); }); var request = new FindChallengePayoutRequest { ChallengeId = new ChallengeId() }; var client = new CashierService.CashierServiceClient(host.CreateChannel()); // Act Assert var func = new Func <Task>(async() => await client.FindChallengePayoutAsync(request)); func.Should().Throw <RpcException>(); }
public override async Task <FindChallengePayoutResponse> FindChallengePayout(FindChallengePayoutRequest request, ServerCallContext context) { var challenge = await _challengeQuery.FindChallengeAsync(request.ChallengeId.ParseEntityId <ChallengeId>()); if (challenge == null) { throw context.NotFoundRpcException("Challenge not found."); } var response = new FindChallengePayoutResponse { Payout = _mapper.Map <ChallengePayoutDto>(challenge) }; return(context.Ok(response)); }
public async Task <IActionResult> FindChallengeAsync(string challengeId) { var fetchDoxatagsResponse = await _identityServiceClient.FetchDoxatagsAsync(new FetchDoxatagsRequest()); var findChallengePayoutRequest = new FindChallengePayoutRequest { ChallengeId = challengeId }; var findChallengePayoutResponse = await _cashierServiceClient.FindChallengePayoutAsync(findChallengePayoutRequest); var findChallengeRequest = new FindChallengeRequest { ChallengeId = challengeId }; var findChallengeResponse = await _challengesServiceClient.FindChallengeAsync(findChallengeRequest); return(this.Ok(ChallengeMapper.Map(findChallengeResponse.Challenge, findChallengePayoutResponse.Payout, fetchDoxatagsResponse.Doxatags))); }
public async Task FindChallengePayout_ShouldBeOfTypeFindChallengePayoutResponse() { // Arrange var userId = new UserId(); const string email = "*****@*****.**"; var challengeId = new ChallengeId(); var claims = new[] { new Claim(JwtClaimTypes.Subject, userId.ToString()), new Claim(JwtClaimTypes.Email, email) }; var host = TestHost.WithClaimsFromBearerAuthentication(claims); host.Server.CleanupDbContext(); await host.Server.UsingScopeAsync( async scope => { var accountService = scope.GetRequiredService <IAccountService>(); var challengeService = scope.GetRequiredService <IChallengeService>(); await accountService.CreateAccountAsync(userId); await challengeService.CreateChallengeAsync(challengeId, ChallengePayoutEntries.Fifteen, new EntryFee(20, CurrencyType.Money)); }); var request = new FindChallengePayoutRequest { ChallengeId = challengeId }; var client = new CashierService.CashierServiceClient(host.CreateChannel()); // Act var response = await client.FindChallengePayoutAsync(request); //Assert response.Should().BeOfType <FindChallengePayoutResponse>(); }
public async Task <IActionResult> RegisterChallengeParticipantAsync(string challengeId) { var participantId = new ParticipantId(); var findChallengeRequest = new FindChallengeRequest { ChallengeId = challengeId }; var findChallengeResponse = await _challengesServiceClient.FindChallengeAsync(findChallengeRequest); var findPlayerGameCredentialRequest = new FindPlayerGameCredentialRequest { Game = findChallengeResponse.Challenge.Game }; var findPlayerGameCredentialResponse = await _gameServiceClient.FindPlayerGameCredentialAsync(findPlayerGameCredentialRequest); var fetchDoxatagsRequest = new FetchDoxatagsRequest(); var fetchDoxatagsResponse = await _identityServiceClient.FetchDoxatagsAsync(fetchDoxatagsRequest); var findChallengePayoutRequest = new FindChallengePayoutRequest { ChallengeId = challengeId }; var challengePayoutResponse = await _cashierServiceClient.FindChallengePayoutAsync(findChallengePayoutRequest); var createTransactionRequest = new CreateTransactionRequest { Custom = new CustomTransaction { Type = EnumTransactionType.Charge, Currency = challengePayoutResponse.Payout.EntryFee }, Metadata = { new Dictionary <string, string> { [nameof(ChallengeId)] = challengeId, [nameof(ParticipantId)] = participantId } } }; var createTransactionResponse = await _cashierServiceClient.CreateTransactionAsync(createTransactionRequest); try { var registerChallengeParticipantRequest = new RegisterChallengeParticipantRequest { ChallengeId = challengeId, GamePlayerId = findPlayerGameCredentialResponse.Credential.PlayerId, ParticipantId = participantId }; var participant = await _challengesServiceClient.RegisterChallengeParticipantAsync(registerChallengeParticipantRequest); return(this.Ok(ChallengeMapper.Map(challengePayoutResponse.Payout.ChallengeId, participant.Participant, fetchDoxatagsResponse.Doxatags))); } catch (RpcException exception) { var deleteTransactionRequest = new DeleteTransactionRequest { TransactionId = createTransactionResponse.Transaction.Id }; await _cashierServiceClient.DeleteTransactionAsync(deleteTransactionRequest); throw exception.Capture(); } }