mirror of
https://github.com/maybe-finance/maybe.git
synced 2025-07-19 13:19:39 +02:00
Refactor sparkline error handling and improve series pre-loading
- Added pre-loading of series in AccountableSparklinesController and AccountsController to catch errors before rendering. - Updated the accounts view to use the pre-loaded sparkline series variable. - Adjusted the test for graceful handling of errors in the sparkline series method. This enhances the robustness of the sparkline feature and improves error visibility in the UI.
This commit is contained in:
parent
6f67827f14
commit
e7f1506728
5 changed files with 33 additions and 9 deletions
|
@ -2,6 +2,7 @@ class AccountableSparklinesController < ApplicationController
|
|||
def show
|
||||
@accountable = Accountable.from_type(params[:accountable_type]&.classify)
|
||||
|
||||
# Pre-load the series to catch any errors before rendering
|
||||
@series = Rails.cache.fetch(cache_key) do
|
||||
account_ids = family.accounts.active.where(accountable_type: @accountable.name).pluck(:id)
|
||||
|
||||
|
|
|
@ -23,6 +23,8 @@ class AccountsController < ApplicationController
|
|||
end
|
||||
|
||||
def sparkline
|
||||
# Pre-load the sparkline series to catch any errors before rendering
|
||||
@sparkline_series = @account.sparkline_series
|
||||
render layout: false
|
||||
rescue => e
|
||||
Rails.logger.error "Sparkline error for account #{@account.id}: #{e.message}"
|
||||
|
|
|
@ -2,11 +2,11 @@
|
|||
<%= turbo_frame_tag dom_id(@account, :sparkline) do %>
|
||||
<div class="flex items-center justify-end gap-1">
|
||||
<div class="w-8 h-5">
|
||||
<%= render "shared/sparkline", id: dom_id(@account, :sparkline_chart), series: @account.sparkline_series %>
|
||||
<%= render "shared/sparkline", id: dom_id(@account, :sparkline_chart), series: @sparkline_series %>
|
||||
</div>
|
||||
|
||||
<%= tag.p @account.sparkline_series.trend.percent_formatted,
|
||||
style: "color: #{@account.sparkline_series.trend.color}",
|
||||
<%= tag.p @sparkline_series.trend.percent_formatted,
|
||||
style: "color: #{@sparkline_series.trend.color}",
|
||||
class: "font-mono text-right text-xs font-medium text-primary" %>
|
||||
</div>
|
||||
<% end %>
|
||||
|
|
21
test/controllers/accountable_sparklines_controller_test.rb
Normal file
21
test/controllers/accountable_sparklines_controller_test.rb
Normal file
|
@ -0,0 +1,21 @@
|
|||
require "test_helper"
|
||||
|
||||
class AccountableSparklinesControllerTest < ActionDispatch::IntegrationTest
|
||||
setup do
|
||||
sign_in @user = users(:family_admin)
|
||||
end
|
||||
|
||||
test "should get show for depository" do
|
||||
get accountable_sparkline_url("depository")
|
||||
assert_response :success
|
||||
end
|
||||
|
||||
test "should handle sparkline errors gracefully" do
|
||||
# Mock an error in the balance_series method
|
||||
Balance::ChartSeriesBuilder.any_instance.stubs(:balance_series).raises(StandardError.new("Test error"))
|
||||
|
||||
get accountable_sparkline_url("depository")
|
||||
assert_response :success
|
||||
assert_match /Error/, response.body
|
||||
end
|
||||
end
|
|
@ -27,11 +27,11 @@ class AccountsControllerTest < ActionDispatch::IntegrationTest
|
|||
end
|
||||
|
||||
test "should handle sparkline errors gracefully" do
|
||||
# Mock an error in the sparkline_series method
|
||||
@account.stubs(:sparkline_series).raises(StandardError.new("Test error"))
|
||||
# Mock an error in the balance_series method to bypass the rescue in sparkline_series
|
||||
Balance::ChartSeriesBuilder.any_instance.stubs(:balance_series).raises(StandardError.new("Test error"))
|
||||
|
||||
get sparkline_account_url(@account)
|
||||
assert_response :success
|
||||
assert_match /Error/, response.body
|
||||
end
|
||||
get sparkline_account_url(@account)
|
||||
assert_response :success
|
||||
assert_match /Error/, response.body
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue