go-template/internal/greeter/greeter_test.go
2026-03-05 21:52:10 +01:00

52 lines
1.7 KiB
Go

package greeter_test
import (
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"github.com/your-org/go-template/internal/greeter"
"github.com/your-org/go-template/internal/logger"
)
// ── Service (unit tests) ──────────────────────────────────────────────────────
func TestGreet(t *testing.T) {
svc := greeter.New(logger.NewNop())
t.Run("returns personalised greeting", func(t *testing.T) {
msg, err := svc.Greet("World")
require.NoError(t, err)
assert.Equal(t, "Hello, World!", msg)
})
t.Run("rejects empty name", func(t *testing.T) {
_, err := svc.Greet("")
require.Error(t, err)
assert.Contains(t, err.Error(), "name must not be empty")
})
}
// ── Mock usage example ────────────────────────────────────────────────────────
// The mock lives in mocks/greeter/mock_greeter.go and is generated by:
//
// make mocks
//
// This test shows how a *consumer* of the Greeter interface would use the mock.
// It lives here only for proximity to the interface definition — in a real
// project, consumer packages write their own tests with the mock.
func TestMockUsageExample(t *testing.T) {
// Import path when used in another package:
// mocks "github.com/your-org/go-template/mocks/greeter"
//
// mock := mocks.NewMockGreeter(t)
// mock.EXPECT().Greet("Alice").Return("Hello, Alice!", nil)
//
// result, err := someConsumer(mock)
// require.NoError(t, err)
// assert.Equal(t, "Hello, Alice!", result)
t.Skip("mock usage — see comment above for pattern")
}