Files
plainleaf/server/embed_space_primitives_test.go
T
Zef HemelandGitHub a524c64884 Go backend (#1555)
* Replaces old Deno server with a Go implementation
* Restructured the code base accordingly
2025-09-19 13:23:20 +02:00

51 lines
1.9 KiB
Go

package server
import (
"testing"
"testing/fstest"
"time"
"github.com/stretchr/testify/assert"
)
func TestFSSpacePrimitivesWithMapFS(t *testing.T) {
// Test with a MapFS that has embedded files
mapFS := fstest.MapFS{
"readme.txt": &fstest.MapFile{Data: []byte("Hello World")},
"config.json": &fstest.MapFile{Data: []byte(`{"test": true}`)},
}
// Note: t.TempDir() automatically deletes the folder after the tests runs
fallback, err := NewDiskSpacePrimitives(t.TempDir(), "")
assert.NoError(t, err, "Failed to create fallback")
primitives := NewReadOnlyFallthroughSpacePrimitives(mapFS, "", time.Now(), fallback)
// Test reading embedded files
data, meta, err := primitives.ReadFile("readme.txt")
assert.NoError(t, err, "Should read embedded file")
assert.Equal(t, []byte("Hello World"), data, "Content should match")
assert.Equal(t, "readme.txt", meta.Name, "Name should match")
assert.Equal(t, "ro", meta.Perm, "Embedded files should be read-only")
// Test that writing to embedded file names fails
_, err = primitives.WriteFile("readme.txt", []byte("new content"), nil)
assert.Error(t, err, "Should not overwrite embedded files")
assert.Contains(t, err.Error(), "read-only")
// Test that deleting embedded files fails
err = primitives.DeleteFile("config.json")
assert.Error(t, err, "Should not delete embedded files")
assert.Contains(t, err.Error(), "read-only")
// Test writing to non-embedded file names (should work via fallback)
_, err = primitives.WriteFile("new_file.txt", []byte("fallback content"), nil)
assert.NoError(t, err, "Should write to fallback for non-embedded files")
// Test that fallback file can be read back
data, meta, err = primitives.ReadFile("new_file.txt")
assert.NoError(t, err, "Should read fallback file")
assert.Equal(t, []byte("fallback content"), data, "Fallback content should match")
assert.Equal(t, "new_file.txt", meta.Name, "Fallback file name should match")
}