Skip to content

Commit ec06bc6

Browse files
authored
Merge pull request #44 from Onasachi/main
refactored the manual use of erc721 on the contract
2 parents 97a29d1 + db0a25e commit ec06bc6

File tree

2 files changed

+38
-44
lines changed

2 files changed

+38
-44
lines changed

src/weaver.cairo

+3-8
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
2-
31
#[starknet::contract]
42
pub mod Weaver {
53
// *************************************************************************
@@ -76,11 +74,8 @@ pub mod Weaver {
7674

7775

7876
#[constructor]
79-
fn constructor(
80-
ref self: ContractState, owner: ContractAddress, weavernft_address: ContractAddress,
81-
) {
77+
fn constructor(ref self: ContractState, owner: ContractAddress) {
8278
self.owner.write(owner);
83-
self.weaver_nft_address.write(weavernft_address);
8479
}
8580

8681
// *************************************************************************
@@ -112,7 +107,7 @@ pub mod Weaver {
112107
// Veriy task does not exist
113108
assert(!self.task_registry.read(task_id).is_completed, 'TASK_ALREADY_EXISTS');
114109

115-
let task_info = TaskInfo { task_id, user: caller, is_completed: true, };
110+
let task_info = TaskInfo { task_id, user: caller, is_completed: true };
116111
self.task_registry.write(task_id, task_info);
117112

118113
// Get NFT contract dispatcher
@@ -161,7 +156,7 @@ pub mod Weaver {
161156
}
162157

163158
fn get_registered_protocols(
164-
self: @ContractState, address: ContractAddress
159+
self: @ContractState, address: ContractAddress,
165160
) -> ProtocolInfo {
166161
self.protocol_registrations.read(address)
167162
}

tests/test_weaver_contract.cairo

+35-36
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use core::byte_array::ByteArray;
55

66
use snforge_std::{
77
declare, start_cheat_caller_address, stop_cheat_caller_address, ContractClassTrait,
8-
DeclareResultTrait, spy_events, EventSpyAssertionsTrait
8+
DeclareResultTrait, spy_events, EventSpyAssertionsTrait,
99
};
1010

1111
use starknet::{ContractAddress, get_block_timestamp};
@@ -16,8 +16,6 @@ use weaver_contract::weaver::Weaver::{Event};
1616
use weaver_contract::weaver::Weaver::{UserRegistered, ProtocolRegistered, TaskMinted};
1717

1818

19-
const ADMIN: felt252 = 'ADMIN';
20-
2119
fn OWNER() -> ContractAddress {
2220
'owner'.try_into().unwrap()
2321
}
@@ -26,42 +24,43 @@ fn USER() -> ContractAddress {
2624
'recipient'.try_into().unwrap()
2725
}
2826

29-
fn __setup__() -> (ContractAddress, ContractAddress) {
27+
fn __setup__() -> ContractAddress {
3028
let class_hash = declare("Weaver").unwrap().contract_class();
31-
32-
let nft_address = __deploy_WeaverNFT__();
33-
3429
let mut calldata = array![];
3530
OWNER().serialize(ref calldata);
36-
nft_address.serialize(ref calldata);
3731
let (contract_address, _) = class_hash.deploy(@calldata).unwrap();
32+
let nft_address = __deploy_WeaverNFT__(contract_address);
33+
let weaver_contract = IWeaverDispatcher { contract_address: contract_address };
34+
start_cheat_caller_address(contract_address, OWNER());
35+
weaver_contract.set_erc721(nft_address);
36+
stop_cheat_caller_address(contract_address);
3837

39-
(contract_address, nft_address)
38+
return contract_address;
4039
}
4140

42-
fn __deploy_WeaverNFT__() -> ContractAddress {
41+
fn __deploy_WeaverNFT__(admin: ContractAddress) -> ContractAddress {
4342
let nft_class_hash = declare("WeaverNFT").unwrap().contract_class();
43+
let mut calldata = array![];
44+
admin.serialize(ref calldata);
4445

45-
let mut events_constructor_calldata: Array<felt252> = array![ADMIN];
46-
let (nft_contract_address, _) = nft_class_hash.deploy(@events_constructor_calldata).unwrap();
46+
let (nft_contract_address, _) = nft_class_hash.deploy(@calldata).unwrap();
4747

4848
return (nft_contract_address);
4949
}
5050

5151

5252
#[test]
5353
fn test_weaver_constructor() {
54-
let (weaver_contract_address, nft_address) = __setup__();
54+
let weaver_contract_address = __setup__();
5555
let weaver_contract = IWeaverDispatcher { contract_address: weaver_contract_address };
5656

5757
assert_eq!(weaver_contract.owner(), OWNER());
58-
assert!(weaver_contract.erc_721() == nft_address, "wrong erc721 address");
5958
}
6059

6160

6261
#[test]
6362
fn test_register_user() {
64-
let (weaver_contract_address, _) = __setup__();
63+
let weaver_contract_address = __setup__();
6564
let weaver_contract = IWeaverDispatcher { contract_address: weaver_contract_address };
6665

6766
let user: ContractAddress = USER();
@@ -79,7 +78,7 @@ fn test_register_user() {
7978

8079
#[test]
8180
fn test_register_user_emit_event() {
82-
let (weaver_contract_address, _) = __setup__();
81+
let weaver_contract_address = __setup__();
8382
let weaver_contract = IWeaverDispatcher { contract_address: weaver_contract_address };
8483

8584
let mut spy = spy_events();
@@ -103,7 +102,7 @@ fn test_register_user_emit_event() {
103102
#[test]
104103
#[should_panic(expected: 'user already registered')]
105104
fn test_already_registered_should_panic() {
106-
let (weaver_contract_address, _) = __setup__();
105+
let weaver_contract_address = __setup__();
107106
let weaver_contract = IWeaverDispatcher { contract_address: weaver_contract_address };
108107

109108
let user: ContractAddress = USER();
@@ -126,7 +125,7 @@ fn test_already_registered_should_panic() {
126125
#[test]
127126
#[should_panic(expected: 'USER_NOT_REGISTERED')] // Case-sensitive match
128127
fn test_mint_unregistered_user_panics() {
129-
let (weaver_contract_address, _) = __setup__();
128+
let weaver_contract_address = __setup__();
130129
let weaver_contract = IWeaverDispatcher { contract_address: weaver_contract_address };
131130

132131
let unregistered_user = USER(); // Uses the numeric address now
@@ -140,7 +139,7 @@ fn test_mint_unregistered_user_panics() {
140139

141140
#[test]
142141
fn test_protocol_register() {
143-
let (weaver_contract_address, _) = __setup__();
142+
let weaver_contract_address = __setup__();
144143
let weaver_contract = IWeaverDispatcher { contract_address: weaver_contract_address };
145144

146145
let user: ContractAddress = USER();
@@ -158,7 +157,7 @@ fn test_protocol_register() {
158157

159158
#[test]
160159
fn test_protocol_register_emit_event() {
161-
let (weaver_contract_address, _) = __setup__();
160+
let weaver_contract_address = __setup__();
162161
let weaver_contract = IWeaverDispatcher { contract_address: weaver_contract_address };
163162

164163
let user: ContractAddress = USER();
@@ -180,9 +179,9 @@ fn test_protocol_register_emit_event() {
180179

181180
#[test]
182181
fn test_nft_minted_on_protocol_register() {
183-
let (weaver_contract_address, nft_address) = __setup__();
182+
let weaver_contract_address = __setup__();
184183
let weaver_contract = IWeaverDispatcher { contract_address: weaver_contract_address };
185-
let nft_dispatcher = IWeaverNFTDispatcher { contract_address: nft_address };
184+
let nft_dispatcher = IWeaverNFTDispatcher { contract_address: weaver_contract.erc_721() };
186185

187186
let user: ContractAddress = USER();
188187
start_cheat_caller_address(weaver_contract_address, user);
@@ -206,7 +205,7 @@ fn test_nft_minted_on_protocol_register() {
206205
#[test]
207206
#[should_panic(expected: 'PROTOCOL_ALREADY_REGISTERED')]
208207
fn test_protocol_register_already_registered() {
209-
let (weaver_contract_address, _) = __setup__();
208+
let weaver_contract_address = __setup__();
210209
let weaver_contract = IWeaverDispatcher { contract_address: weaver_contract_address };
211210

212211
let user: ContractAddress = USER();
@@ -223,7 +222,7 @@ fn test_protocol_register_already_registered() {
223222
#[test]
224223
#[should_panic(expected: 'INVALID_PROTOCOL_NAME')]
225224
fn test_invalid_protocol_name_should_panic() {
226-
let (weaver_contract_address, _) = __setup__();
225+
let weaver_contract_address = __setup__();
227226
let weaver_contract = IWeaverDispatcher { contract_address: weaver_contract_address };
228227

229228
let user: ContractAddress = USER();
@@ -238,10 +237,10 @@ fn test_invalid_protocol_name_should_panic() {
238237
#[test]
239238
#[should_panic(expected: 'TASK_ALREADY_EXISTS')]
240239
fn test_mint_nft_duplicate_id_should_panic() {
241-
let (weaver_contract_address, nft_address) = __setup__();
240+
let weaver_contract_address = __setup__();
242241

243242
let weaver_contract = IWeaverDispatcher { contract_address: weaver_contract_address };
244-
let nft_dispatcher = IWeaverNFTDispatcher { contract_address: nft_address };
243+
let nft_dispatcher = IWeaverNFTDispatcher { contract_address: weaver_contract.erc_721() };
245244
let user: ContractAddress = USER();
246245

247246
start_cheat_caller_address(weaver_contract_address, user);
@@ -266,10 +265,10 @@ fn test_mint_nft_duplicate_id_should_panic() {
266265

267266
#[test]
268267
fn test_mint_nft() {
269-
let (weaver_contract_address, nft_address) = __setup__();
268+
let weaver_contract_address = __setup__();
270269

271270
let weaver_contract = IWeaverDispatcher { contract_address: weaver_contract_address };
272-
let nft_dispatcher = IWeaverNFTDispatcher { contract_address: nft_address };
271+
let nft_dispatcher = IWeaverNFTDispatcher { contract_address: weaver_contract.erc_721() };
273272

274273
let mut spy = spy_events();
275274
let user: ContractAddress = USER();
@@ -305,7 +304,7 @@ fn test_mint_nft() {
305304
#[test]
306305
#[should_panic(expected: "Task should NOT be completed")]
307306
fn test_mint_nft_task_not_completed_should_panic() {
308-
let (weaver_contract_address, _) = __setup__();
307+
let weaver_contract_address = __setup__();
309308
let weaver_contract = IWeaverDispatcher { contract_address: weaver_contract_address };
310309
let user: ContractAddress = USER();
311310

@@ -335,9 +334,9 @@ fn test_mint_nft_task_not_completed_should_panic() {
335334
#[test]
336335
fn test_mint_nft_after_task_completed() {
337336
// Set up the contracts
338-
let (weaver_contract_address, nft_address) = __setup__();
337+
let weaver_contract_address = __setup__();
339338
let weaver_contract = IWeaverDispatcher { contract_address: weaver_contract_address };
340-
let nft_dispatcher = IWeaverNFTDispatcher { contract_address: nft_address };
339+
let nft_dispatcher = IWeaverNFTDispatcher { contract_address: weaver_contract.erc_721() };
341340

342341
// Define the user address
343342
let user: ContractAddress = USER();
@@ -395,7 +394,7 @@ fn test_mint_nft_after_task_completed() {
395394
#[test]
396395
#[should_panic(expected: 'TASK_ALREADY_EXISTS')]
397396
fn test_mint_task_already_exists() {
398-
let (weaver_contract_address, _) = __setup__();
397+
let weaver_contract_address = __setup__();
399398
let weaver_contract = IWeaverDispatcher { contract_address: weaver_contract_address };
400399
let user: ContractAddress = USER();
401400

@@ -423,9 +422,9 @@ fn test_mint_task_already_exists() {
423422

424423
#[test]
425424
fn test_nft_was_minted_after_user_registers() {
426-
let (weaver_contract_address, nft_address) = __setup__();
425+
let weaver_contract_address = __setup__();
427426
let weaver_contract = IWeaverDispatcher { contract_address: weaver_contract_address };
428-
let nft_dispatcher = IWeaverNFTDispatcher { contract_address: nft_address };
427+
let nft_dispatcher = IWeaverNFTDispatcher { contract_address: weaver_contract.erc_721() };
429428

430429
let user: ContractAddress = USER();
431430
start_cheat_caller_address(weaver_contract_address, user);
@@ -449,9 +448,9 @@ fn test_nft_was_minted_after_user_registers() {
449448

450449
#[test]
451450
fn test_nft_was_minted_after_protocol_registers() {
452-
let (weaver_contract_address, nft_address) = __setup__();
451+
let weaver_contract_address = __setup__();
453452
let weaver_contract = IWeaverDispatcher { contract_address: weaver_contract_address };
454-
let nft_dispatcher = IWeaverNFTDispatcher { contract_address: nft_address };
453+
let nft_dispatcher = IWeaverNFTDispatcher { contract_address: weaver_contract.erc_721() };
455454

456455
let user: ContractAddress = USER();
457456
start_cheat_caller_address(weaver_contract_address, user);

0 commit comments

Comments
 (0)