ExportRoundTripTest.kt

2.6 KB · raw

1package com.peachpasswords.ui.vault23import com.peachpasswords.vault.VaultEntry4import org.junit.Assert.assertEquals5import org.junit.Assert.assertTrue6import org.junit.Test78class ExportRoundTripTest {910    // PeachScript packs the id as 16 raw UUID bytes (browser parity), so test11    // entries use real UUIDs as production entries do (addEntry assigns one).12    private fun entry() = VaultEntry(13        id = "11111111-2222-3333-4444-555555555555", title = "GitHub", type = "login",14        username = "june", password = "hunter2", url = "https://github.com",15        notes = "my note", totp = "JBSWY3DPEHPK3PXP", createdAt = 0, modifiedAt = 0,16    )1718    @Test fun csv_formula_injection_is_guarded() {19        assertEquals("'=1+1", CsvExport.encodeField("=1+1"))20        assertEquals("'@cmd", CsvExport.encodeField("@cmd"))21        assertEquals("'-2", CsvExport.encodeField("-2"))22    }2324    @Test fun csv_quotes_fields_with_commas_and_quotes() {25        assertEquals("\"a,b\"", CsvExport.encodeField("a,b"))26        assertEquals("\"he\"\"llo\"", CsvExport.encodeField("he\"llo"))27        assertEquals("plain", CsvExport.encodeField("plain"))28    }2930    @Test fun csv_has_header_and_row() {31        val csv = CsvExport.toCsv(listOf(entry()))32        val lines = csv.trim().split("\r\n")33        assertEquals("title,username,password,url,notes", lines[0])34        assertTrue(lines[1].startsWith("GitHub,june,hunter2,"))35    }3637    @Test fun peachscript_export_is_peachscript_text() {38        val out = PeachScriptExport.buildEncrypted(listOf(entry()), "backup-pass-12")39        assertTrue(PeachScriptImport.looksLikePeachScript(out))40        assertTrue(PeachScriptImport.isEncrypted(out))41    }4243    @Test fun peachscript_encrypted_round_trips_with_correct_password() {44        val blob = PeachScriptExport.buildEncrypted(listOf(entry()), "backup-pass-12")45        assertTrue(PeachScriptImport.isEncrypted(blob))46        val ok = PeachScriptImport.decryptAndParse(blob, "backup-pass-12")47        assertTrue(ok is PeachScriptImport.DecryptResult.Success)48        ok as PeachScriptImport.DecryptResult.Success49        assertEquals(1, ok.entries.size)50        assertEquals("hunter2", ok.entries[0].password)51        assertEquals("june", ok.entries[0].username)52        assertEquals("my note", ok.entries[0].notes)53        assertEquals("JBSWY3DPEHPK3PXP", ok.entries[0].totp)54    }5556    @Test fun peachscript_encrypted_rejects_wrong_password() {57        val blob = PeachScriptExport.buildEncrypted(listOf(entry()), "backup-pass-12")58        val r = PeachScriptImport.decryptAndParse(blob, "wrong-password")59        assertTrue(r is PeachScriptImport.DecryptResult.WrongPassword)60    }61}