fix coin balance params reducer for pening transaction

pull/1516/head
Ayrat Badykov 6 years ago
parent faf6752736
commit e8c205ae27
No known key found for this signature in database
GPG Key ID: B44668E265E9396F
  1. 10
      apps/indexer/lib/indexer/address/coin_balances.ex
  2. 30
      apps/indexer/test/indexer/address/coin_balances_test.exs

@ -29,10 +29,16 @@ defmodule Indexer.Address.CoinBalances do
defp reducer({:logs_params, logs_params}, acc) when is_list(logs_params) do defp reducer({:logs_params, logs_params}, acc) when is_list(logs_params) do
# a log MUST have and address_hash # a log MUST have and address_hash
Enum.into(logs_params, acc, fn %{address_hash: address_hash, block_number: block_number} logs_params
when is_binary(address_hash) and is_integer(block_number) -> |> Enum.into(acc, fn
%{address_hash: address_hash, block_number: block_number} %{address_hash: address_hash, block_number: block_number}
when is_binary(address_hash) and is_integer(block_number) ->
%{address_hash: address_hash, block_number: block_number}
%{type: "pending"} ->
nil
end) end)
|> Enum.reject(fn val -> is_nil(val) end)
end end
defp reducer({:transactions_params, transactions_params}, initial) when is_list(transactions_params) do defp reducer({:transactions_params, transactions_params}, initial) when is_list(transactions_params) do

@ -113,8 +113,34 @@ defmodule Indexer.Address.CoinBalancesTest do
params_set = CoinBalances.params_set(%{logs_params: [log_params]}) params_set = CoinBalances.params_set(%{logs_params: [log_params]})
assert MapSet.size(params_set) == 1 assert Enum.count(params_set) == 1
assert %{address_hash: address_hash, block_number: block_number} assert %{address_hash: address_hash, block_number: block_number} == List.first(params_set)
end
test "with log skips pending transactions" do
block_number = 1
address_hash =
Factory.address_hash()
|> to_string()
log_params1 =
:log
|> Factory.params_for()
|> Map.put(:block_number, nil)
|> Map.put(:address_hash, address_hash)
|> Map.put(:type, "pending")
log_params2 =
:log
|> Factory.params_for()
|> Map.put(:block_number, block_number)
|> Map.put(:address_hash, address_hash)
params_set = CoinBalances.params_set(%{logs_params: [log_params1, log_params2]})
assert Enum.count(params_set) == 1
assert %{address_hash: address_hash, block_number: block_number} == List.first(params_set)
end end
test "with transaction without to_address_hash extracts from_address_hash" do test "with transaction without to_address_hash extracts from_address_hash" do

Loading…
Cancel
Save