public RunSyncInteractor CreateSyncInteractor(PushNotificationSyncSourceState sourceState)
 {
     return(new RunSyncInteractor(
                SyncManager,
                AnalyticsService,
                sourceState
                ));
 }
            public async Task TracksIfSyncSucceeds(PushNotificationSyncSourceState sourceState)
            {
                SyncManager.ForceFullSync().Returns(Observable.Return(SyncState.Sleep));
                var interactor = CreateSyncInteractor(sourceState);

                await interactor.Execute().SingleAsync();

                AnalyticsService.PushNotificationSyncStarted.Received().Track(sourceState.ToString());
                AnalyticsService.PushNotificationSyncFinished.Received().Track(sourceState.ToString());
                AnalyticsService.PushNotificationSyncFailed.DidNotReceive().Track(Arg.Any <string>(), Arg.Any <string>(), Arg.Any <string>(), Arg.Any <string>());
            }
        public RunSyncInteractor(
            ISyncManager syncManager,
            IAnalyticsService analyticsService,
            PushNotificationSyncSourceState sourceState)
        {
            Ensure.Argument.IsNotNull(syncManager, nameof(syncManager));
            Ensure.Argument.IsNotNull(analyticsService, nameof(analyticsService));
            Ensure.Argument.IsNotNull(sourceState, nameof(sourceState));

            this.syncManager      = syncManager;
            this.analyticsService = analyticsService;
            this.sourceState      = sourceState;
        }
            public async Task TracksIfSyncFails(PushNotificationSyncSourceState sourceState)
            {
                var exception = new Exception();

                SyncManager.ForceFullSync().Returns(Observable.Throw <SyncState>(exception));
                var interactor = CreateSyncInteractor(sourceState);

                await interactor.Execute().SingleAsync();

                AnalyticsService.PushNotificationSyncStarted.Received().Track(sourceState.ToString());
                AnalyticsService.PushNotificationSyncFinished.Received().Track(sourceState.ToString());
                AnalyticsService.PushNotificationSyncFailed.Received().Track(sourceState.ToString(), exception.GetType().FullName, exception.Message, exception.StackTrace);
            }
            public async Task ReturnsFailedIfSyncFails(PushNotificationSyncSourceState sourceState)
            {
                var interactor = CreateSyncInteractor(sourceState);

                (await interactor.Execute().SingleAsync()).Should().Be(SyncOutcome.Failed);
            }
            public async Task ReturnsNewDataIfSyncSucceeds(PushNotificationSyncSourceState sourceState)
            {
                var interactor = CreateSyncInteractor(sourceState);

                (await interactor.Execute().SingleAsync()).Should().Be(SyncOutcome.NewData);
            }