use alloc::string::ToString;
use alloc::vec;
use miden_protocol::Word;
use crate::{DecodeMessage, Verify, proto};
#[test]
fn storage_slot_id_verifies() {
let decoded = proto::account::StorageSlotId {
suffix: Some(miden_protocol::Felt::ONE.into()),
prefix: Some(miden_protocol::Felt::ZERO.into()),
}
.decode_fields()
.unwrap();
assert_eq!(decoded.verify().unwrap().suffix(), miden_protocol::Felt::ONE);
}
#[test]
fn storage_map_entry_verifies() {
let decoded = proto::account::StorageMapEntry {
key: Some(Word::empty().into()),
value: Some(Word::empty().into()),
}
.decode_fields()
.unwrap();
assert_eq!(decoded.verify().unwrap().1, Word::empty());
}
#[test]
fn storage_slot_defers_name_validation() {
let wire = proto::account::account_storage_header::StorageSlot {
slot_name: "".into(),
content: Some(proto::account::account_storage_header::storage_slot::Content::MapRoot(
Word::empty().into(),
)),
};
let decoded = wire.decode_fields().unwrap();
assert!(matches!(
decoded.verify(),
Err(miden_protocol::errors::StorageSlotNameError::TooShort)
));
}
#[test]
fn storage_header_defers_duplicate_validation() {
let slot = proto::account::account_storage_header::StorageSlot {
slot_name: miden_protocol::account::StorageSlotName::mock(1).as_str().into(),
content: Some(proto::account::account_storage_header::storage_slot::Content::Value(
Word::empty().into(),
)),
};
let decoded = proto::account::AccountStorageHeader { slots: vec![slot.clone(), slot] }
.decode_fields()
.unwrap();
assert!(decoded.verify().is_err());
}
#[test]
fn storage_header_verification_reports_the_invalid_slot_index() {
let slot = proto::account::account_storage_header::StorageSlot {
slot_name: miden_protocol::account::StorageSlotName::mock(1).as_str().into(),
content: Some(proto::account::account_storage_header::storage_slot::Content::Value(
Word::empty().into(),
)),
};
let invalid = proto::account::account_storage_header::StorageSlot {
slot_name: "".into(),
..slot.clone()
};
let error = proto::account::AccountStorageHeader { slots: vec![slot, invalid] }
.decode_fields()
.unwrap()
.verify()
.unwrap_err();
assert!(error.to_string().starts_with("slots[1]:"), "{error}");
assert!(matches!(
crate::test_utils::error_source::<miden_protocol::errors::StorageSlotNameError>(&error),
Some(miden_protocol::errors::StorageSlotNameError::TooShort)
));
}