package pointers import ( "testing" ) func TestWallet(t *testing.T) { assertBalance := func(t testing.TB, w Wallet, want Bitcoin) { t.Helper() balance := w.Balance() if balance != want { t.Errorf("got %s want %s", balance, want) } } t.Run("Deposit", func(t *testing.T) { wallet := Wallet{} wallet.Deposit(Bitcoin(10)) want := Bitcoin(10) assertBalance(t, wallet, want) }) t.Run("Withdraw", func(t *testing.T) { wallet := Wallet{balance: Bitcoin(20)} wallet.Withdraw(Bitcoin(10)) want := Bitcoin(10) assertBalance(t, wallet, want) }) assertError := func(t testing.TB, got, want error) { t.Helper() if got == nil { t.Fatal("wanted an error but didn't get one") } if got != want { t.Errorf("got %q, want %q", got, want) } } t.Run("Withdraw insufficient funds", func(t *testing.T) { startingBalance := Bitcoin(20) wallet := Wallet{startingBalance} err := wallet.Withdraw(Bitcoin(100)) assertError(t, err, ErrInsufficientFunds) assertBalance(t, wallet, startingBalance) }) }