1
0
Fork 0
mirror of https://github.com/maybe-finance/maybe.git synced 2025-07-24 15:49:39 +02:00

Test fixes

This commit is contained in:
Zach Gollwitzer 2025-07-08 13:03:40 -04:00
parent 018310d4d1
commit 2e09d1a8c0
10 changed files with 126 additions and 25 deletions

View file

@ -40,7 +40,7 @@ module AccountableResource
@account.lock_saved_attributes!
respond_to do |format|
format.html { redirect_to account_params[:return_to].presence || @account, notice: accountable_type.name.underscore.humanize + " account created" }
format.html { redirect_to account_params[:return_to].presence || account_path(@account), notice: accountable_type.name.underscore.humanize + " account created" }
format.turbo_stream { stream_redirect_to account_params[:return_to].presence || account_path(@account), notice: accountable_type.name.underscore.humanize + " account created" }
end
end
@ -67,8 +67,8 @@ module AccountableResource
@account.lock_saved_attributes!
respond_to do |format|
format.html { redirect_back_or_to @account, notice: accountable_type.name.underscore.humanize + " account updated" }
format.turbo_stream { stream_redirect_to @account, notice: accountable_type.name.underscore.humanize + " account updated" }
format.html { redirect_back_or_to account_path(@account), notice: accountable_type.name.underscore.humanize + " account updated" }
format.turbo_stream { stream_redirect_to account_path(@account), notice: accountable_type.name.underscore.humanize + " account updated" }
end
end

View file

@ -20,7 +20,10 @@ class AccountImport < Import
currency: row.currency,
date: Date.current,
name: "Imported account value",
entryable: Valuation.new
entryable: Valuation.new(
balance: row.amount.to_d,
cash_balance: row.amount.to_d
)
)
end
end

View file

@ -14,17 +14,17 @@
<%= form.text_field :name, placeholder: t(".name_placeholder"), required: "required", label: t(".name_label") %>
<% unless account.linked? %>
<%= form.money_field :balance,
label: t(".balance"),
required: true,
<%= form.money_field :balance,
label: t(".balance"),
required: true,
default_currency: Current.family.currency,
label_tooltip: "The current balance or value of the account, which is typically the balance reported by your financial institution." %>
<% unless account.persisted? %>
<%= form.date_field :tracking_start_date,
label: "Tracking start date",
required: true,
value: 2.years.ago.to_date,
<%= form.date_field :tracking_start_date,
label: "Tracking start date",
required: true,
value: 2.years.ago.to_date,
label_tooltip: "The date we will start tracking the balance for this account. If you're not sure, we recommend using the default of 2 years ago so net worth graphs have adequate historical data." %>
<% end %>
<% end %>

View file

@ -8,26 +8,26 @@ class Api::V1::TransactionsControllerTest < ActionDispatch::IntegrationTest
@family = @user.family
@account = @family.accounts.first
@transaction = @family.transactions.first
# Destroy existing active API keys to avoid validation errors
@user.api_keys.active.destroy_all
# Create fresh API keys instead of using fixtures to avoid parallel test conflicts
@api_key = ApiKey.create!(
user: @user,
name: "Test Read-Write Key",
scopes: ["read_write"],
scopes: [ "read_write" ],
display_key: "test_rw_#{SecureRandom.hex(8)}"
)
@read_only_api_key = ApiKey.create!(
user: @user,
name: "Test Read-Only Key",
scopes: ["read"],
name: "Test Read-Only Key",
scopes: [ "read" ],
display_key: "test_ro_#{SecureRandom.hex(8)}",
source: "mobile" # Use different source to allow multiple keys
)
# Clear any existing rate limit data
Redis.new.del("api_rate_limit:#{@api_key.id}")
Redis.new.del("api_rate_limit:#{@read_only_api_key.id}")

View file

@ -11,8 +11,8 @@ class CreditCardsControllerTest < ActionDispatch::IntegrationTest
test "creates with credit card details" do
assert_difference -> { Account.count } => 1,
-> { CreditCard.count } => 1,
-> { Valuation.count } => 2,
-> { Entry.count } => 2 do
-> { Valuation.count } => 1,
-> { Entry.count } => 1 do
post credit_cards_path, params: {
account: {
name: "New Credit Card",

View file

@ -11,8 +11,8 @@ class LoansControllerTest < ActionDispatch::IntegrationTest
test "creates with loan details" do
assert_difference -> { Account.count } => 1,
-> { Loan.count } => 1,
-> { Valuation.count } => 2,
-> { Entry.count } => 2 do
-> { Valuation.count } => 1,
-> { Entry.count } => 1 do
post loans_path, params: {
account: {
name: "New Loan",

View file

@ -23,7 +23,7 @@ class ValuationsControllerTest < ActionDispatch::IntegrationTest
end
created_entry = Entry.order(created_at: :desc).first
assert_equal "Manual account value update", created_entry.name
assert_equal "Manual value update", created_entry.name
assert_equal Date.current, created_entry.date
assert_equal account.balance + 100, created_entry.amount_money.to_f

View file

@ -11,8 +11,8 @@ class VehiclesControllerTest < ActionDispatch::IntegrationTest
test "creates with vehicle details" do
assert_difference -> { Account.count } => 1,
-> { Vehicle.count } => 1,
-> { Valuation.count } => 2,
-> { Entry.count } => 2 do
-> { Valuation.count } => 1,
-> { Entry.count } => 1 do
post vehicles_path, params: {
account: {
name: "Vehicle",

View file

@ -7,3 +7,8 @@ trade:
family: dylan_family
type: TradeImport
status: pending
account:
family: dylan_family
type: AccountImport
status: pending

View file

@ -0,0 +1,93 @@
require "test_helper"
class AccountImportTest < ActiveSupport::TestCase
include ActiveJob::TestHelper, ImportInterfaceTest
setup do
@subject = @import = imports(:account)
end
test "import creates accounts with valuations" do
import_csv = <<~CSV
type,name,amount,currency
depository,Main Checking,1000.00,USD
depository,Savings Account,5000.00,USD
CSV
@import.update!(
raw_file_str: import_csv,
entity_type_col_label: "type",
name_col_label: "name",
amount_col_label: "amount",
currency_col_label: "currency"
)
@import.generate_rows_from_csv
# Create mappings for account types
@import.mappings.create! key: "depository", value: "Depository", type: "Import::AccountTypeMapping"
@import.reload
# Store initial counts
initial_account_count = Account.count
initial_entry_count = Entry.count
initial_valuation_count = Valuation.count
# Perform the import
@import.publish
# Check if import succeeded
if @import.failed?
fail "Import failed with error: #{@import.error}"
end
assert_equal "complete", @import.status
# Check the differences
assert_equal initial_account_count + 2, Account.count, "Expected 2 new accounts"
assert_equal initial_entry_count + 2, Entry.count, "Expected 2 new entries"
assert_equal initial_valuation_count + 2, Valuation.count, "Expected 2 new valuations"
# Verify accounts were created correctly
accounts = @import.accounts.order(:name)
assert_equal [ "Main Checking", "Savings Account" ], accounts.pluck(:name)
assert_equal [ 1000.00, 5000.00 ], accounts.map { |a| a.balance.to_f }
# Verify valuations were created with correct fields
accounts.each do |account|
valuation = account.valuations.last
assert_not_nil valuation
assert_equal account.balance, valuation.balance
assert_equal account.balance, valuation.cash_balance
assert_equal "recon", valuation.kind
end
end
test "column_keys returns expected keys" do
assert_equal %i[entity_type name amount currency], @import.column_keys
end
test "required_column_keys returns expected keys" do
assert_equal %i[name amount], @import.required_column_keys
end
test "mapping_steps returns account type mapping" do
assert_equal [ Import::AccountTypeMapping ], @import.mapping_steps
end
test "dry_run returns expected counts" do
@import.rows.create!(
entity_type: "depository",
name: "Test Account",
amount: "1000.00",
currency: "USD"
)
assert_equal({ accounts: 1 }, @import.dry_run)
end
test "max_row_count is limited to 50" do
assert_equal 50, @import.max_row_count
end
end