Skip to content

Commit

Permalink
Added starknet foundry support + demonstration tests (#20)
Browse files Browse the repository at this point in the history
* Added starknet foundry support + demonstration tests

---------

Co-authored-by: Arn0d <[email protected]>
  • Loading branch information
thomas192 and Arn0d authored Mar 19, 2024
1 parent 670f7e9 commit da4d0fc
Show file tree
Hide file tree
Showing 4 changed files with 90 additions and 1 deletion.
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ node.json
artifacts
target
Scarb.lock
.tool-versions

# nile
127.0.0.1.*
Expand All @@ -26,6 +27,9 @@ build

.DS_Store

# Starknet foundry
.snfoundry_cache

# deployment
tmp
.tmp*
Expand Down
6 changes: 5 additions & 1 deletion Scarb.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,11 @@ starknet = ">=2.5.3"
alexandria_storage = { git = "https://github.com/keep-starknet-strange/alexandria", tag = "cairo-v2.5.4" }
alexandria_numeric = { git = "https://github.com/keep-starknet-strange/alexandria", tag = "cairo-v2.5.4" }
openzeppelin = { git = "https://github.com/cloudvenger/cairo-contracts.git", tag = "oz-cairo-2.5.3" }
snforge_std = { git = "https://github.com/foundry-rs/starknet-foundry", tag = "v0.17.1" }

[scripts]
test = "snforge test"

[[target.starknet-contract]]
sierra = true
casm = false
casm = true
1 change: 1 addition & 0 deletions tests/lib.cairo
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
mod test_project;
80 changes: 80 additions & 0 deletions tests/test_project.cairo
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
// Starknet deps

use starknet::ContractAddress;

// External deps

use openzeppelin::tests::utils::constants as c;
use openzeppelin::utils::serde::SerializedAppend;
use snforge_std as snf;
use snforge_std::{CheatTarget, ContractClassTrait, EventSpy, SpyOn};
use alexandria_storage::list::{List, ListTrait};

// Components

use carbon_v3::components::absorber::interface::{
IAbsorber, IAbsorberDispatcher, IAbsorberDispatcherTrait, ICarbonCredits,
ICarbonCreditsDispatcher, ICarbonCreditsDispatcherTrait
};
use carbon_v3::components::minter::interface::{IMint, IMintDispatcher, IMintDispatcherTrait};

// Contracts

use carbon_v3::contracts::project::{
Project, IExternalDispatcher as IProjectDispatcher,
IExternalDispatcherTrait as IProjectDispatcherTrait
};

/// Deploys a project contract.
fn deploy_project(owner: felt252) -> (ContractAddress, EventSpy) {
let contract = snf::declare('Project');
let uri: ByteArray = "uri";
let mut calldata: Array<felt252> = array![];
calldata.append_serde(uri.into());
calldata.append_serde(c::OWNER());
let contract_address = contract.deploy(@calldata).unwrap();

let mut spy = snf::spy_events(SpyOn::One(contract_address));

(contract_address, spy)
}

/// Sets up the project contract.
fn setup_project(
contract_address: ContractAddress,
ton_equivalent: u64,
project_value: u256,
times: Span<u64>,
absorptions: Span<u64>
) {
let project = IAbsorberDispatcher { contract_address };

project.set_absorptions(times, absorptions);
project.set_project_value(project_value);
snf::store(
contract_address,
selector!("Absorber_ton_equivalent"),
array![ton_equivalent.into()].span(),
); // Only way to set ton equivalent for the moment (TO CHANGE)
}

#[test]
fn test_constructor_ok() {
let (_project_address, _spy) = deploy_project(c::OWNER().into());
}

#[test]
fn test_is_setup() {
let (project_address, _) = deploy_project(c::OWNER().into());
let project = IAbsorberDispatcher { contract_address: project_address };

setup_project(
project_address,
1000000,
121099000000,
array![21, 674579600, 1706115600, 1737738000].span(),
array![21, 29609535, 47991466, 88828605].span(),
);

assert(project.is_setup(), 'Error during setup');
}

0 comments on commit da4d0fc

Please sign in to comment.