diff --git a/lib/archethic/contracts/contract/constants.ex b/lib/archethic/contracts/contract/constants.ex index ea98a6308..3a73ddad0 100644 --- a/lib/archethic/contracts/contract/constants.ex +++ b/lib/archethic/contracts/contract/constants.ex @@ -23,6 +23,7 @@ defmodule Archethic.Contracts.ContractConstants do @doc """ Extract constants from a transaction into a map + This is a destructive operation. Some fields are not present in the resulting map. """ @spec from_transaction(Transaction.t()) :: map() def from_transaction(%Transaction{ @@ -98,7 +99,7 @@ defmodule Archethic.Contracts.ContractConstants do def to_transaction(constants) do %Transaction{ address: Map.get(constants, "address"), - type: Map.get(constants, "type"), + type: String.to_existing_atom(Map.get(constants, "type")), data: %TransactionData{ code: Map.get(constants, "code", ""), content: Map.get(constants, "content", ""), diff --git a/test/archethic/contracts/contract/constants_test.exs b/test/archethic/contracts/contract/constants_test.exs new file mode 100644 index 000000000..0e93a911a --- /dev/null +++ b/test/archethic/contracts/contract/constants_test.exs @@ -0,0 +1,28 @@ +defmodule Archethic.Contracts.ContractConstantsTest do + use ArchethicCase + + alias Archethic.TransactionFactory + alias Archethic.TransactionChain.Transaction + alias Archethic.Contracts.ContractConstants + + test "from_transaction/1 should return a map" do + tx = TransactionFactory.create_valid_transaction() + + constant = + tx + |> ContractConstants.from_transaction() + + assert %{"type" => "transfer"} = constant + end + + test "to_transaction/1 should return a transaction" do + tx = TransactionFactory.create_valid_transaction() + + # from_transaction/1 is a destructive function, we can't check + # that result is equal to tx + assert %Transaction{type: :transfer} = + tx + |> ContractConstants.from_transaction() + |> ContractConstants.to_transaction() + end +end