Skip to main content

aleph_types/message/
forget.rs

1use crate::item_hash::ItemHash;
2use serde::{Deserialize, Serialize};
3
4#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
5pub struct ForgetContent {
6    hashes: Vec<ItemHash>,
7    #[serde(default)]
8    aggregates: Vec<ItemHash>,
9    #[serde(default)]
10    reason: Option<String>,
11}
12
13#[cfg(test)]
14mod tests {
15    use crate::chain::Chain;
16    use crate::message::base_message::MessageContentEnum;
17    use crate::message::{ContentSource, Message, MessageType};
18    use crate::timestamp::Timestamp;
19    use crate::{address, channel, item_hash, signature};
20    use assert_matches::assert_matches;
21
22    const FORGET_FIXTURE: &str = include_str!(concat!(
23        env!("CARGO_MANIFEST_DIR"),
24        "/../../fixtures/messages/forget/forget.json"
25    ));
26
27    #[test]
28    fn test_deserialize_forget() {
29        let message: Message = serde_json::from_str(FORGET_FIXTURE).unwrap();
30
31        assert_eq!(
32            message.sender,
33            address!("0xB68B9D4f3771c246233823ed1D3Add451055F9Ef")
34        );
35        assert_eq!(message.chain, Chain::Ethereum);
36        assert_eq!(
37            message.signature,
38            signature!(
39                "0x2e80006a8e60cb51b1aaa052069d7b86aeea6f4460f7f0fa824f3ed2b6989e4b6ec9cdf8522a257f1fa4e729e3bbec728f75b1cb538b359cbe7340937b336a771b"
40            )
41        );
42        assert_matches!(message.message_type, MessageType::Forget);
43        assert_matches!(
44            message.content_source,
45            ContentSource::Inline { item_content: _ }
46        );
47        assert_eq!(
48            message.item_hash,
49            item_hash!("35ea7a4bdd8c631b5ccec84ddf3b0ac65a0da1fbb2942d77eac27577326a8a0f")
50        );
51        assert_eq!(message.time, Timestamp::from(1762515432.413));
52        assert_eq!(message.channel, Some(channel!("TEST")));
53
54        // Check content fields
55        assert_eq!(
56            &message.content.address,
57            &address!("0xB68B9D4f3771c246233823ed1D3Add451055F9Ef")
58        );
59        assert_eq!(&message.content.time, &Timestamp::from(1762515432.413));
60        assert_eq!(message.sent_at(), &message.content.time);
61
62        // Check aggregate content fields
63        let forget_content = match message.content() {
64            MessageContentEnum::Forget(content) => content,
65            other => {
66                panic!("Expected MessageContentEnum::Forget, got {:?}", other);
67            }
68        };
69
70        assert_eq!(
71            forget_content.hashes,
72            vec![item_hash!(
73                "ecd3bab3db7b449ad7875336c9a46dbbe6a010b023fc9525d81e8fdf56936ea1"
74            )]
75        );
76        assert_eq!(forget_content.aggregates, vec![]);
77        assert_eq!(forget_content.reason, Some("None".to_string()));
78
79        // No confirmation on this fixture
80        assert!(!message.confirmed());
81        assert!(message.confirmations.is_empty());
82    }
83}