public async Task TransitionToState(IState state) { if (state == null) { throw new ArgumentNullException(nameof(state)); } _traceLogger.Verbose($"Entering '{state.Id}' state."); await _inner.TransitionToState(state).ConfigureAwait(false); _traceLogger.Verbose($"Entered '{state.Id}' state."); }
public ProjectionSystem( IStateTransitionOrchestrator <TItem> stateTransitionOrchestrator, IStateFactory <TItem> uninitialisedStateFactory, IStateFactory <TItem> creatingStateFactory, IStateFactory <TItem> validStateFactory, IStateFactory <TItem> expiredStateFactory, IStateFactory <TItem> updatingStateFactory, ISyncLockFactory getProjectionLockFactory) { if (stateTransitionOrchestrator == null) { throw new ArgumentNullException(nameof(stateTransitionOrchestrator)); } if (uninitialisedStateFactory == null) { throw new ArgumentNullException(nameof(uninitialisedStateFactory)); } if (creatingStateFactory == null) { throw new ArgumentNullException(nameof(creatingStateFactory)); } if (validStateFactory == null) { throw new ArgumentNullException(nameof(validStateFactory)); } if (expiredStateFactory == null) { throw new ArgumentNullException(nameof(expiredStateFactory)); } if (updatingStateFactory == null) { throw new ArgumentNullException(nameof(updatingStateFactory)); } if (getProjectionLockFactory == null) { throw new ArgumentNullException(nameof(getProjectionLockFactory)); } _stateTransitionOrchestrator = stateTransitionOrchestrator; _creatingState = creatingStateFactory.Create(this); _validState = validStateFactory.Create(this); _expiredState = expiredStateFactory.Create(this); _updatingState = updatingStateFactory.Create(this); _getProjectionLockFactory = getProjectionLockFactory; var initialisationTask = _stateTransitionOrchestrator .TransitionToState(uninitialisedStateFactory.Create(this)); if (!initialisationTask.IsCompleted) { initialisationTask.RunSynchronously(); } }
public virtual void SetUp() { _stateTransitionOrchestrator = _stateTransitionOrchestrator.Fake(); _uninitialisedStateFactory = _uninitialisedStateFactory.Fake(); _creatingStateFactory = _creatingStateFactory.Fake(); _validStateFactory = _validStateFactory.Fake(); _expiredStateFactory = _expiredStateFactory.Fake(); _updatingStateFactory = _updatingStateFactory.Fake(); _getProjectionLockFactory = _getProjectionLockFactory.Fake(); _uninitialisedState = _uninitialisedState.Fake(); _creatingState = _creatingState.Fake(); _validState = _validState.Fake(); _expiredState = _expiredState.Fake(); _updatingState = _updatingState.Fake(); _initialiseStateCall = A.CallTo(() => _stateTransitionOrchestrator.TransitionToState(A <IState <Department> > .That.Matches(state => state.Id == StateId.Uninitialised))); _initialiseStateTask = new Task(() => {}); _initialiseStateCall.Returns(_initialiseStateTask); ConfigureStateFactory_ToReturnState(_uninitialisedStateFactory, _uninitialisedState); ConfigureStateFactory_ToReturnState(_creatingStateFactory, _creatingState); ConfigureStateFactory_ToReturnState(_validStateFactory, _validState); ConfigureStateFactory_ToReturnState(_expiredStateFactory, _expiredState); ConfigureStateFactory_ToReturnState(_updatingStateFactory, _updatingState); ConfigureState_ToHaveStateId(_uninitialisedState, StateId.Uninitialised); ConfigureState_ToHaveStateId(_creatingState, StateId.Creating); ConfigureState_ToHaveStateId(_validState, StateId.Valid); ConfigureState_ToHaveStateId(_expiredState, StateId.Expired); ConfigureState_ToHaveStateId(_updatingState, StateId.Updating); _sut = new ProjectionSystem <Department>( _stateTransitionOrchestrator, _uninitialisedStateFactory, _creatingStateFactory, _validStateFactory, _expiredStateFactory, _updatingStateFactory, _getProjectionLockFactory); }
public async Task InvalidateProjection() { await _stateTransitionOrchestrator.TransitionToState(_expiredState).ConfigureAwait(false); }