2017-11-21 20:34:53 +01:00
|
|
|
package org.moire.ultrasonic.api.subsonic
|
|
|
|
|
|
|
|
import okhttp3.mockwebserver.MockResponse
|
|
|
|
import org.amshove.kluent.`should equal to`
|
|
|
|
import org.junit.Before
|
|
|
|
import org.junit.Rule
|
|
|
|
import org.junit.Test
|
|
|
|
import org.moire.ultrasonic.api.subsonic.SubsonicAPIVersions.V1_6_0
|
2017-11-22 21:56:16 +01:00
|
|
|
import org.moire.ultrasonic.api.subsonic.interceptors.toHexBytes
|
2017-11-21 20:34:53 +01:00
|
|
|
import org.moire.ultrasonic.api.subsonic.rules.MockWebServerRule
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Integration test for [SubsonicAPIClient.getStreamUrl] method.
|
|
|
|
*/
|
|
|
|
class GetStreamUrlTest {
|
|
|
|
@JvmField @Rule val mockWebServerRule = MockWebServerRule()
|
|
|
|
|
|
|
|
val id = "boom"
|
|
|
|
private lateinit var client: SubsonicAPIClient
|
|
|
|
private lateinit var expectedUrl: String
|
|
|
|
|
|
|
|
@Before
|
|
|
|
fun setUp() {
|
|
|
|
client = SubsonicAPIClient(mockWebServerRule.mockWebServer.url("/").toString(),
|
|
|
|
USERNAME, PASSWORD, V1_6_0, CLIENT_ID)
|
|
|
|
val baseExpectedUrl = mockWebServerRule.mockWebServer.url("").toString()
|
|
|
|
expectedUrl = "$baseExpectedUrl/rest/stream.view?id=$id&u=$USERNAME" +
|
2017-12-02 21:49:35 +01:00
|
|
|
"&c=$CLIENT_ID&f=json&v=${V1_6_0.restApiVersion}&p=enc:${PASSWORD.toHexBytes()}"
|
2017-11-21 20:34:53 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
fun `Should return valid stream url`() {
|
|
|
|
mockWebServerRule.enqueueResponse("ping_ok.json")
|
|
|
|
|
|
|
|
val streamUrl = client.getStreamUrl(id)
|
|
|
|
|
|
|
|
streamUrl `should equal to` expectedUrl
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
fun `Should still return stream url if connection failed`() {
|
|
|
|
mockWebServerRule.mockWebServer.enqueue(MockResponse().setResponseCode(500))
|
|
|
|
|
|
|
|
val streamUrl = client.getStreamUrl(id)
|
|
|
|
|
|
|
|
streamUrl `should equal to` expectedUrl
|
|
|
|
}
|
|
|
|
}
|