@@ -1,4 +1,6 @@
using System.Numerics ;
using Amazon.Runtime.Internal.Util ;
using Managing.Application.Abstractions ;
using Managing.Application.Abstractions.Repositories ;
using Managing.Common ;
using Managing.Domain.Evm ;
@@ -8,6 +10,7 @@ using Managing.Infrastructure.Evm.Models.Privy;
using Managing.Infrastructure.Evm.Services ;
using Microsoft.Extensions.Options ;
using Microsoft.VisualStudio.TestTools.UnitTesting ;
using Moq ;
using Nethereum.Contracts ;
using Nethereum.Contracts.Standards.ERC721.ContractDefinition ;
using Nethereum.Web3 ;
@@ -19,30 +22,24 @@ namespace Managing.Infrastructure.Tests;
public class EvmManagerTests
{
private readonly I EvmManager _manager ;
public readonly EvmManager _manager ;
private readonly List < Chain > _chains ;
public List < ISubgraphPrices > Subgraphs ;
public readonly IWeb3ProxyService _web3Proxy ;
public readonly string PublicAddress = "0x932167388dd9aad41149b3ca23ebd489e2e2dd78" ;
public EvmManagerTests ( )
{
// Use the helper method to create Web3ProxyService
_web3Proxy = CreateWebProxyService ( ) ;
_manager = new EvmManager ( Subgraphs , _web3Proxy ) ;
var cache = new Mock < ICacheService > ( ) ;
_manager = new EvmManager ( Subgraphs , _web3Proxy , cache . Object ) ;
_chains = ChainService . GetChains ( ) ;
}
[Fact]
public void Should_construct_manager ( )
{
var manager = new EvmManager ( Subgraphs , _web3Proxy ) ;
Assert . IsType < EvmManager > ( manager ) ;
}
[Ignore]
[Theory]
[InlineData("")]
@@ -69,8 +66,7 @@ public class EvmManagerTests
[InlineData("0xa435530d50d7D17Fd9fc6E1c897Dbf7C08E12d35", "0x17f4BAa9D35Ee54fFbCb2608e20786473c7aa49f")]
public async Task Should_return_event_transfer_nft ( string owner , string contract )
{
var manag er = new EvmManager ( Subgraphs , _web3Proxy ) ;
var holders = await manager . GetNftEvent ( owner , contract ) ;
var hold ers = await _manager . GetNftEvent ( owner , contract ) ;
Assert . IsType < List < EventLog < TransferEventDTO > > > ( holders ) ;
Assert . True ( holders . Any ( ) ) ;
}
@@ -80,8 +76,7 @@ public class EvmManagerTests
[Fact]
public async Task Should_return_date_of_block ( )
{
var manager = new EvmM anager( Subgraphs , _web3Proxy ) ;
var date = await manager . GetBlockDate ( 38793245 ) ;
var date = await _m anager. GetBlockDate ( 38793245 ) ;
Assert . Equal ( new DateTime ( 2022 , 11 , 17 , 11 , 15 , 33 ) , date ) ;
}
@@ -92,10 +87,8 @@ public class EvmManagerTests
var address = "0x94618601FE6cb8912b274E5a00453949A57f8C1e" ;
var privateKey = "0x7580e7fb49df1c861f0050fae31c2224c6aba908e116b8da44ee8cd927b990b0" ;
var manager = new EvmM anager( Subgraphs , _web3Prox y ) ;
var signature = manager . SignMessage ( message , privateKey ) ;
var addressRecovered = manager . VerifySignature ( signature , message ) ;
var signature = _m anager. SignMessage ( message , privateKe y ) ;
var addressRecovered = _manager . VerifySignature ( signature , message ) ;
Assert . Equal ( addressRecovered , address ) ;
}
@@ -103,8 +96,7 @@ public class EvmManagerTests
[Fact]
public void Shoud_return_generated_evm_address ( )
{
var manager = new EvmM anager( Subgraphs , _web3Proxy ) ;
var keys = manager . GenerateAddress ( ) ;
var keys = _m anager. GenerateAddress ( ) ;
Assert . IsType < ( string Key , string Secret ) > ( keys ) ;
Assert . False ( string . IsNullOrEmpty ( keys . Key ) ) ;
@@ -115,9 +107,8 @@ public class EvmManagerTests
public void Should_return_correct_account_for_mnemo ( )
{
var mnemo = "twist enemy flame exchange summer roast beyond friend image pyramid topple need" ;
var manager = new EvmManager ( Subgraphs , _web3Proxy ) ;
var publicAddress = "0x3aBAD913A70554f416944F1a4C0EAbF3BCAFB959" ;
var address = manager . GetAddressFromMnemo ( mnemo ) ;
var address = _ manager. GetAddressFromMnemo ( mnemo ) ;
Assert . NotNull ( address ) ;
Assert . IsType < string > ( address ) ;
Assert . Equal ( publicAddress , address ) ;
@@ -129,9 +120,8 @@ public class EvmManagerTests
// [InlineData("0x7002AE0Bae7fC67416230F025A32EfE086C0934E", Constants.Chains.Arbitrum)]
public async Task Should_return_balances ( string publicAddress , string chainName )
{
var manager = new EvmManager ( Subgraphs , _web3Proxy ) ;
var chain = _chains . First ( c = > c . Name = = chainName ) ;
var balances = await manager . GetBalances ( chain , 0 , 500 , publicAddress ) ;
var balances = await _ manager. GetBalances ( chain , 0 , 500 , publicAddress ) ;
Assert . IsType < List < EvmBalance > > ( balances ) ;
Assert . NotEmpty ( balances ) ;
@@ -143,9 +133,8 @@ public class EvmManagerTests
[InlineData("0xc62F5499789b716Aa94a421A60c76c8c13A31ab6", Constants.Chains.Ethereum)]
public async Task Should_return_all_balance ( string publicAddress , string chainName )
{
var manager = new EvmManager ( Subgraphs , _web3Proxy ) ;
var chain = _chains . First ( c = > c . Name = = chainName ) ;
var balances = await manager . GetAllBalances ( chain , publicAddress ) ;
var balances = await _ manager. GetAllBalances ( chain , publicAddress ) ;
Assert . IsType < List < EvmBalance > > ( balances ) ;
Assert . True ( balances . Count > 1 ) ;
@@ -156,8 +145,7 @@ public class EvmManagerTests
[InlineData("", Constants.Chains.Arbitrum, Ticker.GMX)]
public async void Should_return_token_balance ( string publicAddress , string chainName , Ticker ticker )
{
var manager = new EvmManager ( Subgraphs , _web3Proxy ) ;
var balance = await manager . GetTokenBalance ( chainName , ticker , publicAddress ) ;
var balance = await _manager . GetTokenBalance ( chainName , ticker , publicAddress ) ;
Assert . IsType < EvmBalance > ( balance ) ;
Assert . True ( balance . Balance > 0 ) ;
@@ -168,9 +156,8 @@ public class EvmManagerTests
[InlineData("")]
public async Task Should_return_balance_of_ethers ( string publicAddress )
{
var manager = new EvmManager ( Subgraphs , _web3Proxy ) ;
var chain = _chains . First ( c = > c . Name = = Constants . Chains . Ethereum ) ;
var balance = await manager . GetEtherBalance ( chain , publicAddress ) ;
var balance = await _ manager. GetEtherBalance ( chain , publicAddress ) ;
Assert . IsType < EvmBalance > ( balance ) ;
}
@@ -180,8 +167,7 @@ public class EvmManagerTests
[InlineData("")]
public async Task Should_return_all_balance_for_all_chain ( string publicAddress )
{
var manager = new EvmM anager( Subgraphs , _web3Proxy ) ;
var balances = await manager . GetAllBalancesOnAllChain ( publicAddress ) ;
var balances = await _m anager. GetAllBalancesOnAllChain ( publicAddress ) ;
Assert . IsType < List < EvmBalance > > ( balances ) ;
Assert . True ( balances . Count > 0 ) ;
@@ -192,12 +178,11 @@ public class EvmManagerTests
[InlineData(Ticker.BTC, Timeframe.FiveMinutes)]
public async Task Get_Prices ( Ticker ticker , Timeframe timeframe )
{
var m anager = new EvmM anager( Subgraphs , _web3Proxy ) ;
var candles = await manager . GetCandles ( SubgraphProvider . ChainlinkPrice , ticker , DateTime . UtcNow , timeframe ) ;
var c andles = await _m anager. GetCandles ( ticker , DateTime . UtcNow , timeframe ) ;
if ( ! candles . Any ( ) )
{
candles = await manager . GetCandles ( SubgraphProvider . ChainlinkGmx , ticker , DateTime . UtcNow , timeframe ) ;
candles = await _ manager. GetCandles ( ticker , DateTime . UtcNow , timeframe ) ;
}
Assert . NotNull ( candles ) ;
@@ -208,8 +193,7 @@ public class EvmManagerTests
[Fact]
public async Task Get_Available_Tickers ( )
{
var manag er = new EvmM anager( Subgraphs , _web3Proxy ) ;
var tickers = await manager . GetAvailableTicker ( ) ;
var tick ers = await _m anager. GetAvailableTicker ( ) ;
Assert . NotEmpty ( tickers ) ;
}
@@ -218,8 +202,7 @@ public class EvmManagerTests
[Fact]
public async Task GetLastCandle ( )
{
var m anager = new EvmM anager( Subgraphs , _web3Proxy ) ;
var candle = await manager . GetCandle ( SubgraphProvider . Gbc , Ticker . BTC ) ;
var c andle = await _m anager. GetCandle ( Ticker . BTC ) ;
Assert . NotNull ( candle ) ;
}
@@ -228,8 +211,7 @@ public class EvmManagerTests
[Fact]
public async Task Should_Init_Address_For_Trading ( )
{
var manager = new EvmM anager( Subgraphs , _web3Proxy ) ;
var accountInitilized = await manager . InitAddress ( PublicAddress ) ;
var accountInitilized = await _m anager. InitAddress ( PublicAddress ) ;
Assert . True ( accountInitilized ) ;
}
@@ -238,12 +220,11 @@ public class EvmManagerTests
[Fact]
public async Task Should_send_eth_from_account ( )
{
var manager = new EvmManager ( Subgraphs , _web3Proxy ) ;
var chain = _chains . First ( c = > c . Name = = Constants . Chains . Arbitrum ) ;
var balance = await manager . GetEtherBalance ( chain , PublicAddress ) ;
var balance = await _ manager. GetEtherBalance ( chain , PublicAddress ) ;
// Update receiver
var receiverAddress = "" ;
var sendResult = await manager . Send (
var sendResult = await _ manager. Send (
chain ,
Ticker . ETH ,
balance . Balance / 2 ,
@@ -258,12 +239,11 @@ public class EvmManagerTests
[Fact]
public async Task Should_send_Gmx_from_account ( )
{
var manager = new EvmManager ( Subgraphs , _web3Proxy ) ;
var chain = _chains . First ( c = > c . Name = = Constants . Chains . Arbitrum ) ;
var receiverAddress = "" ;
var balance = await manager . GetTokenBalance ( chain . Name , Ticker . GMX , PublicAddress ) ;
var balance = await _ manager. GetTokenBalance ( chain . Name , Ticker . GMX , PublicAddress ) ;
var sendResult = await manager . Send (
var sendResult = await _ manager. Send (
chain ,
Ticker . GMX ,
balance . Balance / 2 ,
@@ -278,10 +258,9 @@ public class EvmManagerTests
[Fact]
public async Task Should_return_allowance ( )
{
var manager = new EvmManager ( Subgraphs , _web3Proxy ) ;
var account = PrivateKeys . GetAccount ( ) ;
var allowance = await manager . GetAllowance ( account . Key , Ticker . USDC ) ;
var allowance = await _ manager. GetAllowance ( account . Key , Ticker . USDC ) ;
Assert . IsType < decimal > ( allowance ) ;
}
@@ -289,13 +268,12 @@ public class EvmManagerTests
[Fact]
public async Task Should_set_allowance ( )
{
var manager = new EvmManager ( Subgraphs , _web3Proxy ) ;
var account = PrivateKeys . GetAccount ( ) ;
// Get amount from balance
var balance = await manager . GetTokenBalance ( Constants . Chains . Arbitrum , Ticker . USDC , account . Key ) ;
var balance = await _ manager. GetTokenBalance ( Constants . Chains . Arbitrum , Ticker . USDC , account . Key ) ;
var result = await manager . SetAllowance ( account , Ticker . USDC , new BigInteger ( 10 ) ) ;
var result = await _ manager. SetAllowance ( account , Ticker . USDC , new BigInteger ( 10 ) ) ;
Assert . True ( result ) ;
}
@@ -314,14 +292,13 @@ public class EvmManagerTests
var walletId = "cm7vxs99f0007blcl8cmzv74t" ;
var address = "0x932167388dD9aad41149b3cA23eBD489E2E2DD78" ;
var manager = new EvmM anager( Subgraphs , _web3Proxy ) ;
var signature = await manager . SignMessageAsync ( walletId , address , message ) ;
var signature = await _m anager. SignMessageAsync ( walletId , address , message ) ;
Assert . NotNull ( signature ) ;
}
// Helper method to create Web3ProxyService for tests
public static IWeb3ProxyService CreateWebProxyService ( string baseUrl = "http://localhost:4111/api/ " )
public static IWeb3ProxyService CreateWebProxyService ( string baseUrl = "http://localhost:4111" )
{
var settings = new Web3ProxySettings { BaseUrl = baseUrl } ;
var options = Options . Create ( settings ) ;