mirror of
https://github.com/rjNemo/payit
synced 2026-06-06 02:16:40 +00:00
61 lines
1.5 KiB
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")
|
|
}
|
|
}
|