-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathburn.rs
108 lines (94 loc) · 3.11 KB
/
burn.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
use datanftmint::storage::DataNftAttributes;
use multiversx_sc_scenario::{
api::SingleTxApi,
managed_address, managed_buffer,
scenario_model::{CheckAccount, CheckStateStep, SetStateStep, TxExpect},
};
use crate::minter_state::minter_state::{
ContractsState, ANOTHER_TOKEN_IDENTIFIER, BONDING_OWNER_ADDRESS_EXPR, DATA_NFT_IDENTIFIER,
DATA_NFT_IDENTIFIER_EXPR, FIRST_USER_ADDRESS_EXPR, ITHEUM_TOKEN_IDENTIFIER,
MINTER_OWNER_ADDRESS_EXPR,
};
#[test]
fn burn_token_test() {
let mut state = ContractsState::new();
let first_user_address = state.first_user.clone();
state
.mock_minter_initialized(ITHEUM_TOKEN_IDENTIFIER, 100u64, 10u64)
.unpause_minter_contract(MINTER_OWNER_ADDRESS_EXPR, None)
.bond_contract_default_deploy_and_set(10u64, 100u64)
.bond_unpause_contract(BONDING_OWNER_ADDRESS_EXPR, None);
state.minter_disable_whitelist(MINTER_OWNER_ADDRESS_EXPR, None);
state
.world
.set_state_step(SetStateStep::new().block_timestamp(11u64));
state.minter_mint(
FIRST_USER_ADDRESS_EXPR,
"Test",
"https://test.com/test",
"https://test.com/test",
"https://test.com/test",
"random-url-encoded-here",
"https://test.com/test",
1000u64,
5u64,
&"Test title".repeat(1),
&"Test description".repeat(1),
10u64,
ITHEUM_TOKEN_IDENTIFIER,
0u64,
100u64 + 100u64,
0u64,
None,
);
state.pause_minter_contract(MINTER_OWNER_ADDRESS_EXPR, None);
state.minter_burn(
FIRST_USER_ADDRESS_EXPR,
DATA_NFT_IDENTIFIER,
1u64,
2u64,
Some(TxExpect::user_error("str:Minting and burning not allowed")),
);
state.unpause_minter_contract(MINTER_OWNER_ADDRESS_EXPR, None);
state.minter_burn(
FIRST_USER_ADDRESS_EXPR,
ANOTHER_TOKEN_IDENTIFIER,
0,
2u64,
Some(TxExpect::user_error("str:Invalid payment token")),
);
state.minter_burn(
FIRST_USER_ADDRESS_EXPR,
DATA_NFT_IDENTIFIER,
1u64,
0u64,
Some(TxExpect::user_error("str:Value must be higher than zero")),
);
state.minter_burn(
FIRST_USER_ADDRESS_EXPR,
DATA_NFT_IDENTIFIER,
1u64,
3u64,
None,
);
let data_nft_attributes: DataNftAttributes<SingleTxApi> = DataNftAttributes {
data_stream_url: managed_buffer!(b"random-url-encoded-here"),
data_preview_url: managed_buffer!(b"https://test.com/test"),
data_marshal_url: managed_buffer!(b"https://test.com/test"),
creator: managed_address!(&first_user_address),
creation_time: 11u64,
title: managed_buffer!(b"Test title"),
description: managed_buffer!(b"Test description"),
};
state
.world
.check_state_step(CheckStateStep::new().put_account(
FIRST_USER_ADDRESS_EXPR,
CheckAccount::new().esdt_nft_balance_and_attributes(
DATA_NFT_IDENTIFIER_EXPR,
1u64,
"2",
Some(data_nft_attributes),
),
));
}