funkwhale-app-android/app/src/test/java/audio/funkwhale/ffa/playback/OAuthDatasourceTest.kt

80 lines
2.1 KiB
Kotlin

package audio.funkwhale.ffa.playback
import android.content.Context
import android.net.Uri
import audio.funkwhale.ffa.utils.OAuth
import com.google.android.exoplayer2.upstream.DataSpec
import com.google.android.exoplayer2.upstream.HttpDataSource
import com.google.android.exoplayer2.upstream.TransferListener
import io.mockk.MockKAnnotations
import io.mockk.every
import io.mockk.impl.annotations.InjectMockKs
import io.mockk.impl.annotations.MockK
import io.mockk.mockk
import io.mockk.verify
import org.junit.Before
import org.junit.Test
import strikt.api.expectThat
import strikt.assertions.isEqualTo
class OAuthDatasourceTest {
@InjectMockKs
private lateinit var datasource: OAuthDatasource
@MockK
private lateinit var context: Context
@MockK
private lateinit var http: HttpDataSource
@MockK
private lateinit var oAuth: OAuth
private var dataSpec: DataSpec = DataSpec(Uri.EMPTY)
@Before
fun setup() {
MockKAnnotations.init(this, relaxUnitFun = true)
}
@Test
fun `open() should set accessToken and delegate to http dataSource`() {
every { http.open(any()) } returns 0
every { oAuth.tryRefreshAccessToken(any()) } returns true
every { oAuth.state().accessToken } returns "accessToken"
datasource.open(dataSpec)
verify { http.open(dataSpec) }
verify { http.setRequestProperty("Authorization", "Bearer accessToken") }
}
@Test
fun `close() should delegate to http dataSource`() {
datasource.close()
verify { http.close() }
}
@Test
fun `addTransferListener() should delegate to http dataSource`() {
val transferListener = mockk<TransferListener>()
datasource.addTransferListener(transferListener)
verify { http.addTransferListener(transferListener) }
}
@Test
fun `read() should delegate to http dataSource`() {
every { http.read(any(), any(), any()) } returns 0
datasource.read("123".encodeToByteArray(), 1, 2)
verify { http.read("123".encodeToByteArray(), 1, 2) }
}
@Test
fun `getUri() should delegate to http dataSource`() {
every { http.uri } returns Uri.EMPTY
val result = datasource.uri
verify { http.uri }
expectThat(result).isEqualTo(Uri.EMPTY)
}
}