use crate::{AddressType, BitcoinWalletBuilder, Error, HDKey, Network, Seed};
use std::str::FromStr;
use walletd_coin_core::CryptoWalletBuilder;
use walletd_hd_key::HDNetworkType;
#[test]
fn test_default() -> Result<(), Error> {
let builder = BitcoinWalletBuilder::default();
assert_eq!(builder.address_format, AddressType::P2wpkh);
assert_eq!(builder.account_discovery, true);
assert!(builder.gap_limit_specified.is_some());
assert_eq!(
builder
.gap_limit_specified
.expect("should be some due to previous check"),
20
);
assert!(builder.master_hd_key.is_none());
assert!(builder.mnemonic_seed.is_none());
assert_eq!(builder.network_type, Network::Bitcoin);
Ok(())
}
#[test]
fn test_new() -> Result<(), Error> {
let builder = BitcoinWalletBuilder::new();
let default = BitcoinWalletBuilder::default();
assert_eq!(builder.address_format, default.address_format);
assert_eq!(builder.account_discovery, default.account_discovery);
assert!(builder.gap_limit_specified.is_some());
assert!(default.gap_limit_specified.is_some());
assert_eq!(
builder
.gap_limit_specified
.expect("should be some due to previous check"),
default
.gap_limit_specified
.expect("should be some due to previous check")
);
assert!(builder.master_hd_key.is_none());
assert!(builder.mnemonic_seed.is_none());
assert_eq!(builder.network_type, default.network_type);
assert_eq!(builder.hd_path_builder, default.hd_path_builder);
Ok(())
}
#[test]
fn test_with_mnemonic_seed() -> Result<(), Error> {
let seed_hex = "a2fd9c0522d84d52ee4c8533dc02d4b69b4df9b6255e1af20c9f1d4d691689f2a38637eb1ec778972bf845c32d5ae83c7536999b5666397ac32021b21e0accee";
let seed = Seed::from_str(seed_hex).unwrap();
let mut builder = BitcoinWalletBuilder::default();
builder.mnemonic_seed(seed.clone());
assert!(builder.mnemonic_seed.is_some());
assert_eq!(
builder
.mnemonic_seed
.expect("should be some due to previous check"),
seed
);
Ok(())
}
#[test]
fn test_with_master_hd_key() -> Result<(), Error> {
let seed_hex = "a2fd9c0522d84d52ee4c8533dc02d4b69b4df9b6255e1af20c9f1d4d691689f2a38637eb1ec778972bf845c32d5ae83c7536999b5666397ac32021b21e0accee";
let seed = Seed::from_str(seed_hex).unwrap();
let master_hd_key = HDKey::new_master(seed, HDNetworkType::TestNet)?;
let mut builder = BitcoinWalletBuilder::default();
builder.master_hd_key(master_hd_key.clone());
assert!(builder.master_hd_key.is_some());
assert_eq!(
builder
.master_hd_key
.expect("should be some due to previous check"),
master_hd_key
);
Ok(())
}
#[test]
fn test_with_address_format() -> Result<(), Error> {
let mut builder = BitcoinWalletBuilder::default();
builder.address_format(AddressType::P2pkh);
assert_eq!(builder.address_format, AddressType::P2pkh);
Ok(())
}
#[test]
fn test_with_network_type() -> Result<(), Error> {
let mut builder = BitcoinWalletBuilder::default();
builder.network_type(Network::Testnet);
assert_eq!(builder.network_type, Network::Testnet);
Ok(())
}
#[test]
fn test_with_hd_path_builder() -> Result<(), Error> {
let mut builder = BitcoinWalletBuilder::default();
assert!(builder.hd_path_builder.purpose.is_some());
assert!(builder.hd_purpose.is_some());
assert_eq!(
builder.hd_path_builder.purpose.expect("checked is some"),
builder
.hd_purpose
.expect("checked is some")
.to_shortform_num()
);
let mut hd_path_builder = builder.hd_path_builder.clone();
hd_path_builder.coin_type_index(0).address_index(1);
builder.hd_path_builder(hd_path_builder);
assert!(builder.hd_path_builder.coin_type.is_some());
assert!(builder.hd_path_builder.address_index.is_some());
assert_eq!(
builder.hd_path_builder.coin_type.expect("checked is some"),
0
);
assert_eq!(
builder
.hd_path_builder
.address_index
.expect("checked is some"),
1
);
Ok(())
}