Skip to content

Commit

Permalink
changes
Browse files Browse the repository at this point in the history
  • Loading branch information
PoulavBhowmick03 committed Oct 29, 2024
1 parent a2761d6 commit 34c0eb5
Showing 1 changed file with 94 additions and 148 deletions.
242 changes: 94 additions & 148 deletions onchain/cairo/src/tests/nameservice_tests.cairo
Original file line number Diff line number Diff line change
Expand Up @@ -15,46 +15,50 @@ mod nameservice_tests {
};

fn ADMIN() -> ContractAddress {
starknet::contract_address_const::<1>() // Using 1 instead of 123
starknet::contract_address_const::<1>()
}

fn CALLER() -> ContractAddress {
starknet::contract_address_const::<2>() // Using 2 instead of 5
starknet::contract_address_const::<2>()
}

const ADMIN_ROLE: felt252 = selector!("ADMIN_ROLE");
const YEAR_IN_SECONDS: u64 = 31536000_u64;
const PAYMENT_AMOUNT: felt252 = 10;

fn setup() -> (INameserviceDispatcher, IERC20Dispatcher, IERC20MintableDispatcher) {
let erc20_mintable_class = declare("ERC20Mintable").unwrap().contract_class();

let (payment_token_dispatcher, payment_token_mintable_dispatcher) = deploy_erc20_mint(
*erc20_mintable_class, "PaymentToken", "PAY", ADMIN(), 1_000_000_u256,
*erc20_mintable_class,
selector!("PaymentToken"),
selector!("PAY"),
ADMIN(),
50_u256,
);

let nameservice_class = declare("Nameservice").unwrap().contract_class();

let mut calldata = array![];
ADMIN().serialize(ref calldata); // owner
ADMIN().serialize(ref calldata); // admin
ADMIN().serialize(ref calldata);
ADMIN().serialize(ref calldata);

let (nameservice_address, _) = nameservice_class.deploy(@calldata).unwrap();

let nameservice_dispatcher = INameserviceDispatcher { contract_address: nameservice_address };

// Set the token_quote in the nameservice contract
start_cheat_caller_address(nameservice_dispatcher.contract_address, ADMIN());
nameservice_dispatcher.set_token_quote(payment_token_dispatcher.contract_address);
nameservice_dispatcher.update_subscription_price(100_u256);
nameservice_dispatcher.update_subscription_price(10_u256); // Reduced price
stop_cheat_caller_address(nameservice_dispatcher.contract_address);

(nameservice_dispatcher, payment_token_dispatcher, payment_token_mintable_dispatcher)
}


fn deploy_erc20_mint(
class: ContractClass,
name: ByteArray,
symbol: ByteArray,
name: felt252,
symbol: felt252,
owner: ContractAddress,
initial_supply: u256,
) -> (IERC20Dispatcher, IERC20MintableDispatcher) {
Expand All @@ -72,195 +76,137 @@ mod nameservice_tests {

(erc20_dispatcher, erc20_mintable_dispatcher)
}

#[test]
fn test_claim_username() {
let (nameservice_dispatcher, payment_token_dispatcher, payment_token_mintable_dispatcher) = setup();

// Mint tokens to CALLER
start_cheat_caller_address(payment_token_mintable_dispatcher.contract_address, ADMIN());
payment_token_mintable_dispatcher.mint(CALLER(), 1000_u256);
payment_token_mintable_dispatcher.mint(CALLER(), 20_u256); // Reduced amount
stop_cheat_caller_address(payment_token_mintable_dispatcher.contract_address);

// Approve Nameservice contract to spend CALLER's tokens

start_cheat_caller_address(payment_token_dispatcher.contract_address, CALLER());
payment_token_dispatcher.approve(nameservice_dispatcher.contract_address, 1000_u256);
payment_token_dispatcher.approve(nameservice_dispatcher.contract_address, 20_u256);
stop_cheat_caller_address(payment_token_dispatcher.contract_address);

// CALLER claims a username
let username = "test".try_into().unwrap();
let username = selector!("test");

start_cheat_caller_address(nameservice_dispatcher.contract_address, CALLER());
nameservice_dispatcher.claim_username(username);
stop_cheat_caller_address(nameservice_dispatcher.contract_address);

// Verify username mapping
let stored_username = nameservice_dispatcher.get_username(CALLER());
assert(stored_username == username, 'Username was not set correctly');

let stored_address = nameservice_dispatcher.get_username_address(username);
assert(stored_address == CALLER(), 'Address was not set correctly');

// Verify subscription expiry
let expiry = nameservice_dispatcher.get_subscription_expiry(CALLER());
let current_time = get_block_timestamp();
assert(expiry > current_time, 'Subscription expiry not set correctly');

// Verify token balances
let caller_balance = payment_token_dispatcher.balance_of(CALLER());
assert(caller_balance == 900_u256, 'Payment token balance incorrect');
assert(caller_balance == 10_u256, 'Payment token balance incorrect');

let contract_balance = payment_token_dispatcher.balance_of(nameservice_dispatcher.contract_address);
assert(contract_balance == 100_u256, 'Contract token balance incorrect');
assert(contract_balance == 10_u256, 'Contract token balance incorrect');
}


// #[test]
// fn test_change_username() {
// let (nameservice_dispatcher, payment_token_dispatcher, payment_token_mintable_dispatcher) = setup();

// // Mint and approve tokens
// start_cheat_caller_address(payment_token_mintable_dispatcher.contract_address, ADMIN());
// payment_token_mintable_dispatcher.mint(CALLER(), 1000_u256);
// stop_cheat_caller_address(payment_token_mintable_dispatcher.contract_address);

// start_cheat_caller_address(payment_token_dispatcher.contract_address, CALLER());
// payment_token_dispatcher.approve(nameservice_dispatcher.contract_address, 1000_u256);
// stop_cheat_caller_address(payment_token_dispatcher.contract_address);

// // Claim initial username
// let username = 'test'.try_into().unwrap();

// start_cheat_caller_address(nameservice_dispatcher.contract_address, CALLER());
// nameservice_dispatcher.claim_username(username);
// stop_cheat_caller_address(nameservice_dispatcher.contract_address);

// // Change username
// let new_username = 'new'.try_into().unwrap();

// start_cheat_caller_address(nameservice_dispatcher.contract_address, CALLER());
// nameservice_dispatcher.change_username(new_username);
// stop_cheat_caller_address(nameservice_dispatcher.contract_address);

// // Verify changes
// let stored_username = nameservice_dispatcher.get_username(CALLER());
// assert(stored_username == new_username, 'Username was not changed correctly');

// let old_username_address = nameservice_dispatcher.get_username_address(username);
// assert(old_username_address == starknet::contract_address_const::<0>(), 'Old username still mapped');

// let new_username_address = nameservice_dispatcher.get_username_address(new_username);
// assert(new_username_address == CALLER(), 'New username not mapped correctly');
// }

// #[test]
// fn test_renew_subscription() {
// let (nameservice_dispatcher, payment_token_dispatcher, payment_token_mintable_dispatcher) = setup();

// // Mint and approve tokens
// start_cheat_caller_address(payment_token_mintable_dispatcher.contract_address, ADMIN());
// payment_token_mintable_dispatcher.mint(CALLER(), 1000_u256);
// stop_cheat_caller_address(payment_token_mintable_dispatcher.contract_address);
#[test]
fn test_change_username() {
let (nameservice_dispatcher, payment_token_dispatcher, payment_token_mintable_dispatcher) = setup();

// start_cheat_caller_address(payment_token_dispatcher.contract_address, CALLER());
// payment_token_dispatcher.approve(nameservice_dispatcher.contract_address, 1000_u256);
// stop_cheat_caller_address(payment_token_dispatcher.contract_address);
start_cheat_caller_address(payment_token_mintable_dispatcher.contract_address, ADMIN());
payment_token_mintable_dispatcher.mint(CALLER(), 20_u256);
stop_cheat_caller_address(payment_token_mintable_dispatcher.contract_address);

start_cheat_caller_address(payment_token_dispatcher.contract_address, CALLER());
payment_token_dispatcher.approve(nameservice_dispatcher.contract_address, 20_u256);
stop_cheat_caller_address(payment_token_dispatcher.contract_address);

// // Claim username
// let username = 'test'.try_into().unwrap();
let username = selector!("test");

// start_cheat_caller_address(nameservice_dispatcher.contract_address, CALLER());
// nameservice_dispatcher.claim_username(username);
// stop_cheat_caller_address(nameservice_dispatcher.contract_address);
start_cheat_caller_address(nameservice_dispatcher.contract_address, CALLER());
nameservice_dispatcher.claim_username(username);
stop_cheat_caller_address(nameservice_dispatcher.contract_address);

// // Get current expiry
// let current_expiry = nameservice_dispatcher.get_subscription_expiry(CALLER());
let new_username = selector!("new");

// // Advance time by half a year
// let half_year = 15768000_u64;
// let new_timestamp = get_block_timestamp() + half_year;
// start_warp(nameservice_dispatcher.contract_address, new_timestamp);
start_cheat_caller_address(nameservice_dispatcher.contract_address, CALLER());
nameservice_dispatcher.change_username(new_username);
stop_cheat_caller_address(nameservice_dispatcher.contract_address);

// // Renew subscription
// start_cheat_caller_address(nameservice_dispatcher.contract_address, CALLER());
// nameservice_dispatcher.renew_subscription();
// stop_cheat_caller_address(nameservice_dispatcher.contract_address);
let stored_username = nameservice_dispatcher.get_username(CALLER());
assert(stored_username == new_username, 'Username was not changed correctly');

// // Verify new expiry
// let new_expiry = nameservice_dispatcher.get_subscription_expiry(CALLER());
// assert(new_expiry == current_expiry + YEAR_IN_SECONDS, 'Subscription not renewed correctly');
let old_username_address = nameservice_dispatcher.get_username_address(username);
assert(old_username_address == starknet::contract_address_const::<0>(), 'Old username still mapped');

// // Verify token balance
// let caller_balance = payment_token_dispatcher.balance_of(CALLER());
// assert(caller_balance == 800_u256, 'Payment token balance incorrect after renewal');
// }
let new_username_address = nameservice_dispatcher.get_username_address(new_username);
assert(new_username_address == CALLER(), 'New username not mapped correctly');
}

// #[test]
// fn test_withdraw_fees() {
// let (nameservice_dispatcher, payment_token_dispatcher, payment_token_mintable_dispatcher) = setup();
#[test]
fn test_renew_subscription() {
let (nameservice_dispatcher, payment_token_dispatcher, payment_token_mintable_dispatcher) = setup();

// // Mint and approve tokens
// start_cheat_caller_address(payment_token_dispatcher.contract_address, ADMIN());
// payment_token_dispatcher.mint(CALLER(), 1000_u256);
// stop_cheat_caller_address(payment_token_dispatcher.contract_address);
start_cheat_caller_address(payment_token_mintable_dispatcher.contract_address, ADMIN());
payment_token_mintable_dispatcher.mint(CALLER(), 20_u256);
stop_cheat_caller_address(payment_token_mintable_dispatcher.contract_address);

// start_cheat_caller_address(payment_token_dispatcher.contract_address, CALLER());
// payment_token_dispatcher.approve(nameservice_dispatcher.contract_address, 1000_u256);
// stop_cheat_caller_address(payment_token_dispatcher.contract_address);
start_cheat_caller_address(payment_token_dispatcher.contract_address, CALLER());
payment_token_dispatcher.approve(nameservice_dispatcher.contract_address, 20_u256);
stop_cheat_caller_address(payment_token_dispatcher.contract_address);

// // Claim username
// let username = 'test'.try_into().unwrap();
let username = selector!("test");

// start_cheat_caller_address(nameservice_dispatcher.contract_address, CALLER());
// nameservice_dispatcher.claim_username(username);
// stop_cheat_caller_address(nameservice_dispatcher.contract_address);
start_cheat_caller_address(nameservice_dispatcher.contract_address, CALLER());
nameservice_dispatcher.claim_username(username);
stop_cheat_caller_address(nameservice_dispatcher.contract_address);

// // Withdraw fees
// start_cheat_caller_address(nameservice_dispatcher.contract_address, ADMIN());
// nameservice_dispatcher.withdraw_fees(100_u256);
// stop_cheat_caller_address(nameservice_dispatcher.contract_address);
let current_expiry = nameservice_dispatcher.get_subscription_expiry(CALLER());

// // Verify ADMIN balance
// let admin_balance = payment_token_dispatcher.balance_of(ADMIN());
// assert(admin_balance == 1_000_000_u256 + 100_u256, 'Admin did not receive fees');
let half_year = 15768000_u64;
let new_timestamp = get_block_timestamp() + half_year;
start_warp(nameservice_dispatcher.contract_address, new_timestamp);

// // Verify contract balance
// let contract_balance = payment_token_dispatcher.balance_of(nameservice_dispatcher.contract_address);
// assert(contract_balance == 0_u256, 'Contract balance not zero after withdrawal');
// }
start_cheat_caller_address(nameservice_dispatcher.contract_address, CALLER());
nameservice_dispatcher.renew_subscription();
stop_cheat_caller_address(nameservice_dispatcher.contract_address);

// #[test]
// #[should_panic(expected: ('Username already claimed',))]
// fn test_claim_username_already_claimed() {
// let (nameservice_dispatcher, payment_token_dispatcher, payment_token_mintable_dispatcher) = setup();
let new_expiry = nameservice_dispatcher.get_subscription_expiry(CALLER());
assert(new_expiry == current_expiry + YEAR_IN_SECONDS, 'Subscription not renewed correctly');

// let other_user: ContractAddress = 6.try_into().unwrap();
let caller_balance = payment_token_dispatcher.balance_of(CALLER());
assert(caller_balance == 0_u256, 'Payment token balance incorrect after renewal');
}

// // Mint and approve tokens for CALLER and other_user
// start_cheat_caller_address(payment_token_dispatcher.contract_address, ADMIN());
// payment_token_dispatcher.mint(CALLER(), 1000_u256);
// payment_token_dispatcher.mint(other_user, 1000_u256);
// stop_cheat_caller_address(payment_token_dispatcher.contract_address);
#[test]
fn test_withdraw_fees() {
let (nameservice_dispatcher, payment_token_dispatcher, payment_token_mintable_dispatcher) = setup();

start_cheat_caller_address(payment_token_mintable_dispatcher.contract_address, ADMIN());
payment_token_mintable_dispatcher.mint(CALLER(), 20_u256);
stop_cheat_caller_address(payment_token_mintable_dispatcher.contract_address);

// start_cheat_caller_address(payment_token_dispatcher.contract_address, CALLER());
// payment_token_dispatcher.approve(nameservice_dispatcher.contract_address, 1000_u256);
// stop_cheat_caller_address(payment_token_dispatcher.contract_address);
start_cheat_caller_address(payment_token_dispatcher.contract_address, CALLER());
payment_token_dispatcher.approve(nameservice_dispatcher.contract_address, 20_u256);
stop_cheat_caller_address(payment_token_dispatcher.contract_address);

// start_cheat_caller_address(payment_token_dispatcher.contract_address, other_user);
// payment_token_dispatcher.approve(nameservice_dispatcher.contract_address, 1000_u256);
// stop_cheat_caller_address(payment_token_dispatcher.contract_address);
let username = selector!("test");

// // CALLER claims a username
// let username = 'test'.try_into().unwrap();
start_cheat_caller_address(nameservice_dispatcher.contract_address, CALLER());
nameservice_dispatcher.claim_username(username);
stop_cheat_caller_address(nameservice_dispatcher.contract_address);

// start_cheat_caller_address(nameservice_dispatcher.contract_address, CALLER());
// nameservice_dispatcher.claim_username(username);
// stop_cheat_caller_address(nameservice_dispatcher.contract_address);
start_cheat_caller_address(nameservice_dispatcher.contract_address, ADMIN());
nameservice_dispatcher.withdraw_fees(10_u256);
stop_cheat_caller_address(nameservice_dispatcher.contract_address);

// // other_user tries to claim the same username
// start_cheat_caller_address(nameservice_dispatcher.contract_address, other_user);
// nameservice_dispatcher.claim_username(username);
// stop_cheat_caller_address(nameservice_dispatcher.contract_address);
// }
let admin_balance = payment_token_dispatcher.balance_of(ADMIN());
assert(admin_balance == 60_u256, 'Admin did not receive fees'); // 50 initial + 10 withdrawn

}
let contract_balance = payment_token_dispatcher.balance_of(nameservice_dispatcher.contract_address);
assert(contract_balance == 0_u256, 'Contract balance not zero after withdrawal');
}
}

0 comments on commit 34c0eb5

Please sign in to comment.