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!") }