99 lines
2.6 KiB
Go
99 lines
2.6 KiB
Go
package utils
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"github.com/spf13/afero"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestResolveImports(t *testing.T) {
|
|
t.Run("resolves relative directory", func(t *testing.T) {
|
|
importMap := []byte(`{
|
|
"imports": {
|
|
"abs/": "/tmp/",
|
|
"root": "../../common",
|
|
"parent": "../tests",
|
|
"child": "child/",
|
|
"missing": "../missing"
|
|
}
|
|
}`)
|
|
// Setup in-memory fs
|
|
fsys := afero.NewMemMapFs()
|
|
cwd, err := os.Getwd()
|
|
require.NoError(t, err)
|
|
jsonPath := filepath.Join(cwd, FallbackImportMapPath)
|
|
require.NoError(t, afero.WriteFile(fsys, jsonPath, importMap, 0644))
|
|
require.NoError(t, fsys.Mkdir(filepath.Join(cwd, "common"), 0755))
|
|
require.NoError(t, fsys.Mkdir(filepath.Join(cwd, DbTestsDir), 0755))
|
|
require.NoError(t, fsys.Mkdir(filepath.Join(cwd, FunctionsDir, "child"), 0755))
|
|
// Run test
|
|
resolved, err := NewImportMap(jsonPath, fsys)
|
|
// Check error
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, "/tmp/", resolved.Imports["abs/"])
|
|
assert.Equal(t, cwd+"/common", resolved.Imports["root"])
|
|
assert.Equal(t, cwd+"/supabase/tests", resolved.Imports["parent"])
|
|
assert.Equal(t, cwd+"/supabase/functions/child/", resolved.Imports["child"])
|
|
assert.Equal(t, "../missing", resolved.Imports["missing"])
|
|
})
|
|
|
|
t.Run("resolves parent scopes", func(t *testing.T) {
|
|
importMap := []byte(`{
|
|
"scopes": {
|
|
"my-scope": {
|
|
"my-mod": "https://deno.land"
|
|
}
|
|
}
|
|
}`)
|
|
// Setup in-memory fs
|
|
fsys := afero.NewMemMapFs()
|
|
require.NoError(t, afero.WriteFile(fsys, FallbackImportMapPath, importMap, 0644))
|
|
// Run test
|
|
resolved, err := NewImportMap(FallbackImportMapPath, fsys)
|
|
// Check error
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, "https://deno.land", resolved.Scopes["my-scope"]["my-mod"])
|
|
})
|
|
}
|
|
|
|
func TestBindModules(t *testing.T) {
|
|
t.Run("binds docker imports", func(t *testing.T) {
|
|
cwd, err := os.Getwd()
|
|
require.NoError(t, err)
|
|
importMap := ImportMap{
|
|
Imports: map[string]string{
|
|
"abs/": "/tmp/",
|
|
"root": cwd + "/common",
|
|
"parent": cwd + "/supabase/tests",
|
|
"child": cwd + "/supabase/functions/child/",
|
|
},
|
|
}
|
|
// Run test
|
|
mods := importMap.BindHostModules()
|
|
// Check error
|
|
assert.ElementsMatch(t, mods, []string{
|
|
"/tmp/:/tmp/:ro",
|
|
cwd + "/common:" + cwd + "/common:ro",
|
|
cwd + "/supabase/tests:" + cwd + "/supabase/tests:ro",
|
|
})
|
|
})
|
|
|
|
t.Run("binds docker scopes", func(t *testing.T) {
|
|
importMap := ImportMap{
|
|
Scopes: map[string]map[string]string{
|
|
"my-scope": {
|
|
"my-mod": "https://deno.land",
|
|
},
|
|
},
|
|
}
|
|
// Run test
|
|
mods := importMap.BindHostModules()
|
|
// Check error
|
|
assert.Empty(t, mods)
|
|
})
|
|
}
|