1- import { expectConfigurationRequest , getLocalVue } from "@tests/vitest/helpers" ;
1+ import { expectConfigurationRequest , getLocalVue , injectTestRouter } from "@tests/vitest/helpers" ;
22import { setupMockConfig } from "@tests/vitest/mockConfig" ;
33import { mount } from "@vue/test-utils" ;
44import flushPromises from "flush-promises" ;
@@ -14,16 +14,28 @@ const { server, http } = useServerMock();
1414
1515vi . mock ( "@/api/schema" ) ;
1616
17+ vi . mock ( "@/composables/userLocalStorageFromHashedId" , async ( ) => {
18+ const { ref } = await import ( "vue" ) ;
19+ return {
20+ useUserLocalStorageFromHashId : ( _key , initialValue ) => ref ( initialValue ) ,
21+ } ;
22+ } ) ;
23+
1724const config = { enable_tool_source_display : false } ;
1825setupMockConfig ( config ) ;
1926
2027const localVue = getLocalVue ( ) ;
28+ const router = injectTestRouter ( localVue ) ;
2129
2230describe ( "ToolCard" , ( ) => {
2331 let wrapper ;
2432 let userStore ;
2533
2634 beforeEach ( async ( ) => {
35+ if ( router . currentRoute . fullPath !== "/" ) {
36+ await router . push ( "/" ) ;
37+ }
38+
2739 // some child component must be bypassing useConfig - so we need to explicitly
2840 // stup the API endpoint also. If you can drop this without request problems in log,
2941 // this hack can be removed.
@@ -58,6 +70,7 @@ describe("ToolCard", () => {
5870 disabled : false ,
5971 } ,
6072 localVue,
73+ router,
6174 pinia,
6275 } ) ;
6376 userStore = useUserStore ( ) ;
@@ -91,4 +104,48 @@ describe("ToolCard", () => {
91104 expect ( backdropActive . length ) . toBe ( 1 ) ;
92105 await flushPromises ( ) ;
93106 } ) ;
107+
108+ it ( "shows newer version badge when latest version is not active and navigates to the latest alias" , async ( ) => {
109+ await wrapper . setProps ( {
110+ version : "1.0" ,
111+ options : {
112+ ...wrapper . props ( "options" ) ,
113+ version : "1.0" ,
114+ versions : [ "1.0" , "2.0" ] ,
115+ } ,
116+ } ) ;
117+
118+ const badge = wrapper . find ( "[data-description='newer tool version']" ) ;
119+ expect ( badge . text ( ) ) . toBe ( "Newer version available" ) ;
120+
121+ await badge . trigger ( "click" ) ;
122+
123+ expect ( router . currentRoute . fullPath ) . toBe ( "/?tool_id=identifier&version=latest" ) ;
124+ } ) ;
125+
126+ it ( "does not show newer version badge for the latest lineage version" , async ( ) => {
127+ await wrapper . setProps ( {
128+ version : "2.0" ,
129+ options : {
130+ ...wrapper . props ( "options" ) ,
131+ version : "2.0" ,
132+ versions : [ "1.0" , "2.0" ] ,
133+ } ,
134+ } ) ;
135+
136+ expect ( wrapper . find ( "[data-description='newer tool version']" ) . exists ( ) ) . toBe ( false ) ;
137+ } ) ;
138+
139+ it ( "does not show newer version badge for single-version tools" , async ( ) => {
140+ await wrapper . setProps ( {
141+ version : "1.0" ,
142+ options : {
143+ ...wrapper . props ( "options" ) ,
144+ version : "1.0" ,
145+ versions : [ "1.0" ] ,
146+ } ,
147+ } ) ;
148+
149+ expect ( wrapper . find ( "[data-description='newer tool version']" ) . exists ( ) ) . toBe ( false ) ;
150+ } ) ;
94151} ) ;
0 commit comments