public void Setup()
 {
     _testLogger        = new TestLogger();
     LogManager.Adapter = _testLogger.LoggingAdapter;
     _listener          = new ConditionalJobChainingListener();
     _context           = MockRepository.GenerateMock <IJobExecutionContext>();
     _scheduler         = MockRepository.GenerateMock <IScheduler>();
     _context.Expect(c => c.Scheduler).Return(_scheduler).Repeat.Times(0, 100);
     _jobDetail = MockRepository.GenerateMock <IJobDetail>();
 }
        private static IJobListener CreateJobChainingJobListener(List <IJobDetail> jobs)
        {
            var myJobListener = new ConditionalJobChainingListener();

            foreach (var job in jobs)
            {
                var predecessorJobKey = job.JobDataMap[Constants.FieldNames.RunOnSuccessOf];
                if (predecessorJobKey != null)
                {
                    var predecessorJob = jobs.FirstOrDefault(j => j.Key.ToString() == predecessorJobKey.ToString());
                    if (predecessorJob == null)
                    {
                        throw new Exception($"Unable to find predecessor job '{predecessorJobKey}' for job '{job.Key}'");
                    }
                    myJobListener.AddJobChainLink(predecessorJob.Key, JobResultCriteria.OnSuccess, job.Key);
                }

                predecessorJobKey = job.JobDataMap[Constants.FieldNames.RunOnFailureOf];
                if (predecessorJobKey != null)
                {
                    var predecessorJob = jobs.FirstOrDefault(j => j.Key.ToString() == predecessorJobKey.ToString());
                    if (predecessorJob == null)
                    {
                        throw new Exception($"Unable to find predecessor job '{predecessorJobKey}' for job '{job.Key}'");
                    }
                    myJobListener.AddJobChainLink(predecessorJob.Key, JobResultCriteria.OnFailure, job.Key);
                }

                predecessorJobKey = job.JobDataMap[Constants.FieldNames.RunOnCompletionOf];
                if (predecessorJobKey != null)
                {
                    var predecessorJob = jobs.FirstOrDefault(j => j.Key.ToString() == predecessorJobKey.ToString());
                    if (predecessorJob == null)
                    {
                        throw new Exception($"Unable to find predecessor job '{predecessorJobKey}' for job '{job.Key}'");
                    }
                    myJobListener.AddJobChainLink(predecessorJob.Key, JobResultCriteria.OnCompletion, job.Key);
                }
            }

            return(myJobListener);
        }