public void AmpachePlayerNextNotShufflingNotPlayingTest()
        {
            var model = new AmpacheModel();
            var mock = new PlayerHandle(model);

            mock.SetPauseState(false);
            var first = new AmpacheSong();
            var second = new AmpacheSong();
            model.Playlist = new List<AmpacheSong>{ first, second };
            model.PlayingSong = null;
            model.IsPlaying = false;
            model.NextRequested = true;
            System.Threading.Thread.Sleep(100);
            Assert.That(model.PlayPauseRequested, Is.False);
            Assert.That(mock.PauseCalls, Is.EqualTo(0));
            Assert.That(mock.UnpauseCalls, Is.EqualTo(0));
            Assert.That(mock.PlaySongCalls, Is.EqualTo(1));
            Assert.That(mock.StopCalls, Is.EqualTo(0));
            Assert.That(mock.SeekToCalls, Is.EqualTo(0));
            Assert.That(mock.GetPauseState(), Is.False);
            Assert.That(model.IsPlaying, Is.True);
            Assert.That(model.PlayingSong, Is.SameAs(first));
            Assert.That(mock.LastStartedSong, Is.SameAs(first));
        }
        public void AmpachePlayerStopWhilePlayTest()
        {
            var model = new AmpacheModel();
            var mock = new PlayerHandle(model);

            mock.SetPauseState(false);
            var first = new AmpacheSong();
            var second = new AmpacheSong();
            model.Playlist = new List<AmpacheSong>{ first, second };
            model.PlayingSong = second;
            model.IsPlaying = true;
            model.StopRequested = true;
            System.Threading.Thread.Sleep(100);
            Assert.That(model.PlayPauseRequested, Is.False);
            Assert.That(mock.PauseCalls, Is.EqualTo(0));
            Assert.That(mock.UnpauseCalls, Is.EqualTo(0));
            Assert.That(mock.PlaySongCalls, Is.EqualTo(0));
            Assert.That(mock.StopCalls, Is.EqualTo(1));
            Assert.That(mock.SeekToCalls, Is.EqualTo(0));
            Assert.That(mock.GetPauseState(), Is.False);
            Assert.That(model.IsPlaying, Is.False);
            Assert.That(model.PlayingSong, Is.Null);
        }
        public void AmpachePlayerSeekingTest()
        {
            var model = new AmpacheModel();
            var mock = new PlayerHandle(model);

            mock.SetPauseState(false);
            var first = new AmpacheSong();
            var second = new AmpacheSong();
            second.TrackLength = TimeSpan.FromMinutes(1);
            model.Playlist = new List<AmpacheSong>{ first, second };
            model.PlayingSong = second;
            model.IsPlaying = true;
            model.Configuration = new UserConfiguration();
            model.Configuration.AllowSeeking = true;
            model.RequestedSeekToPercentage = 50;
            System.Threading.Thread.Sleep(100);
            Assert.That(model.PlayPauseRequested, Is.False);
            Assert.That(mock.PauseCalls, Is.EqualTo(0));
            Assert.That(mock.UnpauseCalls, Is.EqualTo(0));
            Assert.That(mock.PlaySongCalls, Is.EqualTo(0));
            Assert.That(mock.StopCalls, Is.EqualTo(0));
            Assert.That(mock.SeekToCalls, Is.EqualTo(1));
            Assert.That(mock.GetPauseState(), Is.False);
            Assert.That(model.IsPlaying, Is.True);
            Assert.That(model.PlayingSong, Is.SameAs(second));
        }
        public void AmpachePlayerPreviousAfterSomePlayTest()
        {
            var model = new AmpacheModel();
            var mock = new PlayerHandle(model);

            mock.SetPauseState(false);
            var first = new AmpacheSong();
            var second = new AmpacheSong();
            model.Playlist = new List<AmpacheSong>{ first, second };
            model.PlayingSong = second;
            mock.SetPlayerPositionMilliSecond(10000);
            model.IsPlaying = true;
            model.PreviousRequested = true;
            System.Threading.Thread.Sleep(100);
            Assert.That(model.PlayPauseRequested, Is.False);
            Assert.That(mock.PauseCalls, Is.EqualTo(0));
            Assert.That(mock.UnpauseCalls, Is.EqualTo(0));
            Assert.That(mock.PlaySongCalls, Is.EqualTo(1));
            Assert.That(mock.StopCalls, Is.EqualTo(0));
            Assert.That(mock.SeekToCalls, Is.EqualTo(0));
            Assert.That(mock.GetPauseState(), Is.False);
            Assert.That(model.IsPlaying, Is.True);
            Assert.That(model.PlayingSong, Is.SameAs(second));
            Assert.That(mock.LastStartedSong, Is.SameAs(second));
        }
        public void AmpachePlayerPlayPauseResumesPlaybackWhenPasusedTest()
        {
            var model = new AmpacheModel();
            var mock = new PlayerHandle(model);

            mock.SetPauseState(true);
            model.PlayPauseRequested = true;
            System.Threading.Thread.Sleep(100);
            Assert.That(model.PlayPauseRequested, Is.False);
            Assert.That(mock.UnpauseCalls, Is.EqualTo(1));
            Assert.That(mock.PauseCalls, Is.EqualTo(0));
            Assert.That(mock.StopCalls, Is.EqualTo(0));
            Assert.That(mock.SeekToCalls, Is.EqualTo(0));
            Assert.That(mock.PlaySongCalls, Is.EqualTo(0));
            Assert.That(mock.GetPauseState(), Is.False);
        }
        public void AmpachePlayerNextShufflingTest()
        {
            var model = new AmpacheModel();
            var mock = new PlayerHandle(model);

            mock.SetPauseState(false);
            var first = new AmpacheSong();
            var second = new AmpacheSong();
            model.Playlist = new List<AmpacheSong>{ first, second };
            model.PlayingSong = first;
            model.IsPlaying = true;
            model.Shuffling = true;
            model.NextRequested = true;
            System.Threading.Thread.Sleep(100);
            Assert.That(model.PlayPauseRequested, Is.False);
            Assert.That(mock.PauseCalls, Is.EqualTo(0));
            Assert.That(mock.UnpauseCalls, Is.EqualTo(0));
            Assert.That(mock.PlaySongCalls, Is.EqualTo(1));
            Assert.That(mock.StopCalls, Is.EqualTo(0));
            Assert.That(mock.SeekToCalls, Is.EqualTo(0));
            Assert.That(mock.GetPauseState(), Is.False);
            Assert.That(model.IsPlaying, Is.True);
            // TODO: find a way to test randomized shuffeling
        }