public void Subscribe_EmptyObservableNeverTriggersInspection()
        {
            var durableJobStorage  = A.Fake <IDurableJobQueue <int, object> >();
            var jobResultInspector = A.Fake <IJobResultInspector <int, int, object> >();
            var observable         = new JobResult <int, int>[]
            { }.ToObservable();

            using (var writer = new JobResultJournalWriter <int, int, object>(observable, jobResultInspector, durableJobStorage,
                                                                              A.Fake <ILog>(), Scheduler.Immediate))
            {
                A.CallTo(() => jobResultInspector.Inspect(A <JobResult <int, int> > .Ignored)).MustNotHaveHappened();
            }
        }
        public void Subscribe_NullNotificationTriggersLogging()
        {
            var durableJobStorage  = A.Fake <IDurableJobQueue <int, object> >();
            var jobResultInspector = A.Fake <IJobResultInspector <int, int, object> >();
            var results            = new JobResult <int, int>[] { null };
            var observable         = results.ToObservable();
            var log = A.Fake <ILog>();

            using (var writer = new JobResultJournalWriter <int, int, object>(observable, jobResultInspector, durableJobStorage,
                                                                              log, Scheduler.Immediate))
            {
                A.CallTo(() => log.Error(CultureInfo.CurrentCulture, A <Action <FormatMessageHandler> > .Ignored))
                .MustHaveHappened(Repeated.Exactly.Times(results.Count(n => null == n)));
            }
        }
        public void Subscribe_IgnoresNullNotifications()
        {
            var durableJobStorage  = A.Fake <IDurableJobQueue <int, object> >();
            var jobResultInspector = A.Fake <IJobResultInspector <int, int, object> >();
            var items = new JobResult <int, int>[]
            {
                null,
                new JobResult <int, int>(1, 1),
                null,
                null,
                new JobResult <int, int>(1, 1)
            };
            var observable = items.ToObservable();

            using (var queue = new JobResultJournalWriter <int, int, object>(observable, jobResultInspector, durableJobStorage, A.Fake <ILog>(), Scheduler.Immediate))
            {
                A.CallTo(() => jobResultInspector.Inspect(A <JobResult <int, int> > .Ignored))
                .MustHaveHappened(Repeated.Exactly.Times(items.Count(n => null != n)));
            }
        }
        public void Subscribe_NullNotificationTriggersLogging()
        {
            var durableJobStorage = A.Fake<IDurableJobQueue<int, object>>();
            var jobResultInspector = A.Fake<IJobResultInspector<int, int, object>>();
            var results = new JobResult<int, int>[]	{ null };
            var observable = results.ToObservable();
            var log = A.Fake<ILog>();

            using (var writer = new JobResultJournalWriter<int, int, object>(observable, jobResultInspector, durableJobStorage,
            log, Scheduler.Immediate))
            {
                A.CallTo(() => log.Error(CultureInfo.CurrentCulture, A<Action<FormatMessageHandler>>.Ignored))
                    .MustHaveHappened(Repeated.Exactly.Times(results.Count(n => null == n)));
            }
        }
        public void Subscribe_NonemptyObservableTriggersInspection()
        {
            var durableJobStorage = A.Fake<IDurableJobQueue<int, object>>();
            var jobResultInspector = A.Fake<IJobResultInspector<int, int, object>>();
            var observable = new []
            {
                new JobResult<int, int>(1, 1)
            }.ToObservable();

            using (var writer = new JobResultJournalWriter<int, int, object>(observable, jobResultInspector, durableJobStorage,
                A.Fake<ILog>(), Scheduler.Immediate))
            {
                A.CallTo(() => jobResultInspector.Inspect(A<JobResult<int, int>>.Ignored)).MustHaveHappened(Repeated.Exactly.Once);
            }
        }
 public void Subscribe_IgnoresNullNotifications()
 {
     var durableJobStorage = A.Fake<IDurableJobQueue<int, object>>();
     var jobResultInspector = A.Fake<IJobResultInspector<int, int, object>>();
     var items = new JobResult<int, int>[]
     {
         null,
         new JobResult<int, int>(1, 1),
         null,
         null,
         new JobResult<int, int>(1, 1)
     };
     var observable = items.ToObservable();
     using (var queue = new JobResultJournalWriter<int, int, object>(observable, jobResultInspector, durableJobStorage, A.Fake<ILog>(), Scheduler.Immediate))
     {
         A.CallTo(() => jobResultInspector.Inspect(A<JobResult<int, int>>.Ignored))
             .MustHaveHappened(Repeated.Exactly.Times(items.Count(n => null != n)));
     }
 }
 public void Constructor_ThrowsOnNullObservable()
 {
     Assert.Throws<ArgumentNullException>(() => { using (var j = new JobResultJournalWriter<int, int, object>(null as IObservable<JobResult<int, int>>,
     A.Fake<IJobResultInspector<int, int, object>>(),
     A.Fake<IDurableJobQueue<int, object>>())) {} });
 }
 public void Constructor_ThrowsOnNullObservable()
 {
     Assert.Throws <ArgumentNullException>(() => { using (var j = new JobResultJournalWriter <int, int, object>(null as IObservable <JobResult <int, int> >,
                                                                                                                A.Fake <IJobResultInspector <int, int, object> >(),
                                                                                                                A.Fake <IDurableJobQueue <int, object> >())) {} });
 }