public void CallingRefreshAfterCausesNewRefresh()
        {
            var mockFinder = new Mock <ISpheroFinder>();

            Ioc.RegisterServiceInstance(mockFinder.Object);

            Action <IList <IAvailableSphero> > successCallback = null;
            Action <Exception> failureCallback = null;

            mockFinder.Setup(
                finder => finder.Find(It.IsAny <Action <IList <IAvailableSphero> > >(), It.IsAny <Action <Exception> >()))
            .Callback((Action <IList <IAvailableSphero> > onSuccess, Action <Exception> onError) =>
            {
                successCallback = onSuccess;
                failureCallback = onError;
            });

            var service = new SpheroListService();

            Assert.IsTrue(service.IsRefreshing);
            Assert.IsNull(service.AvailableSpheros);

            var mockList = new List <IAvailableSphero>();

            successCallback(mockList);

            Assert.IsFalse(service.IsRefreshing);
            service.RefreshList();

            Assert.IsTrue(service.IsRefreshing);
            mockFinder.Verify(
                finder => finder.Find(It.IsAny <Action <IList <IAvailableSphero> > >(), It.IsAny <Action <Exception> >()),
                Times.Exactly(2));
        }
        public void CallingRefreshMultipleTimesConcurrentlyJustResultsInOneCall()
        {
            var mockFinder = new Mock <ISpheroFinder>();

            Ioc.RegisterServiceInstance(mockFinder.Object);

            var service = new SpheroListService();

            Assert.IsTrue(service.IsRefreshing);
            Assert.IsNull(service.AvailableSpheros);

            service.RefreshList();
            service.RefreshList();
            service.RefreshList();
            service.RefreshList();
            service.RefreshList();

            mockFinder.Verify(
                finder => finder.Find(It.IsAny <Action <IList <IAvailableSphero> > >(), It.IsAny <Action <Exception> >()),
                Times.Once());
        }