Initial commit

This commit is contained in:
Yaser
2026-08-13 19:50:53 +03:30
commit 38084458fe
879 changed files with 95198 additions and 0 deletions

View File

@@ -0,0 +1,107 @@
describe 'Accounting' do
let(:seller) { create(:member, :level_3, :barong) }
let(:buyer) { create(:member, :level_3, :barong) }
let :order_ask do
create :order_ask, \
bid: :usd,
ask: :btc,
market: Market.find(:btcusd),
state: :wait,
ord_type: :limit,
price: '1'.to_d,
volume: '10000.0',
origin_volume: '10000.0',
locked: '10000',
origin_locked: '10000',
member: seller
end
let :order_bid do
create :order_bid, \
bid: :usd,
ask: :btc,
market: Market.find(:btcusd),
state: :wait,
ord_type: :limit,
price: '1.2'.to_d,
volume: '10000',
origin_volume: '10000',
locked: '12000',
origin_locked: '12000',
member: buyer
end
let(:deposit_btc) { create(:deposit_btc, member: seller, amount: order_ask.locked, currency_id: :btc) }
let(:deposit_usd) { create(:deposit_usd, member: buyer, amount: order_bid.locked, currency_id: :usd) }
let :executor do
ask = Matching::LimitOrder.new(order_ask.to_matching_attributes)
bid = Matching::LimitOrder.new(order_bid.to_matching_attributes)
Matching::Executor.new \
action: 'execute',
trade: {
market_id: :btcusd,
maker_order_id: ask.id,
taker_order_id: bid.id,
strike_price: '1.2',
amount: '10000',
total: '12000'
}
end
let(:asset_balance) { Operations::Asset.balance }
let(:liability_balance) { Operations::Liability.balance }
let(:revenue_balance) { Operations::Revenue.balance }
let(:expense_balance) { Operations::Expense.balance }
before do
deposit_btc.accept!
deposit_btc.process!
deposit_btc.dispatch!
deposit_usd.accept!
order_bid.hold_account!.lock_funds!(order_bid.locked)
order_bid.record_submit_operations!
order_ask.hold_account!.lock_funds!(order_ask.locked)
order_ask.record_submit_operations!
executor.execute!
end
it 'assert that asset - liabilities = revenue - expense' do
expect(asset_balance.merge(liability_balance){ |k, a, b| a - b}).to eq (revenue_balance.merge(expense_balance){ |k, a, b| a - b})
end
it 'assert the balance is 15.0 / 18.0 $' do
balance = asset_balance.merge(liability_balance){ |k, a, b| a - b}
expect(balance.fetch(:btc)).to eq '15.0'.to_d
expect(balance.fetch(:usd)).to eq '18.0'.to_d
end
context 'withdraws' do
let(:btc_withdraw) { create(:btc_withdraw, sum: 1000.to_d, member: buyer ) }
before do
btc_withdraw.accept!
btc_withdraw.update(txid: 'a1a43ab7166f81059449f80a35abdc6febe62fe1f75a0cdb25d49ebae3fc10d9')
btc_withdraw.process!
btc_withdraw.dispatch!
btc_withdraw.success!
end
it 'after btc withdraw, assert that asset - liabilities = revenue - expense' do
expect(asset_balance.merge(liability_balance){ |k, a, b| a - b}).to eq (revenue_balance.merge(expense_balance){ |k, a, b| a - b})
end
it 'after btc withdraw (fee: 0.01) assert the balance is 15.01 / 18.0 $' do
balance = asset_balance.merge(liability_balance){ |k, a, b| a - b}
expect(balance.fetch(:btc)).to eq '15.01'.to_d
expect(balance.fetch(:usd)).to eq '18.0'.to_d
end
end
end