Search in sources :

Example 11 with NftTransfer

use of com.hedera.mirror.common.domain.token.NftTransfer in project hedera-mirror-node by hashgraph.

the class BatchUpserterTest method tokenDissociateTransfer.

@Test
void tokenDissociateTransfer() {
    // given
    EntityId accountId = EntityId.of("0.0.215", ACCOUNT);
    EntityId accountId2 = EntityId.of("0.0.216", ACCOUNT);
    Token nftClass1 = getDeletedNftClass(10L, 25L, EntityId.of("0.0.100", TOKEN));
    Token nftClass2 = getDeletedNftClass(11L, 24L, EntityId.of("0.0.101", TOKEN));
    EntityId tokenId1 = nftClass1.getTokenId().getTokenId();
    // already deleted, result of wipe
    Nft nft1 = getNft(tokenId1, accountId, 1L, 11L, 16L, true);
    Nft nft2 = getNft(tokenId1, accountId, 2L, 11L, 11L, false);
    Nft nft3 = getNft(tokenId1, accountId, 3L, 12L, 12L, false);
    // different account
    Nft nft4 = getNft(tokenId1, accountId2, 4L, 18L, 18L, false);
    Nft nft5 = getNft(nftClass2.getTokenId().getTokenId(), accountId, 1L, 15L, 15L, false);
    nftRepository.saveAll(List.of(nft1, nft2, nft3, nft4, nft5));
    tokenRepository.saveAll(List.of(nftClass1, nftClass2));
    long consensusTimestamp = 30L;
    EntityId ftId = EntityId.of("0.0.217", TOKEN);
    EntityId payerId = EntityId.of("0.0.2002", ACCOUNT);
    TokenTransfer fungibleTokenTransfer = domainBuilder.tokenTransfer().customize(t -> t.amount(-10).id(new TokenTransfer.Id(consensusTimestamp, ftId, accountId)).isApproval(false).payerAccountId(payerId).tokenDissociate(true)).get();
    TokenTransfer nonFungibleTokenTransfer = domainBuilder.tokenTransfer().customize(t -> t.amount(-2).id(new TokenTransfer.Id(consensusTimestamp, tokenId1, accountId)).isApproval(false).payerAccountId(payerId).tokenDissociate(true)).get();
    List<TokenTransfer> tokenTransfers = List.of(fungibleTokenTransfer, nonFungibleTokenTransfer);
    // when
    persist(tokenDissociateTransferBatchUpserter, tokenTransfers);
    // then
    assertThat(nftRepository.findAll()).containsExactlyInAnyOrder(nft1, getNft(tokenId1, accountId, 2L, 11L, 30L, true), getNft(tokenId1, accountId, 3L, 12L, 30L, true), nft4, nft5);
    NftTransfer serial2Transfer = getNftTransfer(tokenId1, accountId, 2L, consensusTimestamp);
    serial2Transfer.setPayerAccountId(payerId);
    NftTransfer serial3Transfer = getNftTransfer(tokenId1, accountId, 3L, consensusTimestamp);
    serial3Transfer.setPayerAccountId(payerId);
    assertThat(nftTransferRepository.findAll()).containsExactlyInAnyOrder(serial2Transfer, serial3Transfer);
    assertThat(tokenTransferRepository.findAll()).usingElementComparatorIgnoringFields("tokenDissociate").containsOnly(fungibleTokenTransfer);
}
Also used : EntityId(com.hedera.mirror.common.domain.entity.EntityId) CryptoAllowanceRepository(com.hedera.mirror.importer.repository.CryptoAllowanceRepository) SneakyThrows(lombok.SneakyThrows) EntityId(com.hedera.mirror.common.domain.entity.EntityId) ContractRepository(com.hedera.mirror.importer.repository.ContractRepository) Assertions.assertThat(org.assertj.core.api.Assertions.assertThat) ScheduleRepository(com.hedera.mirror.importer.repository.ScheduleRepository) EntityType(com.hedera.mirror.common.domain.entity.EntityType) TOKEN(com.hedera.mirror.common.domain.entity.EntityType.TOKEN) NftTransfer(com.hedera.mirror.common.domain.token.NftTransfer) TokenSupplyTypeEnum(com.hedera.mirror.common.domain.token.TokenSupplyTypeEnum) NftAllowanceRepository(com.hedera.mirror.importer.repository.NftAllowanceRepository) Token(com.hedera.mirror.common.domain.token.Token) TokenId(com.hedera.mirror.common.domain.token.TokenId) TokenRepository(com.hedera.mirror.importer.repository.TokenRepository) TokenFreezeStatusEnum(com.hedera.mirror.common.domain.token.TokenFreezeStatusEnum) Collection(java.util.Collection) TOKEN_DISSOCIATE_BATCH_PERSISTER(com.hedera.mirror.importer.config.MirrorImporterConfiguration.TOKEN_DISSOCIATE_BATCH_PERSISTER) Resource(javax.annotation.Resource) CryptoAllowance(com.hedera.mirror.common.domain.entity.CryptoAllowance) TokenPauseStatusEnum(com.hedera.mirror.common.domain.token.TokenPauseStatusEnum) StandardCharsets(java.nio.charset.StandardCharsets) NftAllowance(com.hedera.mirror.common.domain.entity.NftAllowance) ByteString(com.google.protobuf.ByteString) Test(org.junit.jupiter.api.Test) List(java.util.List) Nft(com.hedera.mirror.common.domain.token.Nft) EntityRepository(com.hedera.mirror.importer.repository.EntityRepository) TransactionOperations(org.springframework.transaction.support.TransactionOperations) TokenAccountRepository(com.hedera.mirror.importer.repository.TokenAccountRepository) NftTransferId(com.hedera.mirror.common.domain.token.NftTransferId) TokenAccount(com.hedera.mirror.common.domain.token.TokenAccount) ACCOUNT(com.hedera.mirror.common.domain.entity.EntityType.ACCOUNT) Schedule(com.hedera.mirror.common.domain.schedule.Schedule) TokenTypeEnum(com.hedera.mirror.common.domain.token.TokenTypeEnum) NftId(com.hedera.mirror.common.domain.token.NftId) Contract(com.hedera.mirror.common.domain.contract.Contract) Hex(org.apache.commons.codec.binary.Hex) ArrayList(java.util.ArrayList) DomainBuilder(com.hedera.mirror.common.domain.DomainBuilder) NftTransferRepository(com.hedera.mirror.importer.repository.NftTransferRepository) NftRepository(com.hedera.mirror.importer.repository.NftRepository) TokenAllowanceRepository(com.hedera.mirror.importer.repository.TokenAllowanceRepository) Tuple(org.assertj.core.groups.Tuple) TokenTransferRepository(com.hedera.mirror.importer.repository.TokenTransferRepository) Entity(com.hedera.mirror.common.domain.entity.Entity) IntegrationTest(com.hedera.mirror.importer.IntegrationTest) Key(com.hederahashgraph.api.proto.java.Key) TokenKycStatusEnum(com.hedera.mirror.common.domain.token.TokenKycStatusEnum) TokenAllowance(com.hedera.mirror.common.domain.entity.TokenAllowance) TokenTransfer(com.hedera.mirror.common.domain.token.TokenTransfer) NftTransfer(com.hedera.mirror.common.domain.token.NftTransfer) Token(com.hedera.mirror.common.domain.token.Token) TokenTransfer(com.hedera.mirror.common.domain.token.TokenTransfer) EntityId(com.hedera.mirror.common.domain.entity.EntityId) TokenId(com.hedera.mirror.common.domain.token.TokenId) NftTransferId(com.hedera.mirror.common.domain.token.NftTransferId) NftId(com.hedera.mirror.common.domain.token.NftId) Nft(com.hedera.mirror.common.domain.token.Nft) Test(org.junit.jupiter.api.Test) IntegrationTest(com.hedera.mirror.importer.IntegrationTest)

Example 12 with NftTransfer

use of com.hedera.mirror.common.domain.token.NftTransfer in project hedera-mirror-node by hashgraph.

the class SqlEntityListenerTest method onNftTransfer.

@Test
void onNftTransfer() {
    NftTransfer nftTransfer1 = domainBuilder.nftTransfer().get();
    NftTransfer nftTransfer2 = domainBuilder.nftTransfer().get();
    NftTransfer nftTransfer3 = domainBuilder.nftTransfer().get();
    // when
    sqlEntityListener.onNftTransfer(nftTransfer1);
    sqlEntityListener.onNftTransfer(nftTransfer2);
    sqlEntityListener.onNftTransfer(nftTransfer3);
    completeFileAndCommit();
    // then
    assertThat(nftTransferRepository.findAll()).containsExactlyInAnyOrder(nftTransfer1, nftTransfer2, nftTransfer3);
}
Also used : NftTransfer(com.hedera.mirror.common.domain.token.NftTransfer) Test(org.junit.jupiter.api.Test) IntegrationTest(com.hedera.mirror.importer.IntegrationTest) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest)

Example 13 with NftTransfer

use of com.hedera.mirror.common.domain.token.NftTransfer in project hedera-mirror-node by hashgraph.

the class SqlEntityListenerTest method onNftTransferDuplicates.

@Test
void onNftTransferDuplicates() {
    NftTransfer nftTransfer1 = domainBuilder.nftTransfer().get();
    // when
    sqlEntityListener.onNftTransfer(nftTransfer1);
    sqlEntityListener.onNftTransfer(nftTransfer1);
    sqlEntityListener.onNftTransfer(nftTransfer1);
    completeFileAndCommit();
    // then
    assertThat(nftTransferRepository.findAll()).containsExactlyInAnyOrder(nftTransfer1);
}
Also used : NftTransfer(com.hedera.mirror.common.domain.token.NftTransfer) Test(org.junit.jupiter.api.Test) IntegrationTest(com.hedera.mirror.importer.IntegrationTest) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest)

Example 14 with NftTransfer

use of com.hedera.mirror.common.domain.token.NftTransfer in project hedera-mirror-node by hashgraph.

the class SqlEntityListenerTest method onNftTransferMultiReceiverSingleTimestamp.

@Test
void onNftTransferMultiReceiverSingleTimestamp() {
    var nftTransfer = domainBuilder.nftTransfer();
    EntityId entity1 = EntityId.of("0.0.10", ACCOUNT);
    EntityId entity2 = EntityId.of("0.0.11", ACCOUNT);
    EntityId entity3 = EntityId.of("0.0.12", ACCOUNT);
    EntityId entity4 = EntityId.of("0.0.13", ACCOUNT);
    var nftTransfer1 = nftTransfer.customize(n -> n.senderAccountId(entity1).receiverAccountId(entity2)).get();
    var nftTransfer2 = nftTransfer.customize(n -> n.senderAccountId(entity2).receiverAccountId(entity3)).get();
    var nftTransfer3 = nftTransfer.customize(n -> n.senderAccountId(entity3).receiverAccountId(entity4)).get();
    // when
    sqlEntityListener.onNftTransfer(nftTransfer1);
    sqlEntityListener.onNftTransfer(nftTransfer2);
    sqlEntityListener.onNftTransfer(nftTransfer3);
    completeFileAndCommit();
    // then
    var mergedNftTransfer = nftTransfer.customize(n -> n.senderAccountId(entity1).receiverAccountId(entity4)).get();
    assertThat(nftTransferRepository.findAll()).containsExactlyInAnyOrder(mergedNftTransfer);
}
Also used : EntityId(com.hedera.mirror.common.domain.entity.EntityId) BeforeEach(org.junit.jupiter.api.BeforeEach) SCHEDULE(com.hedera.mirror.common.domain.entity.EntityType.SCHEDULE) CryptoAllowanceRepository(com.hedera.mirror.importer.repository.CryptoAllowanceRepository) SneakyThrows(lombok.SneakyThrows) EntityId(com.hedera.mirror.common.domain.entity.EntityId) NonFeeTransfer(com.hedera.mirror.common.domain.transaction.NonFeeTransfer) ContractRepository(com.hedera.mirror.importer.repository.ContractRepository) ContractResultRepository(com.hedera.mirror.importer.repository.ContractResultRepository) Assertions.assertThat(org.assertj.core.api.Assertions.assertThat) RequiredArgsConstructor(lombok.RequiredArgsConstructor) Autowired(org.springframework.beans.factory.annotation.Autowired) NodeStakeRepository(com.hedera.mirror.importer.repository.NodeStakeRepository) ScheduleRepository(com.hedera.mirror.importer.repository.ScheduleRepository) EntityType(com.hedera.mirror.common.domain.entity.EntityType) TOKEN(com.hedera.mirror.common.domain.entity.EntityType.TOKEN) NftTransfer(com.hedera.mirror.common.domain.token.NftTransfer) TokenSupplyTypeEnum(com.hedera.mirror.common.domain.token.TokenSupplyTypeEnum) RecordFile(com.hedera.mirror.common.domain.transaction.RecordFile) NftAllowanceRepository(com.hedera.mirror.importer.repository.NftAllowanceRepository) Token(com.hedera.mirror.common.domain.token.Token) TokenId(com.hedera.mirror.common.domain.token.TokenId) TestUtils(com.hedera.mirror.importer.TestUtils) TransactionSignatureRepository(com.hedera.mirror.importer.repository.TransactionSignatureRepository) FileDataRepository(com.hedera.mirror.importer.repository.FileDataRepository) MethodSource(org.junit.jupiter.params.provider.MethodSource) ContractResult(com.hedera.mirror.common.domain.contract.ContractResult) TokenRepository(com.hedera.mirror.importer.repository.TokenRepository) ContractStateChange(com.hedera.mirror.common.domain.contract.ContractStateChange) TokenFreezeStatusEnum(com.hedera.mirror.common.domain.token.TokenFreezeStatusEnum) TopicMessage(com.hedera.mirror.common.domain.topic.TopicMessage) CryptoAllowance(com.hedera.mirror.common.domain.entity.CryptoAllowance) TokenPauseStatusEnum(com.hedera.mirror.common.domain.token.TokenPauseStatusEnum) StakingRewardTransferRepository(com.hedera.mirror.importer.repository.StakingRewardTransferRepository) Arguments(org.junit.jupiter.params.provider.Arguments) StandardCharsets(java.nio.charset.StandardCharsets) NftAllowance(com.hedera.mirror.common.domain.entity.NftAllowance) ByteString(com.google.protobuf.ByteString) Test(org.junit.jupiter.api.Test) List(java.util.List) Nft(com.hedera.mirror.common.domain.token.Nft) Stream(java.util.stream.Stream) EntityRepository(com.hedera.mirror.importer.repository.EntityRepository) ContractLogRepository(com.hedera.mirror.importer.repository.ContractLogRepository) CryptoTransferRepository(com.hedera.mirror.importer.repository.CryptoTransferRepository) TokenAccountRepository(com.hedera.mirror.importer.repository.TokenAccountRepository) EthereumTransactionRepository(com.hedera.mirror.importer.repository.EthereumTransactionRepository) TokenAccount(com.hedera.mirror.common.domain.token.TokenAccount) ACCOUNT(com.hedera.mirror.common.domain.entity.EntityType.ACCOUNT) Schedule(com.hedera.mirror.common.domain.schedule.Schedule) TokenTypeEnum(com.hedera.mirror.common.domain.token.TokenTypeEnum) NftId(com.hedera.mirror.common.domain.token.NftId) Contract(com.hedera.mirror.common.domain.contract.Contract) TransactionRepository(com.hedera.mirror.importer.repository.TransactionRepository) Hex(org.apache.commons.codec.binary.Hex) ArrayList(java.util.ArrayList) LiveHashRepository(com.hedera.mirror.importer.repository.LiveHashRepository) DomainBuilder(com.hedera.mirror.common.domain.DomainBuilder) TransactionSignature(com.hedera.mirror.common.domain.transaction.TransactionSignature) NftTransferRepository(com.hedera.mirror.importer.repository.NftTransferRepository) ContractStateChangeRepository(com.hedera.mirror.importer.repository.ContractStateChangeRepository) LiveHash(com.hedera.mirror.common.domain.transaction.LiveHash) ValueSource(org.junit.jupiter.params.provider.ValueSource) NftRepository(com.hedera.mirror.importer.repository.NftRepository) TokenAllowanceRepository(com.hedera.mirror.importer.repository.TokenAllowanceRepository) TopicMessageRepository(com.hedera.mirror.importer.repository.TopicMessageRepository) ContractLog(com.hedera.mirror.common.domain.contract.ContractLog) TokenTransferRepository(com.hedera.mirror.importer.repository.TokenTransferRepository) Entity(com.hedera.mirror.common.domain.entity.Entity) Consumer(java.util.function.Consumer) IntegrationTest(com.hedera.mirror.importer.IntegrationTest) Key(com.hederahashgraph.api.proto.java.Key) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest) RecordFileRepository(com.hedera.mirror.importer.repository.RecordFileRepository) TokenKycStatusEnum(com.hedera.mirror.common.domain.token.TokenKycStatusEnum) TransactionTemplate(org.springframework.transaction.support.TransactionTemplate) Assertions(org.junit.jupiter.api.Assertions) TokenAllowance(com.hedera.mirror.common.domain.entity.TokenAllowance) Transaction(com.hedera.mirror.common.domain.transaction.Transaction) TokenTransfer(com.hedera.mirror.common.domain.token.TokenTransfer) Test(org.junit.jupiter.api.Test) IntegrationTest(com.hedera.mirror.importer.IntegrationTest) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest)

Aggregations

NftTransfer (com.hedera.mirror.common.domain.token.NftTransfer)14 NftTransferId (com.hedera.mirror.common.domain.token.NftTransferId)8 Test (org.junit.jupiter.api.Test)8 IntegrationTest (com.hedera.mirror.importer.IntegrationTest)4 EntityId (com.hedera.mirror.common.domain.entity.EntityId)3 EntityType (com.hedera.mirror.common.domain.entity.EntityType)3 Nft (com.hedera.mirror.common.domain.token.Nft)3 NftId (com.hedera.mirror.common.domain.token.NftId)3 List (java.util.List)3 Assertions.assertThat (org.assertj.core.api.Assertions.assertThat)3 ParameterizedTest (org.junit.jupiter.params.ParameterizedTest)3 ByteString (com.google.protobuf.ByteString)2 DomainBuilder (com.hedera.mirror.common.domain.DomainBuilder)2 Contract (com.hedera.mirror.common.domain.contract.Contract)2 CryptoAllowance (com.hedera.mirror.common.domain.entity.CryptoAllowance)2 Entity (com.hedera.mirror.common.domain.entity.Entity)2 ACCOUNT (com.hedera.mirror.common.domain.entity.EntityType.ACCOUNT)2 TOKEN (com.hedera.mirror.common.domain.entity.EntityType.TOKEN)2 NftAllowance (com.hedera.mirror.common.domain.entity.NftAllowance)2 TokenAllowance (com.hedera.mirror.common.domain.entity.TokenAllowance)2