public async Task ReturnsBadRequestWhenSessionIsNotValid() { // Arrange var dfcUserSession = CreateDfcUserSession(); var ms = new MemoryStream(); using var sw = new StreamWriter(ms); sw.Write(JsonConvert.SerializeObject(dfcUserSession)); sw.Flush(); ms.Position = 0; A.CallTo(() => httpRequest.Body).Returns(ms); A.CallTo(() => sessionClient.ValidateUserSession(A <DfcUserSession> .Ignored)).Returns(false); // Act var result = await functionApp.CreateNewSkillsAssessment(httpRequest).ConfigureAwait(false); var statusCodeResult = Assert.IsType <StatusCodeResult>(result); // Assert Assert.Equal((int)HttpStatusCode.BadRequest, statusCodeResult.StatusCode); }
public async Task <IActionResult> CreateNewSkillsAssessment([HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "assessment/skills")] HttpRequest request) { request.LogRequestHeaders(logService); var correlationId = Guid.Parse(correlationIdProvider.CorrelationId); logService.LogMessage($"CorrelationId: {correlationId} - Creating a new assessment", SeverityLevel.Information); using var streamReader = new StreamReader(request.Body); var requestBody = streamReader.ReadToEnd(); var dfcUserSession = JsonConvert.DeserializeObject <DfcUserSession>(requestBody); if (dfcUserSession is null) { logService.LogMessage($"CorrelationId: {correlationId} - Request Body is empty", SeverityLevel.Warning); return(responseWithCorrelation.ResponseWithCorrelationId(HttpStatusCode.BadRequest, correlationId)); } var isValid = sessionClient.ValidateUserSession(dfcUserSession); if (!isValid) { logService.LogMessage($"CorrelationId: {correlationId} - Session with Id {dfcUserSession.SessionId} is not valid", SeverityLevel.Warning); return(responseWithCorrelation.ResponseWithCorrelationId(HttpStatusCode.BadRequest, correlationId)); } var currentQuestionSetInfo = await questionSetRepository.GetCurrentQuestionSet(ShortAssessmentType).ConfigureAwait(false); if (currentQuestionSetInfo == null) { logService.LogMessage($"CorrelationId: {correlationId} - Unable to load latest question set {ShortAssessmentType}", SeverityLevel.Warning); return(responseWithCorrelation.ResponseWithCorrelationId(HttpStatusCode.NoContent, correlationId)); } var partitionKey = sessionClient.GeneratePartitionKey(dfcUserSession.SessionId); var existingUserSession = await userSessionRepository.GetByIdAsync(dfcUserSession.SessionId, partitionKey).ConfigureAwait(false); if (existingUserSession != null) { logService.LogMessage($"Unable to create User Session with id {dfcUserSession.SessionId}. This record already exists", SeverityLevel.Information); return(responseWithCorrelation.ResponseWithCorrelationId(HttpStatusCode.AlreadyReported, correlationId)); } await CreateUserSession(currentQuestionSetInfo, dfcUserSession, partitionKey).ConfigureAwait(false); return(responseWithCorrelation.ResponseWithCorrelationId(HttpStatusCode.Created, correlationId)); }
public void ValidateUserSessionWhenCalledThenReturnsWhetherUserSessionIsValid(bool sessionIsValid) { // Arrange var dfcUserSession = new DfcUserSession { CreatedDate = DateTime.UtcNow, PartitionKey = "partitionKey", Salt = "salt", SessionId = "sessionId", }; A.CallTo(() => sessionIdGenerator.ValidateSessionId(dfcUserSession)).Returns(sessionIsValid); // Act var result = sessionClient.ValidateUserSession(dfcUserSession); // Assert Assert.Equal(sessionIsValid, result); A.CallTo(() => sessionIdGenerator.ValidateSessionId(dfcUserSession)).MustHaveHappenedOnceExactly(); }