51 lines
1.6 KiB
Go
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!")
|
|
}
|