test(core): exhaustive round-trip for all seven ItemCore variants
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -73,4 +73,56 @@ mod tests {
|
|||||||
let json = serde_json::to_string(&ItemType::SecureNote).unwrap();
|
let json = serde_json::to_string(&ItemType::SecureNote).unwrap();
|
||||||
assert_eq!(json, "\"secure_note\"");
|
assert_eq!(json, "\"secure_note\"");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn item_core_login_round_trip_via_tag() {
|
||||||
|
use zeroize::Zeroizing;
|
||||||
|
let core = ItemCore::Login(LoginCore {
|
||||||
|
username: Some("alice".into()),
|
||||||
|
password: Some(Zeroizing::new("hunter2".into())),
|
||||||
|
url: None,
|
||||||
|
totp: None,
|
||||||
|
});
|
||||||
|
let json = serde_json::to_string(&core).unwrap();
|
||||||
|
// Tag-based: outer object has "type": "login"
|
||||||
|
assert!(json.contains("\"type\":\"login\""));
|
||||||
|
let parsed: ItemCore = serde_json::from_str(&json).unwrap();
|
||||||
|
assert_eq!(parsed.item_type(), ItemType::Login);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn item_core_secure_note_round_trip_via_tag() {
|
||||||
|
use zeroize::Zeroizing;
|
||||||
|
let core = ItemCore::SecureNote(SecureNoteCore { body: Zeroizing::new("hello".into()) });
|
||||||
|
let json = serde_json::to_string(&core).unwrap();
|
||||||
|
assert!(json.contains("\"type\":\"secure_note\""));
|
||||||
|
let parsed: ItemCore = serde_json::from_str(&json).unwrap();
|
||||||
|
assert_eq!(parsed.item_type(), ItemType::SecureNote);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn item_core_round_trips_for_all_seven_types() {
|
||||||
|
use zeroize::Zeroizing;
|
||||||
|
use crate::ids::AttachmentId;
|
||||||
|
|
||||||
|
let cores = vec![
|
||||||
|
ItemCore::Login(LoginCore::default()),
|
||||||
|
ItemCore::SecureNote(SecureNoteCore::default()),
|
||||||
|
ItemCore::Identity(IdentityCore::default()),
|
||||||
|
ItemCore::Card(CardCore::default()),
|
||||||
|
ItemCore::Key(KeyCore::default()),
|
||||||
|
ItemCore::Document(DocumentCore {
|
||||||
|
filename: "x".into(),
|
||||||
|
mime_type: "text/plain".into(),
|
||||||
|
primary_attachment: AttachmentId("0123456789abcdef".into()),
|
||||||
|
}),
|
||||||
|
ItemCore::Totp(TotpCore::default()),
|
||||||
|
];
|
||||||
|
for core in cores {
|
||||||
|
let expected_type = core.item_type();
|
||||||
|
let json = serde_json::to_string(&core).unwrap();
|
||||||
|
let parsed: ItemCore = serde_json::from_str(&json).expect("round-trip failed");
|
||||||
|
assert_eq!(parsed.item_type(), expected_type);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user