public void GetActualSong()
        {
            SongToPlay song1 = new SongToPlay();
            SongToPlay song2 = new SongToPlay {IsPlaying = true};
            PlayList playList = new PlayList();
            playList.SongsToPlay.Add(song1);
            playList.SongsToPlay.Add(song2);

            Assert.AreEqual(song2, playList.ActualSong);
        }
        public void GetFirst()
        {
            SongToPlay song1 = new SongToPlay();
            SongToPlay song2 = new SongToPlay();
            SongToPlay song3 = new SongToPlay();
            PlayList playList = new PlayList();
            playList.SongsToPlay.Add(song1);
            playList.SongsToPlay.Add(song2);
            playList.OriginalSongs.Add(song3);

            Assert.AreEqual(song1, playList.GetFirst());
        }
 public virtual void AddSongs(ObservableCollection<Song> songs)
 {
     foreach (Song song in songs)
     {
         if (SongsToPlay.All(stp => stp.Song != song))
         {
             SongToPlay songToPlay = new SongToPlay() { Song = song };
             OriginalSongs.Add(songToPlay);
             SongsToPlay.Add(songToPlay);
         }
     }
 }
        public void WhenASongIsPlayedSetPlayedUnlessActualSongIfNull()
        {
            SongToPlay beforeSong = null;
            SongToPlay afterSong = new SongToPlay {Song = Create.Song()};
            mockPlayList.Setup(pl => pl.ActualSong).Returns(beforeSong);

            ViewModel.PlaySongCommand.Execute(afterSong);

            Assert.IsTrue(afterSong.IsPlaying);
            Assert.IsTrue(afterSong.Played);
        }
        public void SayIfItTheFirstThatIsPlaying()
        {
            SongToPlay song1 = new SongToPlay(){IsPlaying = true, Played = true};
            SongToPlay song2 = new SongToPlay();
            PlayList playList = new PlayList();
            playList.SongsToPlay.Add(song1);
            playList.SongsToPlay.Add(song2);

            Assert.IsTrue(playList.PlayingTheFirst);
        }
        public void PlayASong()
        {
            PlayerEventCatcher eventCatcher = new PlayerEventCatcher();
            SongToPlay song = new SongToPlay {Song = Create.Song()};

            ViewModel.PlaySongCommand.Execute(song);

            Assert.IsTrue(eventCatcher.PlaySongInvoked);
            Assert.AreEqual(song.Song, eventCatcher.SongToPlay);
            Assert.AreEqual(State.Play, ViewModel.PlayerState);
        }
        public void ReturnIsFinished()
        {
            SongToPlay song1 = new SongToPlay { Played = true };
            SongToPlay song2 = new SongToPlay();
            SongToPlay song3 = new SongToPlay { Played = true};
            PlayList playList = new PlayList();
            playList.SongsToPlay.Add(song1);
            playList.SongsToPlay.Add(song2);
            playList.SongsToPlay.Add(song3);

            Assert.IsFalse(playList.IsFinished);

            song3.IsPlaying = true;

            Assert.IsTrue(playList.IsFinished);
        }
        public void ReturnNullIfTheyAreNoSongOnPlayingMode()
        {
            SongToPlay song1 = new SongToPlay();
            PlayList playList = new PlayList();
            playList.SongsToPlay.Add(song1);

            Assert.IsNull(playList.ActualSong);
        }
        public void GetTheLast()
        {
            SongToPlay song1 = new SongToPlay ();
            SongToPlay song2 = new SongToPlay();
            SongToPlay song3 = new SongToPlay();
            PlayList playList = new PlayList();
            playList.SongsToPlay.Add(song1);
            playList.SongsToPlay.Add(song2);
            playList.SongsToPlay.Add(song3);

            Assert.AreEqual(song3, playList.GetLast());
        }
        public void ResetAllSongs()
        {
            SongToPlay song1 = new SongToPlay {Played = true};
            SongToPlay song2 = new SongToPlay ();
            SongToPlay song3 = new SongToPlay {Played = true, IsPlaying = true};
            PlayList playList = new PlayList();
            playList.SongsToPlay.Add(song1);
            playList.SongsToPlay.Add(song2);
            playList.SongsToPlay.Add(song3);

            playList.ResetAllSongs();

            Assert.IsFalse(song1.Played);
            Assert.IsFalse(song2.Played);
            Assert.IsFalse(song3.Played);
            Assert.IsFalse(song1.IsPlaying);
            Assert.IsFalse(song2.IsPlaying);
            Assert.IsFalse(song3.IsPlaying);
        }
        public void GetPreviousSong()
        {
            SongToPlay song1 = new SongToPlay();
            SongToPlay song2 = new SongToPlay { IsPlaying = true };
            SongToPlay song3 = new SongToPlay();
            PlayList playList = new PlayList();
            playList.SongsToPlay.Add(song1);
            playList.SongsToPlay.Add(song2);
            playList.SongsToPlay.Add(song3);

            Assert.AreEqual(song1, playList.GetPreviousSong());
        }
        public void IfPlayListIsTheBeginningAndRepeatIsActivatedPlayTheLastSong()
        {
            PlayerEventCatcher eventCatcher = new PlayerEventCatcher();
            SongToPlay song = new SongToPlay();
            ViewModel.PlayerState = State.Play;
            ViewModel.Repeat = true;
            mockPlayList.Setup(pl => pl.PlayingTheFirst).Returns(true);
            mockPlayList.Setup(pl => pl.GetLast()).Returns(song);

            ViewModel.PreviousSongCommand.Execute(null);

            mockPlayList.Verify(pl => pl.ResetAllSongs(), Times.Once());
            mockPlayList.Verify(pl => pl.GetLast(), Times.Once());
            Assert.IsTrue(eventCatcher.PlaySongInvoked);
            Assert.AreEqual(song.Song, eventCatcher.SongToPlay);
            Assert.AreEqual(State.Play, ViewModel.PlayerState);
        }
        public void WhenASongIsPlayedSetPlayedProperties()
        {
            SongToPlay beforeSong = new SongToPlay {Song = Create.Song(), IsPlaying = true, Played = true};
            SongToPlay afterSong = new SongToPlay {Song = Create.Song()};
            mockPlayList.Setup(pl => pl.ActualSong).Returns(beforeSong);

            ViewModel.PlaySongCommand.Execute(afterSong);

            Assert.IsFalse(beforeSong.IsPlaying);
            Assert.IsTrue(beforeSong.Played);
            Assert.IsTrue(afterSong.IsPlaying);
            Assert.IsTrue(afterSong.Played);
        }
        public void PlayTheFirstSongOfPlayListIfParameterIsNull()
        {
            PlayerEventCatcher eventCatcher = new PlayerEventCatcher();
            SongToPlay song = new SongToPlay {Song = Create.Song()};
            mockPlayList.Setup(pl => pl.GetFirst()).Returns(song);

            ViewModel.PlaySongCommand.Execute(null);

            Assert.IsTrue(eventCatcher.PlaySongInvoked);
            Assert.AreEqual(song.Song, eventCatcher.SongToPlay);
            Assert.AreEqual(State.Play, ViewModel.PlayerState);
        }
        public void PlayPreviousSong()
        {
            SongToPlay song1 = new SongToPlay {Song = Create.Song()};
            mockPlayList.Setup(pl => pl.GetPreviousSong()).Returns(song1);
            PlayerEventCatcher eventCatcher = new PlayerEventCatcher();

            ViewModel.PreviousSongCommand.Execute(null);

            mockPlayList.Verify();
            Assert.IsTrue(eventCatcher.PlaySongInvoked);
            Assert.AreEqual(song1.Song, eventCatcher.SongToPlay);
        }
        public void PlayNextSongWhenTheCurrentIsFinished()
        {
            SongToPlay song = new SongToPlay {Song = Create.Song()};
            mockPlayList.Setup(pl => pl.GetNextSong()).Returns(song);
            PlayerEventCatcher eventCatcher = new PlayerEventCatcher();

            PlayerObserver.NotifyCurrentSongFinished();

            mockPlayList.Verify(pl => pl.GetNextSong(), Times.Once());
            Assert.IsTrue(eventCatcher.PlaySongInvoked);
            Assert.AreEqual(song.Song, eventCatcher.SongToPlay);
        }
        public void PlayNextSongOfPlayList()
        {
            SongToPlay song = new SongToPlay {Song = Create.Song()};
            mockPlayList.Setup(pl => pl.GetNextSong()).Returns(song);
            PlayerEventCatcher eventCatcher = new PlayerEventCatcher();

            ViewModel.NextSongCommand.Execute(null);

            mockPlayList.Verify(pl => pl.GetNextSong(), Times.Once());
            Assert.IsTrue(eventCatcher.PlaySongInvoked);
            Assert.AreEqual(song.Song, eventCatcher.SongToPlay);
        }
 private void RaiseNewPlaySongDemand(SongToPlay song)
 {
     if (!PlayList.IsEmpty)
     {
         SongToPlay songToPlay = song ?? PlayList.GetFirst();
         if (PlayList.ActualSong != null)
         {
             PlayList.ActualSong.IsPlaying = false;
         }
         songToPlay.IsPlaying = true;
         songToPlay.Played = true;
         PlayerObserver.NotifyPlayNewSong(songToPlay.Song);
         PlayerState = State.Play;
     }
 }
        public void IfPlayListIsFinishedAndRepeatIsActivatedPlayTheFirstSong()
        {
            PlayerEventCatcher eventCatcher = new PlayerEventCatcher();
            SongToPlay song = new SongToPlay();
            ViewModel.PlayerState = State.Play;
            ViewModel.Repeat = true;
            mockPlayList.Setup(pl => pl.IsFinished).Returns(true);
            mockPlayList.Setup(pl => pl.GetFirst()).Returns(song);

            PlayerObserver.NotifyCurrentSongFinished();

            mockPlayList.Verify(pl => pl.ResetAllSongs(), Times.Once());
            mockPlayList.Verify(pl => pl.GetFirst(), Times.Once());
            Assert.IsTrue(eventCatcher.PlaySongInvoked);
            Assert.AreEqual(song.Song, eventCatcher.SongToPlay);
            Assert.AreEqual(State.Play, ViewModel.PlayerState);
        }