From 6a30e59aa28555dc508e8f84445ab790639ef01d Mon Sep 17 00:00:00 2001
From: Eliot Berriot <contact@eliotberriot.com>
Date: Fri, 23 Mar 2018 16:28:30 +0100
Subject: [PATCH] Fix #97: Queue shuffle now apply only to tracks after the
 current one

---
 changes/changelog.d/97.enhancement        | 1 +
 front/src/store/queue.js                  | 5 +++--
 front/test/unit/specs/store/queue.spec.js | 8 ++++----
 3 files changed, 8 insertions(+), 6 deletions(-)
 create mode 100644 changes/changelog.d/97.enhancement

diff --git a/changes/changelog.d/97.enhancement b/changes/changelog.d/97.enhancement
new file mode 100644
index 00000000..21a552ae
--- /dev/null
+++ b/changes/changelog.d/97.enhancement
@@ -0,0 +1 @@
+Queue shuffle now apply only to tracks after the current one (#97)
diff --git a/front/src/store/queue.js b/front/src/store/queue.js
index 07263da6..a864405c 100644
--- a/front/src/store/queue.js
+++ b/front/src/store/queue.js
@@ -41,7 +41,6 @@ export default {
         state.currentIndex += 1
       }
     }
-
   },
   getters: {
     currentTrack: state => {
@@ -141,7 +140,9 @@ export default {
       commit('ended', true)
     },
     shuffle ({dispatch, commit, state}) {
-      let shuffled = _.shuffle(state.tracks)
+      let toKeep = state.tracks.slice(0, state.currentIndex + 1)
+      let toShuffle = state.tracks.slice(state.currentIndex + 1)
+      let shuffled = toKeep.concat(_.shuffle(toShuffle))
       commit('player/currentTime', 0, {root: true})
       commit('tracks', [])
       dispatch('appendMany', {tracks: shuffled})
diff --git a/front/test/unit/specs/store/queue.spec.js b/front/test/unit/specs/store/queue.spec.js
index 5439362d..b445229e 100644
--- a/front/test/unit/specs/store/queue.spec.js
+++ b/front/test/unit/specs/store/queue.spec.js
@@ -316,18 +316,18 @@ describe('store/queue', () => {
     })
     it('shuffle', (done) => {
       let _shuffle = sandbox.stub(_, 'shuffle')
-      let tracks = [1, 2, 3]
-      let shuffledTracks = [2, 3, 1]
+      let tracks = ['a', 'b', 'c', 'd', 'e']
+      let shuffledTracks = ['e', 'd', 'c']
       _shuffle.returns(shuffledTracks)
       testAction({
         action: store.actions.shuffle,
-        params: {state: {tracks: tracks}},
+        params: {state: {currentIndex: 1, tracks: tracks}},
         expectedMutations: [
           { type: 'player/currentTime', payload: 0 , options: {root: true}},
           { type: 'tracks', payload: [] }
         ],
         expectedActions: [
-          { type: 'appendMany', payload: {tracks: shuffledTracks} }
+          { type: 'appendMany', payload: {tracks: ['a', 'b'].concat(shuffledTracks)} }
         ]
       }, done)
     })
-- 
GitLab