Packages
tai
0.0.10
0.0.75
0.0.74
0.0.73
0.0.72
0.0.71
0.0.70
0.0.69
0.0.68
0.0.67
0.0.66
0.0.65
0.0.64
0.0.63
0.0.62
0.0.61
0.0.60
0.0.59
0.0.58
0.0.57
0.0.56
0.0.55
0.0.54
0.0.53
0.0.52
0.0.51
0.0.50
0.0.49
0.0.48
0.0.47
0.0.46
0.0.45
0.0.44
0.0.43
0.0.42
0.0.41
0.0.40
0.0.39
0.0.38
0.0.37
0.0.36
0.0.35
0.0.34
0.0.33
0.0.32
0.0.31
0.0.30
0.0.29
0.0.28
0.0.27
0.0.26
0.0.25
0.0.24
0.0.23
0.0.22
0.0.21
0.0.20
0.0.19
0.0.18
0.0.17
0.0.16
0.0.15
0.0.14
0.0.13
0.0.12
0.0.11
0.0.10
0.0.9
0.0.8
0.0.7
0.0.6
0.0.5
0.0.4
0.0.3
0.0.2
0.0.1
A composable, real time, market data and trade execution toolkit
Current section
Files
Jump to
Current section
Files
lib/tai/test_support/mock.ex
defmodule Tai.TestSupport.Mock do
@type location :: Tai.Markets.Location.t()
@type product :: Tai.Venues.Product.t()
@type fee_info :: Tai.Venues.FeeInfo.t()
@spec mock_product(product | map) :: :ok
def mock_product(%Tai.Venues.Product{} = product) do
product
|> Tai.Venues.ProductStore.upsert()
end
def mock_product(attrs) when is_map(attrs) do
Tai.Venues.Product
|> struct(attrs)
|> Tai.Venues.ProductStore.upsert()
end
@spec mock_fee_info(fee_info | map) :: :ok
def mock_fee_info(%Tai.Venues.FeeInfo{} = fee_info) do
fee_info
|> Tai.Venues.FeeStore.upsert()
end
def mock_fee_info(attrs) when is_map(attrs) do
Tai.Venues.FeeInfo
|> struct(attrs)
|> Tai.Venues.FeeStore.upsert()
end
@spec mock_asset_balance(
exchange_id :: atom,
account_id :: atom,
asset :: atom,
free :: number | Decimal.t() | String.t(),
locked :: number | Decimal.t() | String.t()
) :: :ok
def mock_asset_balance(exchange_id, account_id, asset, free, locked) do
Tai.Venues.AssetBalances.upsert(%Tai.Venues.AssetBalance{
exchange_id: exchange_id,
account_id: account_id,
asset: asset,
free: free |> to_decimal,
locked: locked |> to_decimal
})
end
@spec push_market_feed_snapshot(location :: location, bids :: map, asks :: map) ::
:ok
| {:error,
%WebSockex.FrameEncodeError{}
| %WebSockex.ConnError{}
| %WebSockex.NotConnectedError{}
| %WebSockex.InvalidFrameError{}}
def push_market_feed_snapshot(location, bids, asks) do
:ok =
location.venue_id
|> whereis_market_data_feed
|> send_json_msg(%{
type: :snapshot,
symbol: location.product_symbol,
bids: bids,
asks: asks
})
end
defp whereis_market_data_feed(venue_id) do
venue_id
|> Tai.Venues.OrderBookFeed.to_name()
|> Process.whereis()
end
defp send_json_msg(pid, msg) do
Tai.WebSocket.send_json_msg(pid, msg)
end
def to_decimal(val) when is_float(val), do: val |> Decimal.from_float()
def to_decimal(val), do: val |> Decimal.new()
end