64 lines
1.8 KiB
Go
64 lines
1.8 KiB
Go
package greeter_test
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
|
|
"gitea.djmil.dev/djmil/go-template/internal/greeter"
|
|
"gitea.djmil.dev/djmil/go-template/internal/logger"
|
|
)
|
|
|
|
// ── 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")
|
|
if err != nil {
|
|
t.Fatalf("unexpected error: %v", err)
|
|
}
|
|
if msg != "Hello, World!" {
|
|
t.Errorf("got %q, want %q", msg, "Hello, World!")
|
|
}
|
|
})
|
|
|
|
t.Run("rejects empty name", func(t *testing.T) {
|
|
_, err := svc.Greet("")
|
|
if err == nil {
|
|
t.Fatal("expected error, got nil")
|
|
}
|
|
if !strings.Contains(err.Error(), "name must not be empty") {
|
|
t.Errorf("error %q does not contain %q", err.Error(), "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) (string, error)
|
|
}
|
|
|
|
func (f *fakeGreeter) Greet(name string) (string, error) {
|
|
return f.greetFn(name)
|
|
}
|
|
|
|
func TestFakeUsageExample(t *testing.T) {
|
|
fake := &fakeGreeter{
|
|
greetFn: func(name string) (string, error) {
|
|
return "Hello, " + name + "!", nil
|
|
},
|
|
}
|
|
|
|
msg, err := fake.Greet("Alice")
|
|
if err != nil {
|
|
t.Fatalf("unexpected error: %v", err)
|
|
}
|
|
if msg != "Hello, Alice!" {
|
|
t.Errorf("got %q, want %q", msg, "Hello, Alice!")
|
|
}
|
|
}
|