-
Notifications
You must be signed in to change notification settings - Fork 26
Expand file tree
/
Copy pathPlayerTest.kt
More file actions
119 lines (105 loc) · 4.29 KB
/
PlayerTest.kt
File metadata and controls
119 lines (105 loc) · 4.29 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
package io.music_assistant.client.feature
import androidx.compose.ui.test.junit4.createComposeRule
import androidx.test.ext.junit.runners.AndroidJUnit4
import io.music_assistant.client.api.ServiceClient
import io.music_assistant.client.data.model.server.PlayerState
import io.music_assistant.client.data.model.server.ServerMediaItem
import io.music_assistant.client.support.FakeServiceClient
import io.music_assistant.client.support.Qualifiers
import io.music_assistant.client.support.ServerMediaItemFixtures
import io.music_assistant.client.support.ServerPlayerFixtures
import io.music_assistant.client.support.launchLoggedInApp
import io.music_assistant.client.support.pages.Page
import io.music_assistant.client.support.pages.assertCurrentPlayer
import io.music_assistant.client.support.pages.pause
import io.music_assistant.client.support.pages.playMedia
import io.music_assistant.client.support.rules.createTestRuleChain
import org.hamcrest.CoreMatchers.equalTo
import org.hamcrest.MatcherAssert.assertThat
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
import org.koin.java.KoinJavaComponent.inject
import org.robolectric.annotation.Config
@RunWith(AndroidJUnit4::class)
@Config(qualifiers = Qualifiers.MEDIUM_PHONE)
class PlayerTest {
@get:Rule
val testRuleChain = createTestRuleChain()
@get:Rule
val composeTestRule = createComposeRule()
private val serviceClient: FakeServiceClient by inject(ServiceClient::class.java)
@Test
fun `can play album`() {
val album = ServerMediaItemFixtures.album()
val track = ServerMediaItemFixtures.track(album = album)
serviceClient.addToLibrary(track)
val player = ServerPlayerFixtures.player()
serviceClient.addPlayer(player)
launchLoggedInApp(composeTestRule, serviceClient)
.clickOnMedia(album)
.clickPlay()
.assertCurrentPlayer(player.displayName, playing = true, item = track.name)
.assertPlayerState(
serviceClient,
player.playerId,
playerState = PlayerState.PLAYING,
serverMediaItem = track,
)
}
@Test
fun `can play track from album`() {
val album = ServerMediaItemFixtures.album()
val track1 = ServerMediaItemFixtures.track(album = album)
val track2 = ServerMediaItemFixtures.track(album = album)
serviceClient.addToLibrary(track1, track2)
val player = ServerPlayerFixtures.player()
serviceClient.addPlayer(player)
launchLoggedInApp(composeTestRule, serviceClient)
.clickOnMedia(album)
.playMedia(track2)
.assertCurrentPlayer(player.displayName, playing = true, item = track2.name)
.assertPlayerState(
serviceClient,
player.playerId,
playerState = PlayerState.PLAYING,
serverMediaItem = track2,
)
.playMedia(track1)
.assertCurrentPlayer(player.displayName, playing = true, item = track1.name)
.assertPlayerState(
serviceClient,
player.playerId,
playerState = PlayerState.PLAYING,
serverMediaItem = track1,
)
}
@Test
fun `can pause playback`() {
val track = ServerMediaItemFixtures.track()
serviceClient.addToLibrary(track)
val player = ServerPlayerFixtures.player()
serviceClient.addPlayer(player)
launchLoggedInApp(composeTestRule, serviceClient)
.playMedia(track)
.assertCurrentPlayer(player.displayName, playing = true, item = track.name)
.pause()
.assertCurrentPlayer(player.displayName, playing = false, item = track.name)
.assertPlayerState(
serviceClient,
player.playerId,
playerState = PlayerState.PAUSED,
serverMediaItem = track,
)
}
}
private fun <T : Page> T.assertPlayerState(
serviceClient: FakeServiceClient,
playerId: String,
playerState: PlayerState,
serverMediaItem: ServerMediaItem?,
): T {
assertThat(serviceClient.getState(playerId), equalTo(playerState))
assertThat(serviceClient.getCurrentlyPlaying(playerId), equalTo(serverMediaItem))
return this
}