Revamp desktop usability and multiline fields
This commit is contained in:
@@ -79,7 +79,7 @@ fn complex_documents_round_trip_with_storage_owned_metadata() -> TestResult {
|
||||
document.password().expect("password").value(),
|
||||
"pässwörd".as_bytes()
|
||||
);
|
||||
assert_eq!(document.fields().len(), 12);
|
||||
assert_eq!(document.fields().len(), 11);
|
||||
|
||||
let kinds = document
|
||||
.fields()
|
||||
@@ -100,7 +100,6 @@ fn complex_documents_round_trip_with_storage_owned_metadata() -> TestResult {
|
||||
EntryFieldKind::Note,
|
||||
EntryFieldKind::Note,
|
||||
EntryFieldKind::Field,
|
||||
EntryFieldKind::Note,
|
||||
]
|
||||
);
|
||||
assert_eq!(document.fields()[1].metadata().name(), Some("username"));
|
||||
@@ -125,7 +124,10 @@ fn complex_documents_round_trip_with_storage_owned_metadata() -> TestResult {
|
||||
assert!(document.fields()[5].value().is_empty());
|
||||
assert_ne!(document.fields()[4].id(), document.fields()[5].id());
|
||||
assert_eq!(document.fields()[10].metadata().name(), Some("鍵"));
|
||||
assert_eq!(document.fields()[10].value(), "值".as_bytes());
|
||||
assert_eq!(
|
||||
document.fields()[10].value(),
|
||||
"值\r\nunrecognized line".as_bytes()
|
||||
);
|
||||
assert_eq!(
|
||||
document.fields()[6].metadata().sensitivity(),
|
||||
EntrySensitivity::Sensitive
|
||||
@@ -148,6 +150,36 @@ fn complex_documents_round_trip_with_storage_owned_metadata() -> TestResult {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn named_multiline_fields_are_one_lossless_logical_field() -> TestResult {
|
||||
let fixture = FixtureSet::load()?;
|
||||
let store = fixture.materialize_store("basic")?;
|
||||
let repository = Repository::open(store.path())?;
|
||||
let keys = KeyStore::load(fixture.path("keys"))?;
|
||||
let mut secrets = FixtureSecrets::all(&fixture);
|
||||
let plaintext = b"password\ncomments: Recovery codes:\none\ntwo\nurl: https://example.test\n";
|
||||
write_plaintext(&repository, &keys, "documents/multiline", plaintext)?;
|
||||
|
||||
let service = EntryDocumentService::new(&repository, &keys);
|
||||
let mut document = service.open("documents/multiline", &mut secrets)?;
|
||||
assert_eq!(document.serialize().expose(), plaintext);
|
||||
assert_eq!(document.fields().len(), 3);
|
||||
let comments = &document.fields()[1];
|
||||
assert_eq!(comments.metadata().name(), Some("comments"));
|
||||
assert_eq!(comments.value(), b"Recovery codes:\none\ntwo");
|
||||
assert_eq!(
|
||||
document.copy_field_value(comments.id())?.expose(),
|
||||
b"Recovery codes:\none\ntwo"
|
||||
);
|
||||
|
||||
document.replace_field_value(comments.id(), b"New heading\nalpha\nbeta".to_vec())?;
|
||||
assert_eq!(
|
||||
document.serialize().expose(),
|
||||
b"password\ncomments: New heading\nalpha\nbeta\nurl: https://example.test\n"
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn pass_otp_only_entries_keep_typed_metadata_in_the_first_line() -> TestResult {
|
||||
let fixture = FixtureSet::load()?;
|
||||
@@ -189,7 +221,7 @@ fn field_ids_survive_updates_removal_and_reordering() -> TestResult {
|
||||
&repository,
|
||||
&keys,
|
||||
"documents/editable",
|
||||
b"password\nusername: alice\nnote one\nnote two\n",
|
||||
b"password\nusername: alice\nnote: one\nnote: two\n",
|
||||
)?;
|
||||
let service = EntryDocumentService::new(&repository, &keys);
|
||||
let mut document = service.open("documents/editable", &mut secrets)?;
|
||||
@@ -223,7 +255,7 @@ fn field_ids_survive_updates_removal_and_reordering() -> TestResult {
|
||||
assert_eq!(document.fields()[2].id(), note_two_id);
|
||||
assert_eq!(
|
||||
document.serialize().expose(),
|
||||
"password\nusername: bob\nnote two\nemail: bob@例.test\n".as_bytes()
|
||||
"password\nusername: bob\nnote: two\nemail: bob@例.test\n".as_bytes()
|
||||
);
|
||||
|
||||
let mut empty = service.open("documents/missing", &mut secrets)?;
|
||||
|
||||
Reference in New Issue
Block a user