diff --git a/app/controllers/valuations_controller.rb b/app/controllers/valuations_controller.rb index 32ec2df74..5a2966167 100644 --- a/app/controllers/valuations_controller.rb +++ b/app/controllers/valuations_controller.rb @@ -7,6 +7,12 @@ class ValuationsController < ApplicationController @entry = @account.entries.build(entry_params.merge(currency: @account.currency)) + if entry_params[:amount].blank? + @error_message = t("valuations.errors.amount_required") + render :new, status: :unprocessable_entity + return + end + @reconciliation_dry_run = @entry.account.create_reconciliation( balance: entry_params[:amount], date: entry_params[:date], @@ -21,6 +27,13 @@ class ValuationsController < ApplicationController return unless require_account_permission!(@entry.account) @account = @entry.account + + if entry_params[:amount].blank? + @error_message = t("valuations.errors.amount_required") + render :show, status: :unprocessable_entity + return + end + @entry.assign_attributes(entry_params.merge(currency: @account.currency)) @reconciliation_dry_run = @entry.account.update_reconciliation( diff --git a/app/models/concerns/monetizable.rb b/app/models/concerns/monetizable.rb index e80fcb5f6..b5eb83886 100644 --- a/app/models/concerns/monetizable.rb +++ b/app/models/concerns/monetizable.rb @@ -7,7 +7,7 @@ module Monetizable define_method("#{field}_money") do |**args| value = self.send(field, **args) - return nil if value.nil? || monetizable_currency.nil? + return nil if value.blank? || monetizable_currency.nil? Money.new(value, monetizable_currency) end diff --git a/config/locales/views/valuations/en.yml b/config/locales/views/valuations/en.yml index 7b4ede9d4..f4a55767c 100644 --- a/config/locales/views/valuations/en.yml +++ b/config/locales/views/valuations/en.yml @@ -1,6 +1,8 @@ --- en: valuations: + errors: + amount_required: Amount is required form: amount: Amount submit: Add balance update diff --git a/test/controllers/valuations_controller_test.rb b/test/controllers/valuations_controller_test.rb index 7827906b8..b7151e606 100644 --- a/test/controllers/valuations_controller_test.rb +++ b/test/controllers/valuations_controller_test.rb @@ -50,4 +50,31 @@ class ValuationsControllerTest < ActionDispatch::IntegrationTest assert_equal 22000, @entry.amount assert_equal "Test notes", @entry.notes end + + test "confirm_create with blank amount returns unprocessable entity" do + account = accounts(:investment) + + post confirm_create_valuations_url, params: { + entry: { + amount: "", + date: Date.current.to_s, + account_id: account.id + } + } + + assert_response :unprocessable_entity + assert_match I18n.t("valuations.errors.amount_required"), response.body + end + + test "confirm_update with blank amount returns unprocessable entity" do + post confirm_update_valuation_url(@entry), params: { + entry: { + amount: "", + date: Date.current.to_s + } + } + + assert_response :unprocessable_entity + assert_match I18n.t("valuations.errors.amount_required"), response.body + end end