public async Task Results_ShouldCall_CorrectUrl() { var guid = Guid.NewGuid(); var sessionId = "Abc123"; var url = $"{ApiRoot}/result/{sessionId}/short"; var response = new ResultsResponse { SessionId = sessionId }; _httpService.GetString(url, guid).Returns(Task.FromResult(JsonConvert.SerializeObject(response))); var result = await _api.Results(sessionId, guid); Assert.Equal(response.SessionId, result.SessionId); }
private IActionResult ReturnResultsView(ResultsResponse resultsResponse, string jobCategory, string sessionId) { var model = new ResultsViewModel { SessionId = sessionId, Code = SaveProgressController.GetDisplayCode(sessionId.Split("-")[1]), AssessmentType = resultsResponse.AssessmentType, JobCategories = ReOrderWithFirst(resultsResponse.JobCategories, jobCategory), JobFamilyCount = resultsResponse.JobFamilyCount, JobFamilyMoreCount = resultsResponse.JobFamilyMoreCount, Traits = resultsResponse.Traits, UseFilteringQuestions = _appSettings.UseFilteringQuestions, JobProfiles = resultsResponse.JobProfiles, WhatYouToldUs = resultsResponse.WhatYouToldUs, ExploreCareersBaseUrl = _appSettings.ExploreCareersBaseUrl }; return(View("ResultsForJobCategory", model)); }
public static async Task <HttpResponseMessage> Run( [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "result/{sessionId}/{jobCategory}")] HttpRequest req, string sessionId, string jobCategory, ILogger log, [Inject] IHttpRequestHelper httpRequestHelper, [Inject] IHttpResponseMessageHelper httpResponseMessageHelper, [Inject] IUserSessionRepository userSessionRepository, [Inject] IJobProfileRepository jobProfileRepository) { try { var correlationId = httpRequestHelper.GetDssCorrelationId(req); if (string.IsNullOrEmpty(correlationId)) { log.LogInformation("Unable to locate 'DssCorrelationId' in request header"); } if (!Guid.TryParse(correlationId, out var correlationGuid)) { log.LogInformation("Unable to parse 'DssCorrelationId' to a Guid"); correlationGuid = Guid.NewGuid(); } if (string.IsNullOrEmpty(sessionId)) { log.LogInformation($"Correlation Id: {correlationId} - Session Id not supplied"); return(httpResponseMessageHelper.BadRequest()); } var userSession = await userSessionRepository.GetUserSession(sessionId); if (userSession == null) { log.LogInformation($"Correlation Id: {correlationId} - Session Id does not exist {sessionId}"); return(httpResponseMessageHelper.NoContent()); } if (userSession.ResultData == null) { log.LogInformation($"Correlation Id: {correlationId} - Result data does not yet exist for session {userSession.PrimaryKey}"); return(httpResponseMessageHelper.BadRequest()); } var traits = userSession.ResultData.Traits; int traitsTake = (traits.Length > 3 && traits[2].TotalScore == traits[3].TotalScore) ? 4 : 3; var jobFamilies = userSession.ResultData.JobCategories; if (!jobCategory.EqualsIgnoreCase("short")) { jobCategory = JobCategoryHelper.GetCode(jobCategory); } var suggestedJobProfiles = new List <JobProfileResult>(); foreach (var category in jobFamilies) { if (category.FilterAssessmentResult == null) { continue; } var categoryProfiles = new List <JobProfileResult>(); if (category.TotalQuestions == 0) { // Build the list of job profiles var jobProfiles = await jobProfileRepository.JobProfilesForJobFamily(category.JobCategoryName); var profilesSet = category.FilterAssessmentResult.SuggestedJobProfiles.ToHashSet(StringComparer.InvariantCultureIgnoreCase); foreach (var jobProfile in jobProfiles.Where(p => (p.JobProfileCategories == null || p.JobProfileCategories.Contains(category.JobCategoryName, StringComparer.InvariantCultureIgnoreCase)) && profilesSet.Contains(p.Title)) ) { categoryProfiles.Add(new JobProfileResult() { CareerPathAndProgression = jobProfile.CareerPathAndProgression, Overview = jobProfile.Overview, SalaryExperienced = jobProfile.SalaryExperienced, SalaryStarter = jobProfile.SalaryStarter, JobCategory = category.JobCategoryName, SocCode = jobProfile.SocCode, Title = jobProfile.Title, UrlName = jobProfile.UrlName, TypicalHours = jobProfile.TypicalHours, TypicalHoursPeriod = String.Join("/", jobProfile.WorkingHoursDetails), ShiftPattern = String.Join("/", jobProfile.WorkingPattern), ShiftPatternPeriod = String.Join("/", jobProfile.WorkingPatternDetails), WYDDayToDayTasks = jobProfile.WYDDayToDayTasks }); } } category.ResultsShown = category.ResultsShown || category.JobCategoryCode.EqualsIgnoreCase(jobCategory) || (category.TotalQuestions == 0 && (categoryProfiles.Count == 0)); suggestedJobProfiles.AddRange(categoryProfiles); } var model = new ResultsResponse() { AssessmentType = userSession.AssessmentType, SessionId = userSession.UserSessionId, JobFamilyCount = userSession.ResultData.JobCategories.Length, JobFamilyMoreCount = userSession.ResultData.JobCategories.Length - 3, Traits = traits.Take(traitsTake).Select(x => x.TraitText).ToArray(), JobCategories = jobFamilies, JobProfiles = suggestedJobProfiles.ToArray(), WhatYouToldUs = userSession.ResultData?.JobCategories.SelectMany(r => r.FilterAssessmentResult?.WhatYouToldUs ?? new string[] { }).Distinct().ToArray() ?? new string[] { } }; await userSessionRepository.UpdateUserSession(userSession); return(httpResponseMessageHelper.Ok(JsonConvert.SerializeObject(model))); } catch (Exception ex) { log.LogError(ex, "Fatal exception {message}", ex.ToString()); return(new HttpResponseMessage { StatusCode = HttpStatusCode.InternalServerError }); } }
public static ResultsResponse GetResultsForWeek(int week, int year) { var result = new ResultsResponse(); var resultRows = new List <ResultsRow>(); var users = UserRepo.GetUsers(); var games = GameRepo.GetGamesForWeek(week, year); var teams = TeamRepo.GetTeams(); var matchups = ScheduleRepo.GetMatchupsForWeek(week, year); foreach (var game in games) { game.HomeTeam = teams.GetValueOrDefault(game.HomeId); game.AwayTeam = teams.GetValueOrDefault(game.AwayId); game.DateTime = matchups.Where(x => x.HomeTeamID == game.HomeId).Select(x => x.DateTime).FirstOrDefault(); game.Day = matchups.Where(x => x.HomeTeamID == game.HomeId).Select(x => x.Day).FirstOrDefault(); if (game.Outcome == "Home") { game.HomeTeam.Outcome = "Win"; game.AwayTeam.Outcome = "Lose"; } else if (game.Outcome == "Away") { game.AwayTeam.Outcome = "Win"; game.HomeTeam.Outcome = "Lose"; } } foreach (var user in users) { if (user.Picks != null) { var pick = user.Picks.Where(x => x.WeekNum == week && x.Year == year).FirstOrDefault(); if (pick != null) { var prevPick = new Pick(); if (week == 1) { prevPick = pick; } else { prevPick = user.Picks.Where(x => x.WeekNum == week - 1 && x.Year == year).FirstOrDefault(); } var userTeams = new List <Team>(); foreach (var game in pick.Winners) { userTeams.Add(teams[game]); } user.Password = ""; user.Picks = null; resultRows.Add(new ResultsRow() { BestBetId = pick.BestBet, Rank = prevPick.Rank, Teams = userTeams, User = user }); } } } result.Rows = resultRows.OrderBy(x => x.Rank).ToList(); result.Games = games; return(result); }
private void UpdateClients(Lee game, dynamic audience = null) { audience = audience ?? Clients.Group(game.Id); var playerId = Context.User.Identity.GetUserId(); switch (game.State) { case LeeState.WaitingForPlayers: //TODO: Determin who the admin is instead of sending true var lobbyResponse = new GameLobbyResponse { GameId = game.Id, Names = game.PlayerGames.Select(pg => pg.Name).ToArray(), RoundNumber = game.CurrentRoundNum }; foreach (var player in game.PlayerGames) { lobbyResponse.Admin = player.PlayerId == game.Admin; Clients.Group(UserPrefix + player.PlayerId).DisplayLobby(lobbyResponse); } break; case LeeState.QuestionAndAnswer: var playerInputAnswer = game.CurrentRound.PlayerInputs.FirstOrDefault(pi => pi.PlayerId == playerId); if (string.IsNullOrEmpty(playerInputAnswer.Answer)) { var questionResponse = new QuestionResponse { Question = game.CurrentRound.Question, GameId = game.Id, RoundNumber = game.CurrentRoundNum }; audience.DisplayQuestion(questionResponse); } else { var playersReady = game.CurrentRound.PlayerInputs.Select(p => new ReadyStatus { Name = p.Name, Status = string.IsNullOrEmpty(p.Answer) ? "Not Answered" : "Answered" }).ToArray(); ; audience.DisplayWaiting(new WaitingResponse { Players = playersReady, GameId = game.Id, RoundNumber = game.CurrentRoundNum }); } break; case LeeState.Vote: var playerInputVote = game.CurrentRound.PlayerInputs.FirstOrDefault(pi => pi.PlayerId == playerId); if (string.IsNullOrEmpty(playerInputVote.Vote)) { var answers = game.CurrentRound.PlayerInputsShuffled.Select(pi => new PlayerAnswer { PlayerId = pi.PlayerId, Answer = pi.Answer }).ToArray(); audience.DisplayVote(new VoteResponse { PlayerAnswers = answers, GameId = game.Id, RoundNumber = game.CurrentRoundNum, Question = game.CurrentRound.Question }); } else { var playersReady = game.CurrentRound.PlayerInputs.Select(p => new ReadyStatus { Name = p.Name, Status = string.IsNullOrEmpty(p.Vote) ? "Not Voted" : "Voted" }).ToArray(); audience.DisplayWaiting(new WaitingResponse { Players = playersReady, GameId = game.Id, RoundNumber = game.CurrentRoundNum }); } break; case LeeState.Results: case LeeState.End: var voteResponse = new ResultsResponse { PlayerGames = game.PlayerGames.ToArray(), GameId = game.Id, PlayerInputs = game.CurrentRound.PlayerInputs.ToArray(), RoundNumber = game.CurrentRoundNum }; foreach (var resultPlayer in game.PlayerGames) { voteResponse.Admin = resultPlayer.PlayerId == game.Admin; if (game.State == LeeState.Results) Clients.Group(UserPrefix + resultPlayer.PlayerId).DisplayResults(voteResponse); if (game.State == LeeState.End) audience.DisplayEndOfGame(voteResponse); } break; default: break; } }