public void SetUp()
        {
            _mockCaseStatusGateway = new Mock <ICaseStatusGateway>();
            _mockDatabaseGateway   = new Mock <IDatabaseGateway>();
            _caseStatusesUseCase   = new CaseStatusesUseCase(_mockCaseStatusGateway.Object, _mockDatabaseGateway.Object);
            _request    = CaseStatusHelper.CreateCaseStatusAnswerRequest();
            _caseStatus = CaseStatusHelper.CreateCaseStatus().ToDomain();
            _worker     = TestHelpers.CreateWorker();

            _caseStatus.Type = "LAC";
        }
Ejemplo n.º 2
0
        public void WhenRequestIsNullReturnsErrorsWithMessages()
        {
            var badRequest = new CreateCaseStatusAnswerRequest();
            var response   = _createCaseStatusAnswerRequestValidator.Validate(badRequest);

            response.IsValid.Should().BeFalse();
            response.Errors.Should().HaveCount(6);
            response.Errors.Should().Contain(e => e.ErrorMessage == "'caseStatusId' must be provided");
            response.Errors.Should().Contain(e => e.ErrorMessage == "'createdBy' must be provided");
            response.Errors.Should().Contain(e => e.ErrorMessage == "'answers' must be provided");
            response.Errors.Should().Contain(e => e.ErrorMessage == "Provide either one or two answers only");
            response.Errors.Should().Contain(e => e.ErrorMessage == "'startDate' must be provided");
            response.Errors.Should().Contain(e => e.ErrorMessage == "'startDate' must have a valid value");
        }
Ejemplo n.º 3
0
        public CaseStatus CreateCaseStatusAnswer(CreateCaseStatusAnswerRequest request)
        {
            var caseStatus = _databaseContext.CaseStatuses.Include(x => x.Answers).FirstOrDefault(x => x.Id == request.CaseStatusId);

            if (caseStatus == null)
            {
                throw new CaseStatusDoesNotExistException($"Case status id {request.CaseStatusId} does not exist.");
            }

            if (caseStatus.Answers == null)
            {
                caseStatus.Answers = new List <CaseStatusAnswer>();
            }

            Guid identifier = Guid.NewGuid();

            foreach (var answer in request.Answers)
            {
                var caseStatusAnswer = new Infrastructure.CaseStatusAnswer()
                {
                    CaseStatusId = caseStatus.Id,
                    CreatedBy    = request.CreatedBy,
                    StartDate    = request.StartDate,
                    Option       = answer.Option,
                    Value        = answer.Value,
                    GroupId      = identifier.ToString(),
                    CreatedAt    = _systemTime.Now
                };

                caseStatus.Answers.Add(caseStatusAnswer);
            }

            _databaseContext.SaveChanges();

            return(caseStatus.ToDomain());
        }
Ejemplo n.º 4
0
        public IActionResult CreateCaseStatusAnswers(CreateCaseStatusAnswerRequest request)
        {
            var validator         = new CreateCaseStatusAnswerRequestValidator();
            var validationResults = validator.Validate(request);

            if (!validationResults.IsValid)
            {
                return(BadRequest(validationResults.ToString()));
            }

            try
            {
                _caseStatusesUseCase.ExecutePostCaseStatusAnswer(request);

                return(CreatedAtAction(nameof(CreateCaseStatusAnswers), "Successfully created case status answers."));
            }
            catch (Exception e) when(
                e is WorkerNotFoundException ||
                e is CaseStatusDoesNotExistException ||
                e is InvalidCaseStatusTypeException)
            {
                return(BadRequest(e.Message));
            }
        }
Ejemplo n.º 5
0
        public CaseStatus ReplaceCaseStatusAnswers(CreateCaseStatusAnswerRequest request)
        {
            var caseStatus = _databaseContext.CaseStatuses.Include(x => x.Answers).FirstOrDefault(x => x.Id == request.CaseStatusId);

            if (caseStatus == null)
            {
                throw new CaseStatusDoesNotExistException($"Case status id {request.CaseStatusId} does not exist.");
            }

            var activeAnswers = caseStatus
                                .Answers
                                .Where(x => x.DiscardedAt == null && x.EndDate == null);

            //discard future ones
            if (activeAnswers.Any(x => x.StartDate > DateTime.Today.Date))
            {
                foreach (var answer in activeAnswers)
                {
                    answer.DiscardedAt    = _systemTime.Now;
                    answer.LastModifiedBy = request.CreatedBy;
                }
            }
            //end the current ones and add new episode end reason (hard coded for data migration purposes)
            else
            {
                caseStatus.Answers.Add(new CaseStatusAnswer()
                {
                    CreatedBy = request.CreatedBy,
                    EndDate   = request.StartDate,
                    StartDate = activeAnswers.First().StartDate,
                    Option    = CaseStatusAnswerOption.EpisodeReason,
                    Value     = CaseStatusAnswerValue.X1,
                    GroupId   = activeAnswers.First().GroupId
                });

                foreach (var answer in activeAnswers)
                {
                    answer.EndDate        = request.StartDate;
                    answer.LastModifiedBy = request.CreatedBy;
                }
            }

            //add new ones
            Guid identifier = Guid.NewGuid();

            foreach (var answer in request.Answers)
            {
                var caseStatusAnswer = new Infrastructure.CaseStatusAnswer()
                {
                    CaseStatusId = caseStatus.Id,
                    CreatedBy    = request.CreatedBy,
                    StartDate    = request.StartDate,
                    Option       = answer.Option,
                    Value        = answer.Value,
                    GroupId      = identifier.ToString(),
                    CreatedAt    = _systemTime.Now
                };

                caseStatus.Answers.Add(caseStatusAnswer);
            }

            _databaseContext.SaveChanges();

            return(caseStatus.ToDomain());
        }
Ejemplo n.º 6
0
 public void SetUp()
 {
     _mockCaseStatusesUseCase = new Mock <ICaseStatusesUseCase>();
     _caseStatusController    = new CaseStatusController(_mockCaseStatusesUseCase.Object);
     _request = CaseStatusHelper.CreateCaseStatusAnswerRequest(answers: CaseStatusHelper.CreateCaseStatusRequestAnswers(min: 2, max: 2)); //TODO: use DI for validator setup for easy mocking
 }