package log

import (
	"bytes"
	"strings"
	"testing"

	"github.com/rs/zerolog"
	"github.com/stretchr/testify/assert"
)

func TestHTTPHeaders(t *testing.T) {
	t.Parallel()

	type A = []string
	type M = map[string]string

	t.Run("all", func(t *testing.T) {
		t.Parallel()

		var buf bytes.Buffer
		log := zerolog.New(&buf)
		evt := log.Info()
		evt = HTTPHeaders(evt, A{"headers"}, M{
			"a": "1",
			"b": "2",
			"c": "3",
		})
		evt.Send()

		assert.Equal(t, `{"level":"info","headers":{"A":"1","B":"2","C":"3"}}`, strings.TrimSpace(buf.String()))
	})
	t.Run("none", func(t *testing.T) {
		t.Parallel()

		var buf bytes.Buffer
		log := zerolog.New(&buf)
		evt := log.Info()
		evt = HTTPHeaders(evt, A{"a", "b", "c"}, M{
			"a": "1",
			"b": "2",
			"c": "3",
		})
		evt.Send()

		assert.Equal(t, `{"level":"info"}`, strings.TrimSpace(buf.String()))
	})
	t.Run("two", func(t *testing.T) {
		t.Parallel()

		var buf bytes.Buffer
		log := zerolog.New(&buf)
		evt := log.Info()
		evt = HTTPHeaders(evt, A{"headers.a", "headers.C"}, M{
			"a": "1",
			"b": "2",
			"c": "3",
		})
		evt.Send()

		assert.Equal(t, `{"level":"info","headers":{"A":"1","C":"3"}}`, strings.TrimSpace(buf.String()))
	})
}