io/internal/greeter/greeter_test.go
Go Tools 8b2c20bfe4 init: bootstrap io from go-template untagged
Initialized from gitea.djmil.dev/go/template @ untagged.
Module renamed to gitea.djmil.dev/go/io.
2026-04-08 18:55:13 +00:00

51 lines
1.5 KiB
Go

package greeter_test
import (
"testing"
"gitea.djmil.dev/go/io/internal/greeter"
"gitea.djmil.dev/go/io/internal/logger"
"gitea.djmil.dev/go/io/internal/testutil"
"gitea.djmil.dev/go/io/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!")
}