public JobRequestResult Process(JobRequest request)
 {
     #region Unaffected By Change
     if (request.RequestedByDate.CompareTo(DateTime.Now) < 0)
         return new JobRequestResult
             {Accepted = false, Errors = new List<IJobRequestError> {new JobInThePastError()}};
     using (var ctx = new SharedDbContext())
     {
         var matchingTasks = ctx.Job.Find(request.RequestedTask);
         if(matchingTasks == null)
             return new JobRequestResult
                 {Accepted = false, Errors = new List<IJobRequestError> {new UnknownJobIdError()}};
     #endregion Unaffected By Change
     #region New Code to Support limiting number of jobs per day to 4
         var maximumNumberOfJobsAlreadyScheduled = (from job in ctx.ScheduledJob
                                                    where job.ScheduledOn.Equals(request.RequestedByDate)
                                                    select job).Count() > 3;
         if (maximumNumberOfJobsAlreadyScheduled)
             return new JobRequestResult
                 {Accepted = false, Errors = new List<IJobRequestError> {new RequestedDateFullError()}};
     #endregion New Code to Support limiting number of jobs per day to 4
     #region Unaffected By Change
         var scheduledJob = ctx.ScheduledJob.Create();
         scheduledJob.ScheduledOn = request.RequestedByDate;
         ctx.ScheduledJob.Add(scheduledJob);
         ctx.SaveChanges();
     }
     return new JobRequestResult {Accepted = true, ScheduledToBeginOn = request.RequestedByDate};
     #endregion Unaffected By Change
 }
 public void Should_Schedule_Job_Based_On_Results()
 {
     var request = new JobRequest {RequestedByDate = DateTime.Now.AddDays(14), RequestedTask = GetKnownTaskId()};
     var sut = new JobProcessor();
     var result = sut.Process(request);
     result.ScheduledToBeginOn.CompareTo(request.RequestedByDate).ShouldBeInRange(-14, 0);
 }
 public void Should_Accept_Valid_Book_Job_Command()
 {
     var request = new JobRequest{RequestedByDate = DateTime.Now.AddDays(14), RequestedTask = GetKnownTaskId()};
     var sut = new Software_Design_Examples.Single_Responsibility.Feature_Change_1.JobProcessor();
     var result = sut.Process(request);
     result.Accepted.ShouldBeTrue();
 }
 public void Should_Reject_Book_Job_Command_For_Unknown_Task_Id_With_UnknownJobError()
 {
     var request = new JobRequest {RequestedByDate = DateTime.Now.AddDays(1), RequestedTask = 1231354957};
     var sut = new JobProcessor();
     var result = sut.Process(request);
     result.Errors.Any(x => x.GetType() == typeof(UnknownJobIdError)).ShouldBeTrue();
 }
 public void Should_Execute_Valid_Book_Job_Command()
 {
     var request = new JobRequest{RequestedByDate = DateTime.Now.AddDays(14), RequestedTask = GetKnownTaskId()};
     var sut = new JobProcessor();
     var result = sut.Process(request);
     result.Accepted.ShouldBeTrue();
 }
 public void Should_Reject_Book_Job_Command_For_The_Past_With_Input_Errors()
 {
     var request = new JobRequest
         {RequestedByDate = DateTime.Now.Subtract(TimeSpan.FromDays(1)), RequestedTask = GetKnownTaskId()};
     var sut = new Software_Design_Examples.Single_Responsibility.Feature_Change_1.JobProcessor();
     var result = sut.Process(request);
     result.Errors.Any(x => x.GetType() == typeof(JobInThePastError)).ShouldBeTrue();
 }
 public void Should_Reject_Book_Job_Command_For_The_Past_With_Input_Errors()
 {
     var request = new JobRequest
         {RequestedByDate = DateTime.Now.Subtract(TimeSpan.FromDays(1)), RequestedTask = GetKnownTaskId()};
     var sut = new JobProcessor();
     var result = sut.Process(request);
     result.Errors.Any(x => x.GetType() == typeof(JobInThePastError)).ShouldBeTrue();
 }
 public JobRequestResult Process(JobRequest request)
 {
     if (request.RequestedByDate.CompareTo(DateTime.Now) < 0)
         return new JobRequestResult
             {Accepted = false, Errors = new List<IJobRequestError> {new JobInThePastError()}};
     using (var ctx = new SharedDbContext())
     {
         var matchingTasks = ctx.Job.Find(request.RequestedTask);
         if(matchingTasks == null)
             return new JobRequestResult
                 {Accepted = false, Errors = new List<IJobRequestError> {new UnknownJobIdError()}};
         var scheduledJob = ctx.ScheduledJob.Create();
         scheduledJob.ScheduledOn = request.RequestedByDate;
         ctx.ScheduledJob.Add(scheduledJob);
         ctx.SaveChanges();
     }
     return new JobRequestResult {Accepted = true, ScheduledToBeginOn = request.RequestedByDate};
 }
 public void Should_Reject_Book_Job_Command_For_Unknown_Task_Id_With_UnknownJobError()
 {
     var request = new JobRequest {RequestedByDate = DateTime.Now.AddDays(2), RequestedTask = 1231354957};
     var sut = new Software_Design_Examples.Single_Responsibility.Feature_Change_1.JobProcessor();
     var result = sut.Process(request);
     result.Errors.Any(x => x.GetType() == typeof(UnknownJobIdError)).ShouldBeTrue();
 }
 public void Should_Schedule_Valid_Book_Job_Request_If_Scheduled_Work_Acceptable_for_Requested_Date()
 {
     var request = new JobRequest{RequestedByDate = DateTime.Now.AddDays(1), RequestedTask = GetKnownTaskId()};
     var sut = new Software_Design_Examples.Single_Responsibility.Feature_Change_1.JobProcessor();
     var result = sut.Process(request);
     result.ScheduledToBeginOn.Date.ShouldEqual(request.RequestedByDate.Date);
 }
 public void Should_Schedule_Job_Based_On_Results()
 {
     var request = new JobRequest {RequestedByDate = DateTime.Now.AddDays(14), RequestedTask = GetKnownTaskId()};
     var sut = new Software_Design_Examples.Single_Responsibility.Feature_Change_1.JobProcessor();
     var result = sut.Process(request);
     result.ScheduledToBeginOn.CompareTo(request.RequestedByDate).ShouldBeInRange(-14, 0);
 }
 public void Should_Reject_Valid_Book_Job_Request_If_Requested_Date_Full()
 {
     var request = new JobRequest{RequestedByDate = _dateWithTooManyScheduledJobs, RequestedTask = GetKnownTaskId()};
     var sut = new Software_Design_Examples.Single_Responsibility.Feature_Change_1.JobProcessor();
     var result = sut.Process(request);
     result.Errors.Any(x => x.GetType() == typeof(RequestedDateFullError)).ShouldBeTrue();
 }