1
0
mirror of https://github.com/LaCasemate/fab-manager.git synced 2024-11-29 10:24:20 +01:00
fab-manager/test/services/wallet_service_test.rb

65 lines
2.3 KiB
Ruby

# frozen_string_literal: true
require 'test_helper'
class WalletServiceTest < ActiveSupport::TestCase
setup do
@admin = User.find_by(username: 'admin')
@jdupond = User.find_by(username: 'jdupond')
@jdupond_wallet = @jdupond.wallet
@vlonchamp = User.find_by(username: 'vlonchamp')
@vlonchamp_wallet = @vlonchamp.wallet
end
test 'admin can credit a wallet' do
service = WalletService.new(user: @admin, wallet: @jdupond_wallet)
expected_amount = @jdupond_wallet.amount + 5
assert service.credit(5)
assert_equal @jdupond_wallet.amount, expected_amount
end
test 'create a credit transaction after credit amount to wallet' do
service = WalletService.new(user: @admin, wallet: @jdupond_wallet)
expected_amount = @jdupond_wallet.amount + 10
assert_equal 0, @jdupond_wallet.wallet_transactions.count
transaction = service.credit(10)
@jdupond_wallet.reload
assert transaction
assert_equal @jdupond_wallet.amount, expected_amount
assert_equal transaction.transaction_type, 'credit'
assert_equal transaction.amount, 10
assert_equal transaction.user, @admin
assert_equal transaction.wallet, @jdupond_wallet
end
test 'create a debit transaction after debit amount to wallet' do
service = WalletService.new(user: @vlonchamp, wallet: @vlonchamp_wallet)
expected_amount = @vlonchamp_wallet.amount - 5
transaction = service.debit(5)
@vlonchamp_wallet.reload
assert transaction
assert_equal @vlonchamp_wallet.amount, expected_amount
assert_equal transaction.transaction_type, 'debit'
assert_equal transaction.amount, 5
assert_equal transaction.user, @vlonchamp
assert_equal transaction.wallet, @vlonchamp_wallet
end
test 'dont debit amount > wallet amount' do
service = WalletService.new(user: @vlonchamp, wallet: @vlonchamp_wallet)
expected_amount = @vlonchamp_wallet.amount
service.debit(100)
@vlonchamp_wallet.reload
assert_equal @vlonchamp_wallet.amount, expected_amount
end
test 'rollback debited amount if has an error when create wallet transaction' do
service = WalletService.new(wallet: @vlonchamp_wallet)
expected_amount = @vlonchamp_wallet.amount
transaction = service.debit('error')
@vlonchamp_wallet.reload
assert_equal expected_amount, @vlonchamp_wallet.amount
assert_not transaction
end
end