132 lines
3.8 KiB
Kotlin
132 lines
3.8 KiB
Kotlin
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
package org.mozilla.fenix.addons
|
|
|
|
import android.net.Uri
|
|
import android.text.method.LinkMovementMethod
|
|
import android.view.LayoutInflater
|
|
import android.view.View
|
|
import io.mockk.mockk
|
|
import io.mockk.verify
|
|
import kotlinx.android.synthetic.main.fragment_add_on_details.view.*
|
|
import mozilla.components.feature.addons.Addon
|
|
import mozilla.components.support.test.robolectric.testContext
|
|
import org.junit.Assert.assertEquals
|
|
import org.junit.Assert.assertTrue
|
|
import org.junit.Before
|
|
import org.junit.Test
|
|
import org.junit.runner.RunWith
|
|
import org.mozilla.fenix.R
|
|
import org.mozilla.fenix.helpers.FenixRobolectricTestRunner
|
|
|
|
@RunWith(FenixRobolectricTestRunner::class)
|
|
class AddonDetailsViewTest {
|
|
|
|
private lateinit var view: View
|
|
private lateinit var interactor: AddonDetailsInteractor
|
|
private lateinit var detailsView: AddonDetailsView
|
|
private val baseAddon = Addon(
|
|
id = "",
|
|
translatableDescription = mapOf(
|
|
Addon.DEFAULT_LOCALE to "Some blank addon\nwith a blank line"
|
|
),
|
|
updatedAt = "2020-11-23T08:00:00Z"
|
|
)
|
|
|
|
@Before
|
|
fun setup() {
|
|
view = LayoutInflater.from(testContext).inflate(R.layout.fragment_add_on_details, null)
|
|
interactor = mockk(relaxed = true)
|
|
|
|
detailsView = AddonDetailsView(view, interactor)
|
|
}
|
|
|
|
@Test
|
|
fun `bind addons rating`() {
|
|
detailsView.bind(baseAddon.copy(
|
|
rating = null
|
|
))
|
|
assertEquals(0f, view.rating_view.rating)
|
|
|
|
detailsView.bind(baseAddon.copy(
|
|
rating = Addon.Rating(
|
|
average = 4.3f,
|
|
reviews = 100
|
|
)
|
|
))
|
|
assertEquals("4.30/5", view.rating_view.contentDescription)
|
|
assertEquals(4.5f, view.rating_view.rating)
|
|
assertEquals("100", view.users_count.text)
|
|
}
|
|
|
|
@Test
|
|
fun `bind addons website`() {
|
|
detailsView.bind(baseAddon.copy(
|
|
siteUrl = "https://mozilla.org"
|
|
))
|
|
|
|
view.home_page_label.performClick()
|
|
|
|
verify { interactor.openWebsite(Uri.parse("https://mozilla.org")) }
|
|
}
|
|
|
|
@Test
|
|
fun `bind addons last updated`() {
|
|
detailsView.bind(baseAddon)
|
|
|
|
assertEquals("Nov 23, 2020", view.last_updated_text.text)
|
|
}
|
|
|
|
@Test
|
|
fun `bind addons version`() {
|
|
val addon1 = baseAddon.copy(
|
|
version = "1.0.0",
|
|
installedState = null
|
|
)
|
|
|
|
detailsView.bind(addon1)
|
|
assertEquals("1.0.0", view.version_text.text)
|
|
view.version_text.performLongClick()
|
|
verify(exactly = 0) { interactor.showUpdaterDialog(addon1) }
|
|
|
|
val addon2 = baseAddon.copy(
|
|
version = "1.0.0",
|
|
installedState = Addon.InstalledState(
|
|
id = "",
|
|
version = "2.0.0",
|
|
optionsPageUrl = null
|
|
)
|
|
)
|
|
detailsView.bind(addon2)
|
|
assertEquals("2.0.0", view.version_text.text)
|
|
view.version_text.performLongClick()
|
|
verify { interactor.showUpdaterDialog(addon2) }
|
|
}
|
|
|
|
@Test
|
|
fun `bind addons authors`() {
|
|
val baseAuthor = Addon.Author("", "", "", "")
|
|
detailsView.bind(baseAddon.copy(
|
|
authors = listOf(
|
|
baseAuthor.copy(name = " Sarah Jane"),
|
|
baseAuthor.copy(name = "John Smith ")
|
|
)
|
|
))
|
|
|
|
assertEquals("Sarah Jane, John Smith", view.author_text.text)
|
|
}
|
|
|
|
@Test
|
|
fun `bind addons details`() {
|
|
detailsView.bind(baseAddon)
|
|
|
|
assertEquals(
|
|
"Some blank addon\nwith a blank line",
|
|
view.details.text.toString()
|
|
)
|
|
assertTrue(view.details.movementMethod is LinkMovementMethod)
|
|
}
|
|
}
|