mirror of
https://github.com/pocketbase/pocketbase.git
synced 2025-03-19 14:17:48 +02:00
226 lines
4.7 KiB
Go
226 lines
4.7 KiB
Go
package jsvm
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/json"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/pocketbase/pocketbase/tools/filesystem"
|
|
"github.com/pocketbase/pocketbase/tools/list"
|
|
)
|
|
|
|
func TestFormDataAppendAndSet(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
data := FormData{}
|
|
|
|
data.Append("a", 1)
|
|
data.Append("a", 2)
|
|
|
|
data.Append("b", 3)
|
|
data.Append("b", 4)
|
|
data.Set("b", 5) // should overwrite the previous 2 calls
|
|
|
|
data.Set("c", 6)
|
|
data.Set("c", 7)
|
|
|
|
if len(data["a"]) != 2 {
|
|
t.Fatalf("Expected 2 'a' values, got %v", data["a"])
|
|
}
|
|
if data["a"][0] != 1 || data["a"][1] != 2 {
|
|
t.Fatalf("Expected 1 and 2 'a' key values, got %v", data["a"])
|
|
}
|
|
|
|
if len(data["b"]) != 1 {
|
|
t.Fatalf("Expected 1 'b' values, got %v", data["b"])
|
|
}
|
|
if data["b"][0] != 5 {
|
|
t.Fatalf("Expected 5 as 'b' key value, got %v", data["b"])
|
|
}
|
|
|
|
if len(data["c"]) != 1 {
|
|
t.Fatalf("Expected 1 'c' values, got %v", data["c"])
|
|
}
|
|
if data["c"][0] != 7 {
|
|
t.Fatalf("Expected 7 as 'c' key value, got %v", data["c"])
|
|
}
|
|
}
|
|
|
|
func TestFormDataDelete(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
data := FormData{}
|
|
data.Append("a", 1)
|
|
data.Append("a", 2)
|
|
data.Append("b", 3)
|
|
|
|
data.Delete("missing") // should do nothing
|
|
data.Delete("a")
|
|
|
|
if len(data) != 1 {
|
|
t.Fatalf("Expected exactly 1 data remaining key, got %v", data)
|
|
}
|
|
|
|
if data["b"][0] != 3 {
|
|
t.Fatalf("Expected 3 as 'b' key value, got %v", data["b"])
|
|
}
|
|
}
|
|
|
|
func TestFormDataGet(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
data := FormData{}
|
|
data.Append("a", 1)
|
|
data.Append("a", 2)
|
|
|
|
if v := data.Get("missing"); v != nil {
|
|
t.Fatalf("Expected %v for key 'missing', got %v", nil, v)
|
|
}
|
|
|
|
if v := data.Get("a"); v != 1 {
|
|
t.Fatalf("Expected %v for key 'a', got %v", 1, v)
|
|
}
|
|
}
|
|
|
|
func TestFormDataGetAll(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
data := FormData{}
|
|
data.Append("a", 1)
|
|
data.Append("a", 2)
|
|
|
|
if v := data.GetAll("missing"); v != nil {
|
|
t.Fatalf("Expected %v for key 'a', got %v", nil, v)
|
|
}
|
|
|
|
values := data.GetAll("a")
|
|
if len(values) != 2 || values[0] != 1 || values[1] != 2 {
|
|
t.Fatalf("Expected 1 and 2 values, got %v", values)
|
|
}
|
|
}
|
|
|
|
func TestFormDataHas(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
data := FormData{}
|
|
data.Append("a", 1)
|
|
|
|
if v := data.Has("missing"); v {
|
|
t.Fatalf("Expected key 'missing' to not exist: %v", v)
|
|
}
|
|
|
|
if v := data.Has("a"); !v {
|
|
t.Fatalf("Expected key 'a' to exist: %v", v)
|
|
}
|
|
}
|
|
|
|
func TestFormDataKeys(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
data := FormData{}
|
|
data.Append("a", 1)
|
|
data.Append("b", 1)
|
|
data.Append("c", 1)
|
|
data.Append("a", 1)
|
|
|
|
keys := data.Keys()
|
|
|
|
expectedKeys := []string{"a", "b", "c"}
|
|
|
|
for _, expected := range expectedKeys {
|
|
if !list.ExistInSlice(expected, keys) {
|
|
t.Fatalf("Expected key %s to exists in %v", expected, keys)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestFormDataValues(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
data := FormData{}
|
|
data.Append("a", 1)
|
|
data.Append("b", 2)
|
|
data.Append("c", 3)
|
|
data.Append("a", 4)
|
|
|
|
values := data.Values()
|
|
|
|
expectedKeys := []any{1, 2, 3, 4}
|
|
|
|
for _, expected := range expectedKeys {
|
|
if !list.ExistInSlice(expected, values) {
|
|
t.Fatalf("Expected key %s to exists in %v", expected, values)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestFormDataEntries(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
data := FormData{}
|
|
data.Append("a", 1)
|
|
data.Append("b", 2)
|
|
data.Append("c", 3)
|
|
data.Append("a", 4)
|
|
|
|
entries := data.Entries()
|
|
|
|
rawEntries, err := json.Marshal(entries)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
if len(entries) != 4 {
|
|
t.Fatalf("Expected 4 entries")
|
|
}
|
|
|
|
expectedEntries := []string{`["a",1]`, `["a",4]`, `["b",2]`, `["c",3]`}
|
|
for _, expected := range expectedEntries {
|
|
if !bytes.Contains(rawEntries, []byte(expected)) {
|
|
t.Fatalf("Expected entry %s to exists in %s", expected, rawEntries)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestFormDataToMultipart(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
f, err := filesystem.NewFileFromBytes([]byte("abc"), "test")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
data := FormData{}
|
|
data.Append("a", 1) // should be casted
|
|
data.Append("b", "test1")
|
|
data.Append("b", "test2")
|
|
data.Append("c", f)
|
|
|
|
body, mp, err := data.toMultipart()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
bodyStr := body.String()
|
|
|
|
// content type checks
|
|
contentType := mp.FormDataContentType()
|
|
expectedContentType := "multipart/form-data; boundary="
|
|
if !strings.Contains(contentType, expectedContentType) {
|
|
t.Fatalf("Expected to find content-type %s in %s", expectedContentType, contentType)
|
|
}
|
|
|
|
// body checks
|
|
expectedBodyParts := []string{
|
|
"Content-Disposition: form-data; name=\"a\"\r\n\r\n1",
|
|
"Content-Disposition: form-data; name=\"b\"\r\n\r\ntest1",
|
|
"Content-Disposition: form-data; name=\"b\"\r\n\r\ntest2",
|
|
"Content-Disposition: form-data; name=\"c\"; filename=\"test\"\r\nContent-Type: application/octet-stream\r\n\r\nabc",
|
|
}
|
|
for _, part := range expectedBodyParts {
|
|
if !strings.Contains(bodyStr, part) {
|
|
t.Fatalf("Expected to find %s in body\n%s", part, bodyStr)
|
|
}
|
|
}
|
|
}
|