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);
        }