private static async Task SendAddJobMessagesToQueueAsync(QueueClient queueClient, string jobUid) { try { var jobSchedule = new JobSchedule { RepeatCount = 99, StartAt = DateTime.Now, EndAt = DateTime.Now.AddMinutes(15), RepeatInterval = TimeSpan.FromMinutes(1), }; var scheduleJobMessage = new ScheduleJobMessage { SubscriptionName = "scheduling-testsubscription-1", JobUid = jobUid, Schedule = jobSchedule, }; var messageBody = JsonConvert.SerializeObject(scheduleJobMessage); var message = new Message(Encoding.UTF8.GetBytes(messageBody)); await queueClient.SendAsync(message); } catch (Exception exception) { Console.WriteLine($"Exception: {exception.Message}"); } }
public Result <IJobDetail> BuildJob(ScheduleJobMessage scheduleJobMessage) => ValidateJobBuilderInput(scheduleJobMessage) .OnFailureCompensate(error => Result.Failure($"Unable to build job: {error}")) .OnSuccessTry(() => JobBuilder.Create <ScheduledJob>() .WithIdentity(scheduleJobMessage.JobUid, scheduleJobMessage.SubscriptionName) .UsingJobData(SchedulingConstants.JobUid, scheduleJobMessage.JobUid) .UsingJobData(SchedulingConstants.SubscriptionName, scheduleJobMessage.SubscriptionName) .Build());
public void Setup() { scheduledJobBuilder = new ScheduledJobBuilder(); defaultMessage = new ScheduleJobMessage { JobUid = "unique id 1234", SubscriptionName = "foo", }; }
public void Throw_Exception_If_JobUid_Is_Empty() { var message = new ScheduleJobMessage { SubscriptionName = "foo", JobUid = string.Empty, Schedule = new JobSchedule(), }; var result = scheduledJobBuilder.BuildJob(message); result.Error.Should().Contain("JobUid and SubscriptionName are required"); }
public void Throw_Exception_If_SubscriptionName_Is_Null() { var message = new ScheduleJobMessage { SubscriptionName = null, JobUid = "unique id 1234", Schedule = new JobSchedule(), }; var result = scheduledJobBuilder.BuildJob(message); result.Error.Should().Contain("JobUid and SubscriptionName are required"); }
public void BuildJob_Throw_Exception_If_Schedule_Is_Missing() { var message = new ScheduleJobMessage { JobUid = "unique id 1234", SubscriptionName = "foo", Schedule = null, }; var result = scheduledJobBuilder.BuildJob(message); result.Error.Should().Contain("Schedule property is required "); }
private static Result ValidateJobBuilderInput(ScheduleJobMessage scheduleJobMessage) { if (string.IsNullOrEmpty(scheduleJobMessage.JobUid) || string.IsNullOrEmpty(scheduleJobMessage.SubscriptionName)) { return(Result.Failure("JobUid and SubscriptionName are required for scheduling a job")); } if (scheduleJobMessage.Schedule == null) { return(Result.Failure("Schedule property is required in order to schedule job")); } return(Result.Success()); }
public void Throw_Exception_If_RepeatCount_Is_Negative() { var message = new ScheduleJobMessage { SubscriptionName = "foo", JobUid = "unique id 1234", Schedule = new JobSchedule { RepeatCount = -1, StartAt = DateTime.Now.AddMinutes(5), } }; var result = scheduledJobBuilder.BuildTrigger(message.JobUid, message.SubscriptionName, message.Schedule); result.Error.Should().Contain("Scheduled RepeatCount cannot be a negative number"); }
public void Throw_Exception_If_Scheduled_StartAt_Is_In_The_Past_And_Job_Is_Not_Repeating() { var message = new ScheduleJobMessage { SubscriptionName = "foo", JobUid = "unique id 1234", Schedule = new JobSchedule { StartAt = DateTime.Now.AddMinutes(-5), } }; var result = scheduledJobBuilder.BuildTrigger(message.JobUid, message.SubscriptionName, message.Schedule); result.IsFailure.Should().BeTrue(); result.Error.Should().Contain("StartAt cannot be a date in the past if the job is not set to repeat"); }
public void Throw_Exception_If_RepeatCount_Is_Provided_With_No_RepeatInterval() { var message = new ScheduleJobMessage { SubscriptionName = "foo", JobUid = "unique id 1234", Schedule = new JobSchedule { StartAt = DateTime.Now, RepeatCount = 99, } }; var result = scheduledJobBuilder.BuildTrigger(message.JobUid, message.SubscriptionName, message.Schedule); result.Error.Should().Contain("RepeatCount must also have a RepeatInterval"); }
public void Throw_Exception_If_Scheduled_EndAt_Is_In_The_Past() { var message = new ScheduleJobMessage { SubscriptionName = "foo", JobUid = "unique id 1234", Schedule = new JobSchedule { EndAt = DateTime.Now.AddMinutes(-1), StartAt = DateTime.Now.AddMinutes(1), } }; var result = scheduledJobBuilder.BuildTrigger(message.JobUid, message.SubscriptionName, message.Schedule); result.Error.Should().Contain("EndAt cannot be a date in the past"); }
public void Throw_Exception_If_RepeatInterval_Is_Less_Than_The_Minimum_Requirement() { var message = new ScheduleJobMessage { SubscriptionName = "foo", JobUid = "unique id 1234", Schedule = new JobSchedule { RepeatInterval = TimeSpan.FromMilliseconds(5), StartAt = DateTime.Now.AddSeconds(5), } }; var result = scheduledJobBuilder.BuildTrigger(message.JobUid, message.SubscriptionName, message.Schedule); result.Error.Should().Contain("Scheduling RepeatInterval time must be a greater then or equal to"); }