public void CallMusicPlayerPauseWhenAPauseSongEventIsCatched()
        {
            PlayerViewModel viewModel = new PlayerViewModel();

            PlayerObserver.NotifyPauseSong();

            MockMusicPlayer.Verify(mp => mp.Pause());
        }
        public void CallMusicPlayerResumeWhenAResumeSongEventIsCatched()
        {
            PlayerViewModel viewModel = new PlayerViewModel();

            PlayerObserver.NotifyResumeSong();

            MockMusicPlayer.Verify(mp => mp.Resume());
        }
        public void CallMusicPlayerPlayWhenAPlaySongEventIsCatched()
        {
            MediaFile file = Create.MediaFile();
            Song songToPlay = Create.Song(file);
            PlayerViewModel viewModel = new PlayerViewModel();
            MockService.Setup(s => s.GetMediaFileById(songToPlay.MediaFileId)).Returns(file);

            PlayerObserver.NotifyPlayNewSong(songToPlay);

            MockMusicPlayer.Verify(mp => mp.Stop());
            MockService.Verify(s => s.GetMediaFileById(songToPlay.MediaFileId));
            MockMusicPlayer.Verify(mp => mp.Play(file.Id, file.Content));
            Assert.AreEqual(songToPlay, viewModel.CurrentSong);
        }
        public void DoNotRefreshTimeIfTotalTimeIsEqualToZero()
        {
            const int elapsedTime = 3010;
            const int totalTime = 0;
            PlayerViewModel viewModel = new PlayerViewModel
            {
                SliderIsOnDrag = true,
                PurcentagePlayed = 5
            };

            MockMusicPlayer.Raise(mp => mp.PurcentagePlayed += null, elapsedTime, totalTime);

            Assert.AreEqual(5, viewModel.PurcentagePlayed);
            Assert.AreEqual("00:00:00", viewModel.ElapsedTime);
            Assert.AreEqual("00:00:00", viewModel.TotalTime);
        }
        public void CallMusicPlayerStopWhenAStopSongEventIsCatched()
        {
            PlayerViewModel viewModel = new PlayerViewModel
                                            {
                                                CurrentSong = Create.Song(),
                                                ElapsedTime = "0",
                                                PurcentagePlayed = 0,TotalTime = "0"
                                            };

            PlayerObserver.NotifyStopSong();

            MockMusicPlayer.Verify(mp => mp.Stop());
            Assert.IsNull(viewModel.ElapsedTime);
            Assert.IsNull(viewModel.TotalTime);
            Assert.IsNull(viewModel.CurrentSong);
            Assert.AreEqual(0, viewModel.PurcentagePlayed);
        }
        public void IfPlaySongReturnsAnExceptionCatchIt()
        {
            ExceptionEventCatcher catcher = new ExceptionEventCatcher();
            MediaFile file = Create.MediaFile();
            Song songToPlay = Create.Song(file);
            PlayerViewModel viewModel = new PlayerViewModel();
            MockService.Setup(s => s.GetMediaFileById(songToPlay.MediaFileId)).Returns(file);
            MockMusicPlayer.Setup(mp => mp.Play(file.Id, file.Content)).Throws<Exception>();

            PlayerObserver.NotifyPlayNewSong(songToPlay);

            Assert.IsTrue(catcher.ExceptionEventInvoked);
            Assert.IsTrue(catcher.Exception is PlayException);
        }
        public void SetValueToZeroIfNoActualSongIsPlayed()
        {
            PlayerViewModel viewModel = new PlayerViewModel
                {
                    SliderIsOnDrag = false,
                    CurrentSong = null

                };
            const double value = 50;

            viewModel.StopDragCommand.Execute(value);

            MockMusicPlayer.Verify(mp => mp.PlayAt(It.IsAny<double>()), Times.Never());
            Assert.AreEqual(0, viewModel.PurcentagePlayed);
        }
        public void SetSliderIsOnDragOnStartDragCommand()
        {
            PlayerViewModel viewModel = new PlayerViewModel { SliderIsOnDrag = false };

            viewModel.StartDragCommand.Execute(null);

            Assert.IsTrue(viewModel.SliderIsOnDrag);
        }
        public void SetSliderIsNotOnDragOnStopDragCommandAndMoveMusicToTheValue()
        {
            PlayerViewModel viewModel = new PlayerViewModel
                {
                    SliderIsOnDrag = true,
                    CurrentSong = Create.Song()
                };
            const double value = 50;

            viewModel.StopDragCommand.Execute(value);

            Assert.IsFalse(viewModel.SliderIsOnDrag);
            MockMusicPlayer.Verify(mp => mp.PlayAt(value));
        }
        public void RefreshTimePlayedWithoutPurcentageIfSliderIsDragging()
        {
            const int elapsedTime = 3010;
            const int totalTime = 3690;
            PlayerViewModel viewModel = new PlayerViewModel {
                SliderIsOnDrag = true,
                PurcentagePlayed = 5
            };

            MockMusicPlayer.Raise(mp => mp.PurcentagePlayed += null, elapsedTime, totalTime);

            Assert.AreEqual(5, viewModel.PurcentagePlayed);
            Assert.AreEqual("00:50:10", viewModel.ElapsedTime);
            Assert.AreEqual("01:01:30", viewModel.TotalTime);
        }
        public void RefreshTimePlayedAndPurcentage()
        {
            const int elapsedTime = 3010;
            const int totalTime = 3690;
            PlayerViewModel viewModel = new PlayerViewModel {SliderIsOnDrag = false};

            MockMusicPlayer.Raise(mp => mp.PurcentagePlayed += null, elapsedTime, totalTime );

            Assert.AreEqual(elapsedTime * 100 / totalTime, viewModel.PurcentagePlayed);
            Assert.AreEqual("00:50:10", viewModel.ElapsedTime);
            Assert.AreEqual("01:01:30", viewModel.TotalTime);
        }
        public void RaiseNewSongFinishedEventWhenASongIsFinishedAndCleanAllValue()
        {
            PlayerEventCatcher catcher = new PlayerEventCatcher();
            PlayerViewModel viewModel = new PlayerViewModel
                                            {
                                                CurrentSong = Create.Song(),
                                                ElapsedTime = "0",
                                                PurcentagePlayed = 0,
                                                TotalTime = "0"
                                            };

            MockMusicPlayer.Raise(mp => mp.SongFinished += null);

            Assert.IsTrue(catcher.SongFinishedInvoked);
            Assert.IsNull(viewModel.ElapsedTime);
            Assert.IsNull(viewModel.TotalTime);
            Assert.IsNull(viewModel.CurrentSong);
            Assert.AreEqual(0, viewModel.PurcentagePlayed);
        }