2024-08-09 11:22:57 -04:00
|
|
|
require "application_system_test_case"
|
|
|
|
|
|
|
|
class TradesTest < ApplicationSystemTestCase
|
|
|
|
include ActiveJob::TestHelper
|
|
|
|
|
|
|
|
setup do
|
|
|
|
sign_in @user = users(:family_admin)
|
|
|
|
|
|
|
|
@account = accounts(:investment)
|
|
|
|
|
2024-12-10 17:41:20 -05:00
|
|
|
visit_account_portfolio
|
2024-10-30 09:23:44 -04:00
|
|
|
|
2024-11-27 16:01:50 -05:00
|
|
|
Security.stubs(:search).returns([
|
|
|
|
Security.new(
|
|
|
|
ticker: "AAPL",
|
2024-10-30 09:23:44 -04:00
|
|
|
name: "Apple Inc.",
|
|
|
|
logo_url: "https://logo.synthfinance.com/ticker/AAPL",
|
|
|
|
exchange_acronym: "NASDAQ",
|
2024-12-12 08:56:52 -05:00
|
|
|
exchange_mic: "XNAS",
|
|
|
|
country_code: "US"
|
2024-10-30 09:23:44 -04:00
|
|
|
)
|
|
|
|
])
|
2024-08-09 11:22:57 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
test "can create buy transaction" do
|
|
|
|
shares_qty = 25.0
|
|
|
|
|
|
|
|
open_new_trade_modal
|
|
|
|
|
2024-10-28 15:49:19 -04:00
|
|
|
fill_in "Ticker symbol", with: "AAPL"
|
|
|
|
select_combobox_option("Apple")
|
2024-08-09 11:22:57 -04:00
|
|
|
fill_in "Date", with: Date.current
|
|
|
|
fill_in "Quantity", with: shares_qty
|
|
|
|
fill_in "account_entry[price]", with: 214.23
|
|
|
|
|
|
|
|
click_button "Add transaction"
|
|
|
|
|
|
|
|
visit_account_trades
|
|
|
|
|
|
|
|
within_trades do
|
2024-11-27 16:01:50 -05:00
|
|
|
assert_text "Buy 10.0 shares of AAPL"
|
2024-10-28 15:49:19 -04:00
|
|
|
assert_text "Buy #{shares_qty} shares of AAPL"
|
2024-08-09 11:22:57 -04:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
test "can create sell transaction" do
|
2024-12-12 08:56:52 -05:00
|
|
|
aapl = @account.holdings.find { |h| h.security.ticker == "AAPL" }
|
2024-08-09 11:22:57 -04:00
|
|
|
|
|
|
|
open_new_trade_modal
|
|
|
|
|
|
|
|
select "Sell", from: "Type"
|
|
|
|
fill_in "Ticker symbol", with: aapl.ticker
|
2024-10-28 15:49:19 -04:00
|
|
|
select_combobox_option(aapl.security.name)
|
2024-08-09 11:22:57 -04:00
|
|
|
fill_in "Date", with: Date.current
|
|
|
|
fill_in "Quantity", with: aapl.qty
|
|
|
|
fill_in "account_entry[price]", with: 215.33
|
|
|
|
|
|
|
|
click_button "Add transaction"
|
|
|
|
|
|
|
|
visit_account_trades
|
|
|
|
|
|
|
|
within_trades do
|
|
|
|
assert_text "Sell #{aapl.qty} shares of AAPL"
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
private
|
|
|
|
|
|
|
|
def open_new_trade_modal
|
2024-12-10 17:41:20 -05:00
|
|
|
click_on "New transaction"
|
2024-08-09 11:22:57 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
def within_trades(&block)
|
2024-11-04 20:27:31 -05:00
|
|
|
within "#" + dom_id(@account, "entries"), &block
|
2024-08-09 11:22:57 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
def visit_account_trades
|
2024-12-10 17:41:20 -05:00
|
|
|
visit account_path(@account, tab: "activity")
|
|
|
|
end
|
|
|
|
|
|
|
|
def visit_account_portfolio
|
2024-11-04 20:27:31 -05:00
|
|
|
visit account_path(@account)
|
2024-08-09 11:22:57 -04:00
|
|
|
end
|
2024-10-28 15:49:19 -04:00
|
|
|
|
|
|
|
def select_combobox_option(text)
|
|
|
|
within "#account_entry_ticker-hw-listbox" do
|
|
|
|
find("li", text: text).click
|
|
|
|
end
|
|
|
|
end
|
2024-08-09 11:22:57 -04:00
|
|
|
end
|