Merge branch 'PM-37255/fill-assist-data-layer' into PM-37255/fill-assist-integration

This commit is contained in:
Andre Rosado
2026-05-29 14:08:40 +01:00
2 changed files with 41 additions and 34 deletions

View File

@@ -63,8 +63,13 @@ class FillAssistManagerImpl(
override fun syncIfNecessary() {
if (!featureFlagManager.getFeatureFlag(FlagKey.FillAssistTargetingRules)) return
val serverUrl = serverConfigRepository.serverConfigStateFlow.value
?.serverData?.environment?.fillAssistRulesUrl ?: return
val serverUrl = serverConfigRepository
.serverConfigStateFlow
.value
?.serverData
?.environment
?.fillAssistRulesUrl
?: return
val lastFetch = fillAssistDiskSource.getLastFetchTimestamp(serverUrl) ?: 0L
if (clock.millis() - lastFetch < UPDATE_INTERVAL_MS) return
if (!syncJob.isCompleted) return

View File

@@ -46,7 +46,6 @@ import com.bitwarden.network.model.OrganizationAutoEnrollStatusResponseJson
import com.bitwarden.network.model.OrganizationKeysResponseJson
import com.bitwarden.network.model.OrganizationType
import com.bitwarden.network.model.PasswordHintResponseJson
import com.bitwarden.network.model.PolicyTypeJson
import com.bitwarden.network.model.PreLoginResponseJson
import com.bitwarden.network.model.PrevalidateSsoResponseJson
import com.bitwarden.network.model.RefreshTokenResponseJson
@@ -57,7 +56,6 @@ import com.bitwarden.network.model.ResetPasswordRequestJson
import com.bitwarden.network.model.SendVerificationEmailRequestJson
import com.bitwarden.network.model.SendVerificationEmailResponseJson
import com.bitwarden.network.model.SetPasswordRequestJson
import com.bitwarden.network.model.SyncResponseJson
import com.bitwarden.network.model.TrustedDeviceUserDecryptionOptionsJson
import com.bitwarden.network.model.TwoFactorAuthMethod
import com.bitwarden.network.model.TwoFactorDataModel
@@ -69,12 +67,13 @@ import com.bitwarden.network.model.VerifyEmailTokenResponseJson
import com.bitwarden.network.model.createMockAccountKeysJson
import com.bitwarden.network.model.createMockAccountKeysJsonWithNullFields
import com.bitwarden.network.model.createMockOrganizationNetwork
import com.bitwarden.network.model.createMockPolicy
import com.bitwarden.network.service.AccountsService
import com.bitwarden.network.service.DevicesService
import com.bitwarden.network.service.HaveIBeenPwnedService
import com.bitwarden.network.service.IdentityService
import com.bitwarden.network.service.OrganizationService
import com.bitwarden.policies.PolicyType
import com.bitwarden.policies.PolicyView
import com.bitwarden.ui.platform.resource.BitwardenString
import com.x8bit.bitwarden.data.auth.datasource.disk.model.AccountJson
import com.x8bit.bitwarden.data.auth.datasource.disk.model.AccountTokensJson
@@ -148,6 +147,7 @@ import com.x8bit.bitwarden.data.platform.manager.model.NotificationLogoutData
import com.x8bit.bitwarden.data.platform.repository.SettingsRepository
import com.x8bit.bitwarden.data.platform.repository.util.FakeEnvironmentRepository
import com.x8bit.bitwarden.data.vault.datasource.sdk.VaultSdkSource
import com.x8bit.bitwarden.data.vault.datasource.sdk.model.createMockPolicyView
import com.x8bit.bitwarden.data.vault.repository.VaultRepository
import com.x8bit.bitwarden.data.vault.repository.model.VaultUnlockData
import com.x8bit.bitwarden.data.vault.repository.model.VaultUnlockResult
@@ -168,8 +168,6 @@ import kotlinx.coroutines.test.runTest
import kotlinx.serialization.json.JsonNull
import kotlinx.serialization.json.JsonObject
import kotlinx.serialization.json.JsonPrimitive
import kotlinx.serialization.json.buildJsonObject
import kotlinx.serialization.json.put
import org.junit.jupiter.api.AfterEach
import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Assertions.assertFalse
@@ -266,14 +264,14 @@ class AuthRepositoryTest {
private val mutableLogoutFlow = bufferedMutableSharedFlow<NotificationLogoutData>()
private val mutableSyncOrgKeysFlow = bufferedMutableSharedFlow<String>()
private val mutableActivePolicyFlow = bufferedMutableSharedFlow<List<SyncResponseJson.Policy>>()
private val mutableActivePolicyFlow = bufferedMutableSharedFlow<List<PolicyView>>()
private val pushManager: PushManager = mockk {
every { logoutFlow } returns mutableLogoutFlow
every { syncOrgKeysFlow } returns mutableSyncOrgKeysFlow
}
private val policyManager: PolicyManager = mockk {
every {
getActivePoliciesFlow(type = PolicyTypeJson.MASTER_PASSWORD)
getActivePoliciesFlow(type = PolicyType.MASTER_PASSWORD)
} returns mutableActivePolicyFlow
}
private val logsManager: LogsManager = mockk {
@@ -470,18 +468,20 @@ class AuthRepositoryTest {
// Set policies that will fail the password.
mutableActivePolicyFlow.emit(
listOf(
createMockPolicy(
type = PolicyTypeJson.MASTER_PASSWORD,
isEnabled = true,
data = buildJsonObject {
put(key = "minLength", value = 100)
put(key = "minComplexity", value = null)
put(key = "requireUpper", value = null)
put(key = "requireLower", value = null)
put(key = "requireNumbers", value = null)
put(key = "requireSpecial", value = null)
put(key = "enforceOnLogin", value = true)
},
createMockPolicyView(
type = PolicyType.MASTER_PASSWORD,
enabled = true,
data = """
{
"minLength":100,
"minComplexity":null,
"requireUpper":null,
"requireLower":null,
"requireNumbers":null,
"requireSpecial":null,
"enforceOnLogin":true
}
""",
),
),
)
@@ -7344,20 +7344,22 @@ class AuthRepositoryTest {
requireSpecial: Boolean = false,
) {
every {
policyManager.getActivePolicies(type = PolicyTypeJson.MASTER_PASSWORD)
policyManager.getActivePolicies(type = PolicyType.MASTER_PASSWORD)
} returns listOf(
createMockPolicy(
type = PolicyTypeJson.MASTER_PASSWORD,
isEnabled = true,
data = buildJsonObject {
put(key = "minLength", value = minLength)
put(key = "minComplexity", value = minComplexity)
put(key = "requireUpper", value = requireUpper)
put(key = "requireLower", value = requireLower)
put(key = "requireNumbers", value = requireNumbers)
put(key = "requireSpecial", value = requireSpecial)
put(key = "enforceOnLogin", value = true)
},
createMockPolicyView(
type = PolicyType.MASTER_PASSWORD,
enabled = true,
data = """
{
"minLength":$minLength,
"minComplexity":$minComplexity,
"requireUpper":$requireUpper,
"requireLower":$requireLower,
"requireNumbers":$requireNumbers,
"requireSpecial":$requireSpecial,
"enforceOnLogin":true
}
""",
),
)
}