public void ApplyTo_DoesntOverwriteTargetNumberOfDays_WhenEventIsNotCancer() { // Arrange var eventMilestone = new EventMilestone { TargetNumberOfDays = 5, CompletedEvent = new ClockTickingCompletedEvent() }; var sut = new EventMilestoneTargetNumberOfDaysCancerPolicy(); // Act sut.ApplyTo(eventMilestone); // Assert Assert.AreEqual(5, eventMilestone.TargetNumberOfDays); }
public void ApplyTo_CorrectlyOverwritesTargetNumberOfDays_WhenEventCodeIsDiagnosticTestResultAvailable() { // Arrange var eventMilestone = new EventMilestone { TargetNumberOfDays = 5, Name = new EventName { Code = EventCode.DiagnosticsTestResultAvailable }, CompletedEvent = new ClockTickingCompletedEvent { Cancer = true } }; var sut = new EventMilestoneTargetNumberOfDaysCancerPolicy(); // Act sut.ApplyTo(eventMilestone); // Assert Assert.AreEqual(Constants.DignosticTestResultAvailableTargetNumberOfDaysForCancer, eventMilestone.TargetNumberOfDays); }
public void ApplyTo_CorrectlyOverwritesTargetNumberOfDays_WhenEventCodeIsOutpatientFirstAppointmentAttended() { // Arrange var eventMilestone = new EventMilestone { TargetNumberOfDays = 5, Name = new EventName { Code = EventCode.AttendedOutpatientFirstAppointment }, CompletedEvent = new ClockTickingCompletedEvent { Cancer = true } }; var sut = new EventMilestoneTargetNumberOfDaysCancerPolicy(); // Act sut.ApplyTo(eventMilestone); // Assert Assert.AreEqual(Constants.OutpatientFirstAppointmentAttendedTargetNumberOfDaysForCancer, eventMilestone.TargetNumberOfDays); }
private void GenerateEventMilestonesForEvent(Period period, CompletedEvent currentCompletedEvent, List <EventName> eventNames, UnitOfWork unitOfWork) { var eventMilestoneDateReferenceForTargetCancerPolicy = new EventMilestoneDateReferenceForTargetCancerPolicy(); var eventMilestoneTargetNumberOfDaysCancerPolicy = new EventMilestoneTargetNumberOfDaysCancerPolicy(); var destinationEvents = GetDestinationEventsForSourceEventType(currentCompletedEvent.Name.Code, unitOfWork); foreach (var destinationEvent in destinationEvents) { var dateReferenceForTarget = ComputeDateReference(destinationEvent, currentCompletedEvent, period); var eventMilestone = new EventMilestone { CompletedEvent = currentCompletedEvent, IsMandatory = destinationEvent.IsMandatory, TargetNumberOfDays = destinationEvent.TargetNumberOfDays, Name = eventNames.FirstOrDefault(name => name.Code == destinationEvent.DestinationName.Code), DateReferenceForTarget = dateReferenceForTarget }; eventMilestoneDateReferenceForTargetCancerPolicy.ApplyTo(eventMilestone); eventMilestoneTargetNumberOfDaysCancerPolicy.ApplyTo(eventMilestone); if (((currentCompletedEvent.Name.Code == EventCode.PatientCancelEvent || currentCompletedEvent.Name.Code == EventCode.HospitalCancelEvent || currentCompletedEvent.Name.Code == EventCode.DidNotAttend) && (period.CompletedEvents.Any(e => e.Name.Code == destinationEvent.EventForDateReferenceForTarget.Code))) || (currentCompletedEvent.Name.Code != EventCode.PatientCancelEvent && currentCompletedEvent.Name.Code != EventCode.HospitalCancelEvent && currentCompletedEvent.Name.Code != EventCode.DidNotAttend)) { if (destinationEvent.EventForDateReferenceForTarget != null) { period.MapEventMilestoneToCompletedEvent(currentCompletedEvent, eventMilestone, eventNames.FirstOrDefault(name => name.Code == destinationEvent.EventForDateReferenceForTarget.Code)); } unitOfWork.EventMilestones.Add(eventMilestone); } } }