diff --git a/apps/block_scout_web/lib/block_scout_web/controllers/address_token_controller.ex b/apps/block_scout_web/lib/block_scout_web/controllers/address_token_controller.ex index ed52c25c87..312b90176b 100644 --- a/apps/block_scout_web/lib/block_scout_web/controllers/address_token_controller.ex +++ b/apps/block_scout_web/lib/block_scout_web/controllers/address_token_controller.ex @@ -67,6 +67,12 @@ defmodule BlockScoutWeb.AddressTokenController do transaction_count: transaction_count(address), validation_count: validation_count(address) ) + else + :error -> + unprocessable_entity(conn) + + {:error, :not_found} -> + not_found(conn) end end end diff --git a/apps/block_scout_web/test/block_scout_web/controllers/address_token_controller_test.exs b/apps/block_scout_web/test/block_scout_web/controllers/address_token_controller_test.exs index 0b4008611f..31a1c2c5cf 100644 --- a/apps/block_scout_web/test/block_scout_web/controllers/address_token_controller_test.exs +++ b/apps/block_scout_web/test/block_scout_web/controllers/address_token_controller_test.exs @@ -57,15 +57,15 @@ defmodule BlockScoutWeb.AddressTokenControllerTest do to_address: address ) - conn = get(conn, address_token_path(conn, :index, address)) + conn = get(conn, address_token_path(conn, :index, address), type: "JSON") - actual_token_hashes = - conn.assigns.tokens - |> Enum.map(& &1.contract_address_hash) + {:ok, %{"items" => items}} = + conn.resp_body + |> Poison.decode() - assert html_response(conn, 200) - assert Enum.member?(actual_token_hashes, token1.contract_address_hash) - refute Enum.member?(actual_token_hashes, token2.contract_address_hash) + assert json_response(conn, 200) + assert Enum.any?(items, fn item -> String.contains?(item, to_string(token1.contract_address_hash)) end) + refute Enum.any?(items, fn item -> String.contains?(item, to_string(token2.contract_address_hash)) end) end test "returns next page of results based on last seen token", %{conn: conn} do @@ -102,15 +102,17 @@ defmodule BlockScoutWeb.AddressTokenControllerTest do get(conn, address_token_path(BlockScoutWeb.Endpoint, :index, address.hash), %{ "token_name" => name, "token_type" => type, - "token_inserted_at" => inserted_at + "token_inserted_at" => inserted_at, + "type" => "JSON" }) - actual_tokens = - conn.assigns.tokens - |> Enum.map(& &1.name) - |> Enum.sort() + {:ok, %{"items" => items}} = + conn.resp_body + |> Poison.decode() - assert second_page_tokens == actual_tokens + assert Enum.any?(items, fn item -> + Enum.any?(second_page_tokens, fn token_name -> String.contains?(item, token_name) end) + end) end test "next_page_params exists if not on last page", %{conn: conn} do @@ -129,9 +131,13 @@ defmodule BlockScoutWeb.AddressTokenControllerTest do insert(:token_transfer, token_contract_address: token.contract_address, from_address: address) end) - conn = get(conn, address_token_path(BlockScoutWeb.Endpoint, :index, address.hash)) + conn = get(conn, address_token_path(BlockScoutWeb.Endpoint, :index, address.hash), type: "JSON") + + {:ok, %{"next_page_path" => next_page_path}} = + conn.resp_body + |> Poison.decode() - assert conn.assigns.next_page_params + assert next_page_path end test "next_page_params are empty if on last page", %{conn: conn} do @@ -139,9 +145,13 @@ defmodule BlockScoutWeb.AddressTokenControllerTest do token = insert(:token) insert(:token_transfer, token_contract_address: token.contract_address, from_address: address) - conn = get(conn, address_token_path(BlockScoutWeb.Endpoint, :index, address.hash)) + conn = get(conn, address_token_path(BlockScoutWeb.Endpoint, :index, address.hash), type: "JSON") + + {:ok, %{"next_page_path" => next_page_path}} = + conn.resp_body + |> Poison.decode() - refute conn.assigns.next_page_params + refute next_page_path end end end