public void OnStart()
        {
            #region arrange
            var gameLogicHandler = Substitute.For <ILogicHandler>();

            var gameEngineInterface = Substitute.For <IGameEngineInterface>();

            var winTransitionSound = Substitute.For <IGameObject>();
            gameEngineInterface.FindGameObject("WinTransitionSound").Returns(winTransitionSound);

            var audioSourceWinTransition = Substitute.For <IAudioSource>();
            winTransitionSound.GetComponent <IAudioSource>().Returns(audioSourceWinTransition);

            var dataLayer = Substitute.For <IDataLayer>();

            var winTransitionLogicProvider = new WinTransitionLogicProvider(gameLogicHandler, gameEngineInterface, dataLayer);

            #endregion

            #region act
            winTransitionLogicProvider.OnStart();
            #endregion

            #region assert
            var privateAudioSource = GetPrivateMember <IAudioSource>("_audioSourceWinTransition", winTransitionLogicProvider);
            Assert.AreEqual(audioSourceWinTransition, privateAudioSource);
            #endregion
        }
        public void OnActivate()
        {
            #region arrange
            var gameLogicHandler    = Substitute.For <ILogicHandler>();
            var gameEngineInterface = Substitute.For <IGameEngineInterface>();
            var dataLayer           = Substitute.For <IDataLayer>();

            var winTransitionLogicProvider = new WinTransitionLogicProvider(gameLogicHandler, gameEngineInterface, dataLayer);

            var audioSourceWinTransition = Substitute.For <IAudioSource>();
            SetPrivateMember("_audioSourceWinTransition", winTransitionLogicProvider, audioSourceWinTransition);
            #endregion

            #region act
            winTransitionLogicProvider.OnActivate();
            #endregion

            #region assert
            audioSourceWinTransition.Received().Play();
            #endregion
        }
        public void UpdateGameObjects_NotPlaying()
        {
            #region arrange
            var gameLogicHandler    = Substitute.For <ILogicHandler>();
            var gameEngineInterface = Substitute.For <IGameEngineInterface>();
            var dataLayer           = Substitute.For <IDataLayer>();

            var winTransitionLogicProvider = new WinTransitionLogicProvider(gameLogicHandler, gameEngineInterface, dataLayer);

            var audioSourceWinTransition = Substitute.For <IAudioSource>();
            audioSourceWinTransition.IsPlaying.Returns(false);
            SetPrivateMember("_audioSourceWinTransition", winTransitionLogicProvider, audioSourceWinTransition);
            #endregion

            #region act
            winTransitionLogicProvider.UpdateGameObjects();
            #endregion

            #region assert
            gameLogicHandler.Received().SetSceneState((int)GameState.Win);
            #endregion
        }