package util

import (
	"compress/gzip"
	"github.com/stretchr/testify/require"
	"io"
	"net/http"
	"net/http/httptest"
	"testing"
)

func TestGzipHandler(t *testing.T) {
	s := Gzip(http.FileServer(http.FS(testFs)))

	rr := httptest.NewRecorder()
	req, _ := http.NewRequest("GET", "/embedfs/test.txt", nil)
	req.Header.Set("Accept-Encoding", "gzip, deflate")
	s.ServeHTTP(rr, req)
	require.Equal(t, 200, rr.Code)
	require.Equal(t, "gzip", rr.Header().Get("Content-Encoding"))
	require.Equal(t, "", rr.Header().Get("Content-Length"))

	gz, _ := gzip.NewReader(rr.Body)
	b, _ := io.ReadAll(gz)
	require.Equal(t, "This is a test file for embedfs_test.go\n", string(b))
}

func TestGzipHandler_NoGzip(t *testing.T) {
	s := Gzip(http.FileServer(http.FS(testFs)))

	rr := httptest.NewRecorder()
	req, _ := http.NewRequest("GET", "/embedfs/test.txt", nil)
	s.ServeHTTP(rr, req)
	require.Equal(t, 200, rr.Code)
	require.Equal(t, "", rr.Header().Get("Content-Encoding"))
	require.Equal(t, "40", rr.Header().Get("Content-Length"))

	b, _ := io.ReadAll(rr.Body)
	require.Equal(t, "This is a test file for embedfs_test.go\n", string(b))
}