public async Task SynchronizeChallenge_ShouldBeOfTypeSynchronizeChallengeResponse() { // 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 challengeRepository = scope.GetRequiredService <IChallengeRepository>(); var challenge = new Challenge( challengeId, new ChallengeName("test"), Game.LeagueOfLegends, BestOf.Five, Entries.Two, new ChallengeTimeline(new UtcNowDateTimeProvider(), ChallengeDuration.FiveDays), new Scoring()); challenge.Register( new Participant( new ParticipantId(), new UserId(), new PlayerId(), new UtcNowDateTimeProvider())); challenge.Register( new Participant( new ParticipantId(), new UserId(), new PlayerId(), new UtcNowDateTimeProvider())); challenge.Start(new UtcNowDateTimeProvider()); challengeRepository.Create(challenge); await challengeRepository.CommitAsync(false); }); var request = new SynchronizeChallengeRequest { ChallengeId = challengeId }; var client = new ChallengeService.ChallengeServiceClient(host.CreateChannel()); // Act var response = await client.SynchronizeChallengeAsync(request); //Assert response.Should().BeOfType <SynchronizeChallengeResponse>(); }
public async Task SynchronizeChallenge_ShouldThrowFailedPreconditionRpcException() { // 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 challengeRepository = scope.GetRequiredService <IChallengeRepository>(); var challenge = new Challenge( challengeId, new ChallengeName("test"), Game.LeagueOfLegends, BestOf.Five, Entries.Eight, new ChallengeTimeline(new UtcNowDateTimeProvider(), ChallengeDuration.FiveDays), new Scoring()); challengeRepository.Create(challenge); await challengeRepository.CommitAsync(false); }); var request = new SynchronizeChallengeRequest { ChallengeId = challengeId }; var client = new ChallengeService.ChallengeServiceClient(host.CreateChannel()); // Act Assert var func = new Func <Task>(async() => await client.SynchronizeChallengeAsync(request)); func.Should().Throw <RpcException>(); }
public async Task SynchronizeChallengesAsync(EnumGame game) { foreach (var challenge in await this.FetchChallengesAsync(game)) { var fetchChallengeMatchesRequest = new FetchChallengeMatchesRequest { Game = game, StartedAt = challenge.Timeline.StartedAt, EndedAt = challenge.Timeline.EndedAt, Participants = { challenge.Participants } }; await foreach (var fetchChallengeMatchesResponse in _gameServiceClient.FetchChallengeMatches(fetchChallengeMatchesRequest) .ResponseStream.ReadAllAsync()) { var snapshotChallengeParticipantRequest = new SnapshotChallengeParticipantRequest { ChallengeId = challenge.Id, GamePlayerId = fetchChallengeMatchesResponse.GamePlayerId, Matches = { fetchChallengeMatchesResponse.Matches } }; await _challengeServiceClient.SnapshotChallengeParticipantAsync(snapshotChallengeParticipantRequest); } var synchronizeChallengeRequest = new SynchronizeChallengeRequest { ChallengeId = challenge.Id }; await _challengeServiceClient.SynchronizeChallengeAsync(synchronizeChallengeRequest); } }
public void SynchronizeChallenge_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(); var request = new SynchronizeChallengeRequest { ChallengeId = new ChallengeId() }; var client = new ChallengeService.ChallengeServiceClient(host.CreateChannel()); // Act Assert var func = new Func <Task>(async() => await client.SynchronizeChallengeAsync(request)); func.Should().Throw <RpcException>(); }
public override async Task <SynchronizeChallengeResponse> SynchronizeChallenge(SynchronizeChallengeRequest request, ServerCallContext context) { var challengeId = request.ChallengeId.ParseEntityId <ChallengeId>(); if (!await _challengeService.ChallengeExistsAsync(challengeId)) { throw context.NotFoundRpcException("Challenge not found."); } var challenge = await _challengeService.FindChallengeAsync(challengeId); var result = await _challengeService.SynchronizeChallengeAsync(challenge, new UtcNowDateTimeProvider()); if (result.IsValid) { var response = new SynchronizeChallengeResponse { Challenge = ChallengeProfile.Map(result.Response) }; return(context.Ok(response)); } throw context.FailedPreconditionRpcException(result); }