github.com/supabase/cli@v1.168.1/internal/utils/deno_test.go (about) 1 package utils 2 3 import ( 4 "os" 5 "path/filepath" 6 "testing" 7 8 "github.com/spf13/afero" 9 "github.com/stretchr/testify/assert" 10 "github.com/stretchr/testify/require" 11 ) 12 13 func TestResolveImports(t *testing.T) { 14 t.Run("resolves relative directory", func(t *testing.T) { 15 importMap := &ImportMap{ 16 Imports: map[string]string{ 17 "abs/": "/tmp/", 18 "root": "../../common", 19 "parent": "../tests", 20 "child": "child", 21 "missing": "../missing", 22 }, 23 } 24 // Setup in-memory fs 25 fsys := afero.NewMemMapFs() 26 require.NoError(t, fsys.Mkdir("common", 0755)) 27 require.NoError(t, fsys.Mkdir(DbTestsDir, 0755)) 28 require.NoError(t, fsys.Mkdir(filepath.Join(FunctionsDir, "child"), 0755)) 29 // Run test 30 resolved := importMap.Resolve(fsys) 31 // Check error 32 assert.Equal(t, "/home/deno/modules/ac351c7174c8f47a9a9056bd96bcd71cfb980c906daee74ab9bce8308c68b811/", resolved.Imports["abs/"]) 33 assert.Equal(t, "/home/deno/modules/92a5dc04bd6f9fb8f29f8066fed8a5c1e81bc59ad48a11283b63736867e4f2a8", resolved.Imports["root"]) 34 assert.Equal(t, "/home/deno/modules/faaed96206118cf98625ea8065b6b3864f8cf9484814c423b58ebaa9b2d1e47b", resolved.Imports["parent"]) 35 assert.Equal(t, "/home/deno/functions/child", resolved.Imports["child"]) 36 assert.Equal(t, "../missing", resolved.Imports["missing"]) 37 }) 38 39 t.Run("resolves parent scopes", func(t *testing.T) { 40 importMap := &ImportMap{ 41 Scopes: map[string]map[string]string{ 42 "my-scope": { 43 "my-mod": "https://deno.land", 44 }, 45 }, 46 } 47 // Setup in-memory fs 48 fsys := afero.NewMemMapFs() 49 // Run test 50 resolved := importMap.Resolve(fsys) 51 // Check error 52 assert.Equal(t, "https://deno.land", resolved.Scopes["my-scope"]["my-mod"]) 53 }) 54 } 55 56 func TestImportMapPath(t *testing.T) { 57 t.Run("loads import map from default location", func(t *testing.T) { 58 // Setup in-memory fs 59 fsys := afero.NewMemMapFs() 60 require.NoError(t, afero.WriteFile(fsys, FallbackImportMapPath, []byte("{}"), 0644)) 61 absPath, err := filepath.Abs(FallbackImportMapPath) 62 require.NoError(t, err) 63 require.NoError(t, afero.WriteFile(fsys, absPath, []byte("{}"), 0644)) 64 // Run test 65 resolved, err := AbsImportMapPath("", "", fsys) 66 // Check error 67 assert.NoError(t, err) 68 assert.Equal(t, absPath, resolved) 69 }) 70 71 t.Run("per function config takes precedence", func(t *testing.T) { 72 slug := "hello" 73 Config.Functions = map[string]function{ 74 slug: {ImportMap: "import_map.json"}, 75 } 76 absPath, err := filepath.Abs("supabase/import_map.json") 77 require.NoError(t, err) 78 // Setup in-memory fs 79 fsys := afero.NewMemMapFs() 80 require.NoError(t, afero.WriteFile(fsys, FallbackImportMapPath, []byte("{}"), 0644)) 81 require.NoError(t, afero.WriteFile(fsys, absPath, []byte("{}"), 0644)) 82 // Run test 83 resolved, err := AbsImportMapPath("", slug, fsys) 84 // Check error 85 assert.NoError(t, err) 86 assert.Equal(t, absPath, resolved) 87 }) 88 89 t.Run("returns empty string if no fallback", func(t *testing.T) { 90 // Setup in-memory fs 91 fsys := afero.NewMemMapFs() 92 // Run test 93 resolved, err := AbsImportMapPath("", "", fsys) 94 // Check error 95 assert.NoError(t, err) 96 assert.Empty(t, resolved) 97 }) 98 99 t.Run("throws error on missing file", func(t *testing.T) { 100 path := "/tmp/import_map" 101 // Setup in-memory fs 102 fsys := afero.NewMemMapFs() 103 // Run test 104 resolved, err := AbsImportMapPath(path, "", fsys) 105 // Check error 106 assert.ErrorIs(t, err, os.ErrNotExist) 107 assert.Empty(t, resolved) 108 }) 109 110 t.Run("throws error on importing directory", func(t *testing.T) { 111 path := "/tmp/import_map" 112 // Setup in-memory fs 113 fsys := afero.NewMemMapFs() 114 require.NoError(t, fsys.MkdirAll(path, 0755)) 115 // Run test 116 resolved, err := AbsImportMapPath(path, "", fsys) 117 // Check error 118 assert.ErrorContains(t, err, "Importing directory is unsupported: "+path) 119 assert.Empty(t, resolved) 120 }) 121 }