diff --git a/lib/src/test/kotlin/org/bitcoindevkit/CreatingWalletsTest.kt b/lib/src/test/kotlin/org/bitcoindevkit/CreatingWalletTest.kt similarity index 98% rename from lib/src/test/kotlin/org/bitcoindevkit/CreatingWalletsTest.kt rename to lib/src/test/kotlin/org/bitcoindevkit/CreatingWalletTest.kt index 9fb6612..addbb81 100644 --- a/lib/src/test/kotlin/org/bitcoindevkit/CreatingWalletsTest.kt +++ b/lib/src/test/kotlin/org/bitcoindevkit/CreatingWalletTest.kt @@ -4,7 +4,7 @@ import org.junit.jupiter.api.Nested import org.junit.jupiter.api.Test import kotlin.test.assertFails -class CreatingWalletsTest { +class CreatingWalletTest { private val conn: Persister = Persister.newInMemory() @Nested diff --git a/lib/src/test/kotlin/org/bitcoindevkit/OfflineDescriptorTest.kt b/lib/src/test/kotlin/org/bitcoindevkit/MnemonicTest.kt similarity index 91% rename from lib/src/test/kotlin/org/bitcoindevkit/OfflineDescriptorTest.kt rename to lib/src/test/kotlin/org/bitcoindevkit/MnemonicTest.kt index 38d7977..28b947f 100644 --- a/lib/src/test/kotlin/org/bitcoindevkit/OfflineDescriptorTest.kt +++ b/lib/src/test/kotlin/org/bitcoindevkit/MnemonicTest.kt @@ -3,9 +3,9 @@ package org.bitcoindevkit import kotlin.test.Test import kotlin.test.assertEquals -class OfflineDescriptorTest { +class MnemonicTest { @Test - fun testDescriptorBip86() { + fun `Mnemonics create valid descriptors`() { val mnemonic: Mnemonic = Mnemonic.fromString("space echo position wrist orient erupt relief museum myself grain wisdom tumble") val descriptorSecretKey: DescriptorSecretKey = DescriptorSecretKey(Network.TESTNET, mnemonic, null) val descriptor: Descriptor = Descriptor.newBip86(descriptorSecretKey, KeychainKind.EXTERNAL, Network.TESTNET) diff --git a/lib/src/test/kotlin/org/bitcoindevkit/OfflineWalletTest.kt b/lib/src/test/kotlin/org/bitcoindevkit/OfflineWalletTest.kt deleted file mode 100644 index b5b5edb..0000000 --- a/lib/src/test/kotlin/org/bitcoindevkit/OfflineWalletTest.kt +++ /dev/null @@ -1,66 +0,0 @@ -package org.bitcoindevkit - -import kotlin.test.AfterTest -import kotlin.test.Test -import kotlin.test.assertEquals -import kotlin.test.assertTrue -import kotlin.test.assertFalse -import java.io.File - -class OfflineWalletTest { - private val descriptor: Descriptor = Descriptor( - "wpkh(tprv8ZgxMBicQKsPf2qfrEygW6fdYseJDDrVnDv26PH5BHdvSuG6ecCbHqLVof9yZcMoM31z9ur3tTYbSnr1WBqbGX97CbXcmp5H6qeMpyvx35B/84h/1h/1h/0/*)", - Network.TESTNET - ) - private val changeDescriptor: Descriptor = Descriptor( - "wpkh(tprv8ZgxMBicQKsPf2qfrEygW6fdYseJDDrVnDv26PH5BHdvSuG6ecCbHqLVof9yZcMoM31z9ur3tTYbSnr1WBqbGX97CbXcmp5H6qeMpyvx35B/84h/1h/1h/1/*)", - Network.TESTNET - ) - - @Test - fun testDescriptorBip86() { - val mnemonic: Mnemonic = Mnemonic(WordCount.WORDS12) - val descriptorSecretKey: DescriptorSecretKey = DescriptorSecretKey(Network.TESTNET, mnemonic, null) - val descriptor: Descriptor = Descriptor.newBip86(descriptorSecretKey, KeychainKind.EXTERNAL, Network.TESTNET) - - assertTrue(descriptor.toString().startsWith("tr"), "Bip86 Descriptor does not start with 'tr'") - } - - @Test - fun testNewAddress() { - var conn: Persister = Persister.newInMemory() - val wallet: Wallet = Wallet( - descriptor, - changeDescriptor, - Network.TESTNET, - conn - ) - val addressInfo: AddressInfo = wallet.revealNextAddress(KeychainKind.EXTERNAL) - - assertTrue(addressInfo.address.isValidForNetwork(Network.TESTNET), "Address is not valid for testnet network") - assertTrue(addressInfo.address.isValidForNetwork(Network.SIGNET), "Address is not valid for signet network") - assertFalse(addressInfo.address.isValidForNetwork(Network.REGTEST), "Address is valid for regtest network, but it shouldn't be") - assertFalse(addressInfo.address.isValidForNetwork(Network.BITCOIN), "Address is valid for bitcoin network, but it shouldn't be") - - assertEquals( - expected = "tb1qhjys9wxlfykmte7ftryptx975uqgd6kcm6a7z4", - actual = addressInfo.address.toString() - ) - } - - @Test - fun testBalance() { - var conn: Persister = Persister.newInMemory() - val wallet: Wallet = Wallet( - descriptor, - changeDescriptor, - Network.TESTNET, - conn - ) - - assertEquals( - expected = 0uL, - actual = wallet.balance().total.toSat() - ) - } -} diff --git a/lib/src/test/kotlin/org/bitcoindevkit/OfflinePersistenceTest.kt b/lib/src/test/kotlin/org/bitcoindevkit/PersistenceTest.kt similarity index 51% rename from lib/src/test/kotlin/org/bitcoindevkit/OfflinePersistenceTest.kt rename to lib/src/test/kotlin/org/bitcoindevkit/PersistenceTest.kt index 38981e0..9b6ed0c 100644 --- a/lib/src/test/kotlin/org/bitcoindevkit/OfflinePersistenceTest.kt +++ b/lib/src/test/kotlin/org/bitcoindevkit/PersistenceTest.kt @@ -3,7 +3,7 @@ package org.bitcoindevkit import kotlin.test.Test import kotlin.test.assertEquals -class OfflinePersistenceTest { +class PersistenceTest { private val persistenceFilePath = run { val currentDirectory = System.getProperty("user.dir") val dbFileName = "pre_existing_wallet_persistence_test.sqlite" @@ -19,7 +19,7 @@ class OfflinePersistenceTest { ) @Test - fun testPersistence() { + fun `Correctly load wallet from sqlite persistence`() { val connection = Persister.newSqlite(persistenceFilePath) val wallet: Wallet = Wallet.load( @@ -28,38 +28,6 @@ class OfflinePersistenceTest { connection ) val addressInfo: AddressInfo = wallet.revealNextAddress(KeychainKind.EXTERNAL) - println("Address: $addressInfo") - - assertEquals( - expected = 7u, - actual = addressInfo.index, - ) - assertEquals( - expected = "tb1qan3lldunh37ma6c0afeywgjyjgnyc8uz975zl2", - actual = addressInfo.address.toString(), - ) - } - - @Test - fun testPersistenceWithDescriptor() { - val connection = Persister.newSqlite(persistenceFilePath) - - val descriptorPub = Descriptor( - "wpkh([9122d9e0/84'/1'/0']tpubDCYVtmaSaDzTxcgvoP5AHZNbZKZzrvoNH9KARep88vESc6MxRqAp4LmePc2eeGX6XUxBcdhAmkthWTDqygPz2wLAyHWisD299Lkdrj5egY6/0/*)#zpaanzgu", - Network.SIGNET - ) - val changeDescriptorPub = Descriptor( - "wpkh([9122d9e0/84'/1'/0']tpubDCYVtmaSaDzTxcgvoP5AHZNbZKZzrvoNH9KARep88vESc6MxRqAp4LmePc2eeGX6XUxBcdhAmkthWTDqygPz2wLAyHWisD299Lkdrj5egY6/1/*)#n4cuwhcy", - Network.SIGNET - ) - - val wallet: Wallet = Wallet.load( - descriptorPub, - changeDescriptorPub, - connection - ) - val addressInfo: AddressInfo = wallet.revealNextAddress(KeychainKind.EXTERNAL) - println("Address: $addressInfo") assertEquals( expected = 7u, diff --git a/lib/src/test/kotlin/org/bitcoindevkit/WalletTest.kt b/lib/src/test/kotlin/org/bitcoindevkit/WalletTest.kt new file mode 100644 index 0000000..ba15aae --- /dev/null +++ b/lib/src/test/kotlin/org/bitcoindevkit/WalletTest.kt @@ -0,0 +1,43 @@ +package org.bitcoindevkit + +import kotlin.test.Test +import kotlin.test.assertEquals +import kotlin.test.assertTrue +import kotlin.test.assertFalse + +class WalletTest { + val conn: Persister = Persister.newInMemory() + + @Test + fun `Wallet produces valid addresses for its network`() { + val wallet: Wallet = Wallet( + descriptor = BIP84_DESCRIPTOR, + changeDescriptor = BIP84_CHANGE_DESCRIPTOR, + network = Network.TESTNET, + persister = conn + ) + val addressInfo: AddressInfo = wallet.revealNextAddress(KeychainKind.EXTERNAL) + + assertTrue(addressInfo.address.isValidForNetwork(Network.TESTNET), "Address is not valid for Testnet 3 network but it should be") + assertTrue(addressInfo.address.isValidForNetwork(Network.TESTNET4), "Address is not valid for Testnet 4 network but it should be") + assertTrue(addressInfo.address.isValidForNetwork(Network.SIGNET), "Address is not valid for Signet network but it should be") + + assertFalse(addressInfo.address.isValidForNetwork(Network.REGTEST), "Address is valid for Regtest network, but it should not be") + assertFalse(addressInfo.address.isValidForNetwork(Network.BITCOIN), "Address is valid for Mainnet network, but it should not be") + } + + @Test + fun `Wallet has 0 balance prior to sync`() { + val wallet: Wallet = Wallet( + descriptor = BIP84_DESCRIPTOR, + changeDescriptor = BIP84_CHANGE_DESCRIPTOR, + network = Network.TESTNET, + persister = conn + ) + + assertEquals( + expected = 0uL, + actual = wallet.balance().total.toSat() + ) + } +}