proton-mail-android/app/src/androidTest/java/ch/protonmail/android/views/PmWebViewClientTest.kt

132 lines
4.7 KiB
Kotlin

/*
* Copyright (c) 2020 Proton Technologies AG
*
* This file is part of Proton Mail.
*
* Proton Mail is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Proton Mail is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Proton Mail. If not, see https://www.gnu.org/licenses/.
*/
package ch.protonmail.android.views
import android.app.Activity
import android.content.Context
import android.content.Intent
import android.webkit.WebView
import androidx.test.filters.SmallTest
import ch.protonmail.android.activities.composeMessage.ComposeMessageActivity
import ch.protonmail.android.core.UserManager
import ch.protonmail.android.settings.data.AccountSettingsRepository
import io.mockk.mockk
import io.mockk.slot
import io.mockk.verify
import junit.framework.Assert.assertTrue
import java.util.Arrays
import kotlin.test.Test
import kotlin.test.assertEquals
private const val EXTRA_TO_RECIPIENTS = "to_recipients"
private const val EXTRA_CC_RECIPIENTS = "cc_recipients"
private const val EXTRA_MAIL_TO = "mail_to"
private const val EXTRA_MESSAGE_TITLE = "message_title"
private const val EXTRA_MESSAGE_BODY = "message_body"
@SmallTest
class PmWebViewClientTest {
private val userManager: UserManager = mockk(relaxed = true)
private val activity: Activity = mockk(relaxed = true)
private val mockWebView: WebView = mockk(relaxed = true)
private val mockContext: Context = mockk(relaxed = true)
private val accountSettingsRepository: AccountSettingsRepository = mockk()
private val loadRemote = false
private val webViewClient = PmWebViewClient(
userManager, accountSettingsRepository, activity, loadRemote
)
@Test
fun shouldOverrideUrlLoadingStartsComposeMessageActivityWhenAMailToLinkWithoutCcRecipientsIsLoaded() {
// given
val url = "mailto:marino-test@protonmail.com"
val expected = Intent(mockContext, ComposeMessageActivity::class.java)
.putExtra(EXTRA_TO_RECIPIENTS, arrayOf("marino-test@protonmail.com"))
.putExtra(EXTRA_MAIL_TO, true)
// when
webViewClient.shouldOverrideUrlLoading(mockWebView, url)
// then
val actual = slot<Intent>()
verify { activity.startActivity(capture(actual)) }
assertIntentsEquals(expected, actual.captured)
}
@Test
fun shouldOverrideUrlLoadingStartsComposeMessageActivityWhenAMailToLinkWithAllDetailsIsLoaded() {
// given
val url =
"""mailto:marino-test@protonmail.com?cc=marino-test-1@protonmail.com&bcc=test12345@gmail.com&subject=The%20subject%20of%20the%20email&body=The%20body%20of%20the%20email"""
val expected = Intent(mockContext, ComposeMessageActivity::class.java)
.putExtra(EXTRA_TO_RECIPIENTS, arrayOf("marino-test@protonmail.com"))
.putExtra(EXTRA_CC_RECIPIENTS, arrayOf("marino-test-1@protonmail.com"))
.putExtra(EXTRA_MESSAGE_TITLE, "The subject of the email")
.putExtra(EXTRA_MESSAGE_BODY, "The body of the email")
.putExtra(EXTRA_MAIL_TO, true)
// when
webViewClient.shouldOverrideUrlLoading(mockWebView, url)
// then
val actual = slot<Intent>()
verify { activity.startActivity(capture(actual)) }
assertIntentsEquals(expected, actual.captured)
}
private fun assertIntentsEquals(expected: Intent, actual: Intent) {
val expectedExtras = expected.extras!!
val actualExtras = actual.extras!!
assertEquals(expected.action, actual.action)
assertTrue(
"Intents EXTRA_TO_RECIPIENTS not equal!",
Arrays.equals(
expectedExtras.getStringArray(EXTRA_TO_RECIPIENTS),
actualExtras.getStringArray(EXTRA_TO_RECIPIENTS)
)
)
assertEquals(
expectedExtras.getBoolean(EXTRA_MAIL_TO),
actualExtras.getBoolean(EXTRA_MAIL_TO),
"Intents EXTRA_MAIL_TO not equal!"
)
assertEquals(
expectedExtras.getString(EXTRA_MESSAGE_TITLE),
actualExtras.getString(EXTRA_MESSAGE_TITLE),
"Intents EXTRA_MESSAGE_TITLE not equal!"
)
assertEquals(
expectedExtras.getString(EXTRA_MESSAGE_BODY),
actualExtras.getString(EXTRA_MESSAGE_BODY),
"Intents EXTRA_MESSAGE_BODY not equal!"
)
}
}