bvs-multi-test 2.0.7

SatLayer Bitcoin Validated Service
Documentation
# BVS Multi Test

BVS Multi Test is a testing utility for the SatLayer ecosystem.
It provides a convenient way to bootstrap all the necessary contracts for testing services in the BVS ecosystem.

This crate is designed
to simplify the testing process for BVS ecosystem contracts
by providing a pre-configured environment with all the necessary contracts already initialized.
It's similar to [cw-multi-test](https://github.com/CosmWasm/cw-multi-test),
but specifically tailored for the BVS ecosystem.

> This crate is only compiled for non-wasm32 targets
> (i.e., for testing purposes) and is not included in the final Wasm binary.

## Features

- Initializes core BVS contracts (Pauser, Registry, VaultRouter) with a single function call
- Provides helper methods to deploy and configure various vault types:
  - Bank vaults (for native tokens)
  - CW20 vaults (for CW20 tokens)
- Simplifies the creation of CW20 tokens for testing purposes

## Usage

BVS Multi Test integrates with the following BVS contracts:

- `bvs-pauser`: Contract for pausing functionality
- `bvs-registry`: Contract for registry functionality
- `bvs-vault-router`: Contract for routing between different vaults
- `bvs-vault-bank`: Contract for bank vaults (native tokens)
- `bvs-vault-cw20`: Contract for CW20 vaults (CW20 tokens)

When you create a new `BvsMultiTest` instance, it automatically initializes these core contracts.
You can then use the provided methods to deploy and configure additional contracts as needed.

### Basic Setup

```rust
use bvs_multi_test::BvsMultiTest;
use cosmwasm_std::testing::mock_env;
use cw_multi_test::App;

#[test]
fn new() {
    let mut app = App::default();
    let env = mock_env();
    BvsMultiTest::new(&mut app, &env);
}
```

### Deploying a Bank Vault

```rust
#[test]
fn deploy_bank_vault() {
    let mut app = App::default();
    let env = mock_env();
    let bvs = BvsMultiTest::new(&mut app, &env);

    let operator = app.api().addr_make("operator");
    let denom = "baby".to_string();

    let vault = bvs.deploy_bank_vault(&mut app, &env, operator.clone(), denom.clone());

    assert_eq!(vault.init.operator, operator.to_string());
    assert_eq!(vault.init.denom, denom);
}
```

### Deploying a CW20 Token and Vault

```rust
#[test]
fn deploy_cw20_vault() {
    let mut app = App::default();
    let env = mock_env();
    let bvs = BvsMultiTest::new(&mut app, &env);

    let owner = app.api().addr_make("owner").to_string();
    let token = bvs.deploy_cw20_token(&mut app, &env, "APPLE", owner.clone());

    let operator = app.api().addr_make("operator");
    let vault = bvs.deploy_cw20_vault(&mut app, &env, operator.clone(), token.addr.clone());

    assert_eq!(vault.init.operator, operator.to_string());
    assert_eq!(vault.init.cw20_contract, token.addr.to_string());
}
```