public async void Given_null_answer_for_FaceToNames_it_should_return_400_and_warn_about_answer()
        {
            ChallengeAnswer answer     = null;
            var             logMessage = string.Format(ErrorMessages.ValueIsEmpty, nameof(answer));
            var             controller = CreateController();
            var             result     = await controller.FaceToNamesChallenge(answer).ConfigureAwait(false);

            Verify400Result(result, logMessage);
        }
        private ChallengeAnswerRequest(ChallengeAnswer answer)
            : base("challenge")
        {
            Answer = answer;

            // Have to reproduce base properties
            // since this class is a dictionary
            _fieldValues[nameof(Resource)] = base.Resource;

            foreach (var field in answer.GetFields())
            {
                _fieldValues[field] = answer[field];
            }
        }
Beispiel #3
0
        private (bool, string) ValidateAnswer(ChallengeAnswer answer)
        {
            if (answer == null)
            {
                return(false, BuildErrorMessage(nameof(answer)));
            }

            if (answer.ChallengeId < 1)
            {
                return(false, BuildErrorMessage(nameof(answer.ChallengeId)));
            }

            if (string.IsNullOrEmpty(answer.GivenAnswer))
            {
                return(false, BuildErrorMessage(nameof(answer.GivenAnswer)));
            }

            return(true, null);
        }
Beispiel #4
0
        public async Task <ChallengeAnswerValidationResult> IsAnswerValidAsync(ChallengeAnswer answer)
        {
            var challenge = await _gameRepository.GetChallenge(answer.ChallengeId).ConfigureAwait(false);

            if (challenge == null)
            {
                return(new ChallengeAnswerValidationResult(GameConstants.NoChallengeValidationResult));
            }
            if (challenge.Solved)
            {
                return(new ChallengeAnswerValidationResult(GameConstants.ChallengeAlreadySolvedValidationResult));
            }

            var result = challenge.CorrectAnswer == answer.GivenAnswer;

            challenge.Attempts++;
            challenge.Solved = result;
            await _gameRepository.UpdateChallenge(challenge).ConfigureAwait(false);

            return(result ? new ChallengeAnswerValidationResult() : new ChallengeAnswerValidationResult(GameConstants.WrongAnswer));
        }
Beispiel #5
0
 public FakeChallenge(ChallengeAnswer answer)
     : base(ChallengeTypeKind.OTHER, "", answer)
 {
 }
 public static ChallengeAnswerRequest CreateRequest(ChallengeAnswer answer)
 {
     return(new ChallengeAnswerRequest(answer));
 }
Beispiel #7
0
        public async Task <ActionResult <ChallengeAnswerValidationResult> > FaceToNamesChallenge([FromBody] ChallengeAnswer answer)
        {
            try
            {
                var(success, errorMessage) = ValidateAnswer(answer);
                if (!success)
                {
                    _logger.LogWarning(errorMessage);
                    return(BadRequest(errorMessage));
                }

                return(await _gameService.IsAnswerValid(answer).ConfigureAwait(false));
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, ErrorMessages.VerifyingAnswer);
                return(StatusCode((int)HttpStatusCode.InternalServerError, ErrorMessages.VerifyingAnswer));
            }
        }