Beispiel #1
0
        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());
        }
Beispiel #2
0
        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.");
        }
Beispiel #4
0
        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);
        }
Beispiel #5
0
        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));
        }
Beispiel #6
0
        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);
        }