public TheStartMethod() { sinceParameters = Substitute.For <ISinceParameterRepository>(); api = Substitute.For <ITogglApi>(); timeService = Substitute.For <ITimeService>(); leakyBucket = Substitute.For <ILeakyBucket>(); leakyBucket.TryClaimFreeSlots(Arg.Any <int>(), out _).Returns(true); rateLimiter = Substitute.For <IRateLimiter>(); rateLimiter.WaitForFreeSlot().Returns(Observable.Return(Unit.Default)); timeService.CurrentDateTime.Returns(now); state = new FetchJustTimeEntriesSinceState(api, sinceParameters, timeService, leakyBucket, rateLimiter); }
private static void configurePullTimeEntriesTransitions( ITransitionConfigurator transitions, ITogglApi api, ITogglDataSource dataSource, ITogglDatabase database, IAnalyticsService analyticsService, ITimeService timeService, ILeakyBucket leakyBucket, IRateLimiter rateLimiter, ILastTimeUsageStorage lastTimeUsageStorage, StateResult entryPoint) { var fetchTimeEntries = new FetchJustTimeEntriesSinceState(api, database.SinceParameters, timeService, leakyBucket, rateLimiter); var ensureFetchTimeEntriesSucceeded = new EnsureFetchListSucceededState <ITimeEntry>(); var placeholderStateFactory = new CreatePlaceholdersStateFactory( dataSource, analyticsService, lastTimeUsageStorage, timeService); var createWorkspacePlaceholder = placeholderStateFactory.ForWorkspaces(); var createProjectPlaceholder = placeholderStateFactory.ForProjects(); var createTaskPlaceholder = placeholderStateFactory.ForTasks(); var createTagPlaceholder = placeholderStateFactory.ForTags(); var persistTimeEntries = new PersistListState <ITimeEntry, IDatabaseTimeEntry, IThreadSafeTimeEntry>(dataSource.TimeEntries, TimeEntry.Clean); var updateTimeEntriesSinceDate = new UpdateSinceDateState <ITimeEntry>(database.SinceParameters); var timeEntriesAnalytics = new TimeEntriesAnalyticsState(analyticsService); transitions.ConfigureTransition(entryPoint, fetchTimeEntries); transitions.ConfigureTransition(fetchTimeEntries.PreventOverloadingServer, new DeadEndState()); transitions.ConfigureTransition(fetchTimeEntries.Done, ensureFetchTimeEntriesSucceeded); transitions.ConfigureTransition(ensureFetchTimeEntriesSucceeded.ErrorOccured, new FailureState()); transitions.ConfigureTransition(ensureFetchTimeEntriesSucceeded.Done, timeEntriesAnalytics); transitions.ConfigureTransition(timeEntriesAnalytics.Done, createWorkspacePlaceholder); transitions.ConfigureTransition(createWorkspacePlaceholder.Done, createProjectPlaceholder); transitions.ConfigureTransition(createProjectPlaceholder.Done, createTaskPlaceholder); transitions.ConfigureTransition(createTaskPlaceholder.Done, createTagPlaceholder); transitions.ConfigureTransition(createTagPlaceholder.Done, persistTimeEntries); transitions.ConfigureTransition(persistTimeEntries.Done, updateTimeEntriesSinceDate); transitions.ConfigureTransition(updateTimeEntriesSinceDate.Done, new DeadEndState()); }