public BaseResult AddTrigger(AddTriggerInput input)
        {
            var result = new BaseResult();

            try
            {
                TriggerBuilder triggerBuilder = TriggerBuilder
                                                .Create()
                                                .ForJob(input.Job, input.Group);

                if (!string.IsNullOrEmpty(input.Name))
                {
                    triggerBuilder = triggerBuilder.WithIdentity(input.Name);
                }

                switch (input.TriggerType)
                {
                case "Simple":
                    triggerBuilder = triggerBuilder.WithSimpleSchedule(x =>
                    {
                        if (input.RepeatForever)
                        {
                            x.RepeatForever();
                        }
                        else
                        {
                            x.WithRepeatCount(input.RepeatCount);
                        }

                        x.WithInterval(TimeSpan.FromMilliseconds(input.RepeatInterval));
                    });
                    if (!string.IsNullOrEmpty(input.StartDate))
                    {
                        var startDate = DateTimeOffset.Parse(input.StartDate);
                        triggerBuilder.StartAt(startDate);
                    }
                    break;

                case "Cron":
                    triggerBuilder = triggerBuilder.WithCronSchedule(input.CronExpression);
                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                }

                _schedulerProvider.Scheduler.ScheduleJob(triggerBuilder.Build());
                result.Success = true;
            }
            catch (Exception ex)
            {
                result.ErrorMessage = ex.Message;
            }
            return(result);
        }
        private AddTriggerOutput AssertTriggerJobDataMap(
            AddTriggerInput input,
            Action <IDictionary <string, object> > assertAction,
            params RegisteredInputType[] inputTypes)
        {
            var stub = new SchedulerHostStub();

            var command = new AddTriggerCommand(() => stub.Value, inputTypes);

            AddTriggerOutput result = (AddTriggerOutput)command.Execute(input);

            result.AssertSuccessfull();
            assertAction(stub.GetSingleGroup().GetSingleJob().GetSingleTrigger().TriggerJobData);

            return(result);
        }
        private AddTriggerOutput AssertTriggerType(AddTriggerInput input, Action <TriggerType> assertAction)
        {
            var stub = new SchedulerHostStub();

            var command = new AddTriggerCommand(() => stub.Value, new RegisteredInputType[0]);

            AddTriggerOutput result = (AddTriggerOutput)command.Execute(input);

            result.AssertSuccessfull();

            TriggerStub trigger = stub.GetSingleGroup().GetSingleJob().GetSingleTrigger();

            assertAction(trigger.Trigger);

            return(result);
        }