wallet: improve assertError again by creating a custom error type

This commit is contained in:
vinchent 2024-09-11 11:35:52 +02:00
parent 9a2478f947
commit 20606d3ee5
2 changed files with 24 additions and 22 deletions

View File

@ -7,6 +7,8 @@ import (
type Bitcoin int type Bitcoin int
var ErrInsufficientFunds = errors.New("cannot withdraw, insufficient funds")
func (b Bitcoin) String() string { func (b Bitcoin) String() string {
return fmt.Sprintf("%d BTC", b) return fmt.Sprintf("%d BTC", b)
} }
@ -21,7 +23,7 @@ func (w *Wallet) Deposit(amount Bitcoin) {
func (w *Wallet) Withdraw(amount Bitcoin) error { func (w *Wallet) Withdraw(amount Bitcoin) error {
if w.balance < amount { if w.balance < amount {
return errors.New("not enough to withdraw") return ErrInsufficientFunds
} }
w.balance -= amount w.balance -= amount
return nil return nil

View File

@ -3,26 +3,6 @@ package wallet
import "testing" import "testing"
func TestWallet(t *testing.T) { func TestWallet(t *testing.T) {
assertBalance := func(t testing.TB, wallet Wallet, want Bitcoin) {
t.Helper()
got := wallet.Balance()
if got != want {
t.Errorf("got %q, want %q", got, want)
}
}
assertError := func(t testing.TB, got error, want string) {
t.Helper()
if got == nil {
t.Fatal("didn't get an error but wanted one")
}
if got.Error() != want {
t.Errorf("got %q, want %q", got, want)
}
}
t.Run("deposit", func(t *testing.T) { t.Run("deposit", func(t *testing.T) {
wallet := Wallet{} wallet := Wallet{}
wallet.Deposit(10) wallet.Deposit(10)
@ -40,7 +20,27 @@ func TestWallet(t *testing.T) {
wallet := Wallet{balance: startingBalance} wallet := Wallet{balance: startingBalance}
err := wallet.Withdraw(100) err := wallet.Withdraw(100)
assertError(t, err, "not enough to withdraw") assertError(t, err, ErrInsufficientFunds)
assertBalance(t, wallet, startingBalance) assertBalance(t, wallet, startingBalance)
}) })
} }
func assertBalance(t testing.TB, wallet Wallet, want Bitcoin) {
t.Helper()
got := wallet.Balance()
if got != want {
t.Errorf("got %q, want %q", got, want)
}
}
func assertError(t testing.TB, got error, want error) {
t.Helper()
if got == nil {
t.Fatal("didn't get an error but wanted one")
}
if got != want {
t.Errorf("got %q, want %q", got, want)
}
}