|
|
|
@ -6,215 +6,274 @@ defmodule Explorer.TransactionFormTest do |
|
|
|
|
describe "build/1" do |
|
|
|
|
test "returns a successful transaction when there is a successful receipt" do |
|
|
|
|
insert(:block, number: 24) |
|
|
|
|
time = Timex.now |> Timex.shift(hours: -2) |
|
|
|
|
block = insert(:block, %{ |
|
|
|
|
number: 1, |
|
|
|
|
gas_used: 99523, |
|
|
|
|
timestamp: time, |
|
|
|
|
}) |
|
|
|
|
time = Timex.now() |> Timex.shift(hours: -2) |
|
|
|
|
|
|
|
|
|
block = |
|
|
|
|
insert(:block, %{ |
|
|
|
|
number: 1, |
|
|
|
|
gas_used: 99523, |
|
|
|
|
timestamp: time |
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
transaction = |
|
|
|
|
insert(:transaction, |
|
|
|
|
insert( |
|
|
|
|
:transaction, |
|
|
|
|
inserted_at: Timex.parse!("1970-01-01T00:00:18-00:00", "{ISO:Extended}"), |
|
|
|
|
updated_at: Timex.parse!("1980-01-01T00:00:18-00:00", "{ISO:Extended}")) |
|
|
|
|
updated_at: Timex.parse!("1980-01-01T00:00:18-00:00", "{ISO:Extended}") |
|
|
|
|
) |
|
|
|
|
|> with_block(block) |
|
|
|
|
|> with_addresses(%{to: "0xsleepypuppy", from: "0xilovefrogs"}) |
|
|
|
|
|
|
|
|
|
insert(:receipt, status: 1, transaction: transaction) |
|
|
|
|
|
|
|
|
|
form = transaction |> Repo.preload([:block, :to_address, :from_address, :receipt]) |> TransactionForm.build() |
|
|
|
|
form = |
|
|
|
|
transaction |> Repo.preload([:block, :to_address, :from_address, :receipt]) |
|
|
|
|
|> TransactionForm.build() |
|
|
|
|
|
|
|
|
|
formatted_timestamp = block.timestamp |> Timex.format!("%b-%d-%Y %H:%M:%S %p %Z", :strftime) |
|
|
|
|
|
|
|
|
|
assert(form == %{ |
|
|
|
|
block_number: 1, |
|
|
|
|
age: "2 hours ago", |
|
|
|
|
formatted_age: "2 hours ago (#{formatted_timestamp})", |
|
|
|
|
formatted_timestamp: formatted_timestamp, |
|
|
|
|
cumulative_gas_used: "99,523", |
|
|
|
|
to_address_hash: "0xsleepypuppy", |
|
|
|
|
from_address_hash: "0xilovefrogs", |
|
|
|
|
confirmations: 23, |
|
|
|
|
status: :success, |
|
|
|
|
formatted_status: "Success", |
|
|
|
|
first_seen: "48 years ago", |
|
|
|
|
last_seen: "38 years ago", |
|
|
|
|
}) |
|
|
|
|
assert( |
|
|
|
|
form == %{ |
|
|
|
|
block_number: 1, |
|
|
|
|
age: "2 hours ago", |
|
|
|
|
formatted_age: "2 hours ago (#{formatted_timestamp})", |
|
|
|
|
formatted_timestamp: formatted_timestamp, |
|
|
|
|
cumulative_gas_used: "99,523", |
|
|
|
|
to_address_hash: "0xsleepypuppy", |
|
|
|
|
from_address_hash: "0xilovefrogs", |
|
|
|
|
confirmations: 23, |
|
|
|
|
status: :success, |
|
|
|
|
formatted_status: "Success", |
|
|
|
|
first_seen: "48 years ago", |
|
|
|
|
last_seen: "38 years ago" |
|
|
|
|
} |
|
|
|
|
) |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
test "returns a failed transaction when there is a failed receipt" do |
|
|
|
|
insert(:block, number: 24) |
|
|
|
|
time = Timex.now |> Timex.shift(hours: -2) |
|
|
|
|
block = insert(:block, %{ |
|
|
|
|
number: 1, |
|
|
|
|
gas_used: 99523, |
|
|
|
|
timestamp: time, |
|
|
|
|
}) |
|
|
|
|
time = Timex.now() |> Timex.shift(hours: -2) |
|
|
|
|
|
|
|
|
|
block = |
|
|
|
|
insert(:block, %{ |
|
|
|
|
number: 1, |
|
|
|
|
gas_used: 99523, |
|
|
|
|
timestamp: time |
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
transaction = |
|
|
|
|
insert(:transaction, |
|
|
|
|
insert( |
|
|
|
|
:transaction, |
|
|
|
|
gas: 155, |
|
|
|
|
inserted_at: Timex.parse!("1970-01-01T00:00:18-00:00", "{ISO:Extended}"), |
|
|
|
|
updated_at: Timex.parse!("1980-01-01T00:00:18-00:00", "{ISO:Extended}")) |
|
|
|
|
updated_at: Timex.parse!("1980-01-01T00:00:18-00:00", "{ISO:Extended}") |
|
|
|
|
) |
|
|
|
|
|> with_block(block) |
|
|
|
|
|> with_addresses(%{to: "0xsleepypuppy", from: "0xilovefrogs"}) |
|
|
|
|
|
|
|
|
|
insert(:receipt, status: 0, gas_used: 100, transaction: transaction) |
|
|
|
|
|
|
|
|
|
form = transaction |> Repo.preload([:block, :to_address, :from_address, :receipt]) |> TransactionForm.build() |
|
|
|
|
form = |
|
|
|
|
transaction |> Repo.preload([:block, :to_address, :from_address, :receipt]) |
|
|
|
|
|> TransactionForm.build() |
|
|
|
|
|
|
|
|
|
formatted_timestamp = block.timestamp |> Timex.format!("%b-%d-%Y %H:%M:%S %p %Z", :strftime) |
|
|
|
|
|
|
|
|
|
assert(form == %{ |
|
|
|
|
block_number: 1, |
|
|
|
|
age: "2 hours ago", |
|
|
|
|
formatted_age: "2 hours ago (#{formatted_timestamp})", |
|
|
|
|
formatted_timestamp: formatted_timestamp, |
|
|
|
|
cumulative_gas_used: "99,523", |
|
|
|
|
to_address_hash: "0xsleepypuppy", |
|
|
|
|
from_address_hash: "0xilovefrogs", |
|
|
|
|
confirmations: 23, |
|
|
|
|
status: :failed, |
|
|
|
|
formatted_status: "Failed", |
|
|
|
|
first_seen: "48 years ago", |
|
|
|
|
last_seen: "38 years ago", |
|
|
|
|
}) |
|
|
|
|
assert( |
|
|
|
|
form == %{ |
|
|
|
|
block_number: 1, |
|
|
|
|
age: "2 hours ago", |
|
|
|
|
formatted_age: "2 hours ago (#{formatted_timestamp})", |
|
|
|
|
formatted_timestamp: formatted_timestamp, |
|
|
|
|
cumulative_gas_used: "99,523", |
|
|
|
|
to_address_hash: "0xsleepypuppy", |
|
|
|
|
from_address_hash: "0xilovefrogs", |
|
|
|
|
confirmations: 23, |
|
|
|
|
status: :failed, |
|
|
|
|
formatted_status: "Failed", |
|
|
|
|
first_seen: "48 years ago", |
|
|
|
|
last_seen: "38 years ago" |
|
|
|
|
} |
|
|
|
|
) |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
test "returns a out of gas transaction when the gas matches the gas used" do |
|
|
|
|
insert(:block, number: 24) |
|
|
|
|
time = Timex.now |> Timex.shift(hours: -2) |
|
|
|
|
block = insert(:block, %{ |
|
|
|
|
number: 1, |
|
|
|
|
gas_used: 99523, |
|
|
|
|
timestamp: time, |
|
|
|
|
}) |
|
|
|
|
time = Timex.now() |> Timex.shift(hours: -2) |
|
|
|
|
|
|
|
|
|
block = |
|
|
|
|
insert(:block, %{ |
|
|
|
|
number: 1, |
|
|
|
|
gas_used: 99523, |
|
|
|
|
timestamp: time |
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
transaction = |
|
|
|
|
insert(:transaction, |
|
|
|
|
insert( |
|
|
|
|
:transaction, |
|
|
|
|
gas: 555, |
|
|
|
|
inserted_at: Timex.parse!("1970-01-01T00:00:18-00:00", "{ISO:Extended}"), |
|
|
|
|
updated_at: Timex.parse!("1980-01-01T00:00:18-00:00", "{ISO:Extended}")) |
|
|
|
|
updated_at: Timex.parse!("1980-01-01T00:00:18-00:00", "{ISO:Extended}") |
|
|
|
|
) |
|
|
|
|
|> with_block(block) |
|
|
|
|
|> with_addresses(%{to: "0xsleepypuppy", from: "0xilovefrogs"}) |
|
|
|
|
|
|
|
|
|
insert(:receipt, status: 0, gas_used: 555, transaction: transaction) |
|
|
|
|
|
|
|
|
|
form = transaction |> Repo.preload([:block, :to_address, :from_address, :receipt]) |> TransactionForm.build() |
|
|
|
|
form = |
|
|
|
|
transaction |> Repo.preload([:block, :to_address, :from_address, :receipt]) |
|
|
|
|
|> TransactionForm.build() |
|
|
|
|
|
|
|
|
|
formatted_timestamp = block.timestamp |> Timex.format!("%b-%d-%Y %H:%M:%S %p %Z", :strftime) |
|
|
|
|
|
|
|
|
|
assert(form == %{ |
|
|
|
|
block_number: 1, |
|
|
|
|
age: "2 hours ago", |
|
|
|
|
formatted_age: "2 hours ago (#{formatted_timestamp})", |
|
|
|
|
formatted_timestamp: formatted_timestamp, |
|
|
|
|
cumulative_gas_used: "99,523", |
|
|
|
|
to_address_hash: "0xsleepypuppy", |
|
|
|
|
from_address_hash: "0xilovefrogs", |
|
|
|
|
confirmations: 23, |
|
|
|
|
status: :out_of_gas, |
|
|
|
|
formatted_status: "Out of Gas", |
|
|
|
|
first_seen: "48 years ago", |
|
|
|
|
last_seen: "38 years ago", |
|
|
|
|
}) |
|
|
|
|
assert( |
|
|
|
|
form == %{ |
|
|
|
|
block_number: 1, |
|
|
|
|
age: "2 hours ago", |
|
|
|
|
formatted_age: "2 hours ago (#{formatted_timestamp})", |
|
|
|
|
formatted_timestamp: formatted_timestamp, |
|
|
|
|
cumulative_gas_used: "99,523", |
|
|
|
|
to_address_hash: "0xsleepypuppy", |
|
|
|
|
from_address_hash: "0xilovefrogs", |
|
|
|
|
confirmations: 23, |
|
|
|
|
status: :out_of_gas, |
|
|
|
|
formatted_status: "Out of Gas", |
|
|
|
|
first_seen: "48 years ago", |
|
|
|
|
last_seen: "38 years ago" |
|
|
|
|
} |
|
|
|
|
) |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
test "returns a pending transaction when there is no receipt" do |
|
|
|
|
insert(:block, number: 24) |
|
|
|
|
time = Timex.now |> Timex.shift(hours: -2) |
|
|
|
|
block = insert(:block, %{ |
|
|
|
|
number: 1, |
|
|
|
|
gas_used: 99523, |
|
|
|
|
timestamp: time, |
|
|
|
|
}) |
|
|
|
|
time = Timex.now() |> Timex.shift(hours: -2) |
|
|
|
|
|
|
|
|
|
block = |
|
|
|
|
insert(:block, %{ |
|
|
|
|
number: 1, |
|
|
|
|
gas_used: 99523, |
|
|
|
|
timestamp: time |
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
transaction = |
|
|
|
|
insert(:transaction, |
|
|
|
|
insert( |
|
|
|
|
:transaction, |
|
|
|
|
inserted_at: Timex.parse!("1970-01-01T00:00:18-00:00", "{ISO:Extended}"), |
|
|
|
|
updated_at: Timex.parse!("1980-01-01T00:00:18-00:00", "{ISO:Extended}")) |
|
|
|
|
updated_at: Timex.parse!("1980-01-01T00:00:18-00:00", "{ISO:Extended}") |
|
|
|
|
) |
|
|
|
|
|> with_block(block) |
|
|
|
|
|> with_addresses(%{to: "0xsleepypuppy", from: "0xilovefrogs"}) |
|
|
|
|
|> Repo.preload([:block, :to_address, :from_address, :receipt]) |
|
|
|
|
|
|
|
|
|
form = TransactionForm.build(transaction) |
|
|
|
|
formatted_timestamp = block.timestamp |> Timex.format!("%b-%d-%Y %H:%M:%S %p %Z", :strftime) |
|
|
|
|
|
|
|
|
|
assert(form == %{ |
|
|
|
|
block_number: 1, |
|
|
|
|
age: "2 hours ago", |
|
|
|
|
formatted_age: "2 hours ago (#{formatted_timestamp})", |
|
|
|
|
formatted_timestamp: formatted_timestamp, |
|
|
|
|
cumulative_gas_used: "99,523", |
|
|
|
|
to_address_hash: "0xsleepypuppy", |
|
|
|
|
from_address_hash: "0xilovefrogs", |
|
|
|
|
confirmations: 23, |
|
|
|
|
status: :pending, |
|
|
|
|
formatted_status: "Pending", |
|
|
|
|
first_seen: "48 years ago", |
|
|
|
|
last_seen: "38 years ago", |
|
|
|
|
}) |
|
|
|
|
assert( |
|
|
|
|
form == %{ |
|
|
|
|
block_number: 1, |
|
|
|
|
age: "2 hours ago", |
|
|
|
|
formatted_age: "2 hours ago (#{formatted_timestamp})", |
|
|
|
|
formatted_timestamp: formatted_timestamp, |
|
|
|
|
cumulative_gas_used: "99,523", |
|
|
|
|
to_address_hash: "0xsleepypuppy", |
|
|
|
|
from_address_hash: "0xilovefrogs", |
|
|
|
|
confirmations: 23, |
|
|
|
|
status: :pending, |
|
|
|
|
formatted_status: "Pending", |
|
|
|
|
first_seen: "48 years ago", |
|
|
|
|
last_seen: "38 years ago" |
|
|
|
|
} |
|
|
|
|
) |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
test "returns a pending transaction when there is no block" do |
|
|
|
|
transaction = insert( |
|
|
|
|
:transaction, |
|
|
|
|
inserted_at: Timex.parse!("1970-01-01T00:00:18-00:00", "{ISO:Extended}"), |
|
|
|
|
updated_at: Timex.parse!("1980-01-01T00:00:18-00:00", "{ISO:Extended}")) |
|
|
|
|
|> with_addresses(%{to: "0xchadmuska", from: "0xtonyhawk"}) |
|
|
|
|
|> Repo.preload([:to_address, :from_address]) |
|
|
|
|
transaction = |
|
|
|
|
insert( |
|
|
|
|
:transaction, |
|
|
|
|
inserted_at: Timex.parse!("1970-01-01T00:00:18-00:00", "{ISO:Extended}"), |
|
|
|
|
updated_at: Timex.parse!("1980-01-01T00:00:18-00:00", "{ISO:Extended}") |
|
|
|
|
) |
|
|
|
|
|> with_addresses(%{to: "0xchadmuska", from: "0xtonyhawk"}) |
|
|
|
|
|> Repo.preload([:to_address, :from_address]) |
|
|
|
|
|
|
|
|
|
form = TransactionForm.build(transaction) |
|
|
|
|
|
|
|
|
|
assert(form == %{ |
|
|
|
|
block_number: "", |
|
|
|
|
age: "Pending", |
|
|
|
|
formatted_age: "Pending", |
|
|
|
|
formatted_timestamp: "Pending", |
|
|
|
|
cumulative_gas_used: "Pending", |
|
|
|
|
to_address_hash: "0xchadmuska", |
|
|
|
|
from_address_hash: "0xtonyhawk", |
|
|
|
|
confirmations: 0, |
|
|
|
|
status: :pending, |
|
|
|
|
formatted_status: "Pending", |
|
|
|
|
first_seen: "48 years ago", |
|
|
|
|
last_seen: "38 years ago", |
|
|
|
|
}) |
|
|
|
|
assert( |
|
|
|
|
form == %{ |
|
|
|
|
block_number: "", |
|
|
|
|
age: "Pending", |
|
|
|
|
formatted_age: "Pending", |
|
|
|
|
formatted_timestamp: "Pending", |
|
|
|
|
cumulative_gas_used: "Pending", |
|
|
|
|
to_address_hash: "0xchadmuska", |
|
|
|
|
from_address_hash: "0xtonyhawk", |
|
|
|
|
confirmations: 0, |
|
|
|
|
status: :pending, |
|
|
|
|
formatted_status: "Pending", |
|
|
|
|
first_seen: "48 years ago", |
|
|
|
|
last_seen: "38 years ago" |
|
|
|
|
} |
|
|
|
|
) |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
test "works when there are no addresses" do |
|
|
|
|
transaction = insert( |
|
|
|
|
:transaction, |
|
|
|
|
inserted_at: Timex.parse!("1970-01-01T00:00:18-00:00", "{ISO:Extended}"), |
|
|
|
|
updated_at: Timex.parse!("1980-01-01T00:00:18-00:00", "{ISO:Extended}")) |
|
|
|
|
|> Repo.preload([:block, :to_address, :from_address]) |
|
|
|
|
transaction = |
|
|
|
|
insert( |
|
|
|
|
:transaction, |
|
|
|
|
inserted_at: Timex.parse!("1970-01-01T00:00:18-00:00", "{ISO:Extended}"), |
|
|
|
|
updated_at: Timex.parse!("1980-01-01T00:00:18-00:00", "{ISO:Extended}") |
|
|
|
|
) |
|
|
|
|
|> Repo.preload([:block, :to_address, :from_address]) |
|
|
|
|
|
|
|
|
|
form = TransactionForm.build(transaction) |
|
|
|
|
|
|
|
|
|
assert(form == %{ |
|
|
|
|
block_number: "", |
|
|
|
|
age: "Pending", |
|
|
|
|
formatted_age: "Pending", |
|
|
|
|
formatted_timestamp: "Pending", |
|
|
|
|
cumulative_gas_used: "Pending", |
|
|
|
|
to_address_hash: nil, |
|
|
|
|
from_address_hash: nil, |
|
|
|
|
confirmations: 0, |
|
|
|
|
status: :pending, |
|
|
|
|
formatted_status: "Pending", |
|
|
|
|
first_seen: "48 years ago", |
|
|
|
|
last_seen: "38 years ago", |
|
|
|
|
}) |
|
|
|
|
assert( |
|
|
|
|
form == %{ |
|
|
|
|
block_number: "", |
|
|
|
|
age: "Pending", |
|
|
|
|
formatted_age: "Pending", |
|
|
|
|
formatted_timestamp: "Pending", |
|
|
|
|
cumulative_gas_used: "Pending", |
|
|
|
|
to_address_hash: nil, |
|
|
|
|
from_address_hash: nil, |
|
|
|
|
confirmations: 0, |
|
|
|
|
status: :pending, |
|
|
|
|
formatted_status: "Pending", |
|
|
|
|
first_seen: "48 years ago", |
|
|
|
|
last_seen: "38 years ago" |
|
|
|
|
} |
|
|
|
|
) |
|
|
|
|
end |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
describe "build_and_merge/1" do |
|
|
|
|
test "it returns a merged map of a transaction and its built data" do |
|
|
|
|
insert(:block, number: 24) |
|
|
|
|
time = Timex.now |> Timex.shift(hours: -2) |
|
|
|
|
block = insert(:block, %{ |
|
|
|
|
number: 1, |
|
|
|
|
gas_used: 99523, |
|
|
|
|
timestamp: time, |
|
|
|
|
}) |
|
|
|
|
time = Timex.now() |> Timex.shift(hours: -2) |
|
|
|
|
|
|
|
|
|
block = |
|
|
|
|
insert(:block, %{ |
|
|
|
|
number: 1, |
|
|
|
|
gas_used: 99523, |
|
|
|
|
timestamp: time |
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
transaction = |
|
|
|
|
insert(:transaction, |
|
|
|
|
insert( |
|
|
|
|
:transaction, |
|
|
|
|
hash: "0xkittenpower", |
|
|
|
|
inserted_at: Timex.parse!("1970-01-01T00:00:18-00:00", "{ISO:Extended}"), |
|
|
|
|
updated_at: Timex.parse!("1980-01-01T00:00:18-00:00", "{ISO:Extended}"), |
|
|
|
|
gas: 555) |
|
|
|
|
gas: 555 |
|
|
|
|
) |
|
|
|
|
|> with_block(block) |
|
|
|
|
|> with_addresses(%{to: "0xsleepypuppy", from: "0xilovefrogs"}) |
|
|
|
|
|
|
|
|
|
insert(:receipt, status: 0, gas_used: 555, transaction: transaction) |
|
|
|
|
|
|
|
|
|
form = transaction |> Repo.preload([:block, :to_address, :from_address, :receipt]) |> TransactionForm.build_and_merge() |
|
|
|
|
form = |
|
|
|
|
transaction |> Repo.preload([:block, :to_address, :from_address, :receipt]) |
|
|
|
|
|> TransactionForm.build_and_merge() |
|
|
|
|
|
|
|
|
|
assert form.hash == "0xkittenpower" |
|
|
|
|
assert form.block_number == 1 |
|
|
|
|