diff --git a/etherscanapi/src/main/java/jfyg/account/Account.kt b/etherscanapi/src/main/java/jfyg/account/Account.kt index f67ee28..90eaf48 100644 --- a/etherscanapi/src/main/java/jfyg/account/Account.kt +++ b/etherscanapi/src/main/java/jfyg/account/Account.kt @@ -34,6 +34,8 @@ class Account : AccountContract { account, "0", "99999999", "asc").let { query.fetchAccountTransaction()?.result } + //todo #47 + override fun getNetworkStatus(): String? = genericNetworkQuery.let { query.fetchAccountBalance()?.status } override fun getNetworkMessage(): String? = genericNetworkQuery.let { query.fetchAccountBalance()?.message } diff --git a/etherscanapi/src/main/java/jfyg/model/Transactions.kt b/etherscanapi/src/main/java/jfyg/model/Transactions.kt index 1e1a21b..fbfb8ca 100644 --- a/etherscanapi/src/main/java/jfyg/model/Transactions.kt +++ b/etherscanapi/src/main/java/jfyg/model/Transactions.kt @@ -8,6 +8,12 @@ data class Transactions(var blockNumber: String? = null, var hash: String? = null, + var nonce: String? = null, + + var blockHash: String? = null, + + var transactionIndex: String? = null, + @SerializedName("from") var transactionFrom: String? = null, @@ -16,16 +22,21 @@ data class Transactions(var blockNumber: String? = null, var value: String? = null, - var contractAddress: String? = null, + var gas: String? = null, - var input: String? = null, + var gasPrice: String? = null, - var type: String? = null, var gas: String? = null, + var isError: String? = null, - var gasUsed: String? = null, + @SerializedName("txreceipt_status") + var receiptStatus: String? = null, - var traceId: String? = null, + var input: String? = null, - var isError: String? = null, + var contractAddress: String? = null, + + var cumulativeGasUsed: String? = null, + + var gasUsed: String? = null, - var errCode: String? = null) \ No newline at end of file + var confirmations: String? = null) \ No newline at end of file diff --git a/etherscanapi/src/test/java/jfyg/account/AccountTest.kt b/etherscanapi/src/test/java/jfyg/account/AccountTest.kt index 6e29f39..992b48d 100644 --- a/etherscanapi/src/test/java/jfyg/account/AccountTest.kt +++ b/etherscanapi/src/test/java/jfyg/account/AccountTest.kt @@ -1,40 +1,192 @@ package jfyg.account -import org.junit.After +import com.google.gson.Gson +import com.google.gson.GsonBuilder +import jfyg.response.BaseResponse +import jfyg.response.account.AccountBalanceResponse +import jfyg.response.account.AccountBlockResponse +import jfyg.response.account.AccountMultiBalanceResponse +import jfyg.response.account.AccountTransactionResponse +import org.junit.Assert.assertEquals +import org.junit.Assert import org.junit.Before import org.junit.Test class AccountTest { + lateinit var gson: Gson + + private val accountBalance = """ + { + "status": "1", + "message": "OK", + "result": "670456215218885498951364" + }""" + + private val accountMultiBalance = """ + { + "status": "1", + "message": "OK", + "result": [ + { + "account": "0xddbd2b932c763ba5b1b7ae3b362eac3e8d40121a", + "balance": "40807168564070000000000" + }, + { + "account": "0x63a9975ba31b0b9626b34300f7f627147df1f526", + "balance": "332567136222827062478" + }, + { + "account": "0x198ef1ec325a96cc354c7266a038be8b5c558f67", + "balance": "0" + } + ] + }""" + private val accountBlocksMined = """ + { + "status": "1", + "message": "OK", + "result": [ + { + "blockNumber": "3462296", + "timeStamp": "1491118514", + "blockReward": "5194770940000000000" + }, + { + "blockNumber": "2691400", + "timeStamp": "1480072029", + "blockReward": "5086562212310617100" + }, + { + "blockNumber": "70606", + "timeStamp": "1439322608", + "blockReward": "5001164799033398000" + } + ] + }""" + + private val accountTransactions = """ + { + "status": "1", + "message": "OK", + "result": [ + { + "blockNumber": "5273167", + "timeStamp": "1521316197", + "hash": "0x308d39f4223154fdf2db3b803400dea0da7468592aded1c6e9c01fd35835f23f", + "nonce": "0", + "blockHash": "0x315ee5a947d4c7519bd817465711fbb0b56c8ecafc8d9766aef1350e83c41521", + "transactionIndex": "28", + "from": "0x047250bd5ac59e6c45473cc0036d71737c885f6a", + "to": "0x82e4499d4b2a669831a3881d61bb24f7b620c61a", + "value": "18034800000000000", + "gas": "21000", + "gasPrice": "4000000000", + "isError": "0", + "txreceipt_status": "1", + "input": "0x", + "contractAddress": "", + "cumulativeGasUsed": "1376343", + "gasUsed": "21000", + "confirmations": "150836" + }, + { + "blockNumber": "5273704", + "timeStamp": "1521323646", + "hash": "0x55a6922f90f0fce43896b9b2239ddddd3f829fb06291724bfb4be6fcc895d202", + "nonce": "0", + "blockHash": "0xeb96c9b68ae66c42dbf35f323e66534858d88dd1b107f77bb2c65504140e9752", + "transactionIndex": "14", + "from": "0x4a7341f16107521adca5d24009e7c2d8829787d3", + "to": "0x82e4499d4b2a669831a3881d61bb24f7b620c61a", + "value": "53297010000000000", + "gas": "21000", + "gasPrice": "4000000000", + "isError": "0", + "txreceipt_status": "1", + "input": "0x", + "contractAddress": "", + "cumulativeGasUsed": "391843", + "gasUsed": "21000", + "confirmations": "150299" + } + ] + }""" + + private val inputBadResponse = """ + { + "status": "0", + "message": "NOTOK", + "result": "Error!" + }""" + + @Before fun setUp() { + val gb = GsonBuilder() + gson = gb.create() } - @After - fun tearDown() { - } @Test fun getBalance() { + val response = gson.fromJson(accountBalance, AccountBalanceResponse::class.java) + assertEquals("670456215218885498951364", response.result) } @Test fun getMultiBalance() { + val response = gson.fromJson(accountMultiBalance, AccountMultiBalanceResponse::class.java) + assertEquals("0xddbd2b932c763ba5b1b7ae3b362eac3e8d40121a", response.result?.get(0)?.account) + assertEquals("40807168564070000000000", response.result?.get(0)?.balance) + assertEquals("0x63a9975ba31b0b9626b34300f7f627147df1f526", response.result?.get(1)?.account) + assertEquals("332567136222827062478", response.result?.get(1)?.balance) + assertEquals("0x198ef1ec325a96cc354c7266a038be8b5c558f67", response.result?.get(2)?.account) + assertEquals("0", response.result?.get(2)?.balance) } @Test fun getBlocks() { + val response = gson.fromJson(accountBlocksMined, AccountBlockResponse::class.java) + assertEquals("3462296", response.result?.get(0)?.blockNumber) + assertEquals("1491118514", response.result?.get(0)?.timeStamp) + assertEquals("5194770940000000000", response.result?.get(0)?.blockReward) + assertEquals("2691400", response.result?.get(1)?.blockNumber) + assertEquals("1480072029", response.result?.get(1)?.timeStamp) + assertEquals("5086562212310617100", response.result?.get(1)?.blockReward) } @Test fun getTransactions() { + val response = gson.fromJson(accountTransactions, AccountTransactionResponse::class.java) + assertEquals("0x047250bd5ac59e6c45473cc0036d71737c885f6a", response.result?.get(0)?.transactionFrom) + assertEquals("0x82e4499d4b2a669831a3881d61bb24f7b620c61a", response.result?.get(0)?.transactionTo) + assertEquals("18034800000000000", response.result?.get(0)?.value) + assertEquals("21000", response.result?.get(1)?.gas) + assertEquals("4000000000", response.result?.get(1)?.gasPrice) + assertEquals("0", response.result?.get(1)?.isError) + } + + @Test + fun networkStatusIsDown() { + val response = gson.fromJson(inputBadResponse, BaseResponse::class.java) + Assert.assertEquals("0", response.status) } @Test - fun getNetworkStatus() { + fun networkStatusIsUp() { + val response = gson.fromJson(inputBadResponse, BaseResponse::class.java) + Assert.assertNotEquals("1", response.status) } @Test - fun getNetworkMessage() { + fun networkMessageNotOk() { + val response = gson.fromJson(inputBadResponse, BaseResponse::class.java) + Assert.assertEquals("NOTOK", response.message) } + @Test + fun networkMessageOk() { + val response = gson.fromJson(inputBadResponse, BaseResponse::class.java) + Assert.assertNotEquals("OK", response.message) + } } \ No newline at end of file diff --git a/etherscanapi/src/test/java/jfyg/network/RestClientTest.kt b/etherscanapi/src/test/java/jfyg/network/RestClientTest.kt index f3e70c6..288833d 100644 --- a/etherscanapi/src/test/java/jfyg/network/RestClientTest.kt +++ b/etherscanapi/src/test/java/jfyg/network/RestClientTest.kt @@ -46,7 +46,7 @@ class RestClientTest { mockWebServer.enqueue(MockResponse().setBody(fileName)) - var networkService: NetworkService = retrofit.create(NetworkService::class.java) + val networkService: NetworkService = retrofit.create(NetworkService::class.java) val call = networkService.getStat("stats", "ethsupply", "") Assert.assertTrue(call.subscribe() != null) diff --git a/etherscanapi/src/test/java/jfyg/stat/StatTest.kt b/etherscanapi/src/test/java/jfyg/stat/StatTest.kt index a926f6f..df16b1e 100644 --- a/etherscanapi/src/test/java/jfyg/stat/StatTest.kt +++ b/etherscanapi/src/test/java/jfyg/stat/StatTest.kt @@ -12,21 +12,21 @@ import org.junit.Assert.assertEquals class StatTest { lateinit var gson: Gson - val inputSupply = """ + private val inputSupply = """ { "status": "1", "message": "OK", "result": "98658682905300000000000000" }""" - val inputBadResponse = """ + private val inputBadResponse = """ { "status": "0", "message": "NOTOK", "result": "Error!" }""" - val inputPrice = """ + private val inputPrice = """ { "status": "1", "message": "OK", diff --git a/etherscanapi/src/test/java/jfyg/utils/QueryUtilsTest.kt b/etherscanapi/src/test/java/jfyg/utils/QueryUtilsTest.kt new file mode 100644 index 0000000..7f54bce --- /dev/null +++ b/etherscanapi/src/test/java/jfyg/utils/QueryUtilsTest.kt @@ -0,0 +1,26 @@ +package jfyg.utils + +import org.junit.Assert +import org.junit.Test + +class QueryUtilsTest { + + @Test + fun retrieveAccounts() { + var getAccounts = "" + val accounts = ArrayList() + accounts.add("0x82e4499D4b2A669831a3881d61BB24f7b620c61a") + accounts.add("0x63a9975ba31b0b9626b34300f7f627147df1f526") + accounts.add("0x198ef1ec325a96cc354c7266a038be8b5c558f67") + + for (addresses in accounts) { + getAccounts += addresses + "," + } + + Assert.assertEquals("0x82e4499D4b2A669831a3881d61BB24f7b620c61a," + + "0x63a9975ba31b0b9626b34300f7f627147df1f526," + + "0x198ef1ec325a96cc354c7266a038be8b5c558f67", + getAccounts.dropLast(1)) + } + +} \ No newline at end of file diff --git a/settings.gradle b/settings.gradle index d108718..7068d71 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,3 +1 @@ -rootProject.name = 'etherscan' - include ':app', ':etherscanapi'