public CaseStatus CreateCaseStatus(CreateCaseStatusRequest request) { var caseStatus = new Infrastructure.CaseStatus { PersonId = request.PersonId, Type = request.Type, StartDate = request.StartDate, Notes = request.Notes, CreatedBy = request.CreatedBy, Answers = new List <CaseStatusAnswer>() }; Guid identifier = Guid.NewGuid(); foreach (var answer in request.Answers) { var caseStatusAnswer = new CaseStatusAnswer { CaseStatusId = caseStatus.Id, Option = answer.Option, Value = answer.Value, StartDate = request.StartDate, CreatedAt = _systemTime.Now, CreatedBy = request.CreatedBy, GroupId = identifier.ToString() }; caseStatus.Answers.Add(caseStatusAnswer); } _databaseContext.CaseStatuses.Add(caseStatus); _databaseContext.SaveChanges(); return(caseStatus.ToDomain()); }
public IActionResult CreateCaseStatus([FromBody] CreateCaseStatusRequest request) { var validator = new CreateCaseStatusRequestValidator(); var validationResults = validator.Validate(request); if (!validationResults.IsValid) { return(BadRequest(validationResults.ToString())); } try { _caseStatusesUseCase.ExecutePost(request); return(CreatedAtAction(nameof(CreateCaseStatus), "Successfully created case status.")); } catch (Exception e) when( e is PersonNotFoundException || e is CaseStatusAlreadyExistsException || e is WorkerNotFoundException || e is InvalidStartDateException ) { return(BadRequest(e.Message)); } }
public void WhenRequestIsNullReturnsErrorsWithMessagesApartFromDetails() { var badRequest = new CreateCaseStatusRequest(); var response = _createCaseStatusRequestValidator.Validate(badRequest); response.IsValid.Should().BeFalse(); response.Errors.Should().HaveCount(5); response.Errors.Should().Contain(e => e.ErrorMessage == "'personId' must be provided."); response.Errors.Should().Contain(e => e.ErrorMessage == "'type' must be provided."); response.Errors.Should().Contain(e => e.ErrorMessage == "'createdBy' must be provided."); response.Errors.Should().Contain(e => e.ErrorMessage == "'startDate' must be provided."); response.Errors.Should().Contain(e => e.ErrorMessage == "'type' must be CIN, CP or LAC."); }
public void SetUp() { _mockDatabaseGateway = new Mock <IDatabaseGateway>(); _mockCaseStatusGateway = new Mock <ICaseStatusGateway>(); _caseStatusesUseCase = new CaseStatusesUseCase(_mockCaseStatusGateway.Object, _mockDatabaseGateway.Object); _request = CaseStatusHelper.CreateCaseStatusRequest(); _mockDatabaseGateway .Setup(x => x.GetPersonByMosaicId(It.IsAny <int>())) .Returns(TestHelpers.CreatePerson(_request.PersonId)); var caseStatus = CaseStatusHelper.CreateCaseStatus().ToDomain(); _mockCaseStatusGateway .Setup(x => x.CreateCaseStatus(It.IsAny <CreateCaseStatusRequest>())) .Returns(caseStatus); }
public CaseStatus ExecutePost(CreateCaseStatusRequest request) { var person = _databaseGateway.GetPersonByMosaicId(request.PersonId); if (person == null) { throw new PersonNotFoundException($"'personId' with '{request.PersonId}' was not found."); } if (person.AgeContext.ToLower() != "c") { throw new InvalidAgeContextException( $"Person with the id {person.Id} belongs to the wrong AgeContext for this operation"); } var worker = _databaseGateway.GetWorkerByEmail(request.CreatedBy); var workerDoesNotExist = worker == null; if (workerDoesNotExist) { throw new WorkerNotFoundException($"'createdBy' with '{request.CreatedBy}' was not found as a worker."); } var personActiveCaseStatuses = _caseStatusGateway.GetActiveCaseStatusesByPersonId(request.PersonId); var personCaseStatusAlreadyExists = personActiveCaseStatuses?.Count > 0; if (personCaseStatusAlreadyExists) { throw new CaseStatusAlreadyExistsException("Active case status already exists for this person."); } var overlappingClosedCaseStatuses = _caseStatusGateway.GetClosedCaseStatusesByPersonIdAndDate(request.PersonId, request.StartDate); if (overlappingClosedCaseStatuses?.Count > 0) { throw new InvalidStartDateException("Invalid start date."); } return(_caseStatusGateway.CreateCaseStatus(request)); }
public async Task AddNewCINCaseStatus() { //create new case status var postUri = new Uri($"api/v1/residents/{_person.Id}/case-statuses", UriKind.Relative); var request = new CreateCaseStatusRequest() { CreatedBy = _worker.Email, StartDate = DateTime.Today.AddDays(-1), Type = "CIN", PersonId = _person.Id }; var serializedRequest = JsonSerializer.Serialize(request); var requestContent = new StringContent(serializedRequest, Encoding.UTF8, "application/json"); var createCaseStatusResponse = await Client.PostAsync(postUri, requestContent).ConfigureAwait(true); createCaseStatusResponse.StatusCode.Should().Be(201); //Get request to check that the case status has been added var getUri = new Uri($"api/v1/residents/{_person.Id}/case-statuses", UriKind.Relative); var getCaseStatusesResponse = await Client.GetAsync(getUri).ConfigureAwait(true); getCaseStatusesResponse.StatusCode.Should().Be(200); var addedContent = await getCaseStatusesResponse.Content.ReadAsStringAsync().ConfigureAwait(true); var addedCaseStatusResponse = JsonConvert.DeserializeObject <List <CaseStatusResponse> >(addedContent).ToList(); addedCaseStatusResponse.Count.Should().Be(1); addedCaseStatusResponse.Single().Answers.Should().BeEmpty(); addedCaseStatusResponse.Single().EndDate.Should().BeNull(); addedCaseStatusResponse.Single().Notes.Should().BeNull(); addedCaseStatusResponse.Single().StartDate.Should().Be(request.StartDate.ToString("O")); addedCaseStatusResponse.Single().Type.Should().Be(request.Type); }