//go:build go1.21 package fauna_test import ( "bytes" "context" "fmt" "net/http" "os" "testing" "github.com/fauna/fauna-go/v3" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) func TestSlogLogger(t *testing.T) { t.Setenv(fauna.EnvFaunaEndpoint, fauna.EndpointLocal) t.Setenv(fauna.EnvFaunaSecret, "secret") query, queryErr := fauna.FQL(`42`, nil) require.NoError(t, queryErr) t.Run("should be able to use the default logger", func(t *testing.T) { output, pipeErr := pipeStdOut(func() { t.Setenv(fauna.EnvFaunaDebug, "-4") client, clientErr := fauna.NewDefaultClient() require.NoError(t, clientErr) _, err := client.Query(query) require.NoError(t, err) }) require.NoError(t, pipeErr) require.NotEmpty(t, output) t.Logf("output: %s", string(output)) }) t.Run("no output with warn level", func(t *testing.T) { t.Setenv(fauna.EnvFaunaDebug, "1") client, clientErr := fauna.NewDefaultClient() require.NoError(t, clientErr) output, pipeErr := pipeStdOut(func() { _, err := client.Query(query) require.NoError(t, err) }) require.NoError(t, pipeErr) require.Empty(t, output) }) t.Run("should be able to provide a custom logger", func(t *testing.T) { buf := new(bytes.Buffer) client := fauna.NewClient("secret", fauna.DefaultTimeouts(), fauna.WithLogger(CustomLogger{ Output: buf, }), fauna.URL(fauna.EndpointLocal)) assert.NotNil(t, client) res, err := client.Query(query) require.NoError(t, err) var value int err = res.Unmarshal(&value) require.NoError(t, err) require.Equal(t, 42, value) assert.NotEmpty(t, buf) }) } type CustomLogger struct { fauna.Logger Output *bytes.Buffer } func (c CustomLogger) Info(msg string, _ ...any) { _, _ = fmt.Fprint(os.Stdout, msg) } func (c CustomLogger) LogResponse(_ context.Context, requestBody []byte, res *http.Response) { _, _ = fmt.Fprintf(c.Output, "URL: %s\nStatus: %s\nBody: %s\n", res.Request.URL.String(), res.Status, string(requestBody)) }