Files
asle/contracts/test/VaultFacet.t.sol
defiQUG 507d9a35b1 Add initial project structure and documentation files
- Created .gitignore to exclude sensitive files and directories.
- Added API documentation in API_DOCUMENTATION.md.
- Included deployment instructions in DEPLOYMENT.md.
- Established project structure documentation in PROJECT_STRUCTURE.md.
- Updated README.md with project status and team information.
- Added recommendations and status tracking documents.
- Introduced testing guidelines in TESTING.md.
- Set up CI workflow in .github/workflows/ci.yml.
- Created Dockerfile for backend and frontend setups.
- Added various service and utility files for backend functionality.
- Implemented frontend components and pages for user interface.
- Included mobile app structure and services.
- Established scripts for deployment across multiple chains.
2025-12-03 21:22:31 -08:00

105 lines
3.8 KiB
Solidity

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;
import {Test, console} from "forge-std/Test.sol";
import {Diamond} from "../src/core/Diamond.sol";
import {DiamondCutFacet} from "../src/core/facets/DiamondCutFacet.sol";
import {DiamondInit} from "../src/core/DiamondInit.sol";
import {VaultFacet} from "../src/core/facets/VaultFacet.sol";
import {IDiamondCut} from "../src/interfaces/IDiamondCut.sol";
import {IVaultFacet} from "../src/interfaces/IVaultFacet.sol";
import {ERC20Mock} from "./mocks/ERC20Mock.sol";
contract VaultFacetTest is Test {
Diamond public diamond;
DiamondCutFacet public diamondCutFacet;
DiamondInit public diamondInit;
VaultFacet public vaultFacet;
ERC20Mock public asset;
address public owner;
address public user;
function setUp() public {
owner = address(this);
user = address(0x1);
// Deploy mock ERC20
asset = new ERC20Mock("Test Asset", "TA", 18);
// Deploy facets
diamondCutFacet = new DiamondCutFacet();
vaultFacet = new VaultFacet();
diamondInit = new DiamondInit();
// Deploy diamond
diamond = new Diamond();
// Prepare cuts
IDiamondCut.FacetCut[] memory cuts = new IDiamondCut.FacetCut[](2);
// Add DiamondCutFacet
bytes4[] memory diamondCutSelectors = new bytes4[](1);
diamondCutSelectors[0] = IDiamondCut.diamondCut.selector;
cuts[0] = IDiamondCut.FacetCut({
facetAddress: address(diamondCutFacet),
action: IDiamondCut.FacetCutAction.Add,
functionSelectors: diamondCutSelectors
});
// Add VaultFacet
bytes4[] memory vaultSelectors = new bytes4[](5);
vaultSelectors[0] = IVaultFacet.createVault.selector;
vaultSelectors[1] = IVaultFacet.getVault.selector;
vaultSelectors[2] = IVaultFacet.deposit.selector;
vaultSelectors[3] = IVaultFacet.convertToShares.selector;
vaultSelectors[4] = IVaultFacet.convertToAssets.selector;
cuts[1] = IDiamondCut.FacetCut({
facetAddress: address(vaultFacet),
action: IDiamondCut.FacetCutAction.Add,
functionSelectors: vaultSelectors
});
// Initialize
bytes memory initData = abi.encodeWithSelector(DiamondInit.init.selector, owner);
IDiamondCut(address(diamond)).diamondCut(cuts, address(diamondInit), initData);
}
function testCreateVault() public {
uint256 vaultId = IVaultFacet(address(diamond)).createVault(address(asset), false);
assertEq(vaultId, 0, "First vault should have ID 0");
IVaultFacet.Vault memory vault = IVaultFacet(address(diamond)).getVault(vaultId);
assertEq(vault.asset, address(asset));
assertFalse(vault.isMultiAsset);
assertTrue(vault.active);
}
function testCreateMultiAssetVault() public {
uint256 vaultId = IVaultFacet(address(diamond)).createVault(address(0), true);
IVaultFacet.Vault memory vault = IVaultFacet(address(diamond)).getVault(vaultId);
assertTrue(vault.isMultiAsset);
assertTrue(vault.active);
}
function testConvertToShares() public {
uint256 vaultId = IVaultFacet(address(diamond)).createVault(address(asset), false);
// First deposit - should be 1:1
uint256 assets = 1000 ether;
uint256 shares = IVaultFacet(address(diamond)).convertToShares(vaultId, assets);
assertEq(shares, assets, "First deposit should be 1:1");
}
function testConvertToAssets() public {
uint256 vaultId = IVaultFacet(address(diamond)).createVault(address(asset), false);
uint256 shares = 1000 ether;
uint256 assets = IVaultFacet(address(diamond)).convertToAssets(vaultId, shares);
// Empty vault should return 0
assertEq(assets, 0);
}
}