package org.moire.ultrasonic.api.subsonic

import org.amshove.kluent.`should contain`
import org.amshove.kluent.`should not contain`
import org.junit.Test

/**
 * Integration test for [SubsonicAPIClient] that checks proper user password handling.
 */
class SubsonicApiPasswordTest : SubsonicAPIClientTest() {
    @Test
    fun `Should pass PasswordMD5Interceptor in query params for api version 1 13 0`() {
        val clientV12 = SubsonicAPIClient(
            config.copy(minimalProtocolVersion = SubsonicAPIVersions.V1_14_0)
        )
        mockWebServerRule.enqueueResponse("ping_ok.json")

        clientV12.api.ping().execute()

        with(mockWebServerRule.mockWebServer.takeRequest()) {
            requestLine `should contain` "&s="
            requestLine `should contain` "&t="
            requestLine `should not contain` "&p=enc:"
        }
    }

    @Test
    fun `Should pass PasswordHexInterceptor in query params for api version 1 12 0`() {
        val clientV11 = SubsonicAPIClient(
            config.copy(minimalProtocolVersion = SubsonicAPIVersions.V1_12_0)
        )
        mockWebServerRule.enqueueResponse("ping_ok.json")

        clientV11.api.ping().execute()

        with(mockWebServerRule.mockWebServer.takeRequest()) {
            requestLine `should not contain` "&s="
            requestLine `should not contain` "&t="
            requestLine `should contain` "&p=enc:"
        }
    }
}
