@hubspot/cli 7.11.8-experimental.0 → 8.0.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/api/__tests__/migrate.test.js +19 -1
- package/api/migrate.d.ts +1 -1
- package/api/migrate.js +2 -1
- package/bin/cli.js +12 -27
- package/commands/__tests__/customObject.test.js +0 -2
- package/commands/__tests__/doctor.test.js +0 -2
- package/commands/__tests__/getStarted.test.js +0 -4
- package/commands/__tests__/project.test.js +0 -4
- package/commands/__tests__/upgrade.test.js +309 -0
- package/commands/account/__tests__/auth.test.js +180 -0
- package/commands/account/__tests__/list.test.js +128 -3
- package/commands/account/__tests__/rename.test.js +0 -2
- package/commands/account/__tests__/use.test.js +138 -0
- package/commands/account/auth.js +1 -1
- package/commands/account/clean.js +4 -3
- package/commands/account/createOverride.js +3 -2
- package/commands/account/info.js +2 -2
- package/commands/account/list.js +4 -4
- package/commands/account/remove.js +3 -2
- package/commands/account/removeOverride.js +3 -2
- package/commands/account/use.js +4 -3
- package/commands/app/__tests__/migrate.test.js +8 -25
- package/commands/app/migrate.js +10 -16
- package/commands/app/secret/__tests__/add.test.js +112 -0
- package/commands/app/secret/add.js +13 -13
- package/commands/auth.js +8 -2
- package/commands/cms/__tests__/fetch.test.js +114 -15
- package/commands/cms/__tests__/upload.test.js +308 -0
- package/commands/cms/__tests__/watch.test.js +212 -0
- package/commands/cms/app/create.js +2 -3
- package/commands/cms/convertFields.js +1 -1
- package/commands/cms/fetch.js +3 -2
- package/commands/cms/function/deploy.js +2 -2
- package/commands/cms/function/list.js +2 -3
- package/commands/cms/lighthouseScore.js +19 -27
- package/commands/cms/module/marketplace-validate.js +0 -1
- package/commands/cms/theme/__tests__/preview.test.js +2 -8
- package/commands/cms/theme/create.js +1 -1
- package/commands/cms/theme/marketplace-validate.js +0 -1
- package/commands/cms/theme/preview.d.ts +0 -1
- package/commands/cms/theme/preview.js +12 -52
- package/commands/cms/upload.js +3 -3
- package/commands/cms/watch.js +3 -3
- package/commands/customObject.js +0 -2
- package/commands/doctor.js +10 -2
- package/commands/filemanager/__tests__/upload.test.js +161 -0
- package/commands/getStarted.js +13 -3
- package/commands/hubdb/__tests__/list.test.js +0 -9
- package/commands/hubdb/list.js +6 -8
- package/commands/init.js +8 -2
- package/commands/mcp/__tests__/start.test.js +113 -3
- package/commands/mcp/setup.js +0 -7
- package/commands/mcp/start.d.ts +1 -1
- package/commands/mcp/start.js +0 -7
- package/commands/project/__tests__/add.test.js +0 -2
- package/commands/project/__tests__/create.test.js +2 -2
- package/commands/project/__tests__/deploy.test.js +0 -4
- package/commands/project/__tests__/dev.test.js +273 -0
- package/commands/project/__tests__/devUnifiedFlow.test.js +2 -5
- package/commands/project/__tests__/installDeps.test.js +0 -2
- package/commands/project/__tests__/lint.test.js +0 -5
- package/commands/project/__tests__/logs.test.js +24 -31
- package/commands/project/__tests__/migrate.test.js +7 -12
- package/commands/project/__tests__/updateDeps.test.js +0 -2
- package/commands/project/__tests__/upload.test.js +191 -0
- package/commands/project/__tests__/validate.test.js +314 -31
- package/commands/project/cloneApp.d.ts +1 -7
- package/commands/project/cloneApp.js +1 -149
- package/commands/project/create.js +3 -4
- package/commands/project/deploy.js +18 -7
- package/commands/project/dev/deprecatedFlow.js +0 -2
- package/commands/project/dev/index.js +23 -11
- package/commands/project/dev/unifiedFlow.d.ts +1 -1
- package/commands/project/dev/unifiedFlow.js +1 -4
- package/commands/project/list.js +4 -4
- package/commands/project/listBuilds.js +2 -7
- package/commands/project/logs.js +19 -12
- package/commands/project/migrate.js +3 -3
- package/commands/project/profile/add.js +1 -1
- package/commands/project/profile/delete.js +1 -1
- package/commands/project/upload.d.ts +1 -1
- package/commands/project/upload.js +13 -4
- package/commands/project/validate.js +85 -13
- package/commands/project/watch.js +7 -7
- package/commands/project.js +0 -4
- package/commands/sandbox/__tests__/create.test.js +0 -2
- package/commands/secret/__tests__/addSecret.test.js +140 -7
- package/commands/secret/addSecret.js +3 -1
- package/commands/testAccount/__tests__/create.test.js +6 -1
- package/commands/testAccount/__tests__/importData.test.js +0 -1
- package/commands/testAccount/create.d.ts +1 -0
- package/commands/testAccount/create.js +13 -5
- package/commands/upgrade.d.ts +8 -0
- package/commands/upgrade.js +119 -0
- package/lang/en.d.ts +88 -10
- package/lang/en.js +105 -26
- package/lib/__tests__/buildAccount.test.js +0 -13
- package/lib/__tests__/cliUpgradeUtils.test.js +131 -0
- package/lib/__tests__/commonOpts.test.js +0 -1
- package/lib/__tests__/dependencyManagement.test.js +633 -13
- package/lib/__tests__/developerTestAccounts.test.js +0 -1
- package/lib/__tests__/hasFeature.test.js +0 -6
- package/lib/__tests__/importData.test.js +0 -1
- package/lib/__tests__/npmCli.test.js +84 -0
- package/lib/__tests__/oauth.test.js +1 -11
- package/lib/__tests__/process.test.js +0 -1
- package/lib/__tests__/sandboxSync.test.js +0 -1
- package/lib/__tests__/sandboxes.test.js +0 -1
- package/lib/__tests__/serverlessLogs.test.js +0 -1
- package/lib/__tests__/usageTracking.test.js +39 -6
- package/lib/__tests__/validation.test.js +0 -1
- package/lib/app/__tests__/migrate.test.js +137 -12
- package/lib/app/migrate.d.ts +5 -2
- package/lib/app/migrate.js +30 -11
- package/lib/app/urls.d.ts +1 -1
- package/lib/buildAccount.d.ts +1 -1
- package/lib/cliUpgradeUtils.d.ts +22 -0
- package/lib/cliUpgradeUtils.js +62 -0
- package/lib/cmsAssets/api-sample.js +2 -5
- package/lib/cmsAssets/function.js +1 -9
- package/lib/cmsAssets/module.js +1 -9
- package/lib/cmsAssets/template.js +1 -9
- package/lib/configOptions.d.ts +0 -1
- package/lib/configOptions.js +1 -5
- package/lib/constants.d.ts +6 -0
- package/lib/constants.js +10 -4
- package/lib/dependencyManagement.d.ts +9 -0
- package/lib/dependencyManagement.js +127 -26
- package/lib/developerTestAccounts.d.ts +1 -1
- package/lib/doctor/Diagnosis.d.ts +1 -0
- package/lib/doctor/Diagnosis.js +7 -0
- package/lib/doctor/DiagnosticInfoBuilder.d.ts +2 -1
- package/lib/doctor/DiagnosticInfoBuilder.js +8 -4
- package/lib/doctor/Doctor.d.ts +12 -0
- package/lib/doctor/Doctor.js +283 -33
- package/lib/doctor/__tests__/Diagnosis.test.js +1 -0
- package/lib/doctor/__tests__/Doctor.test.js +201 -51
- package/lib/errorHandlers/__tests__/index.test.d.ts +1 -0
- package/lib/errorHandlers/__tests__/index.test.js +278 -0
- package/lib/errorHandlers/index.d.ts +1 -0
- package/lib/errorHandlers/index.js +14 -2
- package/lib/http.js +3 -1
- package/lib/links.js +2 -3
- package/lib/mcp/__tests__/setup.test.js +69 -2
- package/lib/mcp/setup.d.ts +1 -0
- package/lib/mcp/setup.js +37 -4
- package/lib/middleware/__tests__/configMiddleware.test.js +1 -43
- package/lib/middleware/__tests__/usageTrackingMiddleware.test.d.ts +1 -0
- package/lib/middleware/__tests__/usageTrackingMiddleware.test.js +44 -0
- package/lib/middleware/__tests__/yargsChecksMiddleware.test.js +0 -5
- package/lib/middleware/autoUpdateMiddleware.js +58 -57
- package/lib/middleware/configMiddleware.d.ts +0 -3
- package/lib/middleware/configMiddleware.js +0 -11
- package/lib/middleware/fireAlarmMiddleware.js +1 -1
- package/lib/middleware/spinniesMiddleware.d.ts +1 -0
- package/lib/middleware/spinniesMiddleware.js +4 -0
- package/lib/middleware/usageTrackingMiddleware.d.ts +13 -0
- package/lib/middleware/usageTrackingMiddleware.js +16 -0
- package/lib/{npm.d.ts → npm/npmCli.d.ts} +8 -3
- package/lib/npm/npmCli.js +59 -0
- package/lib/npm/packageJson.d.ts +24 -0
- package/lib/npm/packageJson.js +102 -0
- package/lib/npm/workspaces.d.ts +12 -0
- package/lib/npm/workspaces.js +48 -0
- package/lib/oauth.js +1 -3
- package/lib/projects/__tests__/AppDevModeInterface.test.js +40 -18
- package/lib/projects/__tests__/DevServerManager.test.js +1 -0
- package/lib/projects/__tests__/DevSessionManager.test.d.ts +1 -0
- package/lib/projects/__tests__/DevSessionManager.test.js +250 -0
- package/lib/projects/__tests__/LocalDevProcess.test.js +19 -6
- package/lib/projects/__tests__/LocalDevWebsocketServer.test.js +0 -2
- package/lib/projects/__tests__/UIExtensionsDevModeInterface.test.js +0 -1
- package/lib/projects/__tests__/components.test.js +6 -22
- package/lib/projects/__tests__/deploy.test.js +0 -1
- package/lib/projects/__tests__/localDevProjectHelpers.test.js +3 -5
- package/lib/projects/__tests__/pollProjectBuildAndDeploy.test.d.ts +1 -0
- package/lib/projects/__tests__/pollProjectBuildAndDeploy.test.js +328 -0
- package/lib/projects/__tests__/projectProfiles.test.d.ts +1 -0
- package/lib/projects/__tests__/projectProfiles.test.js +441 -0
- package/lib/projects/__tests__/projects.test.js +0 -1
- package/lib/projects/__tests__/structure.test.js +0 -1
- package/lib/projects/__tests__/uieLinting.test.js +2 -11
- package/lib/projects/__tests__/upload.test.js +104 -3
- package/lib/projects/add/__tests__/legacyAddComponent.test.js +0 -2
- package/lib/projects/add/__tests__/v2AddComponent.test.js +2 -4
- package/lib/projects/add/v2AddComponent.js +2 -3
- package/lib/projects/components.d.ts +1 -1
- package/lib/projects/components.js +4 -4
- package/lib/projects/create/__tests__/legacy.test.js +0 -1
- package/lib/projects/create/__tests__/v2.test.js +0 -1
- package/lib/projects/create/v2.d.ts +1 -1
- package/lib/projects/create/v2.js +1 -1
- package/lib/projects/ensureProjectExists.js +0 -1
- package/lib/projects/localDev/AppDevModeInterface.js +9 -2
- package/lib/projects/localDev/DevSessionManager.d.ts +18 -0
- package/lib/projects/localDev/DevSessionManager.js +95 -0
- package/lib/projects/localDev/LocalDevLogger.d.ts +4 -0
- package/lib/projects/localDev/LocalDevLogger.js +18 -7
- package/lib/projects/localDev/LocalDevManager_DEPRECATED.d.ts +4 -3
- package/lib/projects/localDev/LocalDevManager_DEPRECATED.js +23 -12
- package/lib/projects/localDev/LocalDevProcess.d.ts +2 -1
- package/lib/projects/localDev/LocalDevProcess.js +18 -7
- package/lib/projects/localDev/LocalDevState.d.ts +3 -2
- package/lib/projects/localDev/helpers/account.d.ts +1 -1
- package/lib/projects/localDev/helpers/devSessionsApi.d.ts +9 -0
- package/lib/projects/localDev/helpers/devSessionsApi.js +19 -0
- package/lib/projects/localDev/helpers/project.d.ts +1 -1
- package/lib/projects/localDev/helpers/project.js +1 -2
- package/lib/projects/pollProjectBuildAndDeploy.js +4 -5
- package/lib/projects/projectProfiles.d.ts +17 -0
- package/lib/projects/projectProfiles.js +140 -0
- package/lib/projects/structure.d.ts +1 -1
- package/lib/projects/uieLinting.js +6 -8
- package/lib/projects/upload.d.ts +9 -1
- package/lib/projects/upload.js +11 -5
- package/lib/projects/urls.d.ts +1 -0
- package/lib/projects/urls.js +3 -3
- package/lib/prompts/__tests__/createDeveloperTestAccountConfigPrompt.test.js +8 -4
- package/lib/prompts/createDeveloperTestAccountConfigPrompt.d.ts +2 -0
- package/lib/prompts/createDeveloperTestAccountConfigPrompt.js +19 -13
- package/lib/sandboxSync.d.ts +1 -1
- package/lib/sandboxes.d.ts +1 -1
- package/lib/serverlessLogs.js +0 -1
- package/lib/theme/__tests__/migrate.test.js +12 -4
- package/lib/theme/migrate.js +2 -3
- package/lib/ui/__tests__/SpinniesManager.test.js +0 -1
- package/lib/usageTracking.js +18 -0
- package/mcp-server/tools/cms/HsCreateFunctionTool.d.ts +2 -2
- package/mcp-server/tools/cms/HsCreateFunctionTool.js +2 -1
- package/mcp-server/tools/cms/HsCreateModuleTool.js +2 -1
- package/mcp-server/tools/cms/HsCreateTemplateTool.js +2 -1
- package/mcp-server/tools/cms/HsFunctionLogsTool.js +2 -2
- package/mcp-server/tools/cms/HsListFunctionsTool.js +2 -2
- package/mcp-server/tools/cms/HsListTool.js +2 -2
- package/mcp-server/tools/cms/__tests__/HsCreateFunctionTool.test.js +4 -4
- package/mcp-server/tools/cms/__tests__/HsCreateModuleTool.test.js +4 -4
- package/mcp-server/tools/cms/__tests__/HsCreateTemplateTool.test.js +4 -4
- package/mcp-server/tools/cms/__tests__/HsFunctionLogsTool.test.js +4 -4
- package/mcp-server/tools/cms/__tests__/HsListFunctionsTool.test.js +4 -4
- package/mcp-server/tools/cms/__tests__/HsListTool.test.js +4 -4
- package/mcp-server/tools/project/AddFeatureToProjectTool.js +4 -3
- package/mcp-server/tools/project/CreateProjectTool.js +4 -3
- package/mcp-server/tools/project/CreateTestAccountTool.d.ts +7 -2
- package/mcp-server/tools/project/CreateTestAccountTool.js +19 -9
- package/mcp-server/tools/project/DocFetchTool.js +2 -1
- package/mcp-server/tools/project/DocsSearchTool.js +2 -1
- package/mcp-server/tools/project/GetApiUsagePatternsByAppIdTool.js +4 -4
- package/mcp-server/tools/project/GetApplicationInfoTool.js +5 -5
- package/mcp-server/tools/project/GetConfigValuesTool.js +2 -1
- package/mcp-server/tools/project/UploadProjectTools.js +6 -3
- package/mcp-server/tools/project/ValidateProjectTool.js +2 -1
- package/mcp-server/tools/project/__tests__/AddFeatureToProjectTool.test.js +4 -2
- package/mcp-server/tools/project/__tests__/CreateProjectTool.test.js +4 -2
- package/mcp-server/tools/project/__tests__/CreateTestAccountTool.test.js +23 -4
- package/mcp-server/tools/project/__tests__/DeployProjectTool.test.js +3 -1
- package/mcp-server/tools/project/__tests__/DocFetchTool.test.js +0 -1
- package/mcp-server/tools/project/__tests__/DocsSearchTool.test.js +3 -1
- package/mcp-server/tools/project/__tests__/GetApiUsagePatternsByAppIdTool.test.js +4 -2
- package/mcp-server/tools/project/__tests__/GetApplicationInfoTool.test.js +8 -5
- package/mcp-server/tools/project/__tests__/GetBuildLogsTool.test.js +3 -1
- package/mcp-server/tools/project/__tests__/GetBuildStatusTool.test.js +3 -1
- package/mcp-server/tools/project/__tests__/GetConfigValuesTool.test.js +7 -3
- package/mcp-server/tools/project/__tests__/GuidedWalkthroughTool.test.js +3 -1
- package/mcp-server/tools/project/__tests__/UploadProjectTools.test.js +17 -3
- package/mcp-server/tools/project/__tests__/ValidateProjectTool.test.js +3 -1
- package/mcp-server/utils/__tests__/content.test.js +0 -3
- package/mcp-server/utils/__tests__/feedbackTracking.test.js +0 -3
- package/mcp-server/utils/__tests__/project.test.js +65 -4
- package/mcp-server/utils/project.js +6 -2
- package/package.json +15 -17
- package/types/Cms.d.ts +1 -1
- package/types/Cms.js +2 -0
- package/types/LocalDev.d.ts +3 -2
- package/types/PackageJson.d.ts +10 -0
- package/types/PackageJson.js +1 -0
- package/types/ProjectComponents.d.ts +1 -1
- package/ui/components/BoxWithTitle.js +1 -1
- package/ui/components/Table.d.ts +89 -0
- package/ui/components/Table.js +246 -0
- package/ui/lib/table.d.ts +2 -0
- package/ui/lib/table.js +11 -0
- package/ui/playground/Playground.d.ts +5 -0
- package/ui/{views/UiSandbox.js → playground/Playground.js} +4 -4
- package/ui/{lib/ui-testing-utils.d.ts → playground/fixtures.d.ts} +1 -1
- package/ui/{lib/ui-testing-utils.js → playground/fixtures.js} +33 -1
- package/ui/render.d.ts +19 -0
- package/ui/render.js +44 -0
- package/commands/__tests__/create.test.js +0 -53
- package/commands/create.d.ts +0 -4
- package/commands/create.js +0 -137
- package/commands/customObject/__tests__/schema.test.js +0 -53
- package/commands/customObject/schema/create.d.ts +0 -4
- package/commands/customObject/schema/create.js +0 -34
- package/commands/customObject/schema/delete.d.ts +0 -4
- package/commands/customObject/schema/delete.js +0 -37
- package/commands/customObject/schema/fetch-all.d.ts +0 -4
- package/commands/customObject/schema/fetch-all.js +0 -32
- package/commands/customObject/schema/fetch.d.ts +0 -4
- package/commands/customObject/schema/fetch.js +0 -36
- package/commands/customObject/schema/list.d.ts +0 -4
- package/commands/customObject/schema/list.js +0 -26
- package/commands/customObject/schema/update.d.ts +0 -4
- package/commands/customObject/schema/update.js +0 -39
- package/commands/customObject/schema.d.ts +0 -3
- package/commands/customObject/schema.js +0 -31
- package/commands/fetch.d.ts +0 -4
- package/commands/fetch.js +0 -52
- package/commands/function/deploy.d.ts +0 -4
- package/commands/function/deploy.js +0 -31
- package/commands/function/list.d.ts +0 -4
- package/commands/function/list.js +0 -33
- package/commands/function/server.d.ts +0 -4
- package/commands/function/server.js +0 -57
- package/commands/function.d.ts +0 -3
- package/commands/function.js +0 -32
- package/commands/lint.d.ts +0 -4
- package/commands/lint.js +0 -31
- package/commands/list.d.ts +0 -4
- package/commands/list.js +0 -31
- package/commands/logs.d.ts +0 -4
- package/commands/logs.js +0 -58
- package/commands/module/marketplace-validate.d.ts +0 -4
- package/commands/module/marketplace-validate.js +0 -31
- package/commands/module.d.ts +0 -3
- package/commands/module.js +0 -23
- package/commands/mv.d.ts +0 -4
- package/commands/mv.js +0 -35
- package/commands/project/__tests__/migrateApp.test.js +0 -78
- package/commands/project/migrateApp.d.ts +0 -4
- package/commands/project/migrateApp.js +0 -55
- package/commands/remove.d.ts +0 -4
- package/commands/remove.js +0 -31
- package/commands/theme/generate-selectors.d.ts +0 -4
- package/commands/theme/generate-selectors.js +0 -30
- package/commands/theme/marketplace-validate.d.ts +0 -4
- package/commands/theme/marketplace-validate.js +0 -33
- package/commands/theme/preview.d.ts +0 -4
- package/commands/theme/preview.js +0 -59
- package/commands/theme.d.ts +0 -3
- package/commands/theme.js +0 -29
- package/commands/upload.d.ts +0 -4
- package/commands/upload.js +0 -62
- package/commands/watch.d.ts +0 -4
- package/commands/watch.js +0 -73
- package/lib/__tests__/npm.test.js +0 -57
- package/lib/__tests__/projectProfiles.test.js +0 -129
- package/lib/app/__tests__/migrate_legacy.test.js +0 -143
- package/lib/app/migrate_legacy.d.ts +0 -4
- package/lib/app/migrate_legacy.js +0 -121
- package/lib/npm.js +0 -33
- package/lib/projectProfiles.d.ts +0 -7
- package/lib/projectProfiles.js +0 -73
- package/lib/ui/table.d.ts +0 -3
- package/lib/ui/table.js +0 -63
- package/ui/index.d.ts +0 -1
- package/ui/index.js +0 -6
- package/ui/views/UiSandbox.d.ts +0 -5
- /package/commands/__tests__/{create.test.d.ts → upgrade.test.d.ts} +0 -0
- /package/commands/{customObject/__tests__/schema.test.d.ts → cms/__tests__/upload.test.d.ts} +0 -0
- /package/commands/{project/__tests__/migrateApp.test.d.ts → cms/__tests__/watch.test.d.ts} +0 -0
- /package/{lib/__tests__/npm.test.d.ts → commands/project/__tests__/dev.test.d.ts} +0 -0
- /package/lib/__tests__/{projectProfiles.test.d.ts → cliUpgradeUtils.test.d.ts} +0 -0
- /package/lib/{app/__tests__/migrate_legacy.test.d.ts → __tests__/npmCli.test.d.ts} +0 -0
|
@@ -39,11 +39,29 @@ describe('api/migrate', () => {
|
|
|
39
39
|
};
|
|
40
40
|
// @ts-expect-error Mock
|
|
41
41
|
httpMock.get.mockResolvedValue(mockResponse);
|
|
42
|
-
const result = await listAppsForMigration(mockAccountId, mockPlatformVersion);
|
|
42
|
+
const result = await listAppsForMigration(mockAccountId, mockPlatformVersion, mockAppId);
|
|
43
43
|
expect(http.get).toHaveBeenCalledWith(mockAccountId, {
|
|
44
44
|
url: 'dfs/migrations/v2/list-apps',
|
|
45
45
|
params: {
|
|
46
46
|
platformVersion: convertedPlatformVersion,
|
|
47
|
+
appId: 67890,
|
|
48
|
+
},
|
|
49
|
+
});
|
|
50
|
+
expect(result).toEqual(mockResponse);
|
|
51
|
+
});
|
|
52
|
+
it('should call http.get with undefined appId when not provided', async () => {
|
|
53
|
+
const mockResponse = {
|
|
54
|
+
migratableApps: [],
|
|
55
|
+
unmigratableApps: [],
|
|
56
|
+
};
|
|
57
|
+
// @ts-expect-error Mock
|
|
58
|
+
httpMock.get.mockResolvedValue(mockResponse);
|
|
59
|
+
const result = await listAppsForMigration(mockAccountId, mockPlatformVersion, undefined);
|
|
60
|
+
expect(http.get).toHaveBeenCalledWith(mockAccountId, {
|
|
61
|
+
url: 'dfs/migrations/v2/list-apps',
|
|
62
|
+
params: {
|
|
63
|
+
platformVersion: convertedPlatformVersion,
|
|
64
|
+
appId: undefined,
|
|
47
65
|
},
|
|
48
66
|
});
|
|
49
67
|
expect(result).toEqual(mockResponse);
|
package/api/migrate.d.ts
CHANGED
|
@@ -70,7 +70,7 @@ export interface MigrationFailed extends MigrationBaseStatus {
|
|
|
70
70
|
}
|
|
71
71
|
export type MigrationStatus = MigrationInProgress | MigrationInputRequired | MigrationSuccess | MigrationFailed;
|
|
72
72
|
export declare function isMigrationStatus(error: unknown): error is MigrationStatus;
|
|
73
|
-
export declare function listAppsForMigration(accountId: number, platformVersion: string): HubSpotPromise<ListAppsResponse>;
|
|
73
|
+
export declare function listAppsForMigration(accountId: number, platformVersion: string, appId: number | undefined): HubSpotPromise<ListAppsResponse>;
|
|
74
74
|
export declare function initializeAppMigration(accountId: number, applicationId: number, platformVersion: string): HubSpotPromise<InitializeAppMigrationResponse>;
|
|
75
75
|
export declare function continueAppMigration(portalId: number, migrationId: number, componentUids: Record<string, string>, projectName: string): HubSpotPromise<ContinueAppMigrationResponse>;
|
|
76
76
|
export declare function checkMigrationStatusV2(accountId: number, id: number): HubSpotPromise<MigrationStatus>;
|
package/api/migrate.js
CHANGED
|
@@ -10,11 +10,12 @@ export function isMigrationStatus(error) {
|
|
|
10
10
|
'id' in error &&
|
|
11
11
|
'status' in error);
|
|
12
12
|
}
|
|
13
|
-
export async function listAppsForMigration(accountId, platformVersion) {
|
|
13
|
+
export async function listAppsForMigration(accountId, platformVersion, appId) {
|
|
14
14
|
return http.get(accountId, {
|
|
15
15
|
url: `${MIGRATIONS_API_PATH_V2}/list-apps`,
|
|
16
16
|
params: {
|
|
17
17
|
platformVersion: mapPlatformVersionToEnum(platformVersion),
|
|
18
|
+
appId,
|
|
18
19
|
},
|
|
19
20
|
});
|
|
20
21
|
}
|
package/bin/cli.js
CHANGED
|
@@ -4,32 +4,21 @@ import { logError } from '../lib/errorHandlers/index.js';
|
|
|
4
4
|
import { setCLILogLevel, getCommandName } from '../lib/commonOpts.js';
|
|
5
5
|
import { trackHelpUsage, trackConvertFieldsUsage, } from '../lib/usageTracking.js';
|
|
6
6
|
import { EXIT_CODES } from '../lib/enums/exitCodes.js';
|
|
7
|
-
import { validateConfigMiddleware, injectAccountIdMiddleware, validateAccountOptions,
|
|
7
|
+
import { validateConfigMiddleware, injectAccountIdMiddleware, validateAccountOptions, handleCustomConfigLocationMiddleware, } from '../lib/middleware/configMiddleware.js';
|
|
8
8
|
import { autoUpdateCLI } from '../lib/middleware/autoUpdateMiddleware.js';
|
|
9
9
|
import { checkAndWarnGitInclusionMiddleware } from '../lib/middleware/gitMiddleware.js';
|
|
10
10
|
import { performChecks } from '../lib/middleware/yargsChecksMiddleware.js';
|
|
11
11
|
import { setRequestHeaders } from '../lib/middleware/requestMiddleware.js';
|
|
12
12
|
import { checkFireAlarms } from '../lib/middleware/fireAlarmMiddleware.js';
|
|
13
|
-
import
|
|
13
|
+
import { handleDisableUsageTracking } from '../lib/middleware/usageTrackingMiddleware.js';
|
|
14
14
|
import initCommand from '../commands/init.js';
|
|
15
|
-
import logsCommand from '../commands/logs.js';
|
|
16
|
-
import lintCommand from '../commands/lint.js';
|
|
17
15
|
import hubdbCommand from '../commands/hubdb.js';
|
|
18
|
-
import watchCommand from '../commands/watch.js';
|
|
19
16
|
import authCommand from '../commands/auth.js';
|
|
20
|
-
import uploadCommand from '../commands/upload.js';
|
|
21
|
-
import createCommand from '../commands/create.js';
|
|
22
|
-
import fetchCommand from '../commands/fetch.js';
|
|
23
17
|
import filemanagerCommand from '../commands/filemanager.js';
|
|
24
18
|
import secretCommands from '../commands/secret.js';
|
|
25
19
|
import customObjectCommand from '../commands/customObject.js';
|
|
26
|
-
import functionCommands from '../commands/function.js';
|
|
27
|
-
import listCommand from '../commands/list.js';
|
|
28
20
|
import openCommand from '../commands/open.js';
|
|
29
|
-
import mvCommand from '../commands/mv.js';
|
|
30
21
|
import projectCommands from '../commands/project.js';
|
|
31
|
-
import themeCommand from '../commands/theme.js';
|
|
32
|
-
import moduleCommand from '../commands/module.js';
|
|
33
22
|
import configCommand from '../commands/config.js';
|
|
34
23
|
import accountCommands from '../commands/account.js';
|
|
35
24
|
import sandboxesCommand from '../commands/sandbox.js';
|
|
@@ -41,7 +30,9 @@ import appCommand from '../commands/app.js';
|
|
|
41
30
|
import testAccountCommands from '../commands/testAccount.js';
|
|
42
31
|
import getStartedCommand from '../commands/getStarted.js';
|
|
43
32
|
import mcpCommand from '../commands/mcp.js';
|
|
33
|
+
import upgradeCommand from '../commands/upgrade.js';
|
|
44
34
|
import { uiLogger } from '../lib/ui/logger.js';
|
|
35
|
+
import { initializeSpinniesManager } from '../lib/middleware/spinniesMiddleware.js';
|
|
45
36
|
function getTerminalWidth() {
|
|
46
37
|
const width = yargs().terminalWidth();
|
|
47
38
|
if (width >= 100)
|
|
@@ -69,14 +60,15 @@ const argv = yargs(process.argv.slice(2))
|
|
|
69
60
|
.middleware([
|
|
70
61
|
setCLILogLevel,
|
|
71
62
|
setRequestHeaders,
|
|
72
|
-
handleDeprecatedEnvVariables,
|
|
73
63
|
handleCustomConfigLocationMiddleware,
|
|
64
|
+
handleDisableUsageTracking,
|
|
74
65
|
injectAccountIdMiddleware,
|
|
75
66
|
validateConfigMiddleware,
|
|
76
67
|
autoUpdateCLI,
|
|
77
68
|
checkAndWarnGitInclusionMiddleware,
|
|
78
69
|
validateAccountOptions,
|
|
79
70
|
checkFireAlarms,
|
|
71
|
+
initializeSpinniesManager,
|
|
80
72
|
])
|
|
81
73
|
.exitProcess(false)
|
|
82
74
|
.fail(handleFailure)
|
|
@@ -91,6 +83,11 @@ const argv = yargs(process.argv.slice(2))
|
|
|
91
83
|
describe: 'prevent color from displaying in the ui',
|
|
92
84
|
hidden: true,
|
|
93
85
|
type: 'boolean',
|
|
86
|
+
})
|
|
87
|
+
.option('disable-usage-tracking', {
|
|
88
|
+
default: false,
|
|
89
|
+
hidden: true,
|
|
90
|
+
type: 'boolean',
|
|
94
91
|
})
|
|
95
92
|
.check(performChecks)
|
|
96
93
|
// Getting started / important
|
|
@@ -108,28 +105,16 @@ const argv = yargs(process.argv.slice(2))
|
|
|
108
105
|
// Project commands
|
|
109
106
|
.command(projectCommands)
|
|
110
107
|
.command(appCommand)
|
|
111
|
-
// CMS Design Manager
|
|
112
|
-
.command(watchCommand)
|
|
113
|
-
.command(listCommand)
|
|
114
|
-
.command(uploadCommand)
|
|
115
|
-
.command(fetchCommand)
|
|
116
|
-
.command(removeCommand)
|
|
117
|
-
.command(mvCommand)
|
|
118
108
|
// CMS Commands
|
|
119
109
|
.command(cmsCommand)
|
|
120
|
-
.command(logsCommand)
|
|
121
|
-
.command(lintCommand)
|
|
122
110
|
.command(hubdbCommand)
|
|
123
|
-
.command(createCommand)
|
|
124
111
|
.command(filemanagerCommand)
|
|
125
|
-
.command(functionCommands)
|
|
126
|
-
.command(themeCommand)
|
|
127
|
-
.command(moduleCommand)
|
|
128
112
|
// Misc commands
|
|
129
113
|
.command(customObjectCommand)
|
|
130
114
|
.command(completionCommand)
|
|
131
115
|
.command(doctorCommand)
|
|
132
116
|
.command(mcpCommand)
|
|
117
|
+
.command(upgradeCommand)
|
|
133
118
|
.help()
|
|
134
119
|
.alias('h', 'help')
|
|
135
120
|
.recommendCommands()
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import yargs from 'yargs';
|
|
2
2
|
import create from '../customObject/create.js';
|
|
3
|
-
import schema from '../customObject/schema.js';
|
|
4
3
|
import createSchema from '../customObject/createSchema.js';
|
|
5
4
|
import updateSchema from '../customObject/updateSchema.js';
|
|
6
5
|
import listSchemas from '../customObject/listSchemas.js';
|
|
@@ -45,7 +44,6 @@ describe('commands/customObject', () => {
|
|
|
45
44
|
});
|
|
46
45
|
const subcommands = [
|
|
47
46
|
create,
|
|
48
|
-
schema,
|
|
49
47
|
createSchema,
|
|
50
48
|
updateSchema,
|
|
51
49
|
listSchemas,
|
|
@@ -6,9 +6,7 @@ import { Doctor } from '../../lib/doctor/Doctor.js';
|
|
|
6
6
|
import { uiLogger } from '../../lib/ui/logger.js';
|
|
7
7
|
import fs from 'fs';
|
|
8
8
|
import { getCwd as __getCwd } from '@hubspot/local-dev-lib/path';
|
|
9
|
-
vi.mock('../../lib/usageTracking');
|
|
10
9
|
vi.mock('../../lib/doctor/Doctor');
|
|
11
|
-
vi.mock('../../lib/ui/logger.js');
|
|
12
10
|
vi.mock('@hubspot/local-dev-lib/path');
|
|
13
11
|
vi.mock('fs');
|
|
14
12
|
// @ts-expect-error Doesn't match the actual signature because then the linter complains about unused variables
|
|
@@ -9,11 +9,9 @@ import { getProjectPackageJsonLocations, installPackages, } from '../../lib/depe
|
|
|
9
9
|
import { GET_STARTED_OPTIONS } from '../../lib/constants.js';
|
|
10
10
|
import { EXIT_CODES } from '../../lib/enums/exitCodes.js';
|
|
11
11
|
import open from 'open';
|
|
12
|
-
vi.mock('../../lib/usageTracking');
|
|
13
12
|
vi.mock('../../lib/prompts/promptUtils');
|
|
14
13
|
vi.mock('../../lib/prompts/projectNameAndDestPrompt');
|
|
15
14
|
vi.mock('../../lib/projects/config');
|
|
16
|
-
vi.mock('../../lib/ui/logger');
|
|
17
15
|
vi.mock('../../lib/errorHandlers');
|
|
18
16
|
vi.mock('@hubspot/local-dev-lib/github');
|
|
19
17
|
vi.mock('../../lib/dependencyManagement');
|
|
@@ -28,7 +26,6 @@ vi.mock('fs-extra', () => ({
|
|
|
28
26
|
}));
|
|
29
27
|
describe('commands/get-started', () => {
|
|
30
28
|
beforeEach(() => {
|
|
31
|
-
vi.clearAllMocks();
|
|
32
29
|
// @TODO Revisit config mocking in tests
|
|
33
30
|
getConfigAccountById.mockReturnValue({
|
|
34
31
|
accountId: 12345,
|
|
@@ -76,7 +73,6 @@ describe('commands/get-started', () => {
|
|
|
76
73
|
$0: 'hs',
|
|
77
74
|
};
|
|
78
75
|
beforeEach(() => {
|
|
79
|
-
vi.clearAllMocks();
|
|
80
76
|
trackCommandUsage.mockResolvedValue(undefined);
|
|
81
77
|
projectNameAndDestPrompt.mockResolvedValue({
|
|
82
78
|
dest: 'test-destination',
|
|
@@ -9,9 +9,7 @@ import download from '../project/download.js';
|
|
|
9
9
|
import open from '../project/open.js';
|
|
10
10
|
import dev from '../project/dev/index.js';
|
|
11
11
|
import add from '../project/add.js';
|
|
12
|
-
import migrateApp from '../project/migrateApp.js';
|
|
13
12
|
import migrate from '../project/migrate.js';
|
|
14
|
-
import cloneApp from '../project/cloneApp.js';
|
|
15
13
|
import installDeps from '../project/installDeps.js';
|
|
16
14
|
import lint from '../project/lint.js';
|
|
17
15
|
import updateDeps from '../project/updateDeps.js';
|
|
@@ -71,9 +69,7 @@ describe('commands/project', () => {
|
|
|
71
69
|
listBuilds,
|
|
72
70
|
download,
|
|
73
71
|
open,
|
|
74
|
-
migrateApp,
|
|
75
72
|
migrate,
|
|
76
|
-
cloneApp,
|
|
77
73
|
installDeps,
|
|
78
74
|
lint,
|
|
79
75
|
updateDeps,
|
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
import { EXIT_CODES } from '../../lib/enums/exitCodes.js';
|
|
2
|
+
import yargs from 'yargs';
|
|
3
|
+
import upgradeCommand from '../upgrade.js';
|
|
4
|
+
import { trackCommandUsage } from '../../lib/usageTracking.js';
|
|
5
|
+
import { canCliBeAutoUpgraded, getLatestCliVersion, installCliVersion, } from '../../lib/cliUpgradeUtils.js';
|
|
6
|
+
import { confirmPrompt } from '../../lib/prompts/promptUtils.js';
|
|
7
|
+
import { uiLogger } from '../../lib/ui/logger.js';
|
|
8
|
+
import { pkg } from '../../lib/jsonLoader.js';
|
|
9
|
+
import SpinniesManager from '../../lib/ui/SpinniesManager.js';
|
|
10
|
+
import { debugError } from '../../lib/errorHandlers/index.js';
|
|
11
|
+
import { commands } from '../../lang/en.js';
|
|
12
|
+
import { isConfigFlagEnabled } from '@hubspot/local-dev-lib/config';
|
|
13
|
+
vi.mock('../../lib/usageTracking');
|
|
14
|
+
vi.mock('@hubspot/local-dev-lib/config');
|
|
15
|
+
vi.mock('../../lib/cliUpgradeUtils');
|
|
16
|
+
vi.mock('../../lib/prompts/promptUtils');
|
|
17
|
+
vi.mock('../../lib/ui/logger.js');
|
|
18
|
+
vi.mock('../../lib/jsonLoader.js');
|
|
19
|
+
vi.mock('../../lib/ui/SpinniesManager');
|
|
20
|
+
vi.mock('../../lib/errorHandlers/index.js');
|
|
21
|
+
const mockedTrackCommandUsage = vi.mocked(trackCommandUsage);
|
|
22
|
+
const mockedCanCliBeAutoUpgraded = vi.mocked(canCliBeAutoUpgraded);
|
|
23
|
+
const mockedGetLatestCliVersion = vi.mocked(getLatestCliVersion);
|
|
24
|
+
const mockedInstallCliVersion = vi.mocked(installCliVersion);
|
|
25
|
+
const mockedConfirmPrompt = vi.mocked(confirmPrompt);
|
|
26
|
+
const mockedDebugError = vi.mocked(debugError);
|
|
27
|
+
const mockedIsConfigFlagEnabled = vi.mocked(isConfigFlagEnabled);
|
|
28
|
+
const optionSpy = vi
|
|
29
|
+
.spyOn(yargs, 'option')
|
|
30
|
+
.mockReturnValue(yargs);
|
|
31
|
+
const positionalSpy = vi
|
|
32
|
+
.spyOn(yargs, 'positional')
|
|
33
|
+
.mockReturnValue(yargs);
|
|
34
|
+
describe('commands/upgrade', () => {
|
|
35
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
36
|
+
let processExitSpy;
|
|
37
|
+
const accountId = 123456;
|
|
38
|
+
const currentVersion = '7.11.2';
|
|
39
|
+
const latestVersion = '7.12.0';
|
|
40
|
+
beforeEach(() => {
|
|
41
|
+
vi.clearAllMocks();
|
|
42
|
+
// @ts-expect-error Doesn't match the actual signature because then the linter complains about unused variables
|
|
43
|
+
processExitSpy = vi.spyOn(process, 'exit').mockImplementation(() => { });
|
|
44
|
+
vi.mocked(pkg).version = currentVersion;
|
|
45
|
+
vi.mocked(SpinniesManager.init).mockReturnValue(undefined);
|
|
46
|
+
vi.mocked(SpinniesManager.add).mockReturnValue(undefined);
|
|
47
|
+
vi.mocked(SpinniesManager.succeed).mockReturnValue(undefined);
|
|
48
|
+
vi.mocked(SpinniesManager.fail).mockReturnValue(undefined);
|
|
49
|
+
// Default mock for isConfigFlagEnabled - can be overridden in individual tests
|
|
50
|
+
mockedIsConfigFlagEnabled.mockReturnValue(false);
|
|
51
|
+
// Reset mock implementations to ensure clean state
|
|
52
|
+
mockedGetLatestCliVersion.mockReset();
|
|
53
|
+
mockedCanCliBeAutoUpgraded.mockReset();
|
|
54
|
+
mockedInstallCliVersion.mockReset();
|
|
55
|
+
mockedConfirmPrompt.mockReset();
|
|
56
|
+
});
|
|
57
|
+
describe('command', () => {
|
|
58
|
+
it('should have the proper command names', () => {
|
|
59
|
+
expect(upgradeCommand.command).toEqual([
|
|
60
|
+
'upgrade [version]',
|
|
61
|
+
'update [version]',
|
|
62
|
+
]);
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
describe('describe', () => {
|
|
66
|
+
it('should have a description', () => {
|
|
67
|
+
expect(upgradeCommand.describe).toBeDefined();
|
|
68
|
+
expect(upgradeCommand.describe).toContain('Install');
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
describe('builder', () => {
|
|
72
|
+
it('should apply the correct options', async () => {
|
|
73
|
+
await upgradeCommand.builder(yargs);
|
|
74
|
+
expect(positionalSpy).toHaveBeenCalledWith('[version]', {
|
|
75
|
+
describe: commands.upgrade.options.version,
|
|
76
|
+
type: 'string',
|
|
77
|
+
});
|
|
78
|
+
expect(optionSpy).toHaveBeenCalledWith('force', {
|
|
79
|
+
alias: 'f',
|
|
80
|
+
describe: commands.upgrade.options.force,
|
|
81
|
+
type: 'boolean',
|
|
82
|
+
default: false,
|
|
83
|
+
});
|
|
84
|
+
expect(optionSpy).toHaveBeenCalledWith('beta', {
|
|
85
|
+
alias: 'next',
|
|
86
|
+
describe: commands.upgrade.options.beta,
|
|
87
|
+
type: 'boolean',
|
|
88
|
+
default: false,
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
describe('handler', () => {
|
|
93
|
+
it('should track the command usage', async () => {
|
|
94
|
+
mockedGetLatestCliVersion.mockResolvedValueOnce({
|
|
95
|
+
latest: latestVersion,
|
|
96
|
+
next: '7.12.0-beta.1',
|
|
97
|
+
});
|
|
98
|
+
mockedCanCliBeAutoUpgraded.mockResolvedValueOnce(false);
|
|
99
|
+
await upgradeCommand.handler({
|
|
100
|
+
derivedAccountId: accountId,
|
|
101
|
+
});
|
|
102
|
+
expect(mockedTrackCommandUsage).toHaveBeenCalledTimes(1);
|
|
103
|
+
expect(mockedTrackCommandUsage).toHaveBeenCalledWith('upgrade', {}, accountId);
|
|
104
|
+
});
|
|
105
|
+
it('should exit successfully when already on latest version', async () => {
|
|
106
|
+
mockedGetLatestCliVersion.mockResolvedValueOnce({
|
|
107
|
+
latest: currentVersion,
|
|
108
|
+
next: '7.11.2-beta.1',
|
|
109
|
+
});
|
|
110
|
+
await upgradeCommand.handler({});
|
|
111
|
+
expect(uiLogger.log).toHaveBeenCalledWith(commands.upgrade.alreadyLatest(currentVersion));
|
|
112
|
+
expect(processExitSpy).toHaveBeenCalledWith(EXIT_CODES.SUCCESS);
|
|
113
|
+
expect(mockedInstallCliVersion).not.toHaveBeenCalled();
|
|
114
|
+
});
|
|
115
|
+
it('should exit successfully when already on requested version', async () => {
|
|
116
|
+
const requestedVersion = currentVersion;
|
|
117
|
+
mockedGetLatestCliVersion.mockResolvedValueOnce({
|
|
118
|
+
latest: latestVersion,
|
|
119
|
+
next: '7.12.0-beta.1',
|
|
120
|
+
});
|
|
121
|
+
await upgradeCommand.handler({
|
|
122
|
+
version: requestedVersion,
|
|
123
|
+
});
|
|
124
|
+
expect(uiLogger.log).toHaveBeenCalledWith(commands.upgrade.alreadyOnVersion(currentVersion));
|
|
125
|
+
expect(processExitSpy).toHaveBeenCalledWith(EXIT_CODES.SUCCESS);
|
|
126
|
+
expect(mockedInstallCliVersion).not.toHaveBeenCalled();
|
|
127
|
+
});
|
|
128
|
+
it('should show message when CLI is not globally installed', async () => {
|
|
129
|
+
mockedGetLatestCliVersion.mockResolvedValueOnce({
|
|
130
|
+
latest: latestVersion,
|
|
131
|
+
next: '7.12.0-beta.1',
|
|
132
|
+
});
|
|
133
|
+
mockedCanCliBeAutoUpgraded.mockResolvedValueOnce(false);
|
|
134
|
+
await upgradeCommand.handler({});
|
|
135
|
+
expect(uiLogger.log).toHaveBeenCalledWith(commands.upgrade.autoUpgradeNotAvailable(latestVersion));
|
|
136
|
+
expect(processExitSpy).toHaveBeenCalledWith(EXIT_CODES.SUCCESS);
|
|
137
|
+
expect(mockedInstallCliVersion).not.toHaveBeenCalled();
|
|
138
|
+
});
|
|
139
|
+
it('should cancel upgrade when user declines confirmation', async () => {
|
|
140
|
+
mockedGetLatestCliVersion.mockResolvedValueOnce({
|
|
141
|
+
latest: latestVersion,
|
|
142
|
+
next: '7.12.0-beta.1',
|
|
143
|
+
});
|
|
144
|
+
mockedCanCliBeAutoUpgraded.mockResolvedValueOnce(true);
|
|
145
|
+
mockedConfirmPrompt.mockResolvedValueOnce(false);
|
|
146
|
+
await upgradeCommand.handler({});
|
|
147
|
+
expect(mockedConfirmPrompt).toHaveBeenCalledWith(commands.upgrade.confirmPrompt(currentVersion, latestVersion), { defaultAnswer: true });
|
|
148
|
+
expect(uiLogger.log).toHaveBeenCalledWith(commands.upgrade.cancelled);
|
|
149
|
+
expect(processExitSpy).toHaveBeenCalledWith(EXIT_CODES.SUCCESS);
|
|
150
|
+
expect(mockedInstallCliVersion).not.toHaveBeenCalled();
|
|
151
|
+
});
|
|
152
|
+
it('should upgrade successfully when user confirms', async () => {
|
|
153
|
+
mockedGetLatestCliVersion.mockResolvedValueOnce({
|
|
154
|
+
latest: latestVersion,
|
|
155
|
+
next: '7.12.0-beta.1',
|
|
156
|
+
});
|
|
157
|
+
mockedCanCliBeAutoUpgraded.mockResolvedValueOnce(true);
|
|
158
|
+
mockedConfirmPrompt.mockResolvedValueOnce(true);
|
|
159
|
+
mockedInstallCliVersion.mockResolvedValueOnce(undefined);
|
|
160
|
+
await upgradeCommand.handler({});
|
|
161
|
+
expect(mockedConfirmPrompt).toHaveBeenCalled();
|
|
162
|
+
expect(SpinniesManager.add).toHaveBeenCalledWith('upgrade', {
|
|
163
|
+
text: commands.upgrade.installing(latestVersion),
|
|
164
|
+
});
|
|
165
|
+
expect(mockedInstallCliVersion).toHaveBeenCalledWith(latestVersion);
|
|
166
|
+
expect(SpinniesManager.succeed).toHaveBeenCalledWith('upgrade', {
|
|
167
|
+
text: commands.upgrade.success(latestVersion),
|
|
168
|
+
});
|
|
169
|
+
expect(processExitSpy).toHaveBeenCalledWith(EXIT_CODES.SUCCESS);
|
|
170
|
+
});
|
|
171
|
+
it('should upgrade without confirmation when --force is used', async () => {
|
|
172
|
+
mockedGetLatestCliVersion.mockResolvedValueOnce({
|
|
173
|
+
latest: latestVersion,
|
|
174
|
+
next: '7.12.0-beta.1',
|
|
175
|
+
});
|
|
176
|
+
mockedCanCliBeAutoUpgraded.mockResolvedValueOnce(true);
|
|
177
|
+
mockedInstallCliVersion.mockResolvedValueOnce(undefined);
|
|
178
|
+
await upgradeCommand.handler({
|
|
179
|
+
force: true,
|
|
180
|
+
});
|
|
181
|
+
expect(mockedConfirmPrompt).not.toHaveBeenCalled();
|
|
182
|
+
expect(mockedInstallCliVersion).toHaveBeenCalledWith(latestVersion);
|
|
183
|
+
expect(processExitSpy).toHaveBeenCalledWith(EXIT_CODES.SUCCESS);
|
|
184
|
+
});
|
|
185
|
+
it('should install specific version when provided', async () => {
|
|
186
|
+
const specificVersion = '7.10.0';
|
|
187
|
+
mockedGetLatestCliVersion.mockResolvedValueOnce({
|
|
188
|
+
latest: latestVersion,
|
|
189
|
+
next: '7.12.0',
|
|
190
|
+
});
|
|
191
|
+
mockedCanCliBeAutoUpgraded.mockResolvedValueOnce(true);
|
|
192
|
+
mockedConfirmPrompt.mockResolvedValueOnce(true);
|
|
193
|
+
mockedInstallCliVersion.mockResolvedValueOnce(undefined);
|
|
194
|
+
await upgradeCommand.handler({
|
|
195
|
+
version: specificVersion,
|
|
196
|
+
});
|
|
197
|
+
expect(mockedInstallCliVersion).toHaveBeenCalledWith(specificVersion);
|
|
198
|
+
expect(SpinniesManager.add).toHaveBeenCalledWith('upgrade', {
|
|
199
|
+
text: commands.upgrade.installing(specificVersion),
|
|
200
|
+
});
|
|
201
|
+
expect(processExitSpy).toHaveBeenCalledWith(EXIT_CODES.SUCCESS);
|
|
202
|
+
});
|
|
203
|
+
it('should handle installation errors', async () => {
|
|
204
|
+
const error = new Error('Installation failed');
|
|
205
|
+
mockedGetLatestCliVersion.mockResolvedValueOnce({
|
|
206
|
+
latest: latestVersion,
|
|
207
|
+
next: '7.12.0-beta.1',
|
|
208
|
+
});
|
|
209
|
+
mockedCanCliBeAutoUpgraded.mockResolvedValueOnce(true);
|
|
210
|
+
mockedConfirmPrompt.mockResolvedValueOnce(true);
|
|
211
|
+
mockedInstallCliVersion.mockRejectedValueOnce(error);
|
|
212
|
+
await upgradeCommand.handler({});
|
|
213
|
+
expect(mockedDebugError).toHaveBeenCalledWith(error);
|
|
214
|
+
expect(SpinniesManager.fail).toHaveBeenCalledWith('upgrade', {
|
|
215
|
+
text: commands.upgrade.errors.installFailed,
|
|
216
|
+
});
|
|
217
|
+
expect(uiLogger.error).toHaveBeenCalledWith(commands.upgrade.errors.generic);
|
|
218
|
+
expect(processExitSpy).toHaveBeenCalledWith(EXIT_CODES.ERROR);
|
|
219
|
+
});
|
|
220
|
+
it('should install beta version when --beta flag is used', async () => {
|
|
221
|
+
const betaVersion = '7.13.0-beta.1';
|
|
222
|
+
mockedGetLatestCliVersion.mockResolvedValueOnce({
|
|
223
|
+
latest: latestVersion,
|
|
224
|
+
next: betaVersion,
|
|
225
|
+
});
|
|
226
|
+
mockedCanCliBeAutoUpgraded.mockResolvedValueOnce(true);
|
|
227
|
+
mockedConfirmPrompt.mockResolvedValueOnce(true);
|
|
228
|
+
mockedInstallCliVersion.mockResolvedValueOnce(undefined);
|
|
229
|
+
await upgradeCommand.handler({
|
|
230
|
+
beta: true,
|
|
231
|
+
});
|
|
232
|
+
expect(mockedGetLatestCliVersion).toHaveBeenCalled();
|
|
233
|
+
expect(mockedInstallCliVersion).toHaveBeenCalledWith(betaVersion);
|
|
234
|
+
expect(SpinniesManager.add).toHaveBeenCalledWith('upgrade', {
|
|
235
|
+
text: commands.upgrade.installing(betaVersion),
|
|
236
|
+
});
|
|
237
|
+
expect(SpinniesManager.succeed).toHaveBeenCalledWith('upgrade', {
|
|
238
|
+
text: commands.upgrade.success(betaVersion),
|
|
239
|
+
});
|
|
240
|
+
expect(processExitSpy).toHaveBeenCalledWith(EXIT_CODES.SUCCESS);
|
|
241
|
+
});
|
|
242
|
+
it('should error when beta is requested but next version is not available', async () => {
|
|
243
|
+
mockedGetLatestCliVersion.mockResolvedValueOnce({
|
|
244
|
+
latest: latestVersion,
|
|
245
|
+
next: null,
|
|
246
|
+
});
|
|
247
|
+
mockedIsConfigFlagEnabled.mockReturnValue(false);
|
|
248
|
+
await upgradeCommand.handler({
|
|
249
|
+
beta: true,
|
|
250
|
+
});
|
|
251
|
+
expect(mockedGetLatestCliVersion).toHaveBeenCalled();
|
|
252
|
+
expect(uiLogger.error).toHaveBeenCalledWith(commands.upgrade.errors.unableToDetermineLatestVersion);
|
|
253
|
+
expect(processExitSpy).toHaveBeenCalledWith(EXIT_CODES.ERROR);
|
|
254
|
+
expect(mockedInstallCliVersion).not.toHaveBeenCalled();
|
|
255
|
+
expect(mockedCanCliBeAutoUpgraded).not.toHaveBeenCalled();
|
|
256
|
+
});
|
|
257
|
+
it('should show already on latest beta version message', async () => {
|
|
258
|
+
const betaVersion = '7.12.0-beta.1';
|
|
259
|
+
vi.mocked(pkg).version = betaVersion;
|
|
260
|
+
mockedGetLatestCliVersion.mockResolvedValueOnce({
|
|
261
|
+
latest: latestVersion,
|
|
262
|
+
next: betaVersion,
|
|
263
|
+
});
|
|
264
|
+
await upgradeCommand.handler({
|
|
265
|
+
beta: true,
|
|
266
|
+
});
|
|
267
|
+
expect(uiLogger.log).toHaveBeenCalledWith(commands.upgrade.alreadyLatest(betaVersion, true));
|
|
268
|
+
expect(processExitSpy).toHaveBeenCalledWith(EXIT_CODES.SUCCESS);
|
|
269
|
+
expect(mockedInstallCliVersion).not.toHaveBeenCalled();
|
|
270
|
+
});
|
|
271
|
+
it('should not show auto-upgrade message when beta flag is used', async () => {
|
|
272
|
+
const betaVersion = '7.12.0-beta.1';
|
|
273
|
+
mockedGetLatestCliVersion.mockResolvedValueOnce({
|
|
274
|
+
latest: latestVersion,
|
|
275
|
+
next: betaVersion,
|
|
276
|
+
});
|
|
277
|
+
mockedCanCliBeAutoUpgraded.mockResolvedValueOnce(true);
|
|
278
|
+
mockedConfirmPrompt.mockResolvedValueOnce(true);
|
|
279
|
+
mockedInstallCliVersion.mockResolvedValueOnce(undefined);
|
|
280
|
+
mockedIsConfigFlagEnabled.mockReturnValue(false);
|
|
281
|
+
await upgradeCommand.handler({
|
|
282
|
+
beta: true,
|
|
283
|
+
});
|
|
284
|
+
// Verify the auto-upgrade message was not logged
|
|
285
|
+
const logCalls = vi.mocked(uiLogger.log).mock.calls;
|
|
286
|
+
const autoUpgradeMessageCall = logCalls.find(call => call[0]?.includes('automatic updates'));
|
|
287
|
+
expect(autoUpgradeMessageCall).toBeUndefined();
|
|
288
|
+
// Should succeed even though auto-updates are disabled when beta is used
|
|
289
|
+
expect(processExitSpy).toHaveBeenCalledWith(EXIT_CODES.SUCCESS);
|
|
290
|
+
expect(mockedInstallCliVersion).toHaveBeenCalledWith(betaVersion);
|
|
291
|
+
});
|
|
292
|
+
it('should upgrade to beta without confirmation when --force and --beta are used', async () => {
|
|
293
|
+
const betaVersion = '7.12.0-beta.1';
|
|
294
|
+
mockedGetLatestCliVersion.mockResolvedValueOnce({
|
|
295
|
+
latest: latestVersion,
|
|
296
|
+
next: betaVersion,
|
|
297
|
+
});
|
|
298
|
+
mockedCanCliBeAutoUpgraded.mockResolvedValueOnce(true);
|
|
299
|
+
mockedInstallCliVersion.mockResolvedValueOnce(undefined);
|
|
300
|
+
await upgradeCommand.handler({
|
|
301
|
+
force: true,
|
|
302
|
+
beta: true,
|
|
303
|
+
});
|
|
304
|
+
expect(mockedConfirmPrompt).not.toHaveBeenCalled();
|
|
305
|
+
expect(mockedInstallCliVersion).toHaveBeenCalledWith(betaVersion);
|
|
306
|
+
expect(processExitSpy).toHaveBeenCalledWith(EXIT_CODES.SUCCESS);
|
|
307
|
+
});
|
|
308
|
+
});
|
|
309
|
+
});
|