template/internal/greeter/greeter_test.go
2026-04-07 20:32:27 +00:00

51 lines
1.6 KiB
Go

package greeter_test
import (
"testing"
"gitea.djmil.dev/go/template/internal/greeter"
"gitea.djmil.dev/go/template/internal/logger"
"gitea.djmil.dev/go/template/internal/testutil"
"gitea.djmil.dev/go/template/pkg/result"
)
// ── Service (unit tests) ──────────────────────────────────────────────────────
func TestGreet(t *testing.T) {
svc := greeter.New(logger.NewNop())
t.Run("returns personalized greeting", func(t *testing.T) {
msg, err := svc.Greet("World").Unwrap()
testutil.NoError(t, err)
testutil.Equal(t, msg, "Hello, World!")
})
t.Run("rejects empty name", func(t *testing.T) {
testutil.ErrorContains(t, svc.Greet("").Err(), "name must not be empty")
})
}
// ── Manual fake example ───────────────────────────────────────────────────────
// For consumers that depend on the Greeter interface, write a manual fake.
// No code generation required — just implement the interface directly.
type fakeGreeter struct {
greetFn func(name string) result.Expect[string]
}
func (f *fakeGreeter) Greet(name string) result.Expect[string] {
return f.greetFn(name)
}
func TestFakeUsageExample(t *testing.T) {
fake := &fakeGreeter{
greetFn: func(name string) result.Expect[string] {
return result.Ok("Hello, " + name + "!")
},
}
msg, err := fake.Greet("Alice").Unwrap()
testutil.NoError(t, err)
testutil.Equal(t, msg, "Hello, Alice!")
}