1package com.peachpasswords.ui.vault23import com.peachpasswords.vault.VaultEntry4import org.junit.Assert.assertEquals5import org.junit.Assert.assertTrue6import org.junit.Test78class ExportRoundTripTest {910 11 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}