package com.peachpasswords.ui.pairing import com.peachpasswords.sync.DeviceRevocation import com.peachpasswords.sync.PairedDevice import org.junit.Assert.assertEquals import org.junit.Assert.assertThrows import org.junit.Test class AdoptVaultSafetyTest { @Test fun same_vault_identity_may_repair_without_mutation() { val id = "ab".repeat(32) assertEquals(id, requireSameVaultForPopulatedRePair(id, id)) } @Test fun different_populated_vaults_are_never_merged_by_pairing() { val error = assertThrows(IllegalStateException::class.java) { requireSameVaultForPopulatedRePair("ab".repeat(32), "cd".repeat(32)) } assertEquals("JOIN_POPULATED_VAULT_BLOCKED", error.message) } @Test fun locked_populated_vault_cannot_be_repaired() { val error = assertThrows(IllegalStateException::class.java) { requireSameVaultForPopulatedRePair(null, "cd".repeat(32)) } assertEquals("vault_locked", error.message) } @Test fun first_contact_is_blocked_even_when_human_visible_vault_matches() { val error = assertThrows(IllegalStateException::class.java) { requireKnownPeerForPopulatedRePair( sourceDeviceId = "new-source", sourcePublicKeyHex = "ab".repeat(32), pairedDevices = emptyList(), revocations = emptyList(), ) } assertEquals("JOIN_POPULATED_VAULT_BLOCKED", error.message) } @Test fun exact_direct_peer_may_repair() { requireKnownPeerForPopulatedRePair( sourceDeviceId = "known-source", sourcePublicKeyHex = "ab".repeat(32), pairedDevices = listOf( PairedDevice( deviceId = "known-source", deviceName = "Extension", deviceType = "extension", longTermPublicKeyHex = "ab".repeat(32), pairedAt = 1L, ), ), revocations = emptyList(), ) } @Test fun exact_revoked_peer_may_be_repaired_but_key_mismatch_is_blocked() { val revocation = DeviceRevocation( deviceId = "known-source", longTermPublicKeyHex = "ab".repeat(32), revokedAt = 2L, revokedByDeviceId = "android", ) requireKnownPeerForPopulatedRePair( sourceDeviceId = "known-source", sourcePublicKeyHex = "ab".repeat(32), pairedDevices = emptyList(), revocations = listOf(revocation), ) val error = assertThrows(IllegalStateException::class.java) { requireKnownPeerForPopulatedRePair( sourceDeviceId = "known-source", sourcePublicKeyHex = "cd".repeat(32), pairedDevices = emptyList(), revocations = listOf(revocation), ) } assertEquals("JOIN_POPULATED_VAULT_BLOCKED", error.message) } }