Skip to main content

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            contract_version: None,
79            id: Identifier::from([0xDD; 32]),
80            owner_id: Identifier::from([0xAA; 32]),
81            properties: Default::default(),
82            revision: Some(1),
83            created_at: None,
84            updated_at: None,
85            transferred_at: None,
86            created_at_block_height: None,
87            updated_at_block_height: None,
88            transferred_at_block_height: None,
89            created_at_core_block_height: None,
90            updated_at_core_block_height: None,
91            transferred_at_core_block_height: None,
92            creator_id: None,
93            moderated_at: None,
94            moderated_by: None,
95        })
96    }
97
98    fn make_v0() -> IdentityCreditWithdrawalTransitionActionV0 {
99        IdentityCreditWithdrawalTransitionActionV0 {
100            identity_id: Identifier::from([0xAA; 32]),
101            nonce: 10,
102            prepared_withdrawal_document: make_document(),
103            amount: 7500,
104            user_fee_increase: 6,
105        }
106    }
107
108    #[test]
109    fn test_from_v0() {
110        let v0 = make_v0();
111        let action: IdentityCreditWithdrawalTransitionAction = v0.into();
112        assert!(matches!(
113            action,
114            IdentityCreditWithdrawalTransitionAction::V0(_)
115        ));
116    }
117
118    #[test]
119    fn test_nonce() {
120        let action = IdentityCreditWithdrawalTransitionAction::V0(make_v0());
121        assert_eq!(action.nonce(), 10);
122    }
123
124    #[test]
125    fn test_identity_id() {
126        let action = IdentityCreditWithdrawalTransitionAction::V0(make_v0());
127        assert_eq!(action.identity_id(), Identifier::from([0xAA; 32]));
128    }
129
130    #[test]
131    fn test_amount() {
132        let action = IdentityCreditWithdrawalTransitionAction::V0(make_v0());
133        assert_eq!(action.amount(), 7500);
134    }
135
136    #[test]
137    fn test_prepared_withdrawal_document() {
138        let action = IdentityCreditWithdrawalTransitionAction::V0(make_v0());
139        let doc = action.prepared_withdrawal_document();
140        match doc {
141            Document::V0(v0) => {
142                assert_eq!(v0.id, Identifier::from([0xDD; 32]));
143                assert_eq!(v0.owner_id, Identifier::from([0xAA; 32]));
144            }
145        }
146    }
147
148    #[test]
149    fn test_prepared_withdrawal_document_owned() {
150        let action = IdentityCreditWithdrawalTransitionAction::V0(make_v0());
151        let doc = action.prepared_withdrawal_document_owned();
152        match doc {
153            Document::V0(v0) => {
154                assert_eq!(v0.id, Identifier::from([0xDD; 32]));
155            }
156        }
157    }
158
159    #[test]
160    fn test_user_fee_increase() {
161        let action = IdentityCreditWithdrawalTransitionAction::V0(make_v0());
162        assert_eq!(action.user_fee_increase(), 6);
163    }
164}