diff --git a/src/main/java/com/sparrowwallet/hummingbird/registry/CryptoCoinInfo.java b/src/main/java/com/sparrowwallet/hummingbird/registry/CryptoCoinInfo.java index 1ce35be..cf4dcca 100644 --- a/src/main/java/com/sparrowwallet/hummingbird/registry/CryptoCoinInfo.java +++ b/src/main/java/com/sparrowwallet/hummingbird/registry/CryptoCoinInfo.java @@ -12,13 +12,19 @@ public class CryptoCoinInfo extends RegistryItem { private final Integer network; public CryptoCoinInfo(Integer type, Integer network) { + if(network.equals(Network.GOERLI.networkValue) && !type.equals(Type.ETHEREUM.typeValue)) { + throw new IllegalArgumentException("Goerli network can only be selected for Ethereum"); + } this.type = type; this.network = network; } public CryptoCoinInfo(Type type, Network network) { + if(network == Network.GOERLI && type != Type.ETHEREUM) { + throw new IllegalArgumentException("Goerli network can only be selected for Ethereum"); + } this.type = (type != null ? type.typeValue : null); - this.network = (network != null ? network.ordinal() : null); + this.network = (network != null ? network.networkValue : null); } public Type getType() { @@ -26,7 +32,7 @@ public class CryptoCoinInfo extends RegistryItem { } public Network getNetwork() { - return network == null ? Network.MAINNET : Network.values()[network]; + return network == null ? Network.MAINNET : Network.getNetworkFromValue(network); } public DataItem toCbor() { @@ -85,6 +91,22 @@ public class CryptoCoinInfo extends RegistryItem { } public enum Network { - MAINNET, TESTNET + MAINNET(0), TESTNET(1), GOERLI(4); + + Integer networkValue; + + Network(Integer networkValue) { + this.networkValue = networkValue; + } + + static Network getNetworkFromValue(int value) { + for (int i = 0; i < Network.values().length; i++) { + Network current = Network.values()[i]; + if (value == current.networkValue) { + return current; + } + } + return null; + } } } diff --git a/src/test/java/com/sparrowwallet/hummingbird/registry/CryptoCoinInfoTest.java b/src/test/java/com/sparrowwallet/hummingbird/registry/CryptoCoinInfoTest.java index 7ad975f..58d6844 100644 --- a/src/test/java/com/sparrowwallet/hummingbird/registry/CryptoCoinInfoTest.java +++ b/src/test/java/com/sparrowwallet/hummingbird/registry/CryptoCoinInfoTest.java @@ -18,15 +18,20 @@ public class CryptoCoinInfoTest { } @Test - public void testBitcoinTypeCoinInfo() { - CryptoCoinInfo coinInfo = new CryptoCoinInfo(CryptoCoinInfo.Type.BITCOIN, CryptoCoinInfo.Network.MAINNET); - Assert.assertSame(coinInfo.getType(), CryptoCoinInfo.Type.BITCOIN); + public void testGoerliEthereumCoinInfo() { + CryptoCoinInfo coinInfo = new CryptoCoinInfo(CryptoCoinInfo.Type.ETHEREUM, CryptoCoinInfo.Network.GOERLI); + Assert.assertSame(coinInfo.getType().typeValue, CryptoCoinInfo.Type.ETHEREUM.typeValue); + Assert.assertSame(coinInfo.getNetwork().networkValue, CryptoCoinInfo.Network.GOERLI.networkValue); } - @Test - public void testEthereumTypeCoinInfo() { - CryptoCoinInfo coinInfo = new CryptoCoinInfo(CryptoCoinInfo.Type.ETHEREUM, CryptoCoinInfo.Network.MAINNET); - Assert.assertSame(coinInfo.getType(), CryptoCoinInfo.Type.ETHEREUM); + @Test(expected = IllegalArgumentException.class) + public void testGoerliSupportedOnlyWithEthereum() { + new CryptoCoinInfo(CryptoCoinInfo.Type.BITCOIN, CryptoCoinInfo.Network.GOERLI); + } + + @Test(expected = IllegalArgumentException.class) + public void testGoerliSupportedOnlyWithEthereumWithValues() { + new CryptoCoinInfo(CryptoCoinInfo.Type.BITCOIN.typeValue, CryptoCoinInfo.Network.GOERLI.networkValue); } @Test