BIT-325: Create and persist device identifier (#298)

Co-authored-by: Oleg Semenenko <oleg@livefront.com>
This commit is contained in:
Brian Yencho
2023-11-29 16:59:06 -06:00
committed by GitHub
parent 43393a3608
commit 083c431262
9 changed files with 71 additions and 3 deletions

View File

@@ -31,6 +31,34 @@ class AuthDiskSourceTest {
json = json,
)
@Test
fun `uniqueAppId should generate a new ID and update SharedPreferences if none exists`() {
val rememberedUniqueAppIdKey = "bwPreferencesStorage:appId"
// Assert that the SharedPreferences are empty
assertNull(fakeSharedPreferences.getString(rememberedUniqueAppIdKey, null))
// Generate a new uniqueAppId and retrieve it
val newId = authDiskSource.uniqueAppId
// Ensure that the SharedPreferences were updated
assertEquals(
newId,
fakeSharedPreferences.getString(rememberedUniqueAppIdKey, null),
)
}
@Test
fun `uniqueAppId should not generate a new ID if one exists`() {
val rememberedUniqueAppIdKey = "bwPreferencesStorage:appId"
val testId = "testId"
// Update preferences to hold test value
fakeSharedPreferences.edit().putString(rememberedUniqueAppIdKey, testId).apply()
assertEquals(testId, authDiskSource.uniqueAppId)
}
@Test
fun `rememberedEmailAddress should pull from and update SharedPreferences`() {
val rememberedEmailKey = "bwPreferencesStorage:rememberedEmail"

View File

@@ -8,6 +8,8 @@ import kotlinx.coroutines.flow.onSubscription
import org.junit.Assert.assertEquals
class FakeAuthDiskSource : AuthDiskSource {
override val uniqueAppId: String = "testUniqueAppId"
override var rememberedEmailAddress: String? = null
override var userState: UserStateJson? = null

View File

@@ -41,6 +41,7 @@ class IdentityServiceTest : BaseServiceTest() {
email = EMAIL,
passwordHash = PASSWORD_HASH,
captchaToken = null,
uniqueAppId = UNIQUE_APP_ID,
)
assertEquals(Result.success(LOGIN_SUCCESS), result)
}
@@ -52,6 +53,7 @@ class IdentityServiceTest : BaseServiceTest() {
email = EMAIL,
passwordHash = PASSWORD_HASH,
captchaToken = null,
uniqueAppId = UNIQUE_APP_ID,
)
assertTrue(result.isFailure)
}
@@ -63,6 +65,7 @@ class IdentityServiceTest : BaseServiceTest() {
email = EMAIL,
passwordHash = PASSWORD_HASH,
captchaToken = null,
uniqueAppId = UNIQUE_APP_ID,
)
assertEquals(Result.success(CAPTCHA_BODY), result)
}
@@ -74,6 +77,7 @@ class IdentityServiceTest : BaseServiceTest() {
email = EMAIL,
passwordHash = PASSWORD_HASH,
captchaToken = null,
uniqueAppId = UNIQUE_APP_ID,
)
assertEquals(Result.success(INVALID_LOGIN), result)
}
@@ -94,6 +98,7 @@ class IdentityServiceTest : BaseServiceTest() {
}
companion object {
private const val UNIQUE_APP_ID = "testUniqueAppId"
private const val REFRESH_TOKEN = "refreshToken"
private const val EMAIL = "email"
private const val PASSWORD_HASH = "passwordHash"

View File

@@ -320,6 +320,7 @@ class AuthRepositoryTest {
email = EMAIL,
passwordHash = PASSWORD_HASH,
captchaToken = null,
uniqueAppId = UNIQUE_APP_ID,
)
}
.returns(Result.failure(RuntimeException()))
@@ -332,6 +333,7 @@ class AuthRepositoryTest {
email = EMAIL,
passwordHash = PASSWORD_HASH,
captchaToken = null,
uniqueAppId = UNIQUE_APP_ID,
)
}
}
@@ -346,6 +348,7 @@ class AuthRepositoryTest {
email = EMAIL,
passwordHash = PASSWORD_HASH,
captchaToken = null,
uniqueAppId = UNIQUE_APP_ID,
)
} returns Result.success(
GetTokenResponseJson.Invalid(
@@ -364,6 +367,7 @@ class AuthRepositoryTest {
email = EMAIL,
passwordHash = PASSWORD_HASH,
captchaToken = null,
uniqueAppId = UNIQUE_APP_ID,
)
}
}
@@ -381,6 +385,7 @@ class AuthRepositoryTest {
email = EMAIL,
passwordHash = PASSWORD_HASH,
captchaToken = null,
uniqueAppId = UNIQUE_APP_ID,
)
}
.returns(Result.success(successResponse))
@@ -419,6 +424,7 @@ class AuthRepositoryTest {
email = EMAIL,
passwordHash = PASSWORD_HASH,
captchaToken = null,
uniqueAppId = UNIQUE_APP_ID,
)
vaultRepository.unlockVault(
userId = USER_ID_1,
@@ -441,6 +447,7 @@ class AuthRepositoryTest {
email = EMAIL,
passwordHash = PASSWORD_HASH,
captchaToken = null,
uniqueAppId = UNIQUE_APP_ID,
)
}
.returns(Result.success(GetTokenResponseJson.CaptchaRequired(CAPTCHA_KEY)))
@@ -453,6 +460,7 @@ class AuthRepositoryTest {
email = EMAIL,
passwordHash = PASSWORD_HASH,
captchaToken = null,
uniqueAppId = UNIQUE_APP_ID,
)
}
}
@@ -807,6 +815,7 @@ class AuthRepositoryTest {
email = EMAIL,
passwordHash = PASSWORD_HASH,
captchaToken = null,
uniqueAppId = UNIQUE_APP_ID,
)
} returns Result.success(successResponse)
coEvery {
@@ -870,6 +879,7 @@ class AuthRepositoryTest {
email = EMAIL,
passwordHash = PASSWORD_HASH,
captchaToken = null,
uniqueAppId = UNIQUE_APP_ID,
)
} returns Result.success(successResponse)
coEvery {
@@ -975,6 +985,7 @@ class AuthRepositoryTest {
"com.x8bit.bitwarden.data.auth.repository.util.GetTokenResponseExtensionsKt"
private const val REFRESH_TOKEN_RESPONSE_EXTENSIONS_PATH =
"com.x8bit.bitwarden.data.auth.repository.util.RefreshTokenResponseExtensionsKt"
private const val UNIQUE_APP_ID = "testUniqueAppId"
private const val EMAIL = "test@bitwarden.com"
private const val EMAIL_2 = "test2@bitwarden.com"
private const val PASSWORD = "password"