public void WhenTypeIsCINAndEndDateAndStartDateAreNotProvidedItDoesNotUpdateOtherDataColumnsThanTheNote() { var(caseStatus, _, _) = CaseStatusHelper.SavePersonWithCaseStatusToDatabase(DatabaseContext); caseStatus.Type = "CIN"; caseStatus.EndDate = null; DatabaseContext.SaveChanges(); var request = TestHelpers.CreateUpdateCaseStatusRequest(); request.EndDate = null; request.StartDate = null; request.Notes = "New note"; request.CaseStatusId = caseStatus.Id; _caseStatusGateway.UpdateCaseStatus(request); var updatedCaseStatus = DatabaseContext.CaseStatuses.FirstOrDefault(x => x.Id == caseStatus.Id); updatedCaseStatus.PersonId.Should().Be(caseStatus.PersonId); updatedCaseStatus.EndDate.Should().Be(caseStatus.EndDate); updatedCaseStatus.Type.Should().Be(caseStatus.Type); updatedCaseStatus.StartDate.Should().Be(caseStatus.StartDate); updatedCaseStatus.Notes.Should().Be(request.Notes); updatedCaseStatus.LastModifiedBy.Should().Be(request.EditedBy); }
public void WhenTypeIsCPAndEndDateIsNotProvidedItCopiesTheCaseStatusAnswersEndDateWhenThereIsOneActiveSetOfAnswersAndAlsoScheduledAnswers() { var activeGroupId = Guid.NewGuid().ToString(); var scheduledGroupId = Guid.NewGuid().ToString(); var(caseStatus, _, _) = CaseStatusHelper.SavePersonWithCaseStatusToDatabase(DatabaseContext); caseStatus.Type = "CP"; caseStatus.EndDate = null; caseStatus.StartDate = new DateTime(2021, 11, 01); var activeAnswers = TestHelpers.CreateCaseStatusAnswers(min: 1, max: 1, startDate: DateTime.Today.AddDays(-20), endDate: DateTime.Today.AddDays(50), groupId: activeGroupId); var scheduledAnswers = TestHelpers.CreateCaseStatusAnswers(min: 1, max: 1, startDate: DateTime.Today.AddDays(50), endDate: null, groupId: scheduledGroupId); caseStatus.Answers = new List <CaseStatusAnswer>(); caseStatus.Answers.AddRange(activeAnswers); caseStatus.Answers.AddRange(scheduledAnswers); DatabaseContext.SaveChanges(); var request = TestHelpers.CreateUpdateCaseStatusRequest(min: 1, max: 1); request.EndDate = null; request.CaseStatusId = caseStatus.Id; request.StartDate = DateTime.Today.AddDays(-17); _caseStatusGateway.UpdateCaseStatus(request); var updatedCaseStatus = DatabaseContext.CaseStatuses.FirstOrDefault(x => x.Id == caseStatus.Id); updatedCaseStatus.StartDate.Should().Be(request.StartDate.Value); var newCaseStatusAnswers = updatedCaseStatus.Answers.Where(x => x.GroupId != activeGroupId && x.GroupId != scheduledGroupId && x.StartDate <= DateTime.Today); newCaseStatusAnswers.All(x => x.EndDate == activeAnswers.FirstOrDefault().EndDate).Should().BeTrue(); }
public void AddsNewEpisodeReasonAnswerUsingTheStartAndEndDateOfTheCurrentAnswers() { var personId = 123; var groupId = Guid.NewGuid().ToString(); var currentActiveAnswersStartDate = DateTime.Today.AddDays(-10); var caseStatus = TestHelpers.CreateCaseStatus(type: "LAC", personId: personId); var currentActiveAnswers = TestHelpers.CreateCaseStatusAnswers(caseStatusId: caseStatus.Id, startDate: currentActiveAnswersStartDate, min: 2, max: 2, groupId: groupId); caseStatus.Answers = new List <CaseStatusAnswerInfrastructure>(); caseStatus.Answers.AddRange(currentActiveAnswers); DatabaseContext.CaseStatuses.Add(caseStatus); DatabaseContext.SaveChanges(); var requestAnswer = CaseStatusHelper.CreateCaseStatusRequestAnswers(min: 1, max: 1); var request = CaseStatusHelper.CreateCaseStatusAnswerRequest(caseStatusId: caseStatus.Id, answers: requestAnswer, startDate: DateTime.Today.AddDays(-2)); _caseStatusGateway.ReplaceCaseStatusAnswers(request); var updatedCaseStatus = DatabaseContext.CaseStatuses.FirstOrDefault(); updatedCaseStatus.Answers.Where(x => x.GroupId == groupId).Count().Should().Be(3); var episodeEndReasonAnswer = updatedCaseStatus.Answers.Where(x => x.GroupId == groupId && x.Option == CaseStatusAnswerOption.EpisodeReason && x.Value == CaseStatusAnswerValue.X1).FirstOrDefault(); episodeEndReasonAnswer.Should().NotBeNull(); episodeEndReasonAnswer.StartDate.Should().Be(currentActiveAnswersStartDate); episodeEndReasonAnswer.EndDate.Should().Be(request.StartDate); episodeEndReasonAnswer.CreatedBy = request.CreatedBy; }
public void WhenTypeIsCPAndEndDateIsNotProvidedItDoesNotUpdateTheCaseStartDateWhenThereIsMoreThanOneSetOfAnswers() { var activeGroupId = Guid.NewGuid().ToString(); var activeGroupId2 = Guid.NewGuid().ToString(); var request = TestHelpers.CreateUpdateCaseStatusRequest(min: 1, max: 1); var(caseStatus, _, _) = CaseStatusHelper.SavePersonWithCaseStatusToDatabase(DatabaseContext); var answers = TestHelpers.CreateCaseStatusAnswers(min: 1, max: 1, startDate: DateTime.Today.AddDays(-3), endDate: DateTime.Today.AddDays(-2), discardedAt: null, groupId: activeGroupId); var answers2 = TestHelpers.CreateCaseStatusAnswers(min: 1, max: 1, startDate: DateTime.Today.AddDays(-2), endDate: null, discardedAt: null, groupId: activeGroupId2); caseStatus.Answers = answers; caseStatus.Type = "CP"; caseStatus.EndDate = null; DatabaseContext.SaveChanges(); request.EndDate = null; request.CaseStatusId = caseStatus.Id; request.StartDate = DateTime.Now.AddDays(-1); _caseStatusGateway.UpdateCaseStatus(request); var updatedCaseStatus = DatabaseContext.CaseStatuses.FirstOrDefault(x => x.Id == caseStatus.Id); updatedCaseStatus.LastModifiedBy.Should().Be(request.EditedBy); updatedCaseStatus.StartDate.Should().Be(caseStatus.StartDate); }
public void WhenTypeIsCINAndValidEndDateIsProvidedItUpdatesTheStatusWithNewEndDateWithoutSettingEndDateOrDiscardedAtForAnswers() { var request = TestHelpers.CreateUpdateCaseStatusRequest(); var(caseStatus, _, _) = CaseStatusHelper.SavePersonWithCaseStatusToDatabase(DatabaseContext); var answer = TestHelpers.CreateCaseStatusAnswers(min: 1, max: 1).FirstOrDefault(); caseStatus.Answers = new List <CaseStatusAnswer>() { answer }; caseStatus.Type = "CIN"; caseStatus.EndDate = null; DatabaseContext.SaveChanges(); request.CaseStatusId = caseStatus.Id; _caseStatusGateway.UpdateCaseStatus(request); var updatedCaseStatus = DatabaseContext.CaseStatuses.FirstOrDefault(x => x.Id == caseStatus.Id); updatedCaseStatus.EndDate.Should().NotBeNull(); updatedCaseStatus.LastModifiedBy.Should().Be(request.EditedBy); updatedCaseStatus.Answers.Count.Should().Be(1); updatedCaseStatus.Answers.First().EndDate.Should().BeNull(); updatedCaseStatus.Answers.First().DiscardedAt.Should().BeNull(); }
public void WhenTypeIsCPAndEndDateIsNotProvidedAndTheStartDateDoesNotOverlapWithThePreviousStartDateItIsValid() { var previousGroupId = Guid.NewGuid().ToString(); var activeGroupId = Guid.NewGuid().ToString(); var request = TestHelpers.CreateUpdateCaseStatusRequest(min: 1, max: 1); request.EndDate = null; var(caseStatus, _, _) = CaseStatusHelper.SavePersonWithCaseStatusToDatabase(DatabaseContext); var previousAnswers = TestHelpers.CreateCaseStatusAnswers(min: 1, max: 1, startDate: DateTime.Today.AddDays(-50), endDate: DateTime.Today.AddDays(-40), discardedAt: null, groupId: previousGroupId); var activeAnswers = TestHelpers.CreateCaseStatusAnswers(min: 1, max: 1, startDate: DateTime.Today.AddDays(-40), endDate: null, discardedAt: null, groupId: activeGroupId); caseStatus.Answers = new List <CaseStatusAnswer>(); caseStatus.Answers.AddRange(previousAnswers); caseStatus.Answers.AddRange(activeAnswers); caseStatus.Type = "CP"; caseStatus.EndDate = null; DatabaseContext.SaveChanges(); request.CaseStatusId = caseStatus.Id; request.StartDate = DateTime.Now.AddDays(-49).Date; _caseStatusGateway.UpdateCaseStatus(request); var updatedCaseStatus = DatabaseContext.CaseStatuses.FirstOrDefault(x => x.Id == caseStatus.Id); var newAnswers = updatedCaseStatus.Answers.Where(x => x.GroupId != activeGroupId && x.GroupId != previousGroupId && x.EndDate == null); newAnswers.All(x => x.StartDate == request.StartDate).Should().BeTrue(); }
public void WhenTypeIsCPAndValidEndDateIsProvidedAndThereAreScheduledAnswersItDiscardsTheScheduledAnswers() { var scheduledGroupId = Guid.NewGuid().ToString(); var request = TestHelpers.CreateUpdateCaseStatusRequest(min: 1, max: 1); var(caseStatus, _, _) = CaseStatusHelper.SavePersonWithCaseStatusToDatabase(DatabaseContext); var scheduledAnswersStartDate = DateTime.Today.AddDays(5); var currentAnswers = TestHelpers.CreateCaseStatusAnswers(min: 1, max: 1, endDate: scheduledAnswersStartDate, discardedAt: null, startDate: DateTime.Today.AddDays(-10)); var scheduledAnswers = TestHelpers.CreateCaseStatusAnswers(min: 1, max: 1, endDate: null, discardedAt: null, startDate: scheduledAnswersStartDate, groupId: scheduledGroupId); caseStatus.Answers = new List <CaseStatusAnswer>(); caseStatus.Answers.AddRange(scheduledAnswers); caseStatus.Answers.AddRange(currentAnswers); caseStatus.Type = "CP"; caseStatus.EndDate = null; DatabaseContext.SaveChanges(); request.CaseStatusId = caseStatus.Id; _caseStatusGateway.UpdateCaseStatus(request); var updatedCaseStatus = DatabaseContext.CaseStatuses.FirstOrDefault(x => x.Id == caseStatus.Id); updatedCaseStatus.EndDate.Should().NotBeNull(); updatedCaseStatus.LastModifiedBy.Should().Be(request.EditedBy); updatedCaseStatus.Answers.Count.Should().Be(3); updatedCaseStatus.Answers.Where(x => x.GroupId == scheduledGroupId).All(x => x.EndDate == null).Should().BeTrue(); updatedCaseStatus.Answers.Where(x => x.GroupId == scheduledGroupId).All(x => x.DiscardedAt != null).Should().BeTrue(); updatedCaseStatus.Answers.Where(x => x.GroupId == scheduledGroupId).All(x => x.LastModifiedBy == request.EditedBy).Should().BeTrue(); }
public void WhenTypeIsCPAndEndDateIsNotProvidedAndTheStartDateOverlapsWithThePreviousStartDateItThrowsInvalidStartDateException() { var previousGroupId = Guid.NewGuid().ToString(); var activeGroupId = Guid.NewGuid().ToString(); var request = TestHelpers.CreateUpdateCaseStatusRequest(min: 1, max: 1); request.EndDate = null; var(caseStatus, _, _) = CaseStatusHelper.SavePersonWithCaseStatusToDatabase(DatabaseContext); var previousAnswers = TestHelpers.CreateCaseStatusAnswers(min: 1, max: 1, startDate: DateTime.Today.AddDays(-50), endDate: DateTime.Today.AddDays(-40), discardedAt: null, groupId: previousGroupId); var activeAnswers = TestHelpers.CreateCaseStatusAnswers(min: 1, max: 1, startDate: DateTime.Today.AddDays(-40), endDate: null, discardedAt: null, groupId: activeGroupId); caseStatus.Answers = new List <CaseStatusAnswer>(); caseStatus.Answers.AddRange(previousAnswers); caseStatus.Answers.AddRange(activeAnswers); caseStatus.Type = "CP"; caseStatus.EndDate = null; DatabaseContext.SaveChanges(); request.CaseStatusId = caseStatus.Id; request.StartDate = DateTime.Now.AddDays(-50).Date; Action act = () => _caseStatusGateway.UpdateCaseStatus(request); act.Should().Throw <InvalidStartDateException>().WithMessage("Start date overlaps with previous status start date."); DatabaseContext.CaseStatuses.FirstOrDefault(x => x.Id == caseStatus.Id); }
public void WhenMatchingIDReturnsActiveCaseStatusesWhenMultiple() { var(_, person) = CaseStatusHelper.SavePersonWithMultipleCaseStatusToDatabase(DatabaseContext); var response = _caseStatusGateway.GetActiveCaseStatusesByPersonId(person.Id); response.Count.Should().Be(2); }
public void WhenMatchingIDAndPastCaseStatusReturnEmptyList() { var(_, person) = CaseStatusHelper.SavePersonWithPastCaseStatusToDatabase(DatabaseContext); var response = _caseStatusGateway.GetActiveCaseStatusesByPersonId(person.Id); response.Should().BeEmpty(); }
public void WhenStartDateIsInThePastReturnsItIsValid() { var badRequest = CaseStatusHelper.CreateCaseStatusRequest(startDate: DateTime.Today.AddDays(-2)); var response = _createCaseStatusRequestValidator.Validate(badRequest); response.IsValid.Should().BeTrue(); }
public void WhenNoOverlappingDatesNoCaseStatusesReturned() { var(_, person) = CaseStatusHelper.SavePersonWithPastCaseStatusToDatabase(DatabaseContext); var response = _caseStatusGateway.GetClosedCaseStatusesByPersonIdAndDate(person.Id, DateTime.Today); response.Should().BeEmpty(); }
public void ReplaceActiveCaseStatusAnswersThrowsAnExceptionWhenCaseStatusNotFound() { var request = CaseStatusHelper.CreateCaseStatusAnswerRequest(); Action act = () => _caseStatusGateway.ReplaceCaseStatusAnswers(request); act.Should().Throw <CaseStatusDoesNotExistException>().WithMessage($"Case status id {request.CaseStatusId} does not exist."); }
public void WhenRequestIsValidReturnsItIsValid() { var validRequest = CaseStatusHelper.CreateCaseStatusRequest(); var response = _createCaseStatusRequestValidator.Validate(validRequest); response.IsValid.Should().BeTrue(); }
public void WhenOverlappingDatesReturnsCaseStatusWithOverlappingDates() { var(caseStatus, person) = CaseStatusHelper.SavePersonWithPastCaseStatusToDatabase(DatabaseContext); var response = _caseStatusGateway.GetClosedCaseStatusesByPersonIdAndDate(caseStatus.PersonId, DateTime.Today.AddDays(-2)); response.Count.Should().Be(1); }
public void WhenStartDateIsInTheFutureReturnsErrorWithMessage() { var badRequest = CaseStatusHelper.CreateCaseStatusRequest(startDate: DateTime.Today.AddDays(1)); var response = _createCaseStatusRequestValidator.Validate(badRequest); response.IsValid.Should().BeFalse(); response.Errors.Should().Contain(e => e.ErrorMessage == "'start_date' must be today or in the past"); }
public void WhenTypeIsNotCPorCINorLACReturnsErrorWithMessage() { var validRequest = CaseStatusHelper.CreateCaseStatusRequest(type: "random"); var response = _createCaseStatusRequestValidator.Validate(validRequest); response.IsValid.Should().BeFalse(); response.Errors.Should().Contain(e => e.ErrorMessage == "'type' must be CIN, CP or LAC."); }
public void WhenCreatedByIsNotAnEmailAddressReturnsErrorWithMessage() { var badRequest = CaseStatusHelper.CreateCaseStatusRequest(createdBy: "foobar"); var response = _createCaseStatusRequestValidator.Validate(badRequest); response.IsValid.Should().BeFalse(); response.Errors.Should().Contain(e => e.ErrorMessage == "'createdBy' must be an email address."); }
public void WhenStartDateIsDefaultDateTimeValueReturnsErrorWithMessage() { var badRequest = CaseStatusHelper.CreateCaseStatusAnswerRequest(startDate: DateTime.MinValue); var response = _createCaseStatusAnswerRequestValidator.Validate(badRequest); response.IsValid.Should().BeFalse(); response.Errors.Should().Contain(e => e.ErrorMessage == "'startDate' must have a valid value"); }
public void CallsCaseStatusUseCaseToCreateCaseStatus() { _mockCaseStatusesUseCase.Setup(x => x.ExecutePost(It.IsAny <CreateCaseStatusRequest>())); var request = CaseStatusHelper.CreateCaseStatusRequest(); _caseStatusController.CreateCaseStatus(request); _mockCaseStatusesUseCase.Verify(x => x.ExecutePost(request)); }
public void WhenMatchingIDReturnsActiveCaseStatusesWithNoActiveAnswers() { var(_, person, _) = CaseStatusHelper.SavePersonCaseStatusWithAnswersToDatabase(DatabaseContext, endDate: DateTime.Today.AddDays(-1)); var response = _caseStatusGateway.GetActiveCaseStatusesByPersonId(person.Id); response.First().Answers.Count.Should().Be(1); response.First().Answers.First().EndDate.Should().NotBeNull(); }
public void WhenNotesIsAbove1000CharactersReturnsErrorWithMessage() { var badRequest = CaseStatusHelper.CreateCaseStatusRequest(notes: _faker.Random.String(1001)); var response = _createCaseStatusRequestValidator.Validate(badRequest); response.IsValid.Should().BeFalse(); response.Errors.Should().Contain(e => e.ErrorMessage == "'notes' must be less than or equal to 1,000 characters."); }
public void WhenTypeIsLACAndTheAnswerCountIsOneReturnsItIsValid() { var answers = CaseStatusHelper.CreateCaseStatusRequestAnswers(min: 2, max: 2); var request = CaseStatusHelper.CreateCaseStatusRequest(answers: answers); var response = _createCaseStatusRequestValidator.Validate(request); response.IsValid.Should().BeTrue(); }
public void SetUp() { _mockCaseStatusGateway = new Mock <ICaseStatusGateway>(); _mockDatabaseGateway = new Mock <IDatabaseGateway>(); _caseStatusesUseCase = new CaseStatusesUseCase(_mockCaseStatusGateway.Object, _mockDatabaseGateway.Object); _request = CaseStatusHelper.CreateCaseStatusAnswerRequest(); _lacCaseStatusDomain = CaseStatusHelper.CreateCaseStatus(type: "LAC").ToDomain(); _worker = TestHelpers.CreateWorker(); _lacCaseStatus = TestHelpers.CreateCaseStatus(type: "LAC"); }
public void WhenTypeIsLACAndProvidedAnswersCountIsNotOneItThrowsInvalidCaseStatusAnswersRequestException() { _mockCaseStatusGateway.Setup(x => x.GetCasesStatusByCaseStatusId(It.IsAny <long>())).Returns(_lacCaseStatus.ToDomain()); _request.Answers = CaseStatusHelper.CreateCaseStatusRequestAnswers(min: 5, max: 5); Action act = () => _caseStatusesUseCase.ExecutePostCaseStatusAnswer(_request); act.Should().Throw <InvalidCaseStatusAnswersRequestException>().WithMessage("LAC must have only two answers"); }
public void WhenAnswerCountIsNotOneOrTwoReturnsErrorWithMessage(int answerCount) { var answers = CaseStatusHelper.CreateCaseStatusRequestAnswers(min: answerCount, max: answerCount); var request = CaseStatusHelper.CreateCaseStatusAnswerRequest(answers: answers); var response = _createCaseStatusAnswerRequestValidator.Validate(request); response.IsValid.Should().BeFalse(); response.Errors.Should().Contain(e => e.ErrorMessage == "Provide either one or two answers only"); }
public void SetUp() { _answers = CaseStatusHelper.CreateCaseStatusRequestAnswers(min: 1, max: 1); _mockCaseStatusGateway = new Mock <ICaseStatusGateway>(); _mockDatabaseGateway = new Mock <IDatabaseGateway>(); _caseStatusesUseCase = new CaseStatusesUseCase(_mockCaseStatusGateway.Object, _mockDatabaseGateway.Object); _request = CaseStatusHelper.CreateCaseStatusAnswerRequest(answers: _answers); _cpCaseStatusDomain = CaseStatusHelper.CreateCaseStatus(type: "CP").ToDomain(); _worker = TestHelpers.CreateWorker(); _cpCaseStatus = TestHelpers.CreateCaseStatus(type: "CP"); }
public void WhenRequestIsValidReturnsSuccessfulResponse() { var caseStatusDomain = CaseStatusHelper.CreateCaseStatus().ToDomain(); _mockCaseStatusesUseCase.Setup(x => x.ExecutePostCaseStatusAnswer(_request)).Returns(caseStatusDomain.ToResponse()); var response = _caseStatusController.CreateCaseStatusAnswers(_request) as ObjectResult; response?.StatusCode.Should().Be(201); response?.Value.Should().Be("Successfully created case status answers."); }
public void WhenTypeIsLACAndTheAnswerCountIsNotTwoReturnsErrorWithMessage(int answerCount) { var answers = CaseStatusHelper.CreateCaseStatusRequestAnswers(min: answerCount, max: answerCount); var request = CaseStatusHelper.CreateCaseStatusRequest(answers: answers, type: "LAC"); var response = _createCaseStatusRequestValidator.Validate(request); response.IsValid.Should().BeFalse(); response.Errors.Should().Contain(e => e.ErrorMessage == "LAC type must have two answers only"); }
public void WhenStartDateIsNotProvidedReturnsErrorMessage() { var badRequest = CaseStatusHelper.CreateCaseStatusRequest(); badRequest.StartDate = DateTime.MinValue; var response = _createCaseStatusRequestValidator.Validate(badRequest); response.IsValid.Should().BeFalse(); response.Errors.Should().Contain(e => e.ErrorMessage == "'startDate' must be provided."); }