parent
15337d4672
commit
42504acd44
@ -0,0 +1,97 @@ |
||||
defmodule Explorer.ExchangeRates.Source.CoinGeckoTest do |
||||
use ExUnit.Case |
||||
|
||||
alias Explorer.ExchangeRates.Token |
||||
alias Explorer.ExchangeRates.Source.CoinGecko |
||||
alias Plug.Conn |
||||
|
||||
@json_btc_price """ |
||||
{ |
||||
"rates": { |
||||
"usd": { |
||||
"name": "US Dollar", |
||||
"unit": "$", |
||||
"value": 6547.418, |
||||
"type": "fiat" |
||||
} |
||||
} |
||||
} |
||||
""" |
||||
|
||||
@json_mkt_data """ |
||||
[ |
||||
{ |
||||
"id": "poa-network", |
||||
"symbol": "poa", |
||||
"name": "POA Network", |
||||
"image": "https://assets.coingecko.com/coins/images/3157/large/poa.jpg?1520829019", |
||||
"current_price": 0.114782883773693, |
||||
"market_cap": 25248999.6735956, |
||||
"market_cap_rank": 185, |
||||
"total_volume": 2344442.13578437, |
||||
"high_24h": 0.115215129840519, |
||||
"low_24h": 0.101039753612939, |
||||
"price_change_24h": 0.0135970966607094, |
||||
"price_change_percentage_24h": 13.437753511298, |
||||
"market_cap_change_24h": 3058195.58191147, |
||||
"market_cap_change_percentage_24h": 13.7813644304017, |
||||
"circulating_supply": "219935174.0", |
||||
"total_supply": 252193195, |
||||
"ath": 0.935923393359191, |
||||
"ath_change_percentage": -87.731057963078, |
||||
"ath_date": "2018-05-10T09:45:31.809Z", |
||||
"roi": null, |
||||
"last_updated": "2018-10-23T01:25:31.764Z" |
||||
} |
||||
] |
||||
""" |
||||
|
||||
describe "fetch_exchange_rates" do |
||||
setup do |
||||
bypass = Bypass.open() |
||||
Application.put_env(:explorer, CoinGecko, base_url: "http://localhost:#{bypass.port}") |
||||
|
||||
{:ok, bypass: bypass} |
||||
end |
||||
|
||||
test "with successful request", %{bypass: bypass} do |
||||
Bypass.expect(bypass, "GET", "/exchange_rates", fn conn -> |
||||
Conn.resp(conn, 200, @json_btc_price) |
||||
end) |
||||
|
||||
Bypass.expect( |
||||
bypass, |
||||
fn conn -> Conn.resp(conn, 200, @json_mkt_data) end |
||||
) |
||||
|
||||
{:ok, expected_date, 0} = "2018-10-23T01:25:31.764Z" |> DateTime.from_iso8601() |
||||
|
||||
expected = [ |
||||
%Token{ |
||||
available_supply: Decimal.new("252193195"), |
||||
btc_value: Decimal.new("0.00001753101509231471092879666458"), |
||||
id: "poa-network", |
||||
last_updated: expected_date, |
||||
market_cap_usd: Decimal.new("25248999.6735956"), |
||||
name: "POA Network", |
||||
symbol: "poa", |
||||
usd_value: Decimal.new("0.114782883773693"), |
||||
volume_24h_usd: Decimal.new("2344442.13578437") |
||||
} |
||||
] |
||||
|
||||
assert {:ok, ^expected} = CoinGecko.fetch_exchange_rates() |
||||
end |
||||
|
||||
test "with bad request response", %{bypass: bypass} do |
||||
error_text = ~S({"error": "bad request"}) |
||||
|
||||
Bypass.expect( |
||||
bypass, |
||||
fn conn -> Conn.resp(conn, 400, error_text) end |
||||
) |
||||
|
||||
assert {:error, "bad request"} == CoinGecko.fetch_exchange_rates() |
||||
end |
||||
end |
||||
end |
Loading…
Reference in new issue