@@ -12,6 +12,7 @@ import {
1212import {
1313 VersionSelect ,
1414 filterItems ,
15+ getItemDisplayText ,
1516 getItemIcon ,
1617 getItemLabel ,
1718 renderItem ,
@@ -78,20 +79,62 @@ describe('VersionSelect component', () => {
7879
7980 const { queryAllByTestId } = render ( item ) ;
8081
82+ expect ( queryAllByTestId ( 'disabled-menu-item' ) ) . toHaveLength ( 0 ) ;
83+ } ) ;
84+ it ( 'does not disable local versions even when disableDownload returns true' , ( ) => {
85+ vi . mocked ( disableDownload ) . mockReturnValueOnce ( true ) ;
86+
87+ const localVersion : RunnableVersion = {
88+ ...mockVersion1 ,
89+ source : local ,
90+ state : installed ,
91+ name : 'My Build' ,
92+ } ;
93+
94+ const item = renderItem ( localVersion , {
95+ handleClick : ( ) => ( { } ) ,
96+ index : 0 ,
97+ modifiers : { active : true , disabled : false , matchesPredicate : true } ,
98+ query : '' ,
99+ } ) ! ;
100+
101+ const { queryAllByTestId } = render ( item ) ;
102+
81103 expect ( queryAllByTestId ( 'disabled-menu-item' ) ) . toHaveLength ( 0 ) ;
82104 } ) ;
83105 } ) ;
84106
85- describe ( 'getItemLabel()' , ( ) => {
107+ describe ( 'getItemDisplayText()' , ( ) => {
108+ it ( 'returns name for local versions' , ( ) => {
109+ const input : RunnableVersion = {
110+ ...mockVersion1 ,
111+ source : local ,
112+ state : installed ,
113+ name : 'My Debug Build' ,
114+ } ;
115+ expect ( getItemDisplayText ( input ) ) . toBe ( 'My Debug Build' ) ;
116+ } ) ;
117+
118+ it ( 'returns "Local Build" for local versions without a name' , ( ) => {
119+ const input : RunnableVersion = {
120+ ...mockVersion1 ,
121+ source : local ,
122+ state : installed ,
123+ } ;
124+ expect ( getItemDisplayText ( input ) ) . toBe ( 'Local Build' ) ;
125+ } ) ;
126+
127+ it ( 'returns version string for remote versions' , ( ) => {
128+ expect ( getItemDisplayText ( mockVersion1 ) ) . toBe ( mockVersion1 . version ) ;
129+ } ) ;
86130 it ( 'returns the correct label for an available local version' , ( ) => {
87131 const input : RunnableVersion = {
88132 ...mockVersion1 ,
89133 state : installed ,
90134 source : local ,
91135 } ;
92136
93- expect ( getItemLabel ( input ) ) . toBe ( 'Local' ) ;
94- expect ( getItemLabel ( { ...input , name : 'Hi' } ) ) . toBe ( 'Hi' ) ;
137+ expect ( getItemLabel ( input ) ) . toBe ( 'Local Build' ) ;
95138 } ) ;
96139
97140 it ( 'returns the correct label for an unavailable local version' , ( ) => {
@@ -167,6 +210,41 @@ describe('VersionSelect component', () => {
167210 expect ( filterItems ( '3' , versions ) ) . toEqual ( expected ) ;
168211 } ) ;
169212
213+ it ( 'sorts local versions before remote versions' , ( ) => {
214+ const localVer = {
215+ version : '0.0.0-local.123' ,
216+ source : local ,
217+ name : 'My Build' ,
218+ } as RunnableVersion ;
219+
220+ const versions = [
221+ { version : '14.3.0' } ,
222+ localVer ,
223+ { version : '3.0.0' } ,
224+ ] as RunnableVersion [ ] ;
225+
226+ const result = filterItems ( 'build' , versions ) ;
227+ // Only the local version matches 'build' (via name)
228+ expect ( result ) . toEqual ( [ localVer ] ) ;
229+ } ) ;
230+
231+ it ( 'matches local versions by name' , ( ) => {
232+ const localVer = {
233+ version : '0.0.0-local.123' ,
234+ source : local ,
235+ name : 'My Debug Build' ,
236+ } as RunnableVersion ;
237+
238+ const versions = [
239+ { version : '14.3.0' } ,
240+ localVer ,
241+ { version : '3.0.0' } ,
242+ ] as RunnableVersion [ ] ;
243+
244+ const result = filterItems ( 'debug' , versions ) ;
245+ expect ( result ) . toEqual ( [ localVer ] ) ;
246+ } ) ;
247+
170248 it ( 'sorts in descending order when the query is non-numeric' , ( ) => {
171249 const versions = [
172250 { version : '3.0.0' } ,
0 commit comments