* Replaces old Deno server with a Go implementation * Restructured the code base accordingly
51 lines
1.9 KiB
Go
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")
|
|
}
|