diff --git a/nearcontract/Cargo.lock b/nearcontract/Cargo.lock index 703ab5f..c8baa1e 100644 --- a/nearcontract/Cargo.lock +++ b/nearcontract/Cargo.lock @@ -2308,6 +2308,38 @@ dependencies = [ "serde", ] +[[package]] +name = "near-units" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97a2b77f295d398589eeee51ad0887905ef1734fb12b45cb6d77bd7e401988b9" +dependencies = [ + "near-units-core", + "near-units-macro", +] + +[[package]] +name = "near-units-core" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89aa2a7985de87a08ca35f28abd8d00f0f901e704257e6e029aadef981386bc6" +dependencies = [ + "num-format", + "regex", +] + +[[package]] +name = "near-units-macro" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89ab45d066220846f9bd5c21e9ab88c47c892edd36f962ada78bf8308523171a" +dependencies = [ + "near-units-core", + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "near-vm-errors" version = "0.14.0" @@ -2444,6 +2476,16 @@ dependencies = [ "num-traits", ] +[[package]] +name = "num-format" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a652d9771a63711fd3c3deb670acfbe5c30a4072e664d7a3bf5a9e1056ac72c3" +dependencies = [ + "arrayvec 0.7.4", + "itoa", +] + [[package]] name = "num-integer" version = "0.1.45" @@ -3161,10 +3203,14 @@ dependencies = [ name = "rust-simple-access-control" version = "0.1.0" dependencies = [ + "anyhow", "byteorder", "ed25519-dalek", "near-sdk", + "near-units", "near-workspaces", + "serde_json", + "tokio", "wee_alloc", ] diff --git a/nearcontract/Cargo.toml b/nearcontract/Cargo.toml index fc6fad3..8711973 100644 --- a/nearcontract/Cargo.toml +++ b/nearcontract/Cargo.toml @@ -15,6 +15,10 @@ ed25519-dalek = "1.0.1" [dev-dependencies] near-workspaces = { version = "0.9.0", features = ["unstable"] } +tokio = { version = "1.10.0", features = ["full"] } +anyhow = "1.0" +near-units = "0.2.0" +serde_json = { version = "1.0", features = ["arbitrary_precision"] } [profile.release] codegen-units = 1 diff --git a/nearcontract/tests/migration.rs b/nearcontract/tests/migration.rs new file mode 100644 index 0000000..c3c0825 --- /dev/null +++ b/nearcontract/tests/migration.rs @@ -0,0 +1,14 @@ +mod test_env; + +use {crate::test_env::*, serde_json::json}; + +#[tokio::test] +async fn test_deploy_contract_self_upgrade() -> anyhow::Result<()> { + let contract = init_contracts().await?; + let wasm = near_workspaces::compile_project("./").await?; + + let mut contract_upgrade_result = + contract.call("unsafe_self_upgrade").args(wasm).max_gas().transact().await?; + + Ok(()) +} \ No newline at end of file diff --git a/nearcontract/tests/test_env.rs b/nearcontract/tests/test_env.rs new file mode 100644 index 0000000..3ecc32e --- /dev/null +++ b/nearcontract/tests/test_env.rs @@ -0,0 +1,22 @@ +use near_units::parse_near; +use near_workspaces::{AccountId, types::NearToken}; +use serde_json::json; + +const WASMGIT_CONTRACT: &str = "wasmgit.near"; + +pub async fn init_contracts() -> anyhow::Result { + let worker = near_workspaces::sandbox().await?; + let mainnet = near_workspaces::mainnet_archival().await?; + + let contract_id: AccountId = WASMGIT_CONTRACT.parse()?; + let contract = worker + .import_contract(&contract_id, &mainnet) + .initial_balance(NearToken::from_near(parse_near!("1000 N"))) + .transact() + .await?; + let outcome = contract.call("new").args_json(json!({})).transact().await?; + assert!(outcome.is_success()); + assert!(format!("{:?}", outcome).contains("Migrated to version:")); + + Ok(contract) +} \ No newline at end of file