portainer/api/http/handler/file/handler_test.go

71 lines
1.8 KiB
Go

package file_test
import (
"net/http"
"net/http/httptest"
"testing"
"github.com/portainer/portainer/api/http/handler/file"
"github.com/stretchr/testify/require"
)
func TestNormalServe(t *testing.T) {
handler := file.NewHandler("", false, func() bool { return false })
require.NotNil(t, handler)
request := func(path string) (*http.Request, *httptest.ResponseRecorder) {
rr := httptest.NewRecorder()
req := httptest.NewRequest(http.MethodGet, path, nil)
handler.ServeHTTP(rr, req)
return req, rr
}
_, rr := request("/timeout.html")
require.Equal(t, http.StatusTemporaryRedirect, rr.Result().StatusCode)
loc, err := rr.Result().Location()
require.NoError(t, err)
require.NotNil(t, loc)
require.Equal(t, "/", loc.Path)
_, rr = request("/")
require.Equal(t, http.StatusOK, rr.Result().StatusCode)
}
func TestPermissionsPolicyHeader(t *testing.T) {
handler := file.NewHandler("", false, func() bool { return false })
require.NotNil(t, handler)
test := func(path string, exist bool) {
rr := httptest.NewRecorder()
req := httptest.NewRequest(http.MethodGet, path, nil)
handler.ServeHTTP(rr, req)
require.Equal(t, exist, rr.Result().Header.Get("Permissions-Policy") != "")
}
test("/", true)
test("/index.html", true)
test("/api", false)
test("/an/image.png", false)
}
func TestRedirectInstanceDisabled(t *testing.T) {
handler := file.NewHandler("", false, func() bool { return true })
require.NotNil(t, handler)
test := func(path string) {
rr := httptest.NewRecorder()
req := httptest.NewRequest(http.MethodGet, path, nil)
handler.ServeHTTP(rr, req)
require.Equal(t, http.StatusTemporaryRedirect, rr.Result().StatusCode)
loc, err := rr.Result().Location()
require.NoError(t, err)
require.NotNil(t, loc)
require.Equal(t, "/timeout.html", loc.Path)
}
test("/")
test("/index.html")
}