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(); }