This repository has been archived on 2023-05-01. You can view files and clone it, but cannot push or open issues or pull requests.
gus/contrib/fs/file_test.go

81 lines
1.6 KiB
Go

package fs_test
import (
"context"
"io"
"net/url"
"os"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"tildegit.org/tjp/gus"
"tildegit.org/tjp/gus/contrib/fs"
"tildegit.org/tjp/gus/gemini"
)
func TestFileHandler(t *testing.T) {
handler := fs.GeminiFileHandler(os.DirFS("testdata"))
tests := []struct {
url string
status gus.Status
meta string
body string
}{
{
url: "gemini://localhost/d",
status: gemini.StatusNotFound,
},
{
url: "gemini://localhost/d/",
status: gemini.StatusNotFound,
},
{
url: "gemini://localhost/d/index.gmi",
status: gemini.StatusSuccess,
meta: "text/gemini",
body: "# This is d\n",
},
{
url: "gemini://localhost/a/b",
status: gemini.StatusSuccess,
meta: "application/octet-stream",
body: "this is file b\n",
},
{
url: "gemini://localhost/a/c.html",
status: gemini.StatusSuccess,
meta: "text/html; charset=utf-8",
body: "",
},
}
for _, test := range tests {
t.Run(test.url, func(t *testing.T) {
u, err := url.Parse(test.url)
require.Nil(t, err)
request := &gus.Request{URL: u}
response := handler(context.Background(), request)
if response == nil {
assert.Equal(t, test.status, gemini.StatusNotFound)
return
} else {
assert.Equal(t, test.status, response.Status)
}
if test.meta != "" {
assert.Equal(t, test.meta, response.Meta)
}
if test.body != "" {
body, err := io.ReadAll(response.Body)
require.Nil(t, err)
assert.Equal(t, test.body, string(body))
}
})
}
}