mirror of
https://github.com/pocketbase/pocketbase.git
synced 2024-12-01 02:56:49 +02:00
185 lines
6.3 KiB
Go
185 lines
6.3 KiB
Go
package apis_test
|
|
|
|
import (
|
|
"net/http"
|
|
"os"
|
|
"path"
|
|
"path/filepath"
|
|
"runtime"
|
|
"testing"
|
|
|
|
"github.com/pocketbase/pocketbase/tests"
|
|
)
|
|
|
|
func TestFileDownload(t *testing.T) {
|
|
_, currentFile, _, _ := runtime.Caller(0)
|
|
dataDirRelPath := "../tests/data/"
|
|
|
|
testFilePath := filepath.Join(path.Dir(currentFile), dataDirRelPath, "storage/_pb_users_auth_/oap640cot4yru2s/test_kfd2wYLxkz.txt")
|
|
testImgPath := filepath.Join(path.Dir(currentFile), dataDirRelPath, "storage/_pb_users_auth_/4q1xlclmfloku33/300_1SEi6Q6U72.png")
|
|
testThumbCropCenterPath := filepath.Join(path.Dir(currentFile), dataDirRelPath, "storage/_pb_users_auth_/4q1xlclmfloku33/thumbs_300_1SEi6Q6U72.png/70x50_300_1SEi6Q6U72.png")
|
|
testThumbCropTopPath := filepath.Join(path.Dir(currentFile), dataDirRelPath, "storage/_pb_users_auth_/4q1xlclmfloku33/thumbs_300_1SEi6Q6U72.png/70x50t_300_1SEi6Q6U72.png")
|
|
testThumbCropBottomPath := filepath.Join(path.Dir(currentFile), dataDirRelPath, "storage/_pb_users_auth_/4q1xlclmfloku33/thumbs_300_1SEi6Q6U72.png/70x50b_300_1SEi6Q6U72.png")
|
|
testThumbFitPath := filepath.Join(path.Dir(currentFile), dataDirRelPath, "storage/_pb_users_auth_/4q1xlclmfloku33/thumbs_300_1SEi6Q6U72.png/70x50f_300_1SEi6Q6U72.png")
|
|
testThumbZeroWidthPath := filepath.Join(path.Dir(currentFile), dataDirRelPath, "storage/_pb_users_auth_/4q1xlclmfloku33/thumbs_300_1SEi6Q6U72.png/0x50_300_1SEi6Q6U72.png")
|
|
testThumbZeroHeightPath := filepath.Join(path.Dir(currentFile), dataDirRelPath, "storage/_pb_users_auth_/4q1xlclmfloku33/thumbs_300_1SEi6Q6U72.png/70x0_300_1SEi6Q6U72.png")
|
|
|
|
testFile, fileErr := os.ReadFile(testFilePath)
|
|
if fileErr != nil {
|
|
t.Fatal(fileErr)
|
|
}
|
|
|
|
testImg, imgErr := os.ReadFile(testImgPath)
|
|
if imgErr != nil {
|
|
t.Fatal(imgErr)
|
|
}
|
|
|
|
testThumbCropCenter, thumbErr := os.ReadFile(testThumbCropCenterPath)
|
|
if thumbErr != nil {
|
|
t.Fatal(thumbErr)
|
|
}
|
|
|
|
testThumbCropTop, thumbErr := os.ReadFile(testThumbCropTopPath)
|
|
if thumbErr != nil {
|
|
t.Fatal(thumbErr)
|
|
}
|
|
|
|
testThumbCropBottom, thumbErr := os.ReadFile(testThumbCropBottomPath)
|
|
if thumbErr != nil {
|
|
t.Fatal(thumbErr)
|
|
}
|
|
|
|
testThumbFit, thumbErr := os.ReadFile(testThumbFitPath)
|
|
if thumbErr != nil {
|
|
t.Fatal(thumbErr)
|
|
}
|
|
|
|
testThumbZeroWidth, thumbErr := os.ReadFile(testThumbZeroWidthPath)
|
|
if thumbErr != nil {
|
|
t.Fatal(thumbErr)
|
|
}
|
|
|
|
testThumbZeroHeight, thumbErr := os.ReadFile(testThumbZeroHeightPath)
|
|
if thumbErr != nil {
|
|
t.Fatal(thumbErr)
|
|
}
|
|
|
|
scenarios := []tests.ApiScenario{
|
|
{
|
|
Name: "missing collection",
|
|
Method: http.MethodGet,
|
|
Url: "/api/files/missing/4q1xlclmfloku33/300_1SEi6Q6U72.png",
|
|
ExpectedStatus: 404,
|
|
ExpectedContent: []string{`"data":{}`},
|
|
},
|
|
{
|
|
Name: "missing record",
|
|
Method: http.MethodGet,
|
|
Url: "/api/files/_pb_users_auth_/missing/300_1SEi6Q6U72.png",
|
|
ExpectedStatus: 404,
|
|
ExpectedContent: []string{`"data":{}`},
|
|
},
|
|
{
|
|
Name: "missing file",
|
|
Method: http.MethodGet,
|
|
Url: "/api/files/_pb_users_auth_/4q1xlclmfloku33/missing.png",
|
|
ExpectedStatus: 404,
|
|
ExpectedContent: []string{`"data":{}`},
|
|
},
|
|
{
|
|
Name: "existing image",
|
|
Method: http.MethodGet,
|
|
Url: "/api/files/_pb_users_auth_/4q1xlclmfloku33/300_1SEi6Q6U72.png",
|
|
ExpectedStatus: 200,
|
|
ExpectedContent: []string{string(testImg)},
|
|
ExpectedEvents: map[string]int{
|
|
"OnFileDownloadRequest": 1,
|
|
},
|
|
},
|
|
{
|
|
Name: "existing image - missing thumb (should fallback to the original)",
|
|
Method: http.MethodGet,
|
|
Url: "/api/files/_pb_users_auth_/4q1xlclmfloku33/300_1SEi6Q6U72.png?thumb=999x999",
|
|
ExpectedStatus: 200,
|
|
ExpectedContent: []string{string(testImg)},
|
|
ExpectedEvents: map[string]int{
|
|
"OnFileDownloadRequest": 1,
|
|
},
|
|
},
|
|
{
|
|
Name: "existing image - existing thumb (crop center)",
|
|
Method: http.MethodGet,
|
|
Url: "/api/files/_pb_users_auth_/4q1xlclmfloku33/300_1SEi6Q6U72.png?thumb=70x50",
|
|
ExpectedStatus: 200,
|
|
ExpectedContent: []string{string(testThumbCropCenter)},
|
|
ExpectedEvents: map[string]int{
|
|
"OnFileDownloadRequest": 1,
|
|
},
|
|
},
|
|
{
|
|
Name: "existing image - existing thumb (crop top)",
|
|
Method: http.MethodGet,
|
|
Url: "/api/files/_pb_users_auth_/4q1xlclmfloku33/300_1SEi6Q6U72.png?thumb=70x50t",
|
|
ExpectedStatus: 200,
|
|
ExpectedContent: []string{string(testThumbCropTop)},
|
|
ExpectedEvents: map[string]int{
|
|
"OnFileDownloadRequest": 1,
|
|
},
|
|
},
|
|
{
|
|
Name: "existing image - existing thumb (crop bottom)",
|
|
Method: http.MethodGet,
|
|
Url: "/api/files/_pb_users_auth_/4q1xlclmfloku33/300_1SEi6Q6U72.png?thumb=70x50b",
|
|
ExpectedStatus: 200,
|
|
ExpectedContent: []string{string(testThumbCropBottom)},
|
|
ExpectedEvents: map[string]int{
|
|
"OnFileDownloadRequest": 1,
|
|
},
|
|
},
|
|
{
|
|
Name: "existing image - existing thumb (fit)",
|
|
Method: http.MethodGet,
|
|
Url: "/api/files/_pb_users_auth_/4q1xlclmfloku33/300_1SEi6Q6U72.png?thumb=70x50f",
|
|
ExpectedStatus: 200,
|
|
ExpectedContent: []string{string(testThumbFit)},
|
|
ExpectedEvents: map[string]int{
|
|
"OnFileDownloadRequest": 1,
|
|
},
|
|
},
|
|
{
|
|
Name: "existing image - existing thumb (zero width)",
|
|
Method: http.MethodGet,
|
|
Url: "/api/files/_pb_users_auth_/4q1xlclmfloku33/300_1SEi6Q6U72.png?thumb=0x50",
|
|
ExpectedStatus: 200,
|
|
ExpectedContent: []string{string(testThumbZeroWidth)},
|
|
ExpectedEvents: map[string]int{
|
|
"OnFileDownloadRequest": 1,
|
|
},
|
|
},
|
|
{
|
|
Name: "existing image - existing thumb (zero height)",
|
|
Method: http.MethodGet,
|
|
Url: "/api/files/_pb_users_auth_/4q1xlclmfloku33/300_1SEi6Q6U72.png?thumb=70x0",
|
|
ExpectedStatus: 200,
|
|
ExpectedContent: []string{string(testThumbZeroHeight)},
|
|
ExpectedEvents: map[string]int{
|
|
"OnFileDownloadRequest": 1,
|
|
},
|
|
},
|
|
{
|
|
Name: "existing non image file - thumb parameter should be ignored",
|
|
Method: http.MethodGet,
|
|
Url: "/api/files/_pb_users_auth_/oap640cot4yru2s/test_kfd2wYLxkz.txt?thumb=100x100",
|
|
ExpectedStatus: 200,
|
|
ExpectedContent: []string{string(testFile)},
|
|
ExpectedEvents: map[string]int{
|
|
"OnFileDownloadRequest": 1,
|
|
},
|
|
},
|
|
}
|
|
|
|
for _, scenario := range scenarios {
|
|
scenario.Test(t)
|
|
}
|
|
}
|