Unverified Commit 720a5909 authored by Tiger Oakes's avatar Tiger Oakes Committed by GitHub
Browse files

Add tests for browser helper classes (#12370)

parent bedd1d45
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -9,8 +9,8 @@ import androidx.annotation.StringRes
import mozilla.components.feature.contextmenu.ContextMenuCandidate
import org.mozilla.fenix.components.FenixSnackbar

class FenixSnackbarDelegate(val view: View) :
    ContextMenuCandidate.SnackbarDelegate {
class FenixSnackbarDelegate(private val view: View) : ContextMenuCandidate.SnackbarDelegate {

    override fun show(
        snackBarParentView: View,
        @StringRes text: Int,
+112 −0
Original line number Diff line number Diff line
/* 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.browser

import android.view.View
import io.mockk.MockKAnnotations
import io.mockk.every
import io.mockk.impl.annotations.MockK
import io.mockk.mockk
import io.mockk.mockkObject
import io.mockk.unmockkObject
import io.mockk.verify
import org.junit.After
import org.junit.Before
import org.junit.Test
import org.mozilla.fenix.R
import org.mozilla.fenix.components.FenixSnackbar
import org.mozilla.fenix.components.FenixSnackbar.Companion.LENGTH_SHORT

class FenixSnackbarDelegateTest {

    @MockK private lateinit var view: View
    @MockK(relaxed = true) private lateinit var snackbar: FenixSnackbar
    private lateinit var delegate: FenixSnackbarDelegate

    @Before
    fun setup() {
        MockKAnnotations.init(this)
        mockkObject(FenixSnackbar.Companion)

        delegate = FenixSnackbarDelegate(view)
        every {
            FenixSnackbar.make(view, LENGTH_SHORT, isDisplayedWithBrowserToolbar = true)
        } returns snackbar
        every { snackbar.setText(any()) } returns snackbar
        every { snackbar.setAction(any(), any()) } returns snackbar
        every { view.context.getString(R.string.app_name) } returns "Firefox"
        every { view.context.getString(R.string.edit) } returns "Edit"
    }

    @After
    fun teardown() {
        unmockkObject(FenixSnackbar.Companion)
    }

    @Test
    fun `show with no listener nor action`() {
        delegate.show(
            snackBarParentView = mockk(),
            text = R.string.app_name,
            duration = 0,
            action = 0,
            listener = null
        )

        verify { snackbar.setText("Firefox") }
        verify(exactly = 0) { snackbar.setAction(any(), any()) }
        verify { snackbar.show() }
    }

    @Test
    fun `show with listener but no action`() {
        delegate.show(
            snackBarParentView = mockk(),
            text = R.string.app_name,
            duration = 0,
            action = 0,
            listener = {}
        )

        verify { snackbar.setText("Firefox") }
        verify(exactly = 0) { snackbar.setAction(any(), any()) }
        verify { snackbar.show() }
    }

    @Test
    fun `show with action but no listener`() {
        delegate.show(
            snackBarParentView = mockk(),
            text = R.string.app_name,
            duration = 0,
            action = R.string.edit,
            listener = null
        )

        verify { snackbar.setText("Firefox") }
        verify(exactly = 0) { snackbar.setAction(any(), any()) }
        verify { snackbar.show() }
    }

    @Test
    fun `show with listener and action`() {
        val listener = mockk<(View) -> Unit>(relaxed = true)
        delegate.show(
            snackBarParentView = mockk(),
            text = R.string.app_name,
            duration = 0,
            action = R.string.edit,
            listener = listener
        )

        verify { snackbar.setText("Firefox") }
        verify { snackbar.setAction("Edit", withArg {
            verify(exactly = 0) { listener(view) }
            it.invoke()
            verify { listener(view) }
        }) }
        verify { snackbar.show() }
    }
}
+11 −10
Original line number Diff line number Diff line
@@ -10,7 +10,8 @@ import io.mockk.mockk
import io.mockk.verify
import mozilla.components.browser.session.Session
import mozilla.components.browser.session.SessionManager
import org.junit.Assert
import org.junit.Assert.assertEquals
import org.junit.Assert.assertNull
import org.junit.Before
import org.junit.Test
import org.mozilla.fenix.components.metrics.Event
@@ -59,8 +60,8 @@ class TelemetrySessionObserverTest {
            triggeredByRedirect = false,
            triggeredByWebContent = false
        )
        Assert.assertEquals(sessionUrl, singleSessionObserver.originSessionUrl)
        Assert.assertEquals(url, singleSessionObserver.redirectChain[0])
        assertEquals(sessionUrl, singleSessionObserver.originSessionUrl)
        assertEquals(url, singleSessionObserver.redirectChain[0])
    }

    @Test
@@ -77,9 +78,9 @@ class TelemetrySessionObserverTest {
            triggeredByRedirect = false,
            triggeredByWebContent = false
        )
        Assert.assertEquals(url, singleSessionObserver.originSessionUrl)
        Assert.assertEquals(url, singleSessionObserver.redirectChain[0])
        Assert.assertEquals(newUrl, singleSessionObserver.redirectChain[1])
        assertEquals(url, singleSessionObserver.originSessionUrl)
        assertEquals(url, singleSessionObserver.redirectChain[0])
        assertEquals(newUrl, singleSessionObserver.redirectChain[1])
    }

    @Test
@@ -93,8 +94,8 @@ class TelemetrySessionObserverTest {
            triggeredByRedirect = false,
            triggeredByWebContent = false
        )
        Assert.assertNull(singleSessionObserver.originSessionUrl)
        Assert.assertEquals(0, singleSessionObserver.redirectChain.size)
        assertNull(singleSessionObserver.originSessionUrl)
        assertEquals(0, singleSessionObserver.redirectChain.size)
    }

    @Test
@@ -116,7 +117,7 @@ class TelemetrySessionObserverTest {
                redirectChain
            )
        }
        Assert.assertNull(singleSessionObserver.originSessionUrl)
        Assert.assertEquals(0, singleSessionObserver.redirectChain.size)
        assertNull(singleSessionObserver.originSessionUrl)
        assertEquals(0, singleSessionObserver.redirectChain.size)
    }
}
+28 −0
Original line number Diff line number Diff line
@@ -5,6 +5,7 @@
package org.mozilla.fenix.browser

import androidx.lifecycle.LifecycleOwner
import io.mockk.every
import io.mockk.mockk
import io.mockk.verify
import mozilla.components.browser.session.Session
@@ -41,7 +42,34 @@ class UriOpenedObserverTest {
        observer.onSessionAdded(session)
        verify { session.register(observer.singleSessionObserver, owner) }

        observer.onSessionSelected(session)
        verify { session.register(observer.singleSessionObserver, owner) }

        observer.onSessionRemoved(session)
        verify { session.unregister(observer.singleSessionObserver) }
    }

    @Test
    fun `registers when all sessions are restored`() {
        val session1: Session = mockk(relaxed = true)
        val session2: Session = mockk(relaxed = true)
        every { sessionManager.sessions } returns listOf(session1, session2)

        observer.onSessionsRestored()

        verify { session1.register(observer.singleSessionObserver, owner) }
        verify { session2.register(observer.singleSessionObserver, owner) }
    }

    @Test
    fun `unregisters when all sessions are removed`() {
        val session1: Session = mockk(relaxed = true)
        val session2: Session = mockk(relaxed = true)
        every { sessionManager.sessions } returns listOf(session1, session2)

        observer.onAllSessionsRemoved()

        verify { session1.unregister(observer.singleSessionObserver) }
        verify { session2.unregister(observer.singleSessionObserver) }
    }
}