From a5861f55855dfbe5ce343d4d1896121ccf14471d Mon Sep 17 00:00:00 2001 From: Philipp Rothmann <16109235+yksflip@users.noreply.github.com> Date: Fri, 8 Mar 2024 09:37:30 +0100 Subject: [PATCH] fix(finance): ordergroup overview total balances (#1051) * Introduce tests for deleted ordergroup and foodcoop transactions. * Use the filtered @ordergroups for the @total_balances calculation * This is also faster as the sum_of_class of the ordergroups are already precomputed. --- .../finance/ordergroups_controller.rb | 4 +- .../finance/ordergroups_controller_spec.rb | 44 +++++++++++++++++-- 2 files changed, 42 insertions(+), 6 deletions(-) diff --git a/app/controllers/finance/ordergroups_controller.rb b/app/controllers/finance/ordergroups_controller.rb index 58ba0c364..1804711e1 100644 --- a/app/controllers/finance/ordergroups_controller.rb +++ b/app/controllers/finance/ordergroups_controller.rb @@ -13,8 +13,8 @@ def index @ordergroups = @ordergroups.where('groups.name LIKE ?', "%#{params[:query]}%") unless params[:query].nil? @ordergroups = @ordergroups.page(params[:page]).per(@per_page) - @total_balances = FinancialTransactionClass.sorted.each_with_object({}) do |c, tmp| - tmp[c.id] = c.financial_transactions.reduce(0) { |sum, t| sum + t.amount } + @total_balances = FinancialTransactionClass.sorted.each_with_object({}) do |transaction_class, total_balances| + total_balances[transaction_class.id] = @ordergroups.reduce(0) { |sum, o| o["sum_of_class_#{transaction_class.id}"] + sum } end end end diff --git a/spec/controllers/finance/ordergroups_controller_spec.rb b/spec/controllers/finance/ordergroups_controller_spec.rb index 73c1f3bb0..db8e53020 100644 --- a/spec/controllers/finance/ordergroups_controller_spec.rb +++ b/spec/controllers/finance/ordergroups_controller_spec.rb @@ -25,9 +25,13 @@ end let(:fin_trans3) do create(:financial_transaction, - user: user, amount: 42.23, - ordergroup: user.ordergroup, + financial_transaction_type: fin_trans_type2) + end + let(:fin_trans_foodcoop) do + create(:financial_transaction, + amount: 111, + ordergroup: nil, financial_transaction_type: fin_trans_type2) end @@ -49,9 +53,41 @@ get_with_defaults :index expect(response).to have_http_status(:success) - assert_select "#total_balance#{fin_trans_type1.financial_transaction_class_id}", number_to_currency(300) - assert_select "#total_balance#{fin_trans_type2.financial_transaction_class_id}", number_to_currency(42.23) + assert_total_balance_of_transaction_type1(300) + assert_total_balance_of_transaction_type2(42.23) + assert_total_balance_sum(342.23) + end + + it 'ignores deleted ordergroups' do + user.ordergroup.mark_as_deleted + get_with_defaults :index + assert_total_balance_of_transaction_type1(0) + assert_total_balance_of_transaction_type2(42.23) + assert_select '#total_balance_sum', number_to_currency(42.23) + end + + it 'ignores foodcoop transactions' do + fin_trans_foodcoop + get_with_defaults :index + assert_total_balance_of_transaction_type1(300) + assert_total_balance_of_transaction_type2(42.23) assert_select '#total_balance_sum', number_to_currency(342.23) end end + + def assert_total_balance_sum(amount) + assert_select '#total_balance_sum', number_to_currency(amount) + end + + def assert_total_balance_of_transaction_type1(amount) + assert_total_balanceof_transaction_type(fin_trans_type1.financial_transaction_class_id, amount) + end + + def assert_total_balance_of_transaction_type2(amount) + assert_total_balanceof_transaction_type(fin_trans_type2.financial_transaction_class_id, amount) + end + + def assert_total_balanceof_transaction_type(type, amount) + assert_select "#total_balance#{type}", number_to_currency(amount) + end end