[fenix] For https://github.com/mozilla-mobile/fenix/issues/19114: check state of sync account when navigating from sync sign in menu item (https://github.com/mozilla-mobile/fenix/pull/19118)
parent
3a4b0e5ac7
commit
3eff41bd2d
@ -0,0 +1,33 @@
|
|||||||
|
/* 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.components.accounts
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import mozilla.components.service.fxa.manager.FxaAccountManager
|
||||||
|
import org.mozilla.fenix.ext.components
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Component which holds a reference to [FxaAccountManager]. Manages account authentication,
|
||||||
|
* profiles, and profile state observers.
|
||||||
|
*/
|
||||||
|
open class FenixAccountManager(context: Context) {
|
||||||
|
val accountManager = context.components.backgroundServices.accountManager
|
||||||
|
|
||||||
|
val authenticatedAccount
|
||||||
|
get() = accountManager.authenticatedAccount() != null
|
||||||
|
|
||||||
|
val accountProfileEmail
|
||||||
|
get() = accountManager.accountProfile()?.email
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if the current account is signed in and authenticated.
|
||||||
|
*/
|
||||||
|
fun signedInToFxa(): Boolean {
|
||||||
|
val account = accountManager.authenticatedAccount()
|
||||||
|
val needsReauth = accountManager.accountNeedsReauth()
|
||||||
|
|
||||||
|
return account != null && !needsReauth
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,101 @@
|
|||||||
|
/* 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.components.accounts
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import io.mockk.every
|
||||||
|
import io.mockk.mockk
|
||||||
|
import mozilla.components.concept.sync.OAuthAccount
|
||||||
|
import mozilla.components.concept.sync.Profile
|
||||||
|
import mozilla.components.service.fxa.manager.FxaAccountManager
|
||||||
|
import org.junit.Assert.assertEquals
|
||||||
|
import org.junit.Assert.assertFalse
|
||||||
|
import org.junit.Assert.assertTrue
|
||||||
|
import org.junit.Before
|
||||||
|
import org.junit.Test
|
||||||
|
import org.junit.runner.RunWith
|
||||||
|
import org.mozilla.fenix.ext.components
|
||||||
|
import org.mozilla.fenix.helpers.FenixRobolectricTestRunner
|
||||||
|
|
||||||
|
@RunWith(FenixRobolectricTestRunner::class)
|
||||||
|
class FenixAccountManagerTest {
|
||||||
|
|
||||||
|
private lateinit var fenixFxaManager: FenixAccountManager
|
||||||
|
private lateinit var accountManagerComponent: FxaAccountManager
|
||||||
|
private lateinit var context: Context
|
||||||
|
private lateinit var account: OAuthAccount
|
||||||
|
private lateinit var profile: Profile
|
||||||
|
|
||||||
|
@Before
|
||||||
|
fun setUp() {
|
||||||
|
context = mockk(relaxed = true)
|
||||||
|
account = mockk(relaxed = true)
|
||||||
|
profile = mockk(relaxed = true)
|
||||||
|
accountManagerComponent = mockk(relaxed = true)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `GIVEN an account exists THEN fetch the associated email address`() {
|
||||||
|
every { accountManagerComponent.authenticatedAccount() } returns account
|
||||||
|
every { accountManagerComponent.accountProfile() } returns profile
|
||||||
|
every { context.components.backgroundServices.accountManager } returns accountManagerComponent
|
||||||
|
|
||||||
|
fenixFxaManager = FenixAccountManager(context)
|
||||||
|
|
||||||
|
val emailAddress = "firefoxIsFun@test.com"
|
||||||
|
every { accountManagerComponent.accountProfile()?.email } returns emailAddress
|
||||||
|
|
||||||
|
val result = fenixFxaManager.accountProfileEmail
|
||||||
|
assertEquals(emailAddress, result)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `GIVEN an account does not exist THEN return null when fetching the associated email address`() {
|
||||||
|
every { accountManagerComponent.authenticatedAccount() } returns null
|
||||||
|
every { accountManagerComponent.accountProfile() } returns null
|
||||||
|
every { context.components.backgroundServices.accountManager } returns accountManagerComponent
|
||||||
|
|
||||||
|
fenixFxaManager = FenixAccountManager(context)
|
||||||
|
|
||||||
|
val result = fenixFxaManager.accountProfileEmail
|
||||||
|
assertEquals(null, result)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `GIVEN an account is signed in and authenticated THEN check returns true`() {
|
||||||
|
every { accountManagerComponent.authenticatedAccount() } returns account
|
||||||
|
every { accountManagerComponent.accountNeedsReauth() } returns false
|
||||||
|
every { context.components.backgroundServices.accountManager } returns accountManagerComponent
|
||||||
|
|
||||||
|
fenixFxaManager = FenixAccountManager(context)
|
||||||
|
|
||||||
|
val signedIn = fenixFxaManager.signedInToFxa()
|
||||||
|
assertTrue(signedIn)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `GIVEN an account is signed in and NOT authenticated THEN check returns false`() {
|
||||||
|
every { accountManagerComponent.authenticatedAccount() } returns account
|
||||||
|
every { accountManagerComponent.accountNeedsReauth() } returns true
|
||||||
|
every { context.components.backgroundServices.accountManager } returns accountManagerComponent
|
||||||
|
|
||||||
|
fenixFxaManager = FenixAccountManager(context)
|
||||||
|
|
||||||
|
val signedIn = fenixFxaManager.signedInToFxa()
|
||||||
|
assertFalse(signedIn)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `GIVEN an account is not signed in THEN check returns false`() {
|
||||||
|
every { accountManagerComponent.authenticatedAccount() } returns null
|
||||||
|
every { accountManagerComponent.accountNeedsReauth() } returns true
|
||||||
|
every { context.components.backgroundServices.accountManager } returns accountManagerComponent
|
||||||
|
|
||||||
|
fenixFxaManager = FenixAccountManager(context)
|
||||||
|
|
||||||
|
val signedIn = fenixFxaManager.signedInToFxa()
|
||||||
|
assertFalse(signedIn)
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue