86 lines
2.5 KiB
Go
86 lines
2.5 KiB
Go
package main
|
|
|
|
import (
|
|
"errors"
|
|
"testing"
|
|
)
|
|
|
|
func TestBankAccountDepositErrors(t *testing.T) {
|
|
acc := NewBankAccount("Tester", 50.0)
|
|
|
|
errValid := acc.Deposit(25.0)
|
|
if errValid != nil || acc.Balance != 75.0 {
|
|
t.Errorf("Deposit(25) = %v, Balance = %.2f; erwartet nil, 75.00", errValid, acc.Balance)
|
|
}
|
|
|
|
errZero := acc.Deposit(0.0)
|
|
if !errors.Is(errZero, ErrInvalidAmount) {
|
|
t.Errorf("Deposit(0) = %v; erwartet ErrInvalidAmount", errZero)
|
|
}
|
|
|
|
errNeg := acc.Deposit(-10.0)
|
|
if !errors.Is(errNeg, ErrInvalidAmount) {
|
|
t.Errorf("Deposit(-10) = %v; erwartet ErrInvalidAmount", errNeg)
|
|
}
|
|
}
|
|
|
|
func TestBankAccountWithdrawErrors(t *testing.T) {
|
|
acc := NewBankAccount("Tester", 100.0)
|
|
|
|
errValid := acc.Withdraw(40.0)
|
|
if errValid != nil || acc.Balance != 60.0 {
|
|
t.Errorf("Withdraw(40) = %v, Balance = %.2f; erwartet nil, 60.00", errValid, acc.Balance)
|
|
}
|
|
|
|
errOver := acc.Withdraw(100.0)
|
|
if !errors.Is(errOver, ErrInsufficientFunds) {
|
|
t.Errorf("Withdraw(100) bei Stand 60 = %v; erwartet ErrInsufficientFunds", errOver)
|
|
}
|
|
|
|
errNeg := acc.Withdraw(-5.0)
|
|
if !errors.Is(errNeg, ErrInvalidAmount) {
|
|
t.Errorf("Withdraw(-5) = %v; erwartet ErrInvalidAmount", errNeg)
|
|
}
|
|
}
|
|
|
|
func TestCustomAPIError(t *testing.T) {
|
|
apiErr := &APIError{
|
|
StatusCode: 404,
|
|
Endpoint: "/api/v1/resource",
|
|
Details: "nicht gefunden",
|
|
}
|
|
|
|
expected := "HTTP 404 Fehler bei /api/v1/resource: nicht gefunden"
|
|
if apiErr.Error() != expected {
|
|
t.Errorf("APIError.Error() = %q; erwartet %q", apiErr.Error(), expected)
|
|
}
|
|
}
|
|
|
|
func TestExecuteRequestWrapping(t *testing.T) {
|
|
// 1. Ungültiges Token
|
|
_, errAuth := ExecuteRequest("/data", "bad-token")
|
|
if errAuth == nil {
|
|
t.Fatalf("ExecuteRequest mit falschem Token sollte Fehler liefern")
|
|
}
|
|
var apiErr *APIError
|
|
if !errors.As(errAuth, &apiErr) {
|
|
t.Errorf("Fehler sollte Typ *APIError sein, ist aber %T", errAuth)
|
|
} else if apiErr.StatusCode != 401 {
|
|
t.Errorf("APIError StatusCode = %d; erwartet 401", apiErr.StatusCode)
|
|
}
|
|
|
|
// 2. Datenbank Timeout Error
|
|
_, errTimeout := ExecuteRequest("/error", "valid-token-123")
|
|
if errTimeout == nil {
|
|
t.Fatalf("ExecuteRequest('/error') sollte Fehler liefern")
|
|
}
|
|
if errTimeout.Error() != "interner fehler: datenbank timeout" {
|
|
t.Errorf("Fehlermeldung = %q; erwartet 'interner fehler: datenbank timeout'", errTimeout.Error())
|
|
}
|
|
|
|
// 3. Erfolgreicher Request
|
|
res, errSuccess := ExecuteRequest("/users", "valid-token-123")
|
|
if errSuccess != nil || res != "200 OK: Daten für /users" {
|
|
t.Errorf("ExecuteRequest() = (%q, %v); erwartet ('200 OK: Daten für /users', nil)", res, errSuccess)
|
|
}
|
|
}
|