Packages
tai
0.0.54
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 venue :: Tai.Venue.t()
@type product :: Tai.Venues.Product.t()
@type fee_info :: Tai.Venues.FeeInfo.t()
@type venue_id :: Tai.Venue.id()
@type credential_id :: Tai.Venue.credential_id()
@type asset :: Tai.Venues.Account.asset()
@type balance :: Decimal.t() | number | String.t()
@type record :: Stored.Backend.record()
@type record_key :: Stored.Backend.key()
@spec mock_venue(venue | map | [{atom, term}]) :: {:ok, {key :: term, resource :: struct}}
def mock_venue(%Tai.Venue{} = venue) do
venue
|> Tai.Venues.VenueStore.put()
end
def mock_venue(attrs) do
Tai.Venue
|> struct(attrs)
|> mock_venue
end
@spec mock_product(product | map | [{atom, term}]) :: :ok
def mock_product(%Tai.Venues.Product{} = product) do
product
|> Tai.Venues.ProductStore.upsert()
end
def mock_product(attrs) when is_map(attrs) or is_list(attrs) do
Tai.Venues.Product
|> struct(attrs)
|> mock_product
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_account(venue_id, credential_id, asset, balance, balance) ::
{:ok, {record_key, record}}
def mock_account(venue_id, credential_id, asset, free, locked) do
free = Decimal.cast(free)
locked = Decimal.cast(locked)
equity = Decimal.add(free, locked)
%Tai.Venues.Account{
venue_id: venue_id,
credential_id: credential_id,
type: "default",
asset: asset,
equity: equity,
free: free,
locked: locked
}
|> Tai.Venues.AccountStore.put()
end
@spec push_market_data_snapshot(location :: location, bids :: map, asks :: map) :: no_return
def push_market_data_snapshot(location, bids, asks) do
:ok =
location.venue_id
|> whereis_stream_connection
|> send_json_msg(%{
type: :snapshot,
symbol: location.product_symbol,
bids: bids,
asks: asks
})
end
@spec push_order_update(venue_id, map) :: no_return
def push_order_update(venue_id, attrs) do
:ok =
venue_id
|> whereis_stream_connection()
|> send_json_msg(attrs)
end
defp whereis_stream_connection(venue_id) do
venue_id
|> Tai.VenueAdapters.Mock.Stream.Connection.to_name()
|> Process.whereis()
end
defp send_json_msg(pid, msg) do
Tai.WebSocket.send_json_msg(pid, msg)
end
end