142 lines
4.2 KiB
Go
142 lines
4.2 KiB
Go
package gist_test
|
|
|
|
import (
|
|
"archive/zip"
|
|
"bytes"
|
|
"io"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
webtest "github.com/thomiceli/opengist/internal/web/test"
|
|
)
|
|
|
|
func TestDownloadZip(t *testing.T) {
|
|
s := webtest.Setup(t)
|
|
defer webtest.Teardown(t)
|
|
|
|
t.Run("MultipleFiles", func(t *testing.T) {
|
|
_, _, username, identifier := s.CreateGist(t, "0")
|
|
|
|
resp := s.Request(t, "GET", "/"+username+"/"+identifier+"/archive/HEAD", nil, 200)
|
|
|
|
body, err := io.ReadAll(resp.Body)
|
|
require.NoError(t, err)
|
|
|
|
zipReader, err := zip.NewReader(bytes.NewReader(body), int64(len(body)))
|
|
require.NoError(t, err)
|
|
require.Len(t, zipReader.File, 2)
|
|
|
|
fileNames := make([]string, len(zipReader.File))
|
|
contents := make([]string, len(zipReader.File))
|
|
for i, file := range zipReader.File {
|
|
fileNames[i] = file.Name
|
|
f, err := file.Open()
|
|
require.NoError(t, err)
|
|
content, err := io.ReadAll(f)
|
|
require.NoError(t, err)
|
|
contents[i] = string(content)
|
|
f.Close()
|
|
}
|
|
require.ElementsMatch(t, []string{"file.txt", "otherfile.txt"}, fileNames)
|
|
require.ElementsMatch(t, []string{"hello world", "other content"}, contents)
|
|
})
|
|
|
|
t.Run("PrivateGist", func(t *testing.T) {
|
|
_, _, username, identifier := s.CreateGist(t, "2")
|
|
|
|
s.Request(t, "GET", "/"+username+"/"+identifier+"/archive/HEAD", nil, 404)
|
|
})
|
|
|
|
t.Run("NonExistentRevision", func(t *testing.T) {
|
|
_, _, username, identifier := s.CreateGist(t, "0")
|
|
|
|
// TODO: return 404
|
|
s.Request(t, "GET", "/"+username+"/"+identifier+"/archive/zz", nil, 0)
|
|
})
|
|
}
|
|
|
|
func TestRawFile(t *testing.T) {
|
|
s := webtest.Setup(t)
|
|
defer webtest.Teardown(t)
|
|
|
|
t.Run("ExistingFile", func(t *testing.T) {
|
|
_, _, username, identifier := s.CreateGist(t, "0")
|
|
|
|
resp := s.Request(t, "GET", "/"+username+"/"+identifier+"/raw/HEAD/file.txt", nil, 200)
|
|
|
|
require.Equal(t, `inline; filename="file.txt"`, resp.Header.Get("Content-Disposition"))
|
|
require.Equal(t, "nosniff", resp.Header.Get("X-Content-Type-Options"))
|
|
require.Contains(t, resp.Header.Get("Content-Type"), "text/plain")
|
|
|
|
body, err := io.ReadAll(resp.Body)
|
|
require.NoError(t, err)
|
|
require.Equal(t, "hello world", string(body))
|
|
})
|
|
|
|
t.Run("NonExistentFile", func(t *testing.T) {
|
|
_, _, username, identifier := s.CreateGist(t, "0")
|
|
|
|
s.Request(t, "GET", "/"+username+"/"+identifier+"/raw/HEAD/nonexistent.txt", nil, 404)
|
|
})
|
|
|
|
t.Run("NonExistentRevision", func(t *testing.T) {
|
|
_, _, username, identifier := s.CreateGist(t, "0")
|
|
|
|
s.Request(t, "GET", "/"+username+"/"+identifier+"/raw/zz/file.txt", nil, 404)
|
|
})
|
|
|
|
t.Run("PrivateGist", func(t *testing.T) {
|
|
_, _, username, identifier := s.CreateGist(t, "2")
|
|
|
|
s.Request(t, "GET", "/"+username+"/"+identifier+"/raw/HEAD/file.txt", nil, 404)
|
|
})
|
|
}
|
|
|
|
func TestDownloadFile(t *testing.T) {
|
|
s := webtest.Setup(t)
|
|
defer webtest.Teardown(t)
|
|
|
|
t.Run("ExistingFile", func(t *testing.T) {
|
|
_, _, username, identifier := s.CreateGist(t, "0")
|
|
|
|
resp := s.Request(t, "GET", "/"+username+"/"+identifier+"/download/HEAD/file.txt", nil, 200)
|
|
|
|
require.Equal(t, "text/plain; charset=utf-8", resp.Header.Get("Content-Type"))
|
|
require.Equal(t, `attachment; filename="file.txt"`, resp.Header.Get("Content-Disposition"))
|
|
require.Equal(t, "11", resp.Header.Get("Content-Length"))
|
|
require.Equal(t, "nosniff", resp.Header.Get("X-Content-Type-Options"))
|
|
|
|
body, err := io.ReadAll(resp.Body)
|
|
require.NoError(t, err)
|
|
require.Equal(t, "hello world", string(body))
|
|
})
|
|
|
|
t.Run("NonExistentFile", func(t *testing.T) {
|
|
_, _, username, identifier := s.CreateGist(t, "0")
|
|
|
|
resp := s.Request(t, "GET", "/"+username+"/"+identifier+"/download/HEAD/nonexistent.txt", nil, 404)
|
|
|
|
_, err := io.ReadAll(resp.Body)
|
|
require.NoError(t, err)
|
|
// TODO: change the response to not found
|
|
// require.Equal(t, "File not found", string(body))
|
|
})
|
|
|
|
t.Run("NonExistentRevision", func(t *testing.T) {
|
|
_, _, username, identifier := s.CreateGist(t, "0")
|
|
|
|
resp := s.Request(t, "GET", "/"+username+"/"+identifier+"/download/zz/file.txt", nil, 404)
|
|
|
|
_, err := io.ReadAll(resp.Body)
|
|
require.NoError(t, err)
|
|
// TODO: change the response to not found
|
|
// require.Equal(t, "File not found", string(body))
|
|
})
|
|
|
|
t.Run("PrivateGist", func(t *testing.T) {
|
|
_, _, username, identifier := s.CreateGist(t, "2")
|
|
|
|
s.Request(t, "GET", "/"+username+"/"+identifier+"/download/HEAD/file.txt", nil, 404)
|
|
})
|
|
}
|