Skip to content

Commit

Permalink
Add previous transaction address in GraphQl transaction schema
Browse files Browse the repository at this point in the history
  • Loading branch information
tenmoves authored and Neylix committed Jan 10, 2023
1 parent 1b75ace commit 2e2bace
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 5 deletions.
1 change: 1 addition & 0 deletions lib/archethic/transaction_chain/transaction.ex
Original file line number Diff line number Diff line change
Expand Up @@ -863,6 +863,7 @@ defmodule Archethic.TransactionChain.Transaction do
type: Atom.to_string(tx.type),
data: TransactionData.to_map(tx.data),
previous_public_key: tx.previous_public_key,
previous_address: previous_address(tx),
previous_signature: tx.previous_signature,
origin_signature: tx.origin_signature,
validation_stamp: ValidationStamp.to_map(tx.validation_stamp),
Expand Down
1 change: 1 addition & 0 deletions lib/archethic_web/graphql_schema/transaction_type.ex
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ defmodule ArchethicWeb.GraphQLSchema.TransactionType do
field(:data, :data)
field(:previous_public_key, :public_key)
field(:previous_signature, :hex)
field(:previous_address, :address)
field(:origin_signature, :hex)
field(:validation_stamp, :validation_stamp)
field(:cross_validation_stamps, list_of(:cross_validation_stamp))
Expand Down
42 changes: 37 additions & 5 deletions test/archethic_web/graphql_schema_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -85,21 +85,38 @@ defmodule ArchethicWeb.GraphQLSchemaTest do
assert %{"errors" => [%{"message" => "transaction_not_exists"}]} = json_response(conn, 200)
end

test "should the transaction with the requested fields", %{conn: conn} do
test "should return the transaction with the requested fields", %{conn: conn} do
addr = <<0::8, 0::8, :crypto.strong_rand_bytes(32)::binary>> |> Base.encode16()
prev_public_key = <<0::8, 0::8, :crypto.strong_rand_bytes(32)::binary>>

MockClient
|> stub(:send_message, fn _, %GetTransaction{}, _ ->
{:ok, %Transaction{address: addr, type: :transfer, data: %TransactionData{}}}
{:ok,
%Transaction{
address: addr,
previous_public_key: prev_public_key,
type: :transfer,
data: %TransactionData{}
}}
end)

conn =
post(conn, "/api", %{
"query" => "query { transaction(address: \"#{addr}\") { address } }"
"query" => "query { transaction(address: \"#{addr}\") { address, previousAddress } }"
})

assert %{"data" => %{"transaction" => %{"address" => address}}} = json_response(conn, 200)
assert %{
"data" => %{
"transaction" => %{
"address" => address,
"previousAddress" => previous_address
}
}
} = json_response(conn, 200)

assert addr == Base.decode16!(address, case: :mixed)

refute is_nil(previous_address)
end
end

Expand All @@ -114,7 +131,12 @@ defmodule ArchethicWeb.GraphQLSchemaTest do
{:ok, %LastTransactionAddress{address: last_address}}

_, %GetTransaction{address: ^last_address}, _ ->
{:ok, %Transaction{address: last_address, type: :transfer}}
{:ok,
%Transaction{
previous_public_key: first_addr,
address: last_address,
type: :transfer
}}
end)

conn =
Expand Down Expand Up @@ -225,16 +247,20 @@ defmodule ArchethicWeb.GraphQLSchemaTest do
|> stub(:list_transactions, fn _ ->
addr1 = <<0::8, 0::8, :crypto.strong_rand_bytes(32)::binary>>
addr2 = <<0::8, 0::8, :crypto.strong_rand_bytes(32)::binary>>
prev_addr1 = <<0::8, 0::8, :crypto.strong_rand_bytes(32)::binary>>
prev_addr2 = <<0::8, 0::8, :crypto.strong_rand_bytes(32)::binary>>

[
%Transaction{
address: addr1,
type: :transfer,
previous_public_key: prev_addr1,
data: %TransactionData{}
},
%Transaction{
address: addr2,
type: :transfer,
previous_public_key: prev_addr2,
data: %TransactionData{}
}
]
Expand All @@ -254,9 +280,11 @@ defmodule ArchethicWeb.GraphQLSchemaTest do
|> stub(:list_transactions, fn _ ->
Enum.map(1..20, fn _ ->
addr = <<0::8, 0::8, :crypto.strong_rand_bytes(32)::binary>>
prev_addr = <<0::8, 0::8, :crypto.strong_rand_bytes(32)::binary>>

%Transaction{
address: addr,
previous_public_key: prev_addr,
type: :transfer,
data: %TransactionData{}
}
Expand Down Expand Up @@ -328,10 +356,12 @@ defmodule ArchethicWeb.GraphQLSchemaTest do
transactions =
Enum.map(1..20, fn _ ->
addr = <<0::8, 0::8, :crypto.strong_rand_bytes(32)::binary>>
prev_addr = <<0::8, 0::8, :crypto.strong_rand_bytes(32)::binary>>

%Transaction{
address: addr,
type: :transfer,
previous_public_key: prev_addr,
data: %TransactionData{}
}
end)
Expand Down Expand Up @@ -369,10 +399,12 @@ defmodule ArchethicWeb.GraphQLSchemaTest do
transactions =
Enum.map(1..20, fn _ ->
addr = <<0::8, 0::8, :crypto.strong_rand_bytes(32)::binary>>
prev_addr = <<0::8, 0::8, :crypto.strong_rand_bytes(32)::binary>>

%Transaction{
address: addr,
type: :transfer,
previous_public_key: prev_addr,
data: %TransactionData{}
}
end)
Expand Down

0 comments on commit 2e2bace

Please sign in to comment.