public IActionResult TakeTest(TestRequestViewModel takeTestRequestViewModel) { var userId = this.userManager.GetUserId(this.HttpContext.User); var isOverdue = this.userTestService.CheckForOverdueTestInProgress(userId); if (isOverdue) { return(RedirectToAction("Index")); } if (ModelState.IsValid) { var testId = takeTestRequestViewModel.Id; var submitedTest = this.mapper.MapTo <TestRequestDto>(takeTestRequestViewModel); this.answerService.AddAnswersToUser(userId, submitedTest.Questions); var isPassed = this.testService .IsTestPassed(testId, submitedTest, this.testService.GetTestQuestionsWithAnswers(testId)); this.userTestService.SubmitUserTest(testId, userId, isPassed); TempData["Success-Message"] = "Your test was submited!"; return(RedirectToAction("Index")); } return(View(takeTestRequestViewModel)); }
public void POSTTakeTestReturnsRedirectToAction_WhenModelStateIsValid() { var fakeHttpContext = new Mock <HttpContext>(); var fakeIdentity = new GenericIdentity("User"); var principal = new GenericPrincipal(fakeIdentity, null); fakeHttpContext.Setup(t => t.User).Returns(principal); var tempDataMock = new Mock <ITempDataDictionary>(); tempDataMock.Setup(x => x["Success - Message"]) .Returns("Your test was submited!"); var context = new ControllerContext { HttpContext = fakeHttpContext.Object }; var id = new Guid().ToString(); var takeTestRequestVM = new TestRequestViewModel() { CategoryName = "test", Id = id, Questions = new List <QuestionResponseModel>() }; var testRequestDto = new TestRequestDto(); this.mapperMock.Setup(x => x.MapTo <TestRequestDto>(takeTestRequestVM)) .Returns(testRequestDto); var sut = new HomeController(mapperMock.Object, testServiceMock.Object, userManagerMock.Object, questionServiceMock.Object, categoryServiceMock.Object, userTestServiceMock.Object, userAnswerServiceMock.Object) { //Set your controller ControllerContext with fake context ControllerContext = context, TempData = tempDataMock.Object }; // Act var result = sut.TakeTest(takeTestRequestVM) as RedirectToActionResult; // Assert Assert.AreEqual(result.ActionName, "Index"); //var model = result.Model as TestRequestViewModel; //Assert.IsInstanceOfType(result, typeof(ViewResult)); //Assert.IsNotNull(result); //Assert.AreEqual(model.Id, id); }
public void POSTTakeTestCallsUserTestServiceSubmitTest_WhenModelStateIsValid() { var fakeHttpContext = new Mock <HttpContext>(); var fakeIdentity = new GenericIdentity("User"); var principal = new GenericPrincipal(fakeIdentity, null); fakeHttpContext.Setup(t => t.User).Returns(principal); var tempDataMock = new Mock <ITempDataDictionary>(); tempDataMock.Setup(x => x["Success - Message"]) .Returns("Your test was submited!"); var context = new ControllerContext { HttpContext = fakeHttpContext.Object }; var id = new Guid().ToString(); var takeTestRequestVM = new TestRequestViewModel() { CategoryName = "test", Id = id, Questions = new List <QuestionResponseModel>() }; var testRequestDto = new TestRequestDto(); this.mapperMock.Setup(x => x.MapTo <TestRequestDto>(takeTestRequestVM)) .Returns(testRequestDto); this.userTestServiceMock.Setup( x => x.SubmitUserTest(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <bool>())) .Verifiable(); var sut = new HomeController(mapperMock.Object, testServiceMock.Object, userManagerMock.Object, questionServiceMock.Object, categoryServiceMock.Object, userTestServiceMock.Object, userAnswerServiceMock.Object) { //Set your controller ControllerContext with fake context ControllerContext = context, TempData = tempDataMock.Object }; // Act var result = sut.TakeTest(takeTestRequestVM); // Assert this.userTestServiceMock.Verify( x => x.SubmitUserTest(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <bool>()), Times.Once); }
public IActionResult Test(TestRequestViewModel model) { model.ComputeHash(); ViewBag.Href = $"Index?id={model.GlobalUid}&p={model.P}&g={model.G}&h={model.H}"; return(View(model)); }