1
1
use core :: option :: OptionTrait ;
2
- use core :: starknet :: SyscallResultTrait ;
3
- use starknet :: testing :: set_block_timestamp;
4
2
use core :: result :: ResultTrait ;
5
- use core :: traits :: {TryInto , Into };
3
+ use core :: traits :: {TryInto };
6
4
use core :: byte_array :: ByteArray ;
7
5
8
6
use snforge_std :: {
9
7
declare, start_cheat_caller_address, stop_cheat_caller_address, ContractClassTrait ,
10
8
DeclareResultTrait , spy_events, EventSpyAssertionsTrait , get_class_hash
11
9
};
12
10
13
- use openzeppelin :: {token :: erc721 :: interface :: {ERC721ABIDispatcher , ERC721ABIDispatcherTrait }};
14
-
15
- use starknet :: {ContractAddress , ClassHash , get_block_timestamp};
11
+ use starknet :: {ContractAddress , get_block_timestamp};
16
12
17
13
use weaver_contract :: interfaces :: IWeaverNFT :: {IWeaverNFTDispatcher , IWeaverNFTDispatcherTrait };
18
14
use weaver_contract :: interfaces :: IWeaver :: {IWeaverDispatcher , IWeaverDispatcherTrait , User };
15
+ use weaver_contract :: weaver :: Weaver :: {Event };
16
+ use weaver_contract :: weaver :: Weaver :: {UserRegistered , ProtocolRegistered , TaskMinted };
17
+
18
+
19
19
20
20
const ADMIN : felt252 = ' ADMIN' ;
21
21
@@ -78,6 +78,30 @@ fn test_register_user() {
78
78
}
79
79
80
80
81
+ #[test]
82
+ fn test_register_user_emit_event () {
83
+ let (weaver_contract_address , _ ) = __setup__ ();
84
+ let weaver_contract = IWeaverDispatcher { contract_address : weaver_contract_address };
85
+
86
+ let mut spy = spy_events ();
87
+
88
+ let user : ContractAddress = USER ();
89
+ start_cheat_caller_address (weaver_contract_address , user );
90
+
91
+ let details : ByteArray = " Test User" ;
92
+ weaver_contract . register_User (details );
93
+
94
+ let is_registered = weaver_contract . get_register_user (user );
95
+ assert! (is_registered . Details == " Test User" , " User should be registered" );
96
+
97
+ let expected_event = Event :: UserRegistered (UserRegistered {user : user });
98
+ spy . assert_emitted (@ array! [(weaver_contract_address , expected_event )]);
99
+
100
+ stop_cheat_caller_address (weaver_contract_address );
101
+ }
102
+
103
+
104
+
81
105
#[test]
82
106
#[should_panic(expected: ' user already registered' )]
83
107
fn test_already_registered_should_panic () {
@@ -133,6 +157,32 @@ fn test_protocol_register() {
133
157
stop_cheat_caller_address (weaver_contract_address );
134
158
}
135
159
160
+
161
+ #[test]
162
+ fn test_protocol_register_emit_event () {
163
+ let (weaver_contract_address , nft_address ) = __setup__ ();
164
+ let weaver_contract = IWeaverDispatcher { contract_address : weaver_contract_address };
165
+
166
+ let user : ContractAddress = USER ();
167
+ let mut spy = spy_events ();
168
+ start_cheat_caller_address (weaver_contract_address , user );
169
+
170
+ let protocol_name : ByteArray = " Weaver Protocol" ;
171
+ weaver_contract . protocol_register (protocol_name );
172
+
173
+ let protocol_info = weaver_contract . get_registered_protocols (user );
174
+ assert! (protocol_info . protocol_name == " Weaver Protocol" , " Protocol should be registered" );
175
+
176
+ let expected_event = Event :: ProtocolRegistered (ProtocolRegistered {user : user });
177
+ spy . assert_emitted (@ array! [(weaver_contract_address , expected_event )]);
178
+
179
+ stop_cheat_caller_address (weaver_contract_address );
180
+ }
181
+
182
+
183
+
184
+
185
+
136
186
#[test]
137
187
fn test_nft_minted_on_protocol_register () {
138
188
let (weaver_contract_address , nft_address ) = __setup__ ();
@@ -215,6 +265,8 @@ fn test_mint_nft_duplicate_id_should_panic() {
215
265
assert! (minted_token_id > 0 , " First NFT mint failed!" );
216
266
217
267
weaver_contract . mint (task_id );
268
+
269
+ stop_cheat_caller_address (weaver_contract_address );
218
270
}
219
271
220
272
#[test]
@@ -223,6 +275,8 @@ fn test_mint_nft() {
223
275
224
276
let weaver_contract = IWeaverDispatcher { contract_address : weaver_contract_address };
225
277
let nft_dispatcher = IWeaverNFTDispatcher { contract_address : nft_address };
278
+
279
+ let mut spy = spy_events ();
226
280
let user : ContractAddress = USER ();
227
281
228
282
start_cheat_caller_address (weaver_contract_address , user );
@@ -233,12 +287,6 @@ fn test_mint_nft() {
233
287
let is_registered = weaver_contract . get_register_user (user );
234
288
assert! (is_registered . Details == " Test User" , " User should be registered" );
235
289
236
- let protocol_name : ByteArray = " Weaver Protocol" ;
237
- weaver_contract . protocol_register (protocol_name );
238
-
239
- let protocol_info = weaver_contract . get_registered_protocols (user );
240
- assert! (protocol_info . protocol_name == " Weaver Protocol" , " Protocol should be registered" );
241
-
242
290
let task_id = 2 ;
243
291
244
292
let mut task_info = weaver_contract . get_task_info (task_id );
@@ -252,6 +300,11 @@ fn test_mint_nft() {
252
300
let minted_token_id = nft_dispatcher . get_user_token_id (user );
253
301
254
302
assert! (minted_token_id > 0 , " NFT NOT Minted!" );
303
+
304
+ let expected_event = Event :: TaskMinted (TaskMinted { task_id : task_id , user : user });
305
+ spy . assert_emitted (@ array! [(weaver_contract_address , expected_event )]);
306
+
307
+ stop_cheat_caller_address (weaver_contract_address );
255
308
}
256
309
257
310
#[test]
@@ -280,6 +333,8 @@ fn test_mint_nft_task_not_completed_should_panic() {
280
333
weaver_contract . mint (task_id );
281
334
282
335
println! (" Mint function did not panic!" );
336
+
337
+ stop_cheat_caller_address (weaver_contract_address );
283
338
}
284
339
285
340
#[test]
@@ -370,4 +425,56 @@ fn test_mint_task_already_exists() {
370
425
stop_cheat_caller_address (weaver_contract_address );
371
426
}
372
427
373
- // This is a comment
428
+
429
+ #[test]
430
+ fn test_nft_was_minted_after_user_registers (){
431
+ let (weaver_contract_address , nft_address ) = __setup__ ();
432
+ let weaver_contract = IWeaverDispatcher { contract_address : weaver_contract_address };
433
+ let nft_dispatcher = IWeaverNFTDispatcher { contract_address : nft_address };
434
+
435
+ let user : ContractAddress = USER ();
436
+ start_cheat_caller_address (weaver_contract_address , user );
437
+
438
+ let details : ByteArray = " Test User" ;
439
+ weaver_contract . register_User (details );
440
+
441
+ let minted_token_id = nft_dispatcher . get_user_token_id (user );
442
+ assert! (minted_token_id > 0 , " NFT NOT Minted!" );
443
+
444
+ let last_minted_id = nft_dispatcher . get_last_minted_id ();
445
+ assert_eq! (minted_token_id , last_minted_id , " Minted token ID should match the last minted ID" );
446
+
447
+ let mint_timestamp = nft_dispatcher . get_token_mint_timestamp (minted_token_id );
448
+ let current_block_timestamp = get_block_timestamp ();
449
+ assert_eq! (mint_timestamp , current_block_timestamp , " Mint timestamp not matched" );
450
+
451
+ stop_cheat_caller_address (weaver_contract_address );
452
+
453
+ }
454
+
455
+
456
+ #[test]
457
+ fn test_nft_was_minted_after_protocol_registers (){
458
+ let (weaver_contract_address , nft_address ) = __setup__ ();
459
+ let weaver_contract = IWeaverDispatcher { contract_address : weaver_contract_address };
460
+ let nft_dispatcher = IWeaverNFTDispatcher { contract_address : nft_address };
461
+
462
+ let user : ContractAddress = USER ();
463
+ start_cheat_caller_address (weaver_contract_address , user );
464
+
465
+ let protocol_name : ByteArray = " Weaver Protocol" ;
466
+ weaver_contract . protocol_register (protocol_name );
467
+
468
+ let minted_token_id = nft_dispatcher . get_user_token_id (user );
469
+ assert! (minted_token_id > 0 , " NFT NOT Minted!" );
470
+
471
+ let last_minted_id = nft_dispatcher . get_last_minted_id ();
472
+ assert_eq! (minted_token_id , last_minted_id , " Minted token ID should match the last minted ID" );
473
+
474
+ let mint_timestamp = nft_dispatcher . get_token_mint_timestamp (minted_token_id );
475
+ let current_block_timestamp = get_block_timestamp ();
476
+ assert_eq! (mint_timestamp , current_block_timestamp , " Mint timestamp not matched" );
477
+
478
+ stop_cheat_caller_address (weaver_contract_address );
479
+
480
+ }
0 commit comments