drive/state_transition_action/identity/identity_credit_withdrawal/
mod.rs

1/// transformer
2pub mod transformer;
3/// v0
4pub mod v0;
5
6use crate::state_transition_action::identity::identity_credit_withdrawal::v0::IdentityCreditWithdrawalTransitionActionV0;
7use derive_more::From;
8use dpp::document::Document;
9
10use dpp::platform_value::Identifier;
11use dpp::prelude::{IdentityNonce, UserFeeIncrease};
12
13/// action
14#[derive(Debug, Clone, From)]
15pub enum IdentityCreditWithdrawalTransitionAction {
16    /// v0
17    V0(IdentityCreditWithdrawalTransitionActionV0),
18}
19
20impl IdentityCreditWithdrawalTransitionAction {
21    /// Nonce
22    pub fn nonce(&self) -> IdentityNonce {
23        match self {
24            IdentityCreditWithdrawalTransitionAction::V0(transition) => transition.nonce,
25        }
26    }
27
28    /// Identity Id
29    pub fn identity_id(&self) -> Identifier {
30        match self {
31            IdentityCreditWithdrawalTransitionAction::V0(transition) => transition.identity_id,
32        }
33    }
34
35    /// Amount
36    pub fn amount(&self) -> u64 {
37        match self {
38            IdentityCreditWithdrawalTransitionAction::V0(transition) => transition.amount,
39        }
40    }
41
42    /// Recipient Id
43    pub fn prepared_withdrawal_document(&self) -> &Document {
44        match self {
45            IdentityCreditWithdrawalTransitionAction::V0(transition) => {
46                &transition.prepared_withdrawal_document
47            }
48        }
49    }
50
51    /// Recipient Id
52    pub fn prepared_withdrawal_document_owned(self) -> Document {
53        match self {
54            IdentityCreditWithdrawalTransitionAction::V0(transition) => {
55                transition.prepared_withdrawal_document
56            }
57        }
58    }
59
60    /// fee multiplier
61    pub fn user_fee_increase(&self) -> UserFeeIncrease {
62        match self {
63            IdentityCreditWithdrawalTransitionAction::V0(transition) => {
64                transition.user_fee_increase
65            }
66        }
67    }
68}
69
70#[cfg(test)]
71mod tests {
72    use super::*;
73    use crate::state_transition_action::identity::identity_credit_withdrawal::v0::IdentityCreditWithdrawalTransitionActionV0;
74    use dpp::document::DocumentV0;
75
76    fn make_document() -> Document {
77        Document::V0(DocumentV0 {
78            id: Identifier::from([0xDD; 32]),
79            owner_id: Identifier::from([0xAA; 32]),
80            properties: Default::default(),
81            revision: Some(1),
82            created_at: None,
83            updated_at: None,
84            transferred_at: None,
85            created_at_block_height: None,
86            updated_at_block_height: None,
87            transferred_at_block_height: None,
88            created_at_core_block_height: None,
89            updated_at_core_block_height: None,
90            transferred_at_core_block_height: None,
91            creator_id: None,
92        })
93    }
94
95    fn make_v0() -> IdentityCreditWithdrawalTransitionActionV0 {
96        IdentityCreditWithdrawalTransitionActionV0 {
97            identity_id: Identifier::from([0xAA; 32]),
98            nonce: 10,
99            prepared_withdrawal_document: make_document(),
100            amount: 7500,
101            user_fee_increase: 6,
102        }
103    }
104
105    #[test]
106    fn test_from_v0() {
107        let v0 = make_v0();
108        let action: IdentityCreditWithdrawalTransitionAction = v0.into();
109        assert!(matches!(
110            action,
111            IdentityCreditWithdrawalTransitionAction::V0(_)
112        ));
113    }
114
115    #[test]
116    fn test_nonce() {
117        let action = IdentityCreditWithdrawalTransitionAction::V0(make_v0());
118        assert_eq!(action.nonce(), 10);
119    }
120
121    #[test]
122    fn test_identity_id() {
123        let action = IdentityCreditWithdrawalTransitionAction::V0(make_v0());
124        assert_eq!(action.identity_id(), Identifier::from([0xAA; 32]));
125    }
126
127    #[test]
128    fn test_amount() {
129        let action = IdentityCreditWithdrawalTransitionAction::V0(make_v0());
130        assert_eq!(action.amount(), 7500);
131    }
132
133    #[test]
134    fn test_prepared_withdrawal_document() {
135        let action = IdentityCreditWithdrawalTransitionAction::V0(make_v0());
136        let doc = action.prepared_withdrawal_document();
137        match doc {
138            Document::V0(v0) => {
139                assert_eq!(v0.id, Identifier::from([0xDD; 32]));
140                assert_eq!(v0.owner_id, Identifier::from([0xAA; 32]));
141            }
142        }
143    }
144
145    #[test]
146    fn test_prepared_withdrawal_document_owned() {
147        let action = IdentityCreditWithdrawalTransitionAction::V0(make_v0());
148        let doc = action.prepared_withdrawal_document_owned();
149        match doc {
150            Document::V0(v0) => {
151                assert_eq!(v0.id, Identifier::from([0xDD; 32]));
152            }
153        }
154    }
155
156    #[test]
157    fn test_user_fee_increase() {
158        let action = IdentityCreditWithdrawalTransitionAction::V0(make_v0());
159        assert_eq!(action.user_fee_increase(), 6);
160    }
161}