diff --git a/internal/functions/deploy/testdata/geometries/Geometries.js b/internal/functions/deploy/testdata/geometries/Geometries.js
new file mode 100644
index 000000000..e69de29bb
diff --git a/internal/functions/deploy/testdata/modules/imports.ts b/internal/functions/deploy/testdata/modules/imports.ts
new file mode 100644
index 000000000..1b415c39e
--- /dev/null
+++ b/internal/functions/deploy/testdata/modules/imports.ts
@@ -0,0 +1,90 @@
+import {
+ Component
+} from '@angular2/core';
+import defaultMember from "module-name";
+import * as name from "module-name ";
+import { member } from " module-name";
+import { member as alias } from "module-name";
+import { member1 , member2 } from "module-name";
+import { member1 , member2 as alias2 , member3 as alias3 } from "module-name";
+import {
+ Component
+} from '@angular2/core';
+import defaultMember from "$module-name";
+import defaultMember, { member, member } from "module-name";
+import defaultMember, * as name from "module-name";
+
+import * as name from "module-name "
+import { member } from " module-name"
+import { member as alias } from "module-name"
+import { member1 , member2 } from "module-name"
+import { member1 , member2 as alias2 , member3 as alias3 } from "module-name"
+import {
+ Component
+} from '@angular2/core'
+import defaultMember from "$module-name"
+import defaultMember, { member, member } from "module-name"
+import defaultMember, * as name from "module-name"
+
+import "module-name";
+import React from "react"
+import { Field } from "redux-form"
+import "module-name";
+
+import {
+ PlaneBufferGeometry,
+ OctahedronGeometry,
+ TorusBufferGeometry
+} from '../geometries/Geometries.js';
+
+import {
+ PlaneBufferGeometry,
+ OctahedronGeometry,
+ TorusBufferGeometry
+} from '../geometries/Geometries.js'
+
+import("module-name/whatever.ts");
+import("module-name/whatever.ts")
+
+import { Field } from "redux-form";
+import MultiContentListView from "./views/ListView";
+import MultiContentAddView from "./views/AddView";
+import MultiContentEditView from "./views/EditView";
+
+import { Field } from "redux-form"
+import MultiContentListView from "./views/ListView"
+import MultiContentAddView from "./views/AddView"
+import MultiContentEditView from "./views/EditView"
+
+
+
+
+
+// *Add all needed dependency to this module
+// *app requires those import modules to function
+
+
+/**
+*
+ *Add all needed dependency to this module
+ *app requires those import modules to function
+ *
+**/
+
+let modules = [];
+
+
+import defaultExport from "module-name";
+import * as name from "module-name";
+import { export1 } from "module-name";
+import { export1 as alias1 } from "module-name";
+import { default as alias } from "module-name";
+import { export1, export2 } from "module-name";
+import { export1, export2 as alias2, /* … */ } from "module-name";
+import { "string name" as alias } from "module-name";
+import defaultExport, { export1, /* … */ } from "module-name";
+import defaultExport, * as name from "module-name";
+import "module-name";
+import { "a-b" as a } from "/modules/my-module.ts";
+import myDefault from "/modules/my-module.ts";
+import myDefault, * as myModule from "/modules/my-module.ts";
diff --git a/internal/functions/deploy/testdata/nested/index.ts b/internal/functions/deploy/testdata/nested/index.ts
new file mode 100644
index 000000000..e69de29bb
diff --git a/internal/functions/deploy/testdata/shared/whatever.ts b/internal/functions/deploy/testdata/shared/whatever.ts
new file mode 100644
index 000000000..aad3bc023
--- /dev/null
+++ b/internal/functions/deploy/testdata/shared/whatever.ts
@@ -0,0 +1 @@
+import * from '../nested/index.ts';
diff --git a/internal/functions/deploy/upload_test.go b/internal/functions/deploy/upload_test.go
new file mode 100644
index 000000000..610674f8f
--- /dev/null
+++ b/internal/functions/deploy/upload_test.go
@@ -0,0 +1,64 @@
+package deploy
+
+import (
+ "embed"
+ "io"
+ "testing"
+
+ "github.com/stretchr/testify/assert"
+ "github.com/stretchr/testify/mock"
+ "github.com/supabase/cli/internal/utils"
+)
+
+//go:embed testdata
+var testImports embed.FS
+
+type MockFS struct {
+ mock.Mock
+}
+
+func (m *MockFS) ReadFile(srcPath string, w io.Writer) error {
+ _ = m.Called(srcPath)
+ data, err := testImports.ReadFile(srcPath)
+ if err != nil {
+ return err
+ }
+ if _, err := w.Write(data); err != nil {
+ return err
+ }
+ return nil
+}
+
+func TestImportPaths(t *testing.T) {
+ t.Run("iterates all import paths", func(t *testing.T) {
+ // Setup in-memory fs
+ fsys := MockFS{}
+ fsys.On("ReadFile", "/modules/my-module.ts").Once()
+ fsys.On("ReadFile", "testdata/modules/imports.ts").Once()
+ fsys.On("ReadFile", "testdata/geometries/Geometries.js").Once()
+ // Run test
+ im := utils.ImportMap{}
+ err := walkImportPaths("testdata/modules/imports.ts", im, fsys.ReadFile)
+ // Check error
+ assert.NoError(t, err)
+ fsys.AssertExpectations(t)
+ })
+
+ t.Run("iterates wih import map", func(t *testing.T) {
+ // Setup in-memory fs
+ fsys := MockFS{}
+ fsys.On("ReadFile", "/modules/my-module.ts").Once()
+ fsys.On("ReadFile", "testdata/modules/imports.ts").Once()
+ fsys.On("ReadFile", "testdata/geometries/Geometries.js").Once()
+ fsys.On("ReadFile", "testdata/shared/whatever.ts").Once()
+ fsys.On("ReadFile", "testdata/nested/index.ts").Once()
+ // Run test
+ im := utils.ImportMap{Imports: map[string]string{
+ "module-name/": "../shared/",
+ }}
+ err := walkImportPaths("testdata/modules/imports.ts", im, fsys.ReadFile)
+ // Check error
+ assert.NoError(t, err)
+ fsys.AssertExpectations(t)
+ })
+}