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  }