@@ -11,14 +11,18 @@ import com.lasthopesoftware.bluewater.client.playback.engine.bootstrap.ManagedPl
1111import com.lasthopesoftware.bluewater.client.playback.engine.preparation.PreparedPlaybackQueueResourceManagement
1212import com.lasthopesoftware.bluewater.client.playback.file.PositionedFile
1313import com.lasthopesoftware.bluewater.client.playback.file.PositionedPlayingFile
14- import com.lasthopesoftware.bluewater.client.playback.file.preparation.FakeMappedPlayableFilePreparationSourceProvider
14+ import com.lasthopesoftware.bluewater.client.playback.file.fakes.FakePreparedPlayableFile
15+ import com.lasthopesoftware.bluewater.client.playback.file.fakes.ResolvablePlaybackHandler
1516import com.lasthopesoftware.bluewater.client.playback.file.preparation.queues.CompletingFileQueueProvider
1617import com.lasthopesoftware.bluewater.client.playback.nowplaying.storage.NowPlaying
1718import com.lasthopesoftware.bluewater.client.playback.nowplaying.storage.NowPlayingRepository
1819import com.lasthopesoftware.bluewater.client.playback.volume.PlaylistVolumeManager
1920import com.lasthopesoftware.bluewater.shared.promises.extensions.DeferredPromise
2021import com.lasthopesoftware.bluewater.shared.promises.extensions.toExpiringFuture
22+ import com.lasthopesoftware.promises.extensions.toPromise
2123import com.namehillsoftware.handoff.promises.Promise
24+ import io.mockk.every
25+ import io.mockk.mockk
2226import org.assertj.core.api.Assertions.assertThat
2327import org.joda.time.Duration
2428import org.junit.jupiter.api.BeforeAll
@@ -31,15 +35,14 @@ class `When Playback Is Resumed` {
3135 }
3236
3337 private val mut by lazy {
34- val fakePlaybackPreparerProvider = FakeMappedPlayableFilePreparationSourceProvider (
35- listOf (
36- ServiceFile (" 1" ),
37- ServiceFile (" 2" ),
38- ServiceFile (" 3" ),
39- ServiceFile (" 4" ),
40- ServiceFile (" 5" )
41- )
42- )
38+ val playlist = listOf (
39+ ServiceFile (" 1" ),
40+ ServiceFile (" 2" ),
41+ ServiceFile (" 3" ),
42+ ServiceFile (" 4" ),
43+ ServiceFile (" 5" )
44+ )
45+
4346 val library = Library (id = libraryId)
4447 val libraryProvider = FakeLibraryRepository (library)
4548 val nowPlayingRepository =
@@ -49,7 +52,22 @@ class `When Playback Is Resumed` {
4952 )
5053 val preparedPlaybackQueueResourceManagement =
5154 PreparedPlaybackQueueResourceManagement (
52- fakePlaybackPreparerProvider,
55+ mockk {
56+ every { providePlayableFilePreparationSource() } returns mockk {
57+ every { promisePreparedPlaybackFile(LibraryId (libraryId), any(), any()) } answers {
58+ val prepareAt = thirdArg<Duration >()
59+ preparedAt = prepareAt
60+ val playbackHandler = ResolvablePlaybackHandler ()
61+ playbackHandler.setCurrentPosition(prepareAt.millis.toInt())
62+
63+ FakePreparedPlayableFile (playbackHandler).toPromise()
64+ }
65+
66+ val firstPlaybackHandler = ResolvablePlaybackHandler ()
67+ firstPlaybackHandler.setCurrentPosition(450 )
68+ every { promisePreparedPlaybackFile(LibraryId (libraryId), ServiceFile (" 1" ), Duration .ZERO ) } returns FakePreparedPlayableFile (firstPlaybackHandler).toPromise()
69+ }
70+ },
5371 FakePlaybackQueueConfiguration (maxQueueSize = 0 )
5472 )
5573 val playbackBootstrapper = ManagedPlaylistPlayer (
@@ -66,7 +84,7 @@ class `When Playback Is Resumed` {
6684 playbackBootstrapper,
6785 playbackBootstrapper,
6886 )
69- Triple (fakePlaybackPreparerProvider , nowPlayingRepository, playbackEngine)
87+ Triple (playlist , nowPlayingRepository, playbackEngine)
7088 }
7189
7290 private var preparedAt: Duration ? = null
@@ -75,34 +93,18 @@ class `When Playback Is Resumed` {
7593
7694 @BeforeAll
7795 fun before () {
78- val (fakePlaybackPreparerProvider, nowPlayingRepository, playbackEngine) = mut
79-
80- val deferredResume = DeferredPromise (Unit )
81-
82- fakePlaybackPreparerProvider.preparationSourceBeingProvided { serviceFile, deferredPreparedPlayableFile ->
83- val playbackHandler = deferredPreparedPlayableFile.resolve()
84- if (serviceFile == ServiceFile (" 1" ))
85- playbackHandler.setCurrentPosition(450 )
86-
87- if (serviceFile == ServiceFile (" 2" )) {
88- preparedAt = deferredPreparedPlayableFile.preparedAt
89- deferredResume.resolve()
90- }
91- }
96+ val (playlist, nowPlayingRepository, playbackEngine) = mut
9297
93- val promisedCollectedFiles = Promise {
94- val collectedFiles = mutableListOf<PositionedPlayingFile ?>()
95- playbackEngine.setOnPlayingFileChanged { _, f ->
96- collectedFiles.add(f)
98+ val collectedFiles = mutableListOf<PositionedPlayingFile ?>()
9799
98- deferredResume.then { _ -> it.sendResolution(collectedFiles) }
99- }
100+ playbackEngine.setOnPlayingFileChanged { _, f ->
101+ collectedFiles.add(f)
100102 }
101103
102104 playbackEngine
103105 .startPlaylist(
104106 LibraryId (libraryId),
105- fakePlaybackPreparerProvider.deferredResolutions.keys.toList() ,
107+ playlist ,
106108 0
107109 )
108110 .toExpiringFuture()
@@ -112,7 +114,17 @@ class `When Playback Is Resumed` {
112114
113115 playbackEngine.skipToNext().toExpiringFuture().get()
114116
117+ val deferredResume = DeferredPromise (Unit )
118+ val promisedCollectedFiles = Promise {
119+ playbackEngine.setOnPlayingFileChanged { _, f ->
120+ collectedFiles.add(f)
121+
122+ deferredResume.then { _ -> it.sendResolution(collectedFiles) }
123+ }
124+ }
125+
115126 playbackEngine.resume().toExpiringFuture().get()
127+ deferredResume.resolve()
116128
117129 positionedFiles = promisedCollectedFiles.toExpiringFuture().get()
118130
0 commit comments