UNPKG

aptos

Version:
463 lines (411 loc) 17.4 kB
import { AptosAccount } from "../../account/aptos_account"; import { bcsSerializeBool } from "../../bcs"; import { TokenClient } from "../../plugins/token_client"; import { getFaucetClient, longTestTimeout } from "../unit/test_helper.test"; import { Network, sleep } from "../../utils"; import { Provider } from "../../providers"; import { AptosToken } from "../../plugins"; const provider = new Provider(Network.LOCAL); const faucetClient = getFaucetClient(); const tokenClient = new TokenClient(provider.aptosClient); const aptosToken = new AptosToken(provider); const alice = new AptosAccount(); const collectionName = "AliceCollection"; const collectionNameV2 = "AliceCollection2"; const tokenName = "Alice Token"; let skipTest = false; let runTests = describe; describe("Indexer", () => { it("should throw an error when account address is not valid", async () => { const address1 = "702ca08576f66393140967fef983bb6bf160dafeb73de9c4ddac4d2dc"; expect(async () => { await provider.getOwnedTokens(address1); }).rejects.toThrow(`${address1} is less than 66 chars long.`); const address2 = "0x702ca08576f66393140967fef983bb6bf160dafeb73de9c4ddac4d2dc"; expect(async () => { await provider.getOwnedTokens(address2); }).rejects.toThrow(`${address2} is less than 66 chars long.`); }); it("should not throw an error when account address is missing 0x", async () => { const address = "790a34c702ca08576f66393140967fef983bb6bf160dafeb73de9c4ddac4d2dc"; expect(async () => { await provider.getOwnedTokens(address); }).not.toThrow(); }); beforeAll(async () => { const indexerLedgerInfo = await provider.getIndexerLedgerInfo(); const fullNodeChainId = await provider.getChainId(); console.log( `\n network chain id is: ${fullNodeChainId}, indexer chain id is: ${indexerLedgerInfo.ledger_infos[0].chain_id}`, ); if (indexerLedgerInfo.ledger_infos[0].chain_id !== fullNodeChainId) { console.log(`\n network chain id and indexer chain id are not synced, skipping rest of tests`); skipTest = true; runTests = describe.skip; } else { console.log(`\n network chain id and indexer chain id are in synced, running tests`); } if (!skipTest) { await faucetClient.fundAccount(alice.address(), 100000000); // Create collection and token V1 on Alice's account await provider.waitForTransaction( await tokenClient.createCollection(alice, collectionName, "Alice's simple collection", "https://aptos.dev"), { checkSuccess: true }, ); await provider.waitForTransaction( await tokenClient.createTokenWithMutabilityConfig( alice, collectionName, tokenName, "Alice's simple token", 1, "https://aptos.dev/img/nyan.jpeg", 1000, alice.address(), 1, 0, ["TOKEN_BURNABLE_BY_OWNER"], [bcsSerializeBool(true)], ["bool"], [false, false, false, false, true], ), { checkSuccess: true }, ); // Create collection and token V2 on Alice's account await provider.waitForTransaction( await aptosToken.createCollection( alice, "Alice's simple collection", collectionNameV2, "https://aptos.dev", 5, { royaltyNumerator: 10, royaltyDenominator: 10, }, ), { checkSuccess: true }, ); await provider.waitForTransactionWithResult( await aptosToken.mint( alice, collectionNameV2, "Alice's simple token", tokenName, "https://aptos.dev/img/nyan.jpeg", ["key"], ["bool"], ["true"], ), { checkSuccess: true }, ); } }, longTestTimeout); runTests("get data", () => { jest.retryTimes(5); beforeEach(async () => { await sleep(1000); }); it("gets indexer ledger info", async () => { const ledgerInfo = await provider.getIndexerLedgerInfo(); expect(ledgerInfo.ledger_infos[0].chain_id).toBeGreaterThan(1); }); // OBJECTS // it( "gets account owned objects data", async () => { const accountObjects = await provider.getAccountOwnedObjects(alice.address().hex()); expect(accountObjects.current_objects.length).toBe(2); }, longTestTimeout, ); // TOKENS // it( "gets token activities", async () => { const accountTokens = await provider.getOwnedTokens(alice.address().hex()); expect(accountTokens.current_token_ownerships_v2).toHaveLength(2); // V1 const tokenActivityV1 = await provider.getTokenActivities( accountTokens.current_token_ownerships_v2[0].current_token_data!.token_data_id, ); expect(tokenActivityV1.token_activities_v2).toHaveLength(2); expect(tokenActivityV1.token_activities_v2[0].token_standard).toEqual("v1"); expect(tokenActivityV1.token_activities_v2[0].from_address).toEqual(alice.address().hex()); expect(tokenActivityV1.token_activities_v2[1].token_standard).toEqual("v1"); expect(tokenActivityV1.token_activities_v2[1].to_address).toEqual(alice.address().hex()); // V2 const tokenActivityV2 = await provider.getTokenActivities( accountTokens.current_token_ownerships_v2[1].current_token_data!.token_data_id, ); expect(tokenActivityV2.token_activities_v2).toHaveLength(1); expect(tokenActivityV2.token_activities_v2[0].token_standard).toEqual("v2"); expect(tokenActivityV2.token_activities_v2[0].from_address).toEqual(alice.address().hex()); }, longTestTimeout, ); it( "gets token activities count", async () => { const accountTokens = await provider.getOwnedTokens(alice.address().hex(), { orderBy: [{ last_transaction_version: "desc" }], }); expect(accountTokens.current_token_ownerships_v2[0].token_standard).toBe("v2"); expect(accountTokens.current_token_ownerships_v2[1].token_standard).toBe("v1"); const tokenActivitiesV2Count = await provider.getTokenActivitiesCount( accountTokens.current_token_ownerships_v2[0].current_token_data!.token_data_id, ); expect(tokenActivitiesV2Count.token_activities_v2_aggregate.aggregate?.count).toBe(1); const tokenActivitiesV1Count = await provider.getTokenActivitiesCount( accountTokens.current_token_ownerships_v2[1].current_token_data!.token_data_id, ); expect(tokenActivitiesV1Count.token_activities_v2_aggregate.aggregate?.count).toBe(2); }, longTestTimeout, ); it( "gets account token count", async () => { const accountTokenCount = await provider.getAccountTokensCount(alice.address().hex()); expect(accountTokenCount.current_token_ownerships_v2_aggregate.aggregate?.count).toEqual(2); }, longTestTimeout, ); it( "gets token data", async () => { const accountTokens = await provider.getOwnedTokens(alice.address().hex()); const tokenData = await provider.getTokenData( accountTokens.current_token_ownerships_v2[0].current_token_data!.token_data_id, ); expect(tokenData.current_token_datas_v2[0].token_name).toEqual(tokenName); }, longTestTimeout, ); it( "gets token owners data", async () => { const accountTokens = await provider.getOwnedTokens(alice.address().hex()); const tokenOwnersData = await provider.getTokenOwnersData( accountTokens.current_token_ownerships_v2[0].current_token_data!.token_data_id, 0, ); expect(tokenOwnersData.current_token_ownerships_v2[0].owner_address).toEqual(alice.address().hex()); }, longTestTimeout, ); it( "gets token current owner data", async () => { const accountTokens = await provider.getOwnedTokens(alice.address().hex()); const tokenOwnersData = await provider.getTokenCurrentOwnerData( accountTokens.current_token_ownerships_v2[0].current_token_data!.token_data_id, 0, ); expect(tokenOwnersData.current_token_ownerships_v2[0].owner_address).toEqual(alice.address().hex()); }, longTestTimeout, ); it("gets account owned tokens", async () => { const tokens = await provider.getOwnedTokens(alice.address().hex()); expect(tokens.current_token_ownerships_v2.length).toEqual(2); }); it("gets account owned tokens by token data id", async () => { const accountTokens = await provider.getOwnedTokens(alice.address().hex()); const tokens = await provider.getOwnedTokensByTokenData( accountTokens.current_token_ownerships_v2[0].current_token_data!.token_data_id, ); expect(tokens.current_token_ownerships_v2).toHaveLength(1); expect(tokens.current_token_ownerships_v2[0].owner_address).toEqual(alice.address().hex()); }); it("gets account tokens owned from collection address", async () => { const collectionAddress = await provider.getCollectionAddress(alice.address().hex(), collectionNameV2); const tokensFromCollectionAddress = await provider.getTokenOwnedFromCollectionAddress( alice.address().hex(), collectionAddress, ); expect(tokensFromCollectionAddress.current_token_ownerships_v2[0].current_token_data!.token_name).toEqual( tokenName, ); }); it( "gets account current tokens by collection name and creator address", async () => { const tokens = await provider.getTokenOwnedFromCollectionNameAndCreatorAddress( alice.address().hex(), collectionNameV2, alice.address().hex(), ); expect(tokens.current_token_ownerships_v2).toHaveLength(1); expect(tokens.current_token_ownerships_v2[0].current_token_data?.token_name).toEqual(tokenName); }, longTestTimeout, ); it( "returns same result for getTokenOwnedFromCollectionNameAndCreatorAddress and getTokenOwnedFromCollectionAddress", async () => { const collectionAddress = await provider.getCollectionAddress(alice.address().hex(), collectionNameV2); const tokensFromCollectionAddress = await provider.getTokenOwnedFromCollectionAddress( alice.address().hex(), collectionAddress, ); const tokensFromNameAndCreatorAddress = await provider.getTokenOwnedFromCollectionNameAndCreatorAddress( alice.address().hex(), collectionNameV2, alice.address().hex(), ); expect(tokensFromCollectionAddress.current_token_ownerships_v2).toEqual( tokensFromNameAndCreatorAddress.current_token_ownerships_v2, ); }, longTestTimeout, ); it("gets the collection data", async () => { const collectionData = await provider.getCollectionData(alice.address().hex(), collectionName); expect(collectionData.current_collections_v2).toHaveLength(1); expect(collectionData.current_collections_v2[0].collection_name).toEqual(collectionName); }); it("gets the currect collection address", async () => { const collectionData = await provider.getCollectionData(alice.address().hex(), collectionNameV2); const collectionAddress = await provider.getCollectionAddress(alice.address().hex(), collectionNameV2); expect(collectionData.current_collections_v2[0].collection_id).toEqual(collectionAddress); }); it( "queries for all collections that an account has tokens for", async () => { const collections = await provider.getCollectionsWithOwnedTokens(alice.address().hex()); expect(collections.current_collection_ownership_v2_view.length).toEqual(2); }, longTestTimeout, ); // TRANSACTIONS // it( "gets account transactions count", async () => { const accountTransactionsCount = await provider.getAccountTransactionsCount(alice.address().hex()); expect(accountTransactionsCount.account_transactions_aggregate.aggregate?.count).toEqual(5); }, longTestTimeout, ); it( "gets account transactions data", async () => { const accountTransactionsData = await provider.getAccountTransactionsData(alice.address().hex()); expect(accountTransactionsData.account_transactions.length).toEqual(5); expect(accountTransactionsData.account_transactions[0]).toHaveProperty("transaction_version"); }, longTestTimeout, ); it( "gets top user transactions", async () => { const topUserTransactions = await provider.getTopUserTransactions(5); expect(topUserTransactions.user_transactions.length).toEqual(5); }, longTestTimeout, ); it( "gets user transactions", async () => { const userTransactions = await provider.getUserTransactions({ options: { limit: 4 } }); expect(userTransactions.user_transactions.length).toEqual(4); }, longTestTimeout, ); it( "gets number of delegators", async () => { const numberOfDelegators = await provider.getNumberOfDelegators(alice.address().hex()); expect(numberOfDelegators.num_active_delegator_per_pool).toHaveLength(0); }, longTestTimeout, ); // ACCOUNT // it( "gets account coin data", async () => { const accountCoinData = await provider.getAccountCoinsData(alice.address().hex()); expect(accountCoinData.current_fungible_asset_balances[0].asset_type).toEqual("0x1::aptos_coin::AptosCoin"); }, longTestTimeout, ); it( "gets account coin data count", async () => { const accountCoinDataCount = await provider.getAccountCoinsDataCount(alice.address().hex()); expect(accountCoinDataCount.current_fungible_asset_balances_aggregate.aggregate?.count).toEqual(1); }, longTestTimeout, ); // TOKEN STANDARD FILTER // it("gets account owned tokens with a specified token standard", async () => { const tokens = await provider.getOwnedTokens(alice.address().hex(), { tokenStandard: "v2" }); expect(tokens.current_token_ownerships_v2).toHaveLength(1); }); it( "gets account current tokens of a specific collection by the collection address with token standard specified", async () => { const tokens = await provider.getTokenOwnedFromCollectionNameAndCreatorAddress( alice.address().hex(), collectionNameV2, alice.address().hex(), { tokenStandard: "v2", }, ); expect(tokens.current_token_ownerships_v2).toHaveLength(1); expect(tokens.current_token_ownerships_v2[0].token_standard).toEqual("v2"); }, longTestTimeout, ); it( "queries for all v2 collections that an account has tokens for", async () => { const collections = await provider.getCollectionsWithOwnedTokens(alice.address().hex(), { tokenStandard: "v2", }); expect(collections.current_collection_ownership_v2_view.length).toEqual(1); }, longTestTimeout, ); // ORDER BY // it("gets account owned tokens sorted desc by token standard", async () => { const tokens = await provider.getOwnedTokens(alice.address().hex(), { orderBy: [{ token_standard: "desc" }], }); expect(tokens.current_token_ownerships_v2).toHaveLength(2); expect(tokens.current_token_ownerships_v2[0].token_standard).toEqual("v2"); }); it("gets account owned tokens sorted desc by collection name", async () => { const tokens = await provider.getOwnedTokens(alice.address().hex(), { orderBy: [{ current_token_data: { current_collection: { collection_name: "desc" } } }], }); expect(tokens.current_token_ownerships_v2).toHaveLength(2); expect(tokens.current_token_ownerships_v2[0].token_standard).toEqual("v2"); }); it("gets token activities sorted desc by collection name", async () => { const accountTokens = await provider.getOwnedTokens(alice.address().hex()); expect(accountTokens.current_token_ownerships_v2).toHaveLength(2); expect(accountTokens.current_token_ownerships_v2[0].token_standard).toEqual("v1"); const tokens = await provider.getTokenActivities( accountTokens.current_token_ownerships_v2[0].current_token_data!.token_data_id, { orderBy: [{ transaction_version: "desc" }], }, ); expect(tokens.token_activities_v2).toHaveLength(2); expect(tokens.token_activities_v2[0].token_standard).toEqual("v1"); }); it( "gets account transactions data", async () => { const accountTransactionsData = await provider.getAccountTransactionsData(alice.address().hex(), { orderBy: [{ transaction_version: "desc" }], }); expect(accountTransactionsData.account_transactions.length).toEqual(5); expect(accountTransactionsData.account_transactions[0]).toHaveProperty("transaction_version"); }, longTestTimeout, ); }); });