From 252d5fc0c625bf43cf2dcfdf28776905ca5f4d72 Mon Sep 17 00:00:00 2001 From: Austin Kline Date: Mon, 8 Jan 2024 17:26:38 -0800 Subject: [PATCH] add tests for redeeming nfts and fts --- contracts/standard/ExampleNFT.cdc | 3 ++ scripts/lost-and-found/get_address.cdc | 5 +++ tests/LostAndFound_tests.cdc | 43 ++++++++++++++++--- .../example-nft/redeem_example_nft_all.cdc | 2 +- 4 files changed, 47 insertions(+), 6 deletions(-) create mode 100644 scripts/lost-and-found/get_address.cdc diff --git a/contracts/standard/ExampleNFT.cdc b/contracts/standard/ExampleNFT.cdc index 3d76617..8665095 100644 --- a/contracts/standard/ExampleNFT.cdc +++ b/contracts/standard/ExampleNFT.cdc @@ -21,6 +21,7 @@ pub contract ExampleNFT: NonFungibleToken, ViewResolver { pub event ContractInitialized() pub event Withdraw(id: UInt64, from: Address?) pub event Deposit(id: UInt64, to: Address?) + pub event Mint(id: UInt64) pub event CollectionCreated(id: UInt64) pub event CollectionDestroyed(id: UInt64) @@ -50,6 +51,8 @@ pub contract ExampleNFT: NonFungibleToken, ViewResolver { self.description = description self.thumbnail = thumbnail self.royalties = royalties + + emit Mint(id: self.id) } pub fun setRoyalties(_ royalties: [MetadataViews.Royalty]) { diff --git a/scripts/lost-and-found/get_address.cdc b/scripts/lost-and-found/get_address.cdc new file mode 100644 index 0000000..fb6775d --- /dev/null +++ b/scripts/lost-and-found/get_address.cdc @@ -0,0 +1,5 @@ +import "LostAndFound" + +pub fun main(): Address { + return LostAndFound.getAddress() +} \ No newline at end of file diff --git a/tests/LostAndFound_tests.cdc b/tests/LostAndFound_tests.cdc index dfcc744..8786886 100644 --- a/tests/LostAndFound_tests.cdc +++ b/tests/LostAndFound_tests.cdc @@ -88,21 +88,54 @@ pub fun testTrySendFtResource_InvalidCapability() { Test.assertEqual(exampleTokenIdentifier(), event.type.identifier) } +pub fun testRedeemAllTickets_ExampleNft() { + let acct = getNewAccount() + let id = trySendNft(acct) + + setupExampleNft(acct: acct) + txExecutor("example-nft/redeem_example_nft_all.cdc", [acct], []) + + let event = Test.eventsOfType(Type()).removeLast() as! ExampleNFT.Deposit + Test.assertEqual(acct.address, event.to!) + Test.assertEqual(id, event.id) +} + +pub fun testRedeemAllTickets_ExampleToken() { + let acct = getNewAccount() + let amount = 5.0 + trySendFt(acct, amount) + + setupExampleToken(acct: acct) + txExecutor("example-token/redeem_example_token_all.cdc", [acct], []) + + let event = Test.eventsOfType(Type()).removeLast() as! ExampleToken.TokensDeposited + Test.assertEqual(acct.address, event.to!) + Test.assertEqual(amount, event.amount) +} + +pub fun testGetAddress() { + let addr = scriptExecutor("lost-and-found/get_address.cdc", [])! as! Address + Test.assertEqual(lostAndFoundAccount.address, addr) +} + // TODO: send non nft/ft resource -// TODO: getAddress -// TODO: redeemAll - nft -// TODO: redeemAll - ft // TODO: borrowAllTickets for address // TODO: borrowAllTicketsByType - nft // TODO: borrowAllTicketsByType - ft // TODO: create depositor -pub fun mintAndSendNft(_ acct: Test.Account) { +pub fun mintAndSendNft(_ acct: Test.Account): UInt64 { txExecutor("example-nft/mint_and_deposit_example_nft.cdc", [exampleNftAccount], [acct.address]) + let event = Test.eventsOfType(Type()).removeLast() as! ExampleNFT.Mint + + return event.id } -pub fun trySendNft(_ acct: Test.Account) { +pub fun trySendNft(_ acct: Test.Account): UInt64 { txExecutor("example-nft/try_send_example_nft.cdc", [exampleNftAccount], [acct.address]) + let event = Test.eventsOfType(Type()).removeLast() as! ExampleNFT.Mint + + return event.id } pub fun trySendFt(_ acct: Test.Account, _ amount: UFix64) { diff --git a/transactions/example-nft/redeem_example_nft_all.cdc b/transactions/example-nft/redeem_example_nft_all.cdc index 7b55178..fa2662a 100644 --- a/transactions/example-nft/redeem_example_nft_all.cdc +++ b/transactions/example-nft/redeem_example_nft_all.cdc @@ -3,7 +3,7 @@ import "NonFungibleToken" import "LostAndFound" -transaction() { +transaction { let receiver: Capability<&{NonFungibleToken.CollectionPublic}> let redeemer: Address