public async Task QuestionsMustBeAnsweredInOrder() { var viewModel = new QuestionGetRequestViewModel() { QuestionNumber = 2, AssessmentType = "name1" }; var expectedQuestion = new GetQuestionResponse() { MaxQuestionsCount = 3, QuestionNumber = 1 }; var expectedAssessment = new GetAssessmentResponse() { CurrentQuestionNumber = 1 }; A.CallTo(() => Session.HasValidSession()).Returns(true); A.CallTo(() => ApiService.GetQuestion(viewModel.AssessmentType, viewModel.QuestionNumber)).Returns(expectedQuestion); A.CallTo(() => ApiService.GetAssessment()).Returns(expectedAssessment); var actionResponse = await AssessmentController.Index(viewModel).ConfigureAwait(false); Assert.IsType <RedirectResult>(actionResponse); var redirectResult = actionResponse as RedirectResult; Assert.Equal($"~/{RouteName.Prefix}/assessment/name1/1", redirectResult.Url); }
public async Task IfAnswerIsValidMovesToNextQuestion() { var answerRequest = new QuestionPostRequestViewModel() { QuestionNumber = 3, AssessmentType = "short", Answer = "answer1" }; var currentQuestion = new GetQuestionResponse() { MaxQuestionsCount = 10, CurrentQuestionNumber = 3, NextQuestionNumber = 4 }; var answerResponse = new PostAnswerResponse() { IsSuccess = true, NextQuestionNumber = 4 }; A.CallTo(() => Session.HasValidSession()).Returns(true); A.CallTo(() => ApiService.GetQuestion(answerRequest.AssessmentType, answerRequest.QuestionNumber)).Returns(currentQuestion); A.CallTo(() => ApiService.AnswerQuestion(answerRequest.AssessmentType, answerRequest.QuestionNumber, answerRequest.QuestionNumber, answerRequest.Answer)).Returns(answerResponse); var actionResponse = await AssessmentController.Index(answerRequest).ConfigureAwait(false); Assert.IsType <RedirectResult>(actionResponse); var redirectResult = actionResponse as RedirectResult; Assert.Equal($"~/{RouteName.Prefix}/assessment/short/4", redirectResult.Url); }
private GetQuestionResponse CreateGetQuestionResponse(int currentQuestionNumber) { var result = new GetQuestionResponse(); result.QuestionId = $"short-201901-23-{currentQuestionNumber}"; result.MaxQuestionsCount = 10; return(result); }
public async Task IfQuestionDoesNotExistsReturnsBadRequest() { var viewModel = new QuestionGetRequestViewModel() { AssessmentType = "at1", QuestionNumber = 1 }; GetQuestionResponse expectedQuestion = null; A.CallTo(() => Session.HasValidSession()).Returns(true); A.CallTo(() => ApiService.GetQuestion(viewModel.AssessmentType, viewModel.QuestionNumber)).Returns(expectedQuestion); var actionResponse = await AssessmentController.Index(viewModel).ConfigureAwait(false); Assert.IsType <BadRequestResult>(actionResponse); }
public async Task GetAssessmentWhenAssessmentDoesntExistReturnsBadResponse() { var viewModel = new QuestionGetRequestViewModel() { QuestionNumber = 2, AssessmentType = "name1" }; var expectedQuestion = new GetQuestionResponse(); GetAssessmentResponse expectedAssessment = null; A.CallTo(() => Session.HasValidSession()).Returns(true); A.CallTo(() => ApiService.GetQuestion(viewModel.AssessmentType, viewModel.QuestionNumber)).Returns(expectedQuestion); A.CallTo(() => ApiService.GetAssessment()).Returns(expectedAssessment); var actionResponse = await AssessmentController.Index(viewModel).ConfigureAwait(false); Assert.IsType <BadRequestResult>(actionResponse); }
public async Task GetQuestionReturnsValidResponse() { var sessionId = "session1"; var assessmentType = "at1"; var questionNumber = 1; var expectedQuestion = new GetQuestionResponse() { NextQuestionNumber = 2 }; A.CallTo(() => sessionService.GetSessionId()).Returns(sessionId); A.CallTo(() => assessmentApiService.GetQuestion(sessionId, assessmentType, questionNumber)).Returns(expectedQuestion); var response = await assessmentService.GetQuestion(assessmentType, questionNumber); Assert.Equal(expectedQuestion.NextQuestionNumber, response.NextQuestionNumber); }
private void getQuestion() { byte[] response = new byte[500]; GetQuestionResponse res = new GetQuestionResponse(); byte[] request = serializer.buildMessage(21); Client.client_socket.Send(request); res = serializer.DeDictionary <GetQuestionResponse>(response); if (res.status == 1) { this.label4.Text = res.question; this.one.Text = res.answers["0"]; this.two.Text = res.answers["1"]; this.three.Text = res.answers["2"]; this.four.Text = res.answers["3"]; } }
public async Task IfQuestionNumberIsGreaterThanMaxMaxQuestionsCountReturnsBadRequest() { var viewModel = new QuestionGetRequestViewModel() { QuestionNumber = 3, AssessmentType = "name1" }; var expectedQuestion = new GetQuestionResponse() { MaxQuestionsCount = 2 }; A.CallTo(() => Session.HasValidSession()).Returns(true); A.CallTo(() => ApiService.GetQuestion(viewModel.AssessmentType, 1)).Returns(expectedQuestion); var actionResponse = await AssessmentController.Index(viewModel).ConfigureAwait(false); Assert.IsType <BadRequestResult>(actionResponse); }
public async Task IfAssessmentIsCompleteRedirectsToResults() { var viewModel = new QuestionGetRequestViewModel() { QuestionNumber = 2, AssessmentType = "name1" }; var expectedQuestion = new GetQuestionResponse() { MaxQuestionsCount = 2, IsComplete = true }; A.CallTo(() => Session.HasValidSession()).Returns(true); A.CallTo(() => ApiService.GetQuestion(viewModel.AssessmentType, viewModel.QuestionNumber)).Returns(expectedQuestion); var actionResponse = await AssessmentController.Index(viewModel).ConfigureAwait(false); Assert.IsType <RedirectResult>(actionResponse); var redirectResult = actionResponse as RedirectResult; Assert.Equal($"~/{RouteName.Prefix}/results", redirectResult.Url); }
public async Task AnswerQuestionReturnsValidResponse() { var sessionId = "session1"; var assessmentType = "at1"; var questionResponse = new GetQuestionResponse() { QuestionNumber = 1, QuestionSetVersion = $"{assessmentType}-v1" }; var answerRequest = new PostAnswerRequest() { QuestionId = $"{assessmentType}-v1-1", SelectedOption = "2" }; var answerResponse = A.Fake <PostAnswerResponse>(); A.CallTo(() => sessionService.GetSessionId()).Returns(sessionId); A.CallTo(() => assessmentApiService.GetQuestion(sessionId, assessmentType, questionResponse.QuestionNumber)).Returns(questionResponse); A.CallTo(() => assessmentApiService.AnswerQuestion(sessionId, answerRequest)).Returns(answerResponse); var response = await assessmentService.AnswerQuestion(assessmentType, questionResponse.QuestionNumber, questionResponse.QuestionNumber, answerRequest.SelectedOption); Assert.Equal(answerResponse.IsSuccess, response.IsSuccess); }
public async Task WhenAllAnswersAreProvidedAssessmentIsCompleted() { var answerRequest = new QuestionPostRequestViewModel() { QuestionNumber = 3, AssessmentType = "name1", Answer = "answer1" }; var currentQuestion = new GetQuestionResponse(); var answerResponse = new PostAnswerResponse() { IsSuccess = true, IsComplete = true }; A.CallTo(() => Session.HasValidSession()).Returns(true); A.CallTo(() => ApiService.GetQuestion(answerRequest.AssessmentType, answerRequest.QuestionNumber)).Returns(currentQuestion); A.CallTo(() => ApiService.AnswerQuestion(answerRequest.AssessmentType, answerRequest.QuestionNumber, answerRequest.QuestionNumber, answerRequest.Answer)).Returns(answerResponse); var actionResponse = await AssessmentController.Index(answerRequest).ConfigureAwait(false); Assert.IsType <RedirectResult>(actionResponse); var redirectResult = actionResponse as RedirectResult; Assert.Equal($"~/{RouteName.Prefix}/assessment/complete", redirectResult.Url); }
// GET api/<controller>/5 /// <summary> /// Получить вопрос и ответ на него по айдишнику /// </summary> /// <param name="data"></param> /// <param name="signature"></param> /// <returns></returns> public JsonResult Get(string data, string signature) { try { var decodedData = CryptoUtils.Base64Decode(data); var getQuestionModel = JsonConvert.DeserializeObject <GetQuestion>(decodedData); if (!getQuestionModel.IsModelValid()) { throw new ErrorWithDataException("Some of the data parameters are invalid. Check the documentation.", Models.Api.StatusCode.WrongData); } var user = _applicationContext.User .Include(u => u.UserProjects) .ThenInclude(up => up.Project) .FirstOrDefault(u => u.UserName == getQuestionModel.Login); if (user == null)// || user.PasswordHash != questionToApi.PasswordHash) { throw new ErrorWithDataException("User with such email doesn't exist.", Models.Api.StatusCode.WrongLoginPasswordCredentials); } var userProject = user.UserProjects.FirstOrDefault(up => up.Project.Id == getQuestionModel.ProjectId); if (userProject == null) { throw new ErrorWithDataException("Provided user doesn't consist in the project with such ID.", Models.Api.StatusCode.WrongProjectId); } if (!Utils.ValidateSignature(data, signature, userProject.Project.PrivateKey)) { throw new ErrorWithDataException("Signature is not valid. Check your PrivateKey and MD5 alghorithm.", Models.Api.StatusCode.WrongSignature); } var question = _applicationContext.Questions .Include(q => q.Answer) .FirstOrDefault(q => q.Id == getQuestionModel.QuestionId); if (question == null) { throw new ErrorWithDataException("Provided question ID doesn't consist in the project with such ID.", Models.Api.StatusCode.WrongQuestionId); } var getQuestionResponse = new GetQuestionResponse { QuestionId = question.Id, Date = question.Date, QuestionText = question.Text, HasAnswer = question.Answer != null, StatusCode = Models.Api.StatusCode.Success, StatusMessage = "Such question exists.", AnswerText = question.Answer != null ? question.Answer.Text : string.Empty }; return(Json(getQuestionResponse)); } catch (ErrorWithDataException ex) { var answer = new PostQuestionResponse() { StatusCode = ex.StatusCode(), StatusMessage = ex.Message }; return(Json(answer)); } catch (Exception ex) { var answer = new PostQuestionResponse() { StatusCode = Models.Api.StatusCode.Error, StatusMessage = ex.Message }; return(Json(answer)); } }
public GetQuestionResponse GetQuestion(GetQuestionRequest request) { GetQuestionResponse response = new GetQuestionResponse(); AuthToken authToken = null; try { Common.Helpers.ValidationHelper.ValidateRequiredField(request.AuthToken, "Auth Token"); if (!UserController.ValidateSession(request.AuthToken, out authToken)) { throw new AuthenticationException("Authentication failed."); } DbContext context = DataController.CreateDbContext(); E::Question question = context.Questions .Where(q => q.ID == request.QuestionID) .FirstOrDefault(); response.QuestionBody = DataController.DownloadBlob(question.QuestionBody.ToString()); response.Name = question.Name; response.LastUpdatedBy = question.LastUpdatedBy; response.LastUpdatedDate = question.LastUpdatedDate.ToShortDateString(); response.CreatedBy = question.CreatedBy; response.CreatedDate = question.CreatedDate.ToShortDateString(); response.CanEdit = !context.InterviewQuestions .Where(q => q.QuestionID == request.QuestionID) .Where(q => q.Interview.StartedDate.HasValue) .Any(); response.IsCodedTest = question.QuestionTypeID == (short)QuestionType.Coded; if (!response.IsCodedTest) { var tests = TestsController.FromJson(DataController.DownloadBlob(question.Tests.Value.ToString())); IList <QuestionTest> questionTests = new List <QuestionTest>(); foreach (var test in tests.AsEnumerable()) { QuestionTest questionTest = new QuestionTest(); questionTest.ID = test.ID; questionTest.Name = test.Name; questionTest.Input = test.Input; questionTest.ExpectedOutput = test.ExpectedOutput; questionTests.Add(questionTest); } response.Tests = questionTests.ToArray(); } else { response.Tests = new QuestionTest[0]; } } catch (AuthenticationException ex) { throw new WebFaultException <string>(ex.Message, System.Net.HttpStatusCode.BadRequest); } catch (Common.Exceptions.ValidationException ex) { throw new WebFaultException <string>(ex.Message, System.Net.HttpStatusCode.BadRequest); } catch (Exception ex) { ExceptionHelper.Log(ex, authToken == null ? null : authToken.Username); throw new WebFaultException <string>("An unknown error has occurred.", System.Net.HttpStatusCode.InternalServerError); } return(response); }