github.com/hashgraph/hedera-sdk-go/v2@v2.48.0/token_cancel_airdrop_transaction_unit_test.go (about) 1 //go:build all || unit 2 // +build all unit 3 4 package hedera 5 6 /*- 7 * 8 * Hedera Go SDK 9 * 10 * Copyright (C) 2020 - 2024 Hedera Hashgraph, LLC 11 * 12 * Licensed under the Apache License, Version 2.0 (the "License"); 13 * you may not use this file except in compliance with the License. 14 * You may obtain a copy of the License at 15 * 16 * http://www.apache.org/licenses/LICENSE-2.0 17 * 18 * Unless required by applicable law or agreed to in writing, software 19 * distributed under the License is distributed on an "AS IS" BASIS, 20 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 21 * See the License for the specific language governing permissions and 22 * limitations under the License. 23 * 24 */ 25 26 import ( 27 "testing" 28 29 "github.com/hashgraph/hedera-protobufs-go/services" 30 "github.com/stretchr/testify/assert" 31 "github.com/stretchr/testify/require" 32 ) 33 34 func TestUnitTokenCancelAirdropTransactionSetPendingAirdropIds(t *testing.T) { 35 t.Parallel() 36 37 pendingAirdropId1 := &PendingAirdropId{tokenID: &TokenID{Token: 1}} 38 pendingAirdropId2 := &PendingAirdropId{tokenID: &TokenID{Token: 2}} 39 40 transaction := NewTokenCancelAirdropTransaction(). 41 SetPendingAirdropIds([]*PendingAirdropId{pendingAirdropId1, pendingAirdropId2}) 42 43 assert.Equal(t, []*PendingAirdropId{pendingAirdropId1, pendingAirdropId2}, transaction.GetPendingAirdropIds()) 44 } 45 46 func TestUnitTokenCancelAirdropTransactionAddPendingAirdropId(t *testing.T) { 47 t.Parallel() 48 49 pendingAirdropId1 := PendingAirdropId{tokenID: &TokenID{Token: 1}} 50 pendingAirdropId2 := PendingAirdropId{tokenID: &TokenID{Token: 2}} 51 52 transaction := NewTokenCancelAirdropTransaction(). 53 AddPendingAirdropId(pendingAirdropId1). 54 AddPendingAirdropId(pendingAirdropId2) 55 56 assert.Equal(t, []*PendingAirdropId{&pendingAirdropId1, &pendingAirdropId2}, transaction.GetPendingAirdropIds()) 57 } 58 59 func TestUnitTokenCancelAirdropTransactionFreeze(t *testing.T) { 60 t.Parallel() 61 62 pendingAirdropId := PendingAirdropId{tokenID: &TokenID{Token: 1}, sender: &AccountID{Account: 3}} 63 transactionID := TransactionIDGenerate(AccountID{Account: 324}) 64 transaction := NewTokenCancelAirdropTransaction(). 65 AddPendingAirdropId(pendingAirdropId). 66 SetTransactionID(transactionID). 67 SetNodeAccountIDs(nodeAccountID) 68 69 _, err := transaction.Freeze() 70 require.NoError(t, err) 71 } 72 73 func TestUnitTokenCancelAirdropTransactionToBytes(t *testing.T) { 74 t.Parallel() 75 76 pendingAirdropId := PendingAirdropId{tokenID: &TokenID{Token: 1}} 77 78 transaction := NewTokenCancelAirdropTransaction(). 79 AddPendingAirdropId(pendingAirdropId) 80 81 bytes, err := transaction.ToBytes() 82 require.NoError(t, err) 83 require.NotNil(t, bytes) 84 } 85 86 func TestUnitTokenCancelAirdropTransactionFromBytes(t *testing.T) { 87 t.Parallel() 88 89 pendingAirdropId := PendingAirdropId{tokenID: &TokenID{Token: 1}, sender: &AccountID{Account: 3}, receiver: &AccountID{Account: 4}} 90 91 transaction := NewTokenCancelAirdropTransaction(). 92 AddPendingAirdropId(pendingAirdropId) 93 94 bytes, err := transaction.ToBytes() 95 require.NoError(t, err) 96 require.NotNil(t, bytes) 97 98 deserializedTransaction, err := TransactionFromBytes(bytes) 99 require.NoError(t, err) 100 101 switch tx := deserializedTransaction.(type) { 102 case TokenCancelAirdropTransaction: 103 assert.Equal(t, transaction.GetPendingAirdropIds(), tx.GetPendingAirdropIds()) 104 default: 105 t.Fatalf("expected TokenCancelAirdropTransaction, got %T", deserializedTransaction) 106 } 107 } 108 109 func TestUnitTokenCancelAirdropTransactionScheduleProtobuf(t *testing.T) { 110 t.Parallel() 111 112 transactionID := TransactionIDGenerate(AccountID{Account: 324}) 113 114 pendingAirdropId1 := PendingAirdropId{tokenID: &TokenID{Token: 1}} 115 pendingAirdropId2 := PendingAirdropId{tokenID: &TokenID{Token: 2}} 116 117 tx, err := NewTokenCancelAirdropTransaction(). 118 SetTransactionID(transactionID). 119 SetNodeAccountIDs([]AccountID{{Account: 3}}). 120 AddPendingAirdropId(pendingAirdropId1). 121 AddPendingAirdropId(pendingAirdropId2). 122 Freeze() 123 require.NoError(t, err) 124 125 expected := &services.SchedulableTransactionBody{ 126 TransactionFee: 100000000, 127 Data: &services.SchedulableTransactionBody_TokenCancelAirdrop{ 128 TokenCancelAirdrop: &services.TokenCancelAirdropTransactionBody{ 129 PendingAirdrops: []*services.PendingAirdropId{ 130 pendingAirdropId1._ToProtobuf(), 131 pendingAirdropId2._ToProtobuf(), 132 }, 133 }, 134 }, 135 } 136 137 actual, err := tx.buildScheduled() 138 require.NoError(t, err) 139 require.Equal(t, expected.String(), actual.String()) 140 } 141 142 func TestUnitTokenCancelAirdropTransactionValidateNetworkOnIDs(t *testing.T) { 143 t.Parallel() 144 145 client, err := _NewMockClient() 146 client.SetLedgerID(*NewLedgerIDTestnet()) 147 require.NoError(t, err) 148 client.SetAutoValidateChecksums(true) 149 150 checksum := "dmqui" 151 pendingAirdropId := &PendingAirdropId{ 152 tokenID: &TokenID{Token: 3, checksum: &checksum}, 153 sender: &AccountID{Account: 3, checksum: &checksum}, 154 receiver: &AccountID{Account: 3, checksum: &checksum}, 155 } 156 157 transaction := NewTokenCancelAirdropTransaction(). 158 SetPendingAirdropIds([]*PendingAirdropId{pendingAirdropId}) 159 160 err = transaction.validateNetworkOnIDs(client) 161 require.NoError(t, err) 162 }