@@ -11,6 +11,14 @@ describe("findComponent", () => {
1111 template : "<div>Create Workspace Component</div>" ,
1212 }
1313
14+ const MockListComponent = {
15+ template : "<div>List Component</div>" ,
16+ }
17+
18+ const MockAccountListComponent = {
19+ template : "<div>Account List Component</div>" ,
20+ }
21+
1422 it ( "should find exact component match for 'workspace'" , ( ) => {
1523 const components : ComponentMap = {
1624 "../../lib/live_vue/web/pages/workspace.vue" : MockComponent ,
@@ -69,7 +77,7 @@ describe("findComponent", () => {
6977 }
7078
7179 const result1 = findComponent ( components , "workspace" )
72- const result2 = findComponent ( components , "dashboard" )
80+ const result2 = findComponent ( components , "dashboard/index.vue " )
7381
7482 expect ( result1 ) . toBe ( MockComponent )
7583 expect ( result2 ) . toBe ( MockCreateWorkspaceComponent )
@@ -85,4 +93,57 @@ describe("findComponent", () => {
8593
8694 expect ( result ) . toBe ( MockComponent )
8795 } )
96+
97+ it ( "should find component by path suffix when filename is ambiguous" , ( ) => {
98+ const components : ComponentMap = {
99+ "../../lib/live_vue/web/components/workspaces/List.vue" : MockListComponent ,
100+ "../../lib/live_vue/web/components/accounts/List.vue" : MockAccountListComponent ,
101+ }
102+
103+ const result1 = findComponent ( components , "workspaces/List" )
104+ const result2 = findComponent ( components , "accounts/List" )
105+
106+ expect ( result1 ) . toBe ( MockListComponent )
107+ expect ( result2 ) . toBe ( MockAccountListComponent )
108+ } )
109+
110+ it ( "should throw ambiguous error when filename matches multiple components" , ( ) => {
111+ const components : ComponentMap = {
112+ "../../lib/live_vue/web/components/workspaces/List.vue" : MockListComponent ,
113+ "../../lib/live_vue/web/components/accounts/List.vue" : MockAccountListComponent ,
114+ }
115+
116+ expect ( ( ) => findComponent ( components , "List" ) ) . toThrow ( "Component 'List' is ambiguous" )
117+ } )
118+
119+ it ( "should match by shorter path suffix" , ( ) => {
120+ const components : ComponentMap = {
121+ "../../lib/live_vue/web/pages/admin/workspaces/List.vue" : MockListComponent ,
122+ }
123+
124+ const result = findComponent ( components , "workspaces/List" )
125+
126+ expect ( result ) . toBe ( MockListComponent )
127+ } )
128+
129+ it ( "should handle components with .vue extension in name" , ( ) => {
130+ const components : ComponentMap = {
131+ "../../lib/live_vue/web/components/workspaces/List.vue" : MockListComponent ,
132+ }
133+
134+ const result = findComponent ( components , "workspaces/List.vue" )
135+
136+ expect ( result ) . toBe ( MockListComponent )
137+ } )
138+
139+ it ( "should match longest unambiguous path suffix" , ( ) => {
140+ const components : ComponentMap = {
141+ "../../lib/live_vue/web/admin/accounts/settings/Form.vue" : MockComponent ,
142+ "../../lib/live_vue/web/public/accounts/settings/Form.vue" : MockListComponent ,
143+ }
144+
145+ const result = findComponent ( components , "admin/accounts/settings/Form" )
146+
147+ expect ( result ) . toBe ( MockComponent )
148+ } )
88149} )
0 commit comments