1
0
Fork 0
mirror of https://github.com/maybe-finance/maybe.git synced 2025-07-25 08:09:38 +02:00
Maybe/test/system/trades_test.rb
Zach Gollwitzer 1aae00f586
perf(transactions): add kind to Transaction model and remove expensive Transfer joins in aggregations (#2388)
* add kind to transaction model

* Basic transfer creator

* Fix method naming conflict

* Creator form pattern

* Remove stale methods

* Tweak migration

* Remove BaseQuery, write entire query in each class for clarity

* Query optimizations

* Remove unused exchange rate query lines

* Remove temporary cache-warming strategy

* Fix test

* Update transaction search

* Decouple transactions endpoint from IncomeStatement

* Clean up transactions controller

* Update cursor rules

* Cleanup comments, logic in search

* Fix totals logic on transactions view

* Fix pagination

* Optimize search totals query

* Default to last 30 days on transactions page if no filters

* Decouple transactions list from transfer details

* Revert transfer route

* Migration reset

* Bundle update

* Fix matching logic, tests

* Remove unused code
2025-06-20 13:31:58 -04:00

75 lines
1.6 KiB
Ruby

require "application_system_test_case"
class TradesTest < ApplicationSystemTestCase
include ActiveJob::TestHelper
setup do
sign_in @user = users(:family_admin)
@user.update!(show_sidebar: false, show_ai_sidebar: false)
@account = accounts(:investment)
visit_account_portfolio
# Disable provider to focus on form testing
Security.stubs(:provider).returns(nil)
end
test "can create buy transaction" do
shares_qty = 25
open_new_trade_modal
fill_in "Ticker symbol", with: "AAPL"
fill_in "Date", with: Date.current
fill_in "Quantity", with: shares_qty
fill_in "model[price]", with: 214.23
click_button "Add transaction"
visit_trades
within_trades do
assert_text "Buy #{shares_qty} shares of AAPL"
end
end
test "can create sell transaction" do
qty = 10
aapl = @account.holdings.find { |h| h.security.ticker == "AAPL" }
open_new_trade_modal
select "Sell", from: "Type"
fill_in "Ticker symbol", with: "AAPL"
fill_in "Date", with: Date.current
fill_in "Quantity", with: qty
fill_in "model[price]", with: 215.33
click_button "Add transaction"
visit_trades
within_trades do
assert_text "Sell #{qty} shares of AAPL"
end
end
private
def open_new_trade_modal
click_on "New transaction"
end
def within_trades(&block)
within "#" + dom_id(@account, "entries"), &block
end
def visit_trades
visit account_path(@account, tab: "activity")
end
def visit_account_portfolio
visit account_path(@account, tab: "holdings")
end
end