#[cfg(test)]
use crate::environ::Context;
use crate::bscscan;
use lazy_static::lazy_static;
use std::env;
use std::sync::Mutex;
lazy_static! {
static ref LOCK: Mutex<()> = Mutex::new(());
static ref ADDRESS1: &'static str = "0x0000000000000000000000000000000000001004";
static ref ADDRESS2: &'static str = "0x0000000000000000000000000000000000001005";
}
macro_rules! serial_test {
(fn $name: ident() $body: block) => {
#[test]
fn $name() {
let _guard = LOCK.lock().unwrap();
$body
}
};
}
fn get_api_key_or_panic() -> String {
env::var("BSCSCAN_TEST_APIKEY").expect("Error: define 'BSCSCAN_TEST_APIKEY' environment variable for testing")
}
fn create_context() -> Context {
Context {
api_key: get_api_key_or_panic()
}
}
serial_test! {
fn test_get_balance() {
let ctx = create_context();
let _bnb_balance = bscscan::accounts().get_balance_address(&ctx, &ADDRESS1).unwrap();
}
}
serial_test! {
fn test_get_balance_multi() {
let ctx = create_context();
let txs = bscscan::accounts().get_balance_addresses_multi(&ctx, &[&ADDRESS1, &ADDRESS2]).unwrap();
assert!(txs.len() == 2);
}
}
serial_test! {
fn test_get_list_normal_txs() {
let ctx = create_context();
let txs = bscscan::accounts().get_list_normal_transactions(&ctx, &ADDRESS1).unwrap();
assert!(txs.len() == 10000);
}
}
serial_test! {
fn test_get_list_internal_txs() {
let ctx = create_context();
let txs = bscscan::accounts().get_list_internal_transactions(&ctx, &ADDRESS1).unwrap();
assert!(txs.len() == 10000);
}
}
serial_test! {
fn test_get_bep20_transfer_events() {
let ctx = create_context();
let res = bscscan::accounts().get_bep20_transfer_events_a(&ctx, &ADDRESS1);
assert!(res.is_err()); }
}
serial_test! {
fn test_get_bnb_last_price() {
let ctx = create_context();
match bscscan::stats().get_bnb_last_price(&ctx) {
Ok(res) => println!("{:#?}", res),
Err(e) => panic!("{:?}:", e)
}
}
}
serial_test! {
fn test_contracts_get_abi_with_no_pretty_print() {
let ctx = create_context();
let res = bscscan::contracts().get_abi(&ctx, &ADDRESS1, false);
assert!(res.is_ok());
assert!(res.unwrap().len() == 11842); }
}
serial_test! {
fn test_contracts_get_abi_with_pretty_print() {
let ctx = create_context();
let res = bscscan::contracts().get_abi(&ctx, &ADDRESS1, true);
assert!(res.is_ok());
assert!(res.unwrap().len() > 11842);
}
}
serial_test! {
fn test_contracts_get_verified_source_code() {
let ctx = create_context();
match bscscan::contracts().get_verified_source_code(&ctx, "0x1bA8D3C4c219B124d351F603060663BD1bcd9bbF") {
Err(e) => panic!("{:?}", e),
Ok(res) => {
assert!(res.0.len() > 0);
assert_eq!(res.1, false);
assert_eq!(res.0[0].constructor_arguments.len(), 5);
assert_eq!(res.0[0].constructor_arguments[0], "000000000000000000000000ba5fe23f8a3a24bed3236f05f2fcf35fd0bf0b5c");
assert_eq!(res.0[0].constructor_arguments[1], "000000000000000000000000Ee9546E92e6876EdF6a234eFFbD72d75360d91f0");
assert_eq!(res.0[0].constructor_arguments[2], "0000000000000000000000000000000000000000000000000000000000000060");
assert_eq!(res.0[0].constructor_arguments[3], "0000000000000000000000000000000000000000000000000000000000000000");
assert_eq!(res.0[0].constructor_arguments[4], "0000000000000000000000000000000000000000000000000000000000000000");
assert_eq!(res.0[0].optimization_used, true);
assert_eq!(res.0[0].compiler_version, "v0.6.4+commit.1dca32f3");
assert_eq!(res.0[0].runs, 200);
assert_eq!(res.0[0].contract_name, "BEP20UpgradeableProxy");
assert_eq!(res.0[0].evm_version, "Default");
assert_eq!(res.0[0].license_type, "Apache-2.0");
assert_eq!(res.0[0].proxy, true);
assert_eq!(res.0[0].implementation, "0xba5fe23f8a3a24bed3236f05f2fcf35fd0bf0b5c");
assert_eq!(res.0[0].swarm_source, "ipfs://647a4fea61bb23cbda141d2cf5cadbd9ec022ccc2ffffaaa1b59b91259cfb8a1");
}
}
}
}
serial_test! {
fn test_contracts_get_verified_source_code_json_format() {
let ctx = create_context();
match bscscan::contracts().get_verified_source_code(&ctx, "0x1befe6f3f0e8edd2d4d15cae97baee01e51ea4a4") {
Err(e) => panic!("{}", e),
Ok(res) => {
assert_eq!(res.0.len(), 7);
assert_eq!(res.1, true);
assert_eq!(res.0[0].constructor_arguments.len(), 0);
assert_eq!(res.0[0].compiler_version, "v0.8.12+commit.f00d7308");
assert_eq!(res.0[0].runs, 200);
assert_eq!(res.0[0].evm_version, "Default");
assert_eq!(res.0[0].license_type, "");
assert_eq!(res.0[0].proxy, false);
assert_eq!(res.0[0].implementation, "");
assert_eq!(res.0[0].swarm_source, "");
assert_eq!(res.0[1].contract_name, "contracts/LpMigration.sol");
assert_eq!(res.0[2].contract_name, "@openzeppelin/contracts/access/Ownable.sol");
assert_eq!(res.0[3].contract_name, "@openzeppelin/contracts/utils/Context.sol");
assert_eq!(res.0[4].contract_name, "@openzeppelin/contracts/utils/math/SafeMath.sol");
assert_eq!(res.0[5].contract_name, "@openzeppelin/contracts/security/ReentrancyGuard.sol");
assert_eq!(res.0[6].contract_name, "@openzeppelin/contracts/token/ERC20/IERC20.sol");
}
}
}
}