package downloader

import (
	"io"
	"strings"
	"testing"

	"github.com/stretchr/testify/require"
)

func TestDetector(t *testing.T) {
	txtContentType := "text/plain; charset=utf-8"
	sb := strings.Builder{}
	for i := 0; i < 10; i++ {
		sb.WriteString("Some txt content. Content-Type must be detected properly by detector.")
	}

	for _, tc := range []struct {
		Name        string
		ContentType string
		Expected    string
	}{
		{
			Name:        "less than 512b",
			ContentType: txtContentType,
			Expected:    sb.String()[:256],
		},
		{
			Name:        "more than 512b",
			ContentType: txtContentType,
			Expected:    sb.String(),
		},
	} {
		t.Run(tc.Name, func(t *testing.T) {
			contentType, data, err := readContentType(uint64(len(tc.Expected)),
				func(sz uint64) (io.Reader, error) {
					return strings.NewReader(tc.Expected), nil
				},
			)

			require.NoError(t, err)
			require.Equal(t, tc.ContentType, contentType)
			require.True(t, strings.HasPrefix(tc.Expected, string(data)))
		})
	}
}