예제 #1
0
 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);
 }
예제 #2
0
        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());
        }