@@ -249,5 +249,56 @@ describe('AutoInstallContentPackagesTask', () => {
249249 expect ( packageClientMock . installPackage ) . not . toHaveBeenCalled ( ) ;
250250 expect ( dataStreamService . getAllFleetDataStreams ) . not . toHaveBeenCalled ( ) ;
251251 } ) ;
252+
253+ it ( 'should not downgrade package when a newer prerelease version is installed' , async ( ) => {
254+ // Registry has 1.1.0, but a prerelease 2.0.0-preview is already installed.
255+ // The task must not downgrade to 1.1.0.
256+ mockGetInstalledPackages . mockResolvedValue ( {
257+ items : [
258+ {
259+ name : 'kubernetes_otel' ,
260+ version : '2.0.0-preview' ,
261+ } ,
262+ {
263+ name : 'test_package' ,
264+ version : '2.0.0-preview' ,
265+ } ,
266+ ] ,
267+ } ) ;
268+
269+ await runTask ( ) ;
270+
271+ expect ( packageClientMock . installPackage ) . not . toHaveBeenCalled ( ) ;
272+ } ) ;
273+
274+ it ( 'should not downgrade one package while upgrading another' , async ( ) => {
275+ // kubernetes_otel has a prerelease installed (must not downgrade),
276+ // test_package has an older version installed (must upgrade).
277+ mockGetInstalledPackages . mockResolvedValue ( {
278+ items : [
279+ {
280+ name : 'kubernetes_otel' ,
281+ version : '2.0.0-preview' ,
282+ } ,
283+ {
284+ name : 'test_package' ,
285+ version : '1.0.0' ,
286+ } ,
287+ ] ,
288+ } ) ;
289+
290+ await runTask ( ) ;
291+
292+ expect ( packageClientMock . installPackage ) . toHaveBeenCalledTimes ( 1 ) ;
293+ expect ( packageClientMock . installPackage ) . toHaveBeenCalledWith ( {
294+ pkgName : 'test_package' ,
295+ pkgVersion : '1.1.0' ,
296+ useStreaming : true ,
297+ automaticInstall : true ,
298+ } ) ;
299+ expect ( packageClientMock . installPackage ) . not . toHaveBeenCalledWith (
300+ expect . objectContaining ( { pkgName : 'kubernetes_otel' } )
301+ ) ;
302+ } ) ;
252303 } ) ;
253304} ) ;
0 commit comments