1- import { autoUpgradeIfNeeded } from './postrun.js'
1+ import { autoUpgradeIfNeeded , hook } from './postrun.js'
22import { mockAndCaptureOutput } from '../testing/output.js'
33import {
44 getOutputUpdateCLIReminder ,
99import { isMajorVersionChange } from '../version.js'
1010import { inferPackageManagerForGlobalCLI } from '../is-global.js'
1111import { addPublicMetadata } from '../metadata.js'
12+ import { reportAnalyticsEvent } from '../analytics.js'
1213import { describe , expect , test , vi , afterEach } from 'vitest'
1314
1415vi . mock ( '../upgrade.js' , async ( importOriginal ) => {
@@ -38,6 +39,14 @@ vi.mock('../is-global.js', async (importOriginal) => {
3839 }
3940} )
4041
42+ vi . mock ( '../analytics.js' , ( ) => ( {
43+ reportAnalyticsEvent : vi . fn ( ) . mockResolvedValue ( undefined ) ,
44+ } ) )
45+
46+ vi . mock ( './deprecations.js' , ( ) => ( {
47+ postrun : vi . fn ( ) ,
48+ } ) )
49+
4150vi . mock ( '../metadata.js' , async ( importOriginal ) => {
4251 const actual : any = await importOriginal ( )
4352 return {
@@ -61,9 +70,30 @@ vi.mock('../../../private/node/conf-store.js', async (importOriginal) => {
6170afterEach ( ( ) => {
6271 mockAndCaptureOutput ( ) . clear ( )
6372 vi . mocked ( addPublicMetadata ) . mockClear ( )
73+ vi . mocked ( reportAnalyticsEvent ) . mockClear ( )
6474 vi . mocked ( hasBlockingAutoUpgradeNotification ) . mockResolvedValue ( false )
6575} )
6676
77+ describe ( 'postrun hook' , ( ) => {
78+ test ( 'reports analytics after auto-upgrade so auto-upgrade metadata is available' , async ( ) => {
79+ const config = { plugins : new Map ( ) , runHook : vi . fn ( ) } as any
80+ const Command = { id : 'app dev' } as any
81+ vi . mocked ( versionToAutoUpgrade ) . mockReturnValue ( '3.100.0' )
82+ vi . mocked ( isMajorVersionChange ) . mockReturnValue ( false )
83+ vi . mocked ( runCLIUpgrade ) . mockResolvedValue ( undefined )
84+
85+ await hook . call ( { } as any , { config, Command} as any )
86+
87+ expect ( runCLIUpgrade ) . toHaveBeenCalled ( )
88+ expect ( reportAnalyticsEvent ) . toHaveBeenCalledWith ( { config, exitMode : 'ok' } )
89+ expect ( vi . mocked ( runCLIUpgrade ) . mock . invocationCallOrder [ 0 ] ! ) . toBeLessThan (
90+ vi . mocked ( reportAnalyticsEvent ) . mock . invocationCallOrder [ 0 ] ! ,
91+ )
92+ const calls = vi . mocked ( addPublicMetadata ) . mock . calls . map ( ( call ) => call [ 0 ] ( ) )
93+ expect ( calls ) . toContainEqual ( expect . objectContaining ( { env_auto_upgrade_success : true } ) )
94+ } )
95+ } )
96+
6797describe ( 'autoUpgradeIfNeeded' , ( ) => {
6898 test ( 'runs the upgrade when versionToAutoUpgrade returns a version' , async ( ) => {
6999 // Given
0 commit comments