From cac9e16c1704d4661fd3a8d4bafc9f1247b90886 Mon Sep 17 00:00:00 2001 From: Peng DU Date: Tue, 5 Jul 2016 10:38:39 +0200 Subject: [PATCH] cant debit/credit a negative --- app/models/wallet.rb | 14 ++++++++++---- test/models/wallet_test.rb | 11 +++++++++++ 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/app/models/wallet.rb b/app/models/wallet.rb index 8c2374e64..17483c6b4 100644 --- a/app/models/wallet.rb +++ b/app/models/wallet.rb @@ -5,12 +5,18 @@ class Wallet < ActiveRecord::Base validates_numericality_of :amount, greater_than_or_equal_to: 0 def credit(amount) - self.amount += amount - save + if amount.is_a?(Numeric) and amount >= 0 + self.amount += amount + return save + end + false end def debit(amount) - self.amount -= amount - save + if amount.is_a?(Numeric) and amount >= 0 + self.amount -= amount + return save + end + false end end diff --git a/test/models/wallet_test.rb b/test/models/wallet_test.rb index ef4d6b52b..c557d58a7 100644 --- a/test/models/wallet_test.rb +++ b/test/models/wallet_test.rb @@ -25,4 +25,15 @@ class WalletTest < ActiveSupport::TestCase assert w.debit(5) assert_equal w.amount, expected_amount end + + test 'cant debit/credit a negative' do + w = Wallet.new + assert_not w.credit(-5) + assert_not w.debit(-5) + end + + test 'wallet amount cant < 0 after debit' do + w = Wallet.new + assert_not w.debit(5) + end end