payit/internal/payments/service/checkout_test.go

61 lines
1.5 KiB
Go

package service
import (
"context"
"errors"
"testing"
"github.com/rjNemo/payit/internal/payments"
)
type fakeDriver struct {
lastReq payments.CheckoutSessionRequest
result payments.CheckoutSessionResult
err error
}
func (f *fakeDriver) CreateSession(ctx context.Context, req payments.CheckoutSessionRequest) (payments.CheckoutSessionResult, error) {
f.lastReq = req
if f.err != nil {
return payments.CheckoutSessionResult{}, f.err
}
return f.result, nil
}
func TestCheckoutService_DefaultQuantity(t *testing.T) {
drv := &fakeDriver{}
svc := NewCheckoutService(drv)
_, err := svc.CreateSession(context.Background(), payments.CheckoutSessionRequest{})
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if drv.lastReq.Quantity != 1 {
t.Fatalf("expected default quantity 1, got %d", drv.lastReq.Quantity)
}
}
func TestCheckoutService_PreservesQuantity(t *testing.T) {
drv := &fakeDriver{}
svc := NewCheckoutService(drv)
_, err := svc.CreateSession(context.Background(), payments.CheckoutSessionRequest{Quantity: 5})
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if drv.lastReq.Quantity != 5 {
t.Fatalf("expected quantity 5, got %d", drv.lastReq.Quantity)
}
}
func TestCheckoutService_PropagatesError(t *testing.T) {
drv := &fakeDriver{err: errors.New("driver failed")}
svc := NewCheckoutService(drv)
_, err := svc.CreateSession(context.Background(), payments.CheckoutSessionRequest{Quantity: 2})
if err == nil {
t.Fatal("expected error from driver")
}
}