@hubspot/cli 7.7.19-experimental.3 → 7.7.20-experimental.0

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.
Files changed (296) hide show
  1. package/api/__tests__/migrate.test.d.ts +1 -0
  2. package/api/__tests__/migrate.test.js +183 -0
  3. package/commands/__tests__/account.test.d.ts +1 -0
  4. package/commands/__tests__/account.test.js +74 -0
  5. package/commands/__tests__/auth.test.d.ts +1 -0
  6. package/commands/__tests__/auth.test.js +43 -0
  7. package/commands/__tests__/cms.test.d.ts +1 -0
  8. package/commands/__tests__/cms.test.js +49 -0
  9. package/commands/__tests__/config.test.d.ts +1 -0
  10. package/commands/__tests__/config.test.js +49 -0
  11. package/commands/__tests__/create.test.d.ts +1 -0
  12. package/commands/__tests__/create.test.js +38 -0
  13. package/commands/__tests__/customObject.test.d.ts +1 -0
  14. package/commands/__tests__/customObject.test.js +54 -0
  15. package/commands/__tests__/doctor.test.d.ts +1 -0
  16. package/commands/__tests__/doctor.test.js +139 -0
  17. package/commands/__tests__/feedback.test.d.ts +1 -0
  18. package/commands/__tests__/feedback.test.js +62 -0
  19. package/commands/__tests__/fetch.test.d.ts +1 -0
  20. package/commands/__tests__/fetch.test.js +56 -0
  21. package/commands/__tests__/filemanager.test.d.ts +1 -0
  22. package/commands/__tests__/filemanager.test.js +50 -0
  23. package/commands/__tests__/function.test.d.ts +1 -0
  24. package/commands/__tests__/function.test.js +51 -0
  25. package/commands/__tests__/getStarted.test.d.ts +1 -0
  26. package/commands/__tests__/getStarted.test.js +170 -0
  27. package/commands/__tests__/hubdb.test.d.ts +1 -0
  28. package/commands/__tests__/hubdb.test.js +55 -0
  29. package/commands/__tests__/init.test.d.ts +1 -0
  30. package/commands/__tests__/init.test.js +47 -0
  31. package/commands/__tests__/lint.test.d.ts +1 -0
  32. package/commands/__tests__/lint.test.js +38 -0
  33. package/commands/__tests__/list.test.d.ts +1 -0
  34. package/commands/__tests__/list.test.js +47 -0
  35. package/commands/__tests__/logs.test.d.ts +1 -0
  36. package/commands/__tests__/logs.test.js +70 -0
  37. package/commands/__tests__/mcp.test.d.ts +1 -0
  38. package/commands/__tests__/mcp.test.js +51 -0
  39. package/commands/__tests__/mv.test.d.ts +1 -0
  40. package/commands/__tests__/mv.test.js +84 -0
  41. package/commands/__tests__/open.test.d.ts +1 -0
  42. package/commands/__tests__/open.test.js +96 -0
  43. package/commands/__tests__/project.test.d.ts +1 -0
  44. package/commands/__tests__/project.test.js +100 -0
  45. package/commands/__tests__/remove.test.d.ts +1 -0
  46. package/commands/__tests__/remove.test.js +77 -0
  47. package/commands/__tests__/sandbox.test.d.ts +1 -0
  48. package/commands/__tests__/sandbox.test.js +49 -0
  49. package/commands/__tests__/secret.test.d.ts +1 -0
  50. package/commands/__tests__/secret.test.js +54 -0
  51. package/commands/__tests__/testAccount.test.d.ts +1 -0
  52. package/commands/__tests__/testAccount.test.js +60 -0
  53. package/commands/__tests__/theme.test.d.ts +1 -0
  54. package/commands/__tests__/theme.test.js +52 -0
  55. package/commands/account/__tests__/auth.test.d.ts +1 -0
  56. package/commands/account/__tests__/auth.test.js +31 -0
  57. package/commands/account/__tests__/clean.test.d.ts +1 -0
  58. package/commands/account/__tests__/clean.test.js +33 -0
  59. package/commands/account/__tests__/createOverride.test.d.ts +1 -0
  60. package/commands/account/__tests__/createOverride.test.js +37 -0
  61. package/commands/account/__tests__/info.test.d.ts +1 -0
  62. package/commands/account/__tests__/info.test.js +33 -0
  63. package/commands/account/__tests__/list.test.d.ts +1 -0
  64. package/commands/account/__tests__/list.test.js +33 -0
  65. package/commands/account/__tests__/remove.test.d.ts +1 -0
  66. package/commands/account/__tests__/remove.test.js +41 -0
  67. package/commands/account/__tests__/removeOverride.d.ts +1 -0
  68. package/commands/account/__tests__/removeOverride.js +30 -0
  69. package/commands/account/__tests__/rename.test.d.ts +1 -0
  70. package/commands/account/__tests__/rename.test.js +47 -0
  71. package/commands/account/__tests__/use.test.d.ts +1 -0
  72. package/commands/account/__tests__/use.test.js +37 -0
  73. package/commands/app/__tests__/migrate.test.d.ts +1 -0
  74. package/commands/app/__tests__/migrate.test.js +129 -0
  75. package/commands/app/secret/__tests__/add.test.d.ts +1 -0
  76. package/commands/app/secret/__tests__/add.test.js +33 -0
  77. package/commands/app/secret/__tests__/delete.test.d.ts +1 -0
  78. package/commands/app/secret/__tests__/delete.test.js +33 -0
  79. package/commands/app/secret/__tests__/list.test.d.ts +1 -0
  80. package/commands/app/secret/__tests__/list.test.js +30 -0
  81. package/commands/app/secret/__tests__/update.test.d.ts +1 -0
  82. package/commands/app/secret/__tests__/update.test.js +33 -0
  83. package/commands/app.js +1 -6
  84. package/commands/customObject/__tests__/create.test.d.ts +1 -0
  85. package/commands/customObject/__tests__/create.test.js +45 -0
  86. package/commands/customObject/__tests__/schema.test.d.ts +1 -0
  87. package/commands/customObject/__tests__/schema.test.js +58 -0
  88. package/commands/customObject/schema/__tests__/create.test.d.ts +1 -0
  89. package/commands/customObject/schema/__tests__/create.test.js +33 -0
  90. package/commands/customObject/schema/__tests__/delete.test.d.ts +1 -0
  91. package/commands/customObject/schema/__tests__/delete.test.js +47 -0
  92. package/commands/customObject/schema/__tests__/fetch-all.test.d.ts +1 -0
  93. package/commands/customObject/schema/__tests__/fetch-all.test.js +46 -0
  94. package/commands/customObject/schema/__tests__/fetch.test.d.ts +1 -0
  95. package/commands/customObject/schema/__tests__/fetch.test.js +50 -0
  96. package/commands/customObject/schema/__tests__/list.test.d.ts +1 -0
  97. package/commands/customObject/schema/__tests__/list.test.js +34 -0
  98. package/commands/customObject/schema/__tests__/update.test.d.ts +1 -0
  99. package/commands/customObject/schema/__tests__/update.test.js +45 -0
  100. package/commands/fetch.js +0 -1
  101. package/commands/filemanager/__tests__/fetch.test.d.ts +1 -0
  102. package/commands/filemanager/__tests__/fetch.test.js +37 -0
  103. package/commands/filemanager/__tests__/upload.test.d.ts +1 -0
  104. package/commands/filemanager/__tests__/upload.test.js +35 -0
  105. package/commands/hubdb/__tests__/clear.test.d.ts +1 -0
  106. package/commands/hubdb/__tests__/clear.test.js +33 -0
  107. package/commands/hubdb/__tests__/create.test.d.ts +1 -0
  108. package/commands/hubdb/__tests__/create.test.js +33 -0
  109. package/commands/hubdb/__tests__/delete.test.d.ts +1 -0
  110. package/commands/hubdb/__tests__/delete.test.js +33 -0
  111. package/commands/hubdb/__tests__/fetch.test.d.ts +1 -0
  112. package/commands/hubdb/__tests__/fetch.test.js +33 -0
  113. package/commands/hubdb/__tests__/list.test.d.ts +1 -0
  114. package/commands/hubdb/__tests__/list.test.js +101 -0
  115. package/commands/logs.js +0 -1
  116. package/commands/mcp/__tests__/setup.test.d.ts +1 -0
  117. package/commands/mcp/__tests__/setup.test.js +31 -0
  118. package/commands/mcp/__tests__/start.test.d.ts +1 -0
  119. package/commands/mcp/__tests__/start.test.js +32 -0
  120. package/commands/project/__tests__/add.test.d.ts +1 -0
  121. package/commands/project/__tests__/add.test.js +48 -0
  122. package/commands/project/__tests__/create.test.d.ts +1 -0
  123. package/commands/project/__tests__/create.test.js +45 -0
  124. package/commands/project/__tests__/deploy.test.d.ts +1 -0
  125. package/commands/project/__tests__/deploy.test.js +344 -0
  126. package/commands/project/__tests__/devUnifiedFlow.test.d.ts +1 -0
  127. package/commands/project/__tests__/devUnifiedFlow.test.js +419 -0
  128. package/commands/project/__tests__/download.test.d.ts +1 -0
  129. package/commands/project/__tests__/download.test.js +44 -0
  130. package/commands/project/__tests__/fixtures/exampleProject.json +33 -0
  131. package/commands/project/__tests__/installDeps.test.d.ts +1 -0
  132. package/commands/project/__tests__/installDeps.test.js +180 -0
  133. package/commands/project/__tests__/listBuilds.test.d.ts +1 -0
  134. package/commands/project/__tests__/listBuilds.test.js +43 -0
  135. package/commands/project/__tests__/logs.test.d.ts +1 -0
  136. package/commands/project/__tests__/logs.test.js +246 -0
  137. package/commands/project/__tests__/migrate.test.d.ts +1 -0
  138. package/commands/project/__tests__/migrate.test.js +116 -0
  139. package/commands/project/__tests__/migrateApp.test.d.ts +1 -0
  140. package/commands/project/__tests__/migrateApp.test.js +87 -0
  141. package/commands/project/__tests__/open.test.d.ts +1 -0
  142. package/commands/project/__tests__/open.test.js +44 -0
  143. package/commands/project/__tests__/profile.test.d.ts +1 -0
  144. package/commands/project/__tests__/profile.test.js +47 -0
  145. package/commands/project/__tests__/upload.test.d.ts +1 -0
  146. package/commands/project/__tests__/upload.test.js +48 -0
  147. package/commands/project/__tests__/watch.test.d.ts +1 -0
  148. package/commands/project/__tests__/watch.test.js +40 -0
  149. package/commands/project/dev/unifiedFlow.js +1 -1
  150. package/commands/sandbox/__tests__/create.test.d.ts +1 -0
  151. package/commands/sandbox/__tests__/create.test.js +36 -0
  152. package/commands/sandbox/__tests__/delete.test.d.ts +1 -0
  153. package/commands/sandbox/__tests__/delete.test.js +36 -0
  154. package/commands/secret/__tests__/addSecret.test.d.ts +1 -0
  155. package/commands/secret/__tests__/addSecret.test.js +34 -0
  156. package/commands/secret/__tests__/deleteSecret.test.d.ts +1 -0
  157. package/commands/secret/__tests__/deleteSecret.test.js +46 -0
  158. package/commands/secret/__tests__/listSecret.test.d.ts +1 -0
  159. package/commands/secret/__tests__/listSecret.test.js +34 -0
  160. package/commands/secret/__tests__/updateSecret.test.d.ts +1 -0
  161. package/commands/secret/__tests__/updateSecret.test.js +34 -0
  162. package/commands/testAccount/__tests__/create.test.d.ts +1 -0
  163. package/commands/testAccount/__tests__/create.test.js +38 -0
  164. package/commands/testAccount/__tests__/createConfig.test.d.ts +1 -0
  165. package/commands/testAccount/__tests__/createConfig.test.js +40 -0
  166. package/commands/testAccount/__tests__/delete.test.d.ts +1 -0
  167. package/commands/testAccount/__tests__/delete.test.js +36 -0
  168. package/commands/testAccount/create.js +24 -14
  169. package/commands/theme/__tests__/generate-selectors.test.d.ts +1 -0
  170. package/commands/theme/__tests__/generate-selectors.test.js +33 -0
  171. package/commands/theme/__tests__/marketplace-validate.test.d.ts +1 -0
  172. package/commands/theme/__tests__/marketplace-validate.test.js +41 -0
  173. package/commands/theme/__tests__/preview.test.d.ts +1 -0
  174. package/commands/theme/__tests__/preview.test.js +65 -0
  175. package/lang/en.d.ts +6 -65
  176. package/lang/en.js +6 -65
  177. package/lib/__tests__/accountTypes.test.d.ts +1 -0
  178. package/lib/__tests__/accountTypes.test.js +100 -0
  179. package/lib/__tests__/buildAccount.test.d.ts +1 -0
  180. package/lib/__tests__/buildAccount.test.js +231 -0
  181. package/lib/__tests__/commonOpts.test.d.ts +1 -0
  182. package/lib/__tests__/commonOpts.test.js +87 -0
  183. package/lib/__tests__/dependencyManagement.test.d.ts +1 -0
  184. package/lib/__tests__/dependencyManagement.test.js +180 -0
  185. package/lib/__tests__/developerTestAccounts.test.d.ts +1 -0
  186. package/lib/__tests__/developerTestAccounts.test.js +180 -0
  187. package/lib/__tests__/hasFeature.test.d.ts +1 -0
  188. package/lib/__tests__/hasFeature.test.js +37 -0
  189. package/lib/__tests__/npm.test.d.ts +1 -0
  190. package/lib/__tests__/npm.test.js +62 -0
  191. package/lib/__tests__/oauth.test.d.ts +1 -0
  192. package/lib/__tests__/oauth.test.js +113 -0
  193. package/lib/__tests__/parsing.test.d.ts +1 -0
  194. package/lib/__tests__/parsing.test.js +36 -0
  195. package/lib/__tests__/polling.test.d.ts +1 -0
  196. package/lib/__tests__/polling.test.js +78 -0
  197. package/lib/__tests__/process.test.d.ts +1 -0
  198. package/lib/__tests__/process.test.js +90 -0
  199. package/lib/__tests__/projectProfiles.test.d.ts +1 -0
  200. package/lib/__tests__/projectProfiles.test.js +134 -0
  201. package/lib/__tests__/sandboxSync.test.d.ts +1 -0
  202. package/lib/__tests__/sandboxSync.test.js +131 -0
  203. package/lib/__tests__/sandboxes.test.d.ts +1 -0
  204. package/lib/__tests__/sandboxes.test.js +148 -0
  205. package/lib/__tests__/serverlessLogs.test.d.ts +1 -0
  206. package/lib/__tests__/serverlessLogs.test.js +154 -0
  207. package/lib/__tests__/usageTracking.test.d.ts +1 -0
  208. package/lib/__tests__/usageTracking.test.js +171 -0
  209. package/lib/__tests__/validation.test.d.ts +1 -0
  210. package/lib/__tests__/validation.test.js +145 -0
  211. package/lib/__tests__/yargsUtils.test.d.ts +1 -0
  212. package/lib/__tests__/yargsUtils.test.js +74 -0
  213. package/lib/app/__tests__/migrate.test.d.ts +1 -0
  214. package/lib/app/__tests__/migrate.test.js +495 -0
  215. package/lib/app/__tests__/migrate_legacy.test.d.ts +1 -0
  216. package/lib/app/__tests__/migrate_legacy.test.js +136 -0
  217. package/lib/buildAccount.d.ts +1 -7
  218. package/lib/buildAccount.js +4 -54
  219. package/lib/doctor/Diagnosis.js +11 -11
  220. package/lib/doctor/Doctor.js +42 -42
  221. package/lib/doctor/__tests__/Diagnosis.test.d.ts +1 -0
  222. package/lib/doctor/__tests__/Diagnosis.test.js +87 -0
  223. package/lib/doctor/__tests__/DiagnosticInfoBuilder.test.d.ts +1 -0
  224. package/lib/doctor/__tests__/DiagnosticInfoBuilder.test.js +172 -0
  225. package/lib/doctor/__tests__/Doctor.test.d.ts +1 -0
  226. package/lib/doctor/__tests__/Doctor.test.js +398 -0
  227. package/lib/mcp/setup.js +18 -2
  228. package/lib/middleware/__test__/configMiddleware.test.js +12 -12
  229. package/lib/middleware/__test__/gitMiddleware.test.js +4 -4
  230. package/lib/middleware/__test__/notificationsMiddleware.test.js +2 -2
  231. package/lib/middleware/__test__/requestMiddleware.test.js +2 -2
  232. package/lib/middleware/__test__/yargsChecksMiddleware.test.js +7 -7
  233. package/lib/middleware/notificationsMiddleware.js +16 -13
  234. package/lib/projects/__tests__/AppDevModeInterface.test.d.ts +1 -0
  235. package/lib/projects/__tests__/AppDevModeInterface.test.js +517 -0
  236. package/lib/projects/__tests__/LocalDevProcess.test.d.ts +1 -0
  237. package/lib/projects/__tests__/LocalDevProcess.test.js +314 -0
  238. package/lib/projects/__tests__/LocalDevWebsocketServer.test.d.ts +1 -0
  239. package/lib/projects/__tests__/LocalDevWebsocketServer.test.js +175 -0
  240. package/lib/projects/__tests__/ProjectLogsManager.test.d.ts +1 -0
  241. package/lib/projects/__tests__/ProjectLogsManager.test.js +191 -0
  242. package/lib/projects/__tests__/buildAndDeploy.test.d.ts +1 -0
  243. package/lib/projects/__tests__/buildAndDeploy.test.js +25 -0
  244. package/lib/projects/__tests__/components.test.d.ts +1 -0
  245. package/lib/projects/__tests__/components.test.js +186 -0
  246. package/lib/projects/__tests__/projects.test.d.ts +1 -0
  247. package/lib/projects/__tests__/projects.test.js +89 -0
  248. package/lib/projects/__tests__/structure.test.d.ts +1 -0
  249. package/lib/projects/__tests__/structure.test.js +249 -0
  250. package/lib/projects/add/__tests__/legacyAddComponent.test.d.ts +1 -0
  251. package/lib/projects/add/__tests__/legacyAddComponent.test.js +206 -0
  252. package/lib/projects/add/__tests__/v3AddComponent.test.d.ts +1 -0
  253. package/lib/projects/add/__tests__/v3AddComponent.test.js +190 -0
  254. package/lib/projects/create/__tests__/legacy.test.d.ts +1 -0
  255. package/lib/projects/create/__tests__/legacy.test.js +126 -0
  256. package/lib/projects/create/__tests__/v3.test.d.ts +1 -0
  257. package/lib/projects/create/__tests__/v3.test.js +80 -0
  258. package/lib/projects/localDev/DevServerManager.js +0 -1
  259. package/lib/projects/localDev/helpers.d.ts +1 -1
  260. package/lib/projects/localDev/helpers.js +2 -2
  261. package/lib/projects/structure.d.ts +2 -2
  262. package/lib/projects/upload.d.ts +1 -2
  263. package/lib/projects/upload.js +0 -1
  264. package/lib/prompts/__tests__/downloadProjectPrompt.test.d.ts +1 -0
  265. package/lib/prompts/__tests__/downloadProjectPrompt.test.js +30 -0
  266. package/lib/prompts/__tests__/projectsLogsPrompt.test.d.ts +1 -0
  267. package/lib/prompts/__tests__/projectsLogsPrompt.test.js +42 -0
  268. package/lib/prompts/createDeveloperTestAccountConfigPrompt.d.ts +10 -9
  269. package/lib/prompts/createDeveloperTestAccountConfigPrompt.js +43 -81
  270. package/lib/schema.js +5 -1
  271. package/lib/ui/SpinniesManager.js +0 -1
  272. package/lib/ui/supportHyperlinks.js +2 -2
  273. package/lib/ui/supportsColor.js +2 -2
  274. package/lib/utils/hasFlag.d.ts +1 -0
  275. package/lib/utils/hasFlag.js +15 -0
  276. package/lib/yargsUtils.d.ts +2 -1
  277. package/lib/yargsUtils.js +3 -13
  278. package/mcp-server/tools/project/__tests__/AddFeatureToProject.test.d.ts +1 -0
  279. package/mcp-server/tools/project/__tests__/AddFeatureToProject.test.js +152 -0
  280. package/mcp-server/tools/project/__tests__/CreateProjectTool.test.d.ts +1 -0
  281. package/mcp-server/tools/project/__tests__/CreateProjectTool.test.js +129 -0
  282. package/mcp-server/tools/project/__tests__/DeployProject.test.d.ts +1 -0
  283. package/mcp-server/tools/project/__tests__/DeployProject.test.js +120 -0
  284. package/mcp-server/tools/project/__tests__/GuidedWalkthroughTool.test.d.ts +1 -0
  285. package/mcp-server/tools/project/__tests__/GuidedWalkthroughTool.test.js +127 -0
  286. package/mcp-server/tools/project/__tests__/UploadProjectTools.test.d.ts +1 -0
  287. package/mcp-server/tools/project/__tests__/UploadProjectTools.test.js +108 -0
  288. package/mcp-server/tools/project/__tests__/ValidateProjectTool.test.d.ts +1 -0
  289. package/mcp-server/tools/project/__tests__/ValidateProjectTool.test.js +111 -0
  290. package/mcp-server/utils/__tests__/command.test.d.ts +1 -0
  291. package/mcp-server/utils/__tests__/command.test.js +47 -0
  292. package/mcp-server/utils/__tests__/project.test.d.ts +1 -0
  293. package/mcp-server/utils/__tests__/project.test.js +81 -0
  294. package/package.json +8 -8
  295. package/commands/app/install.d.ts +0 -8
  296. package/commands/app/install.js +0 -127
@@ -0,0 +1,180 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ const yargs_1 = __importDefault(require("yargs"));
40
+ const path_1 = __importDefault(require("path"));
41
+ const logger_1 = require("@hubspot/local-dev-lib/logger");
42
+ const projectUtils = __importStar(require("../../../lib/projects/config"));
43
+ const exitCodes_1 = require("../../../lib/enums/exitCodes");
44
+ const usageTracking_1 = require("../../../lib/usageTracking");
45
+ const dependencyManagement = __importStar(require("../../../lib/dependencyManagement"));
46
+ const promptUtils = __importStar(require("../../../lib/prompts/promptUtils"));
47
+ const installDeps_1 = __importDefault(require("../installDeps"));
48
+ vi.mock('@hubspot/local-dev-lib/logger');
49
+ vi.mock('../../../lib/projects/config');
50
+ vi.mock('../../../lib/dependencyManagement');
51
+ vi.mock('../../../lib/prompts/promptUtils');
52
+ vi.mock('../../../lib/usageTracking');
53
+ vi.mock('../../../lib/commonOpts');
54
+ const exampleSpy = vi.spyOn(yargs_1.default, 'example');
55
+ const processExitSpy = vi.spyOn(process, 'exit');
56
+ const getProjectConfigSpy = vi.spyOn(projectUtils, 'getProjectConfig');
57
+ const promptUserSpy = vi.spyOn(promptUtils, 'promptUser');
58
+ const getProjectPackageJsonLocationsSpy = vi.spyOn(dependencyManagement, 'getProjectPackageJsonLocations');
59
+ const installPackagesSpy = vi.spyOn(dependencyManagement, 'installPackages');
60
+ describe('commands/project/installDeps', () => {
61
+ describe('command', () => {
62
+ it('should have the correct command structure', () => {
63
+ expect(installDeps_1.default.command).toEqual('install-deps [packages..]');
64
+ });
65
+ });
66
+ describe('describe', () => {
67
+ it('should not provide a description', () => {
68
+ expect(installDeps_1.default.describe).toEqual(expect.stringMatching(/Install the dependencies for your project, or add a dependency to a subcomponent of a project/));
69
+ });
70
+ });
71
+ describe('builder', () => {
72
+ it('should provide examples', () => {
73
+ installDeps_1.default.builder(yargs_1.default);
74
+ expect(exampleSpy).toHaveBeenCalledTimes(1);
75
+ });
76
+ });
77
+ describe('handler', () => {
78
+ let args;
79
+ beforeEach(() => {
80
+ args = {
81
+ derivedAccountId: 999999,
82
+ };
83
+ // @ts-expect-error Doesn't match the actual signature because then the linter complains about unused variables
84
+ processExitSpy.mockImplementation(() => { });
85
+ });
86
+ it('should track the command usage', async () => {
87
+ await installDeps_1.default.handler(args);
88
+ expect(usageTracking_1.trackCommandUsage).toHaveBeenCalledTimes(1);
89
+ expect(usageTracking_1.trackCommandUsage).toHaveBeenCalledWith('project-install-deps', undefined, args.derivedAccountId);
90
+ });
91
+ it('should handle exceptions', async () => {
92
+ const error = new Error('Something went super wrong');
93
+ getProjectConfigSpy.mockImplementationOnce(() => {
94
+ throw error;
95
+ });
96
+ await installDeps_1.default.handler(args);
97
+ expect(logger_1.logger.error).toHaveBeenCalledTimes(1);
98
+ expect(logger_1.logger.error).toHaveBeenCalledWith(error.message);
99
+ expect(processExitSpy).toHaveBeenCalledTimes(1);
100
+ expect(processExitSpy).toHaveBeenCalledWith(exitCodes_1.EXIT_CODES.ERROR);
101
+ });
102
+ it('should log an error and exit when the project config is not defined', async () => {
103
+ getProjectConfigSpy.mockResolvedValueOnce({
104
+ projectDir: null,
105
+ projectConfig: null,
106
+ });
107
+ await installDeps_1.default.handler(args);
108
+ expect(logger_1.logger.error).toHaveBeenCalledTimes(1);
109
+ expect(logger_1.logger.error).toHaveBeenCalledWith('No project detected. Run this command from a project directory.');
110
+ expect(processExitSpy).toHaveBeenCalledTimes(1);
111
+ expect(processExitSpy).toHaveBeenCalledWith(exitCodes_1.EXIT_CODES.ERROR);
112
+ });
113
+ it('should log an error and exit when the project config has no projectDir', async () => {
114
+ getProjectConfigSpy.mockResolvedValueOnce({
115
+ projectDir: null,
116
+ projectConfig: null,
117
+ });
118
+ await installDeps_1.default.handler(args);
119
+ expect(logger_1.logger.error).toHaveBeenCalledTimes(1);
120
+ expect(logger_1.logger.error).toHaveBeenCalledWith('No project detected. Run this command from a project directory.');
121
+ expect(processExitSpy).toHaveBeenCalledTimes(1);
122
+ expect(processExitSpy).toHaveBeenCalledWith(exitCodes_1.EXIT_CODES.ERROR);
123
+ });
124
+ it('should prompt for input when packages is defined', async () => {
125
+ const projectDir = 'src';
126
+ getProjectConfigSpy.mockResolvedValue({
127
+ projectDir,
128
+ projectConfig: null,
129
+ });
130
+ const packageJsonLocation = path_1.default.join(projectDir, 'directory1');
131
+ promptUserSpy.mockResolvedValueOnce({
132
+ selectedInstallLocations: packageJsonLocation,
133
+ });
134
+ getProjectPackageJsonLocationsSpy.mockResolvedValue([
135
+ packageJsonLocation,
136
+ ]);
137
+ await installDeps_1.default.handler({
138
+ ...args,
139
+ packages: ['@hubspot/local-dev-lib'],
140
+ });
141
+ expect(getProjectPackageJsonLocationsSpy).toHaveBeenCalledTimes(1);
142
+ expect(promptUserSpy).toHaveBeenCalledTimes(1);
143
+ expect(promptUserSpy).toHaveBeenCalledWith([
144
+ {
145
+ name: 'selectedInstallLocations',
146
+ type: 'checkbox',
147
+ when: expect.any(Function),
148
+ choices: [
149
+ {
150
+ name: 'directory1',
151
+ value: packageJsonLocation,
152
+ },
153
+ ],
154
+ message: 'Choose the project components to install the dependencies:',
155
+ validate: expect.any(Function),
156
+ },
157
+ ]);
158
+ });
159
+ it('should call installPackages correctly', async () => {
160
+ const projectDir = 'src';
161
+ const packageJsonLocation = path_1.default.join(projectDir, 'directory1');
162
+ const installLocations = [packageJsonLocation];
163
+ const packages = ['@hubspot/local-dev-lib'];
164
+ getProjectConfigSpy.mockResolvedValue({
165
+ projectDir,
166
+ projectConfig: null,
167
+ });
168
+ promptUserSpy.mockResolvedValueOnce({
169
+ selectedInstallLocations: packageJsonLocation,
170
+ });
171
+ getProjectPackageJsonLocationsSpy.mockResolvedValue(installLocations);
172
+ await installDeps_1.default.handler({ ...args, packages });
173
+ expect(installPackagesSpy).toHaveBeenCalledTimes(1);
174
+ expect(installPackagesSpy).toHaveBeenCalledWith({
175
+ packages,
176
+ installLocations: packageJsonLocation,
177
+ });
178
+ });
179
+ });
180
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const yargs_1 = __importDefault(require("yargs"));
7
+ const commonOpts_1 = require("../../../lib/commonOpts");
8
+ const listBuilds_1 = __importDefault(require("../listBuilds"));
9
+ vi.mock('../../../lib/commonOpts');
10
+ describe('commands/project/listBuilds', () => {
11
+ const yargsMock = yargs_1.default;
12
+ describe('command', () => {
13
+ it('should have the correct command structure', () => {
14
+ expect(listBuilds_1.default.command).toEqual('list-builds');
15
+ });
16
+ });
17
+ describe('describe', () => {
18
+ it('should provide a description', () => {
19
+ expect(listBuilds_1.default.describe).toBeDefined();
20
+ });
21
+ });
22
+ describe('builder', () => {
23
+ it('should support the correct options', () => {
24
+ listBuilds_1.default.builder(yargsMock);
25
+ expect(commonOpts_1.addAccountOptions).toHaveBeenCalledTimes(1);
26
+ expect(commonOpts_1.addAccountOptions).toHaveBeenCalledWith(yargsMock);
27
+ expect(commonOpts_1.addConfigOptions).toHaveBeenCalledTimes(1);
28
+ expect(commonOpts_1.addConfigOptions).toHaveBeenCalledWith(yargsMock);
29
+ expect(commonOpts_1.addUseEnvironmentOptions).toHaveBeenCalledTimes(1);
30
+ expect(commonOpts_1.addUseEnvironmentOptions).toHaveBeenCalledWith(yargsMock);
31
+ });
32
+ it('should define project and limit options', () => {
33
+ const optionsSpy = vi.spyOn(yargsMock, 'options');
34
+ const exampleSpy = vi.spyOn(yargsMock, 'example');
35
+ listBuilds_1.default.builder(yargsMock);
36
+ expect(optionsSpy).toHaveBeenCalledWith(expect.objectContaining({
37
+ project: expect.any(Object),
38
+ limit: expect.any(Object),
39
+ }));
40
+ expect(exampleSpy).toHaveBeenCalled();
41
+ });
42
+ });
43
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,246 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ const yargs_1 = __importDefault(require("yargs"));
40
+ const commonOpts_1 = require("../../../lib/commonOpts");
41
+ const ProjectLogsManager_1 = require("../../../lib/projects/ProjectLogsManager");
42
+ const projectLogsPrompt = __importStar(require("../../../lib/prompts/projectsLogsPrompt"));
43
+ const table = __importStar(require("../../../lib/ui/table"));
44
+ const usageTracking_1 = require("../../../lib/usageTracking");
45
+ const ui = __importStar(require("../../../lib/ui"));
46
+ const exitCodes_1 = require("../../../lib/enums/exitCodes");
47
+ const errorHandlers_1 = require("../../../lib/errorHandlers");
48
+ const logs_1 = __importDefault(require("../logs"));
49
+ vi.mock('@hubspot/local-dev-lib/logger');
50
+ vi.mock('../../../lib/commonOpts');
51
+ vi.mock('../../../lib/usageTracking');
52
+ vi.mock('../../../lib/validation');
53
+ vi.mock('../../../lib/projects/ProjectLogsManager');
54
+ vi.mock('../../../lib/prompts/projectsLogsPrompt');
55
+ vi.mock('../../../lib/ui/table');
56
+ vi.mock('../../../lib/errorHandlers');
57
+ const uiLinkSpy = vi.spyOn(ui, 'uiLink');
58
+ const uiLineSpy = vi.spyOn(ui, 'uiLine');
59
+ const processExitSpy = vi.spyOn(process, 'exit');
60
+ const projectLogsPromptSpy = vi.spyOn(projectLogsPrompt, 'projectLogsPrompt');
61
+ const projectLogsManagerSetFunctionSpy = vi.spyOn(ProjectLogsManager_1.ProjectLogsManager, 'setFunction');
62
+ const projectLogsManagerGetFunctionNamesSpy = vi.spyOn(ProjectLogsManager_1.ProjectLogsManager, 'getFunctionNames');
63
+ const projectLogsManagerInitSpy = vi.spyOn(ProjectLogsManager_1.ProjectLogsManager, 'init');
64
+ const getTableHeaderSpy = vi.spyOn(table, 'getTableHeader');
65
+ const getTableContentsSpy = vi.spyOn(table, 'getTableContents');
66
+ const optionsSpy = vi
67
+ .spyOn(yargs_1.default, 'options')
68
+ .mockReturnValue(yargs_1.default);
69
+ const conflictsSpy = vi
70
+ .spyOn(yargs_1.default, 'conflicts')
71
+ .mockReturnValue(yargs_1.default);
72
+ const exampleSpy = vi
73
+ .spyOn(yargs_1.default, 'example')
74
+ .mockReturnValue(yargs_1.default);
75
+ describe('commands/project/logs', () => {
76
+ beforeEach(() => {
77
+ // @ts-expect-error Doesn't match the actual signature because then the linter complains about unused variables
78
+ processExitSpy.mockImplementation(() => { });
79
+ });
80
+ describe('command', () => {
81
+ it('should have the correct command structure', async () => {
82
+ expect(logs_1.default.command).toEqual('logs');
83
+ });
84
+ });
85
+ describe('describe', () => {
86
+ it('should contain the beta tag', () => {
87
+ expect(logs_1.default.describe).toContain('[BETA]');
88
+ });
89
+ it('should provide a description', () => {
90
+ expect(logs_1.default.describe).toBeDefined();
91
+ });
92
+ });
93
+ describe('builder', () => {
94
+ it('should support the correct options', () => {
95
+ logs_1.default.builder(yargs_1.default);
96
+ expect(optionsSpy).toHaveBeenCalledTimes(1);
97
+ expect(optionsSpy).toHaveBeenCalledWith({
98
+ function: expect.objectContaining({
99
+ alias: 'function',
100
+ requiresArg: true,
101
+ type: 'string',
102
+ }),
103
+ latest: expect.objectContaining({
104
+ alias: 'l',
105
+ type: 'boolean',
106
+ }),
107
+ compact: expect.objectContaining({
108
+ type: 'boolean',
109
+ }),
110
+ tail: expect.objectContaining({
111
+ alias: ['t', 'follow'],
112
+ type: 'boolean',
113
+ }),
114
+ limit: expect.objectContaining({
115
+ type: 'number',
116
+ }),
117
+ });
118
+ expect(commonOpts_1.addUseEnvironmentOptions).toHaveBeenCalledTimes(1);
119
+ expect(commonOpts_1.addUseEnvironmentOptions).toHaveBeenCalledWith(yargs_1.default);
120
+ });
121
+ it('should set the correct conflicts', () => {
122
+ logs_1.default.builder(yargs_1.default);
123
+ expect(conflictsSpy).toHaveBeenCalledTimes(1);
124
+ expect(conflictsSpy).toHaveBeenCalledWith('tail', 'limit');
125
+ });
126
+ it('should provide examples', () => {
127
+ logs_1.default.builder(yargs_1.default);
128
+ expect(exampleSpy).toHaveBeenCalledTimes(1);
129
+ });
130
+ });
131
+ describe('handler', () => {
132
+ let options;
133
+ beforeEach(() => {
134
+ options = {
135
+ derivedAccountId: 12345678,
136
+ };
137
+ projectLogsPromptSpy.mockResolvedValue({ functionName: 'foo' });
138
+ });
139
+ it('should track the command usage', async () => {
140
+ await logs_1.default.handler(options);
141
+ expect(usageTracking_1.trackCommandUsage).toHaveBeenCalledTimes(1);
142
+ expect(usageTracking_1.trackCommandUsage).toHaveBeenCalledWith('project-logs', undefined, options.derivedAccountId);
143
+ });
144
+ it('should initialize the ProjectLogsManager', async () => {
145
+ await logs_1.default.handler(options);
146
+ expect(projectLogsManagerInitSpy).toHaveBeenCalledTimes(1);
147
+ expect(projectLogsManagerInitSpy).toHaveBeenCalledWith(options.derivedAccountId);
148
+ });
149
+ it('should prompt the user for input', async () => {
150
+ const functionNames = ['function1', 'function2'];
151
+ projectLogsManagerGetFunctionNamesSpy.mockReturnValue(functionNames);
152
+ await logs_1.default.handler(options);
153
+ expect(projectLogsPromptSpy).toHaveBeenCalledTimes(1);
154
+ expect(projectLogsPromptSpy).toHaveBeenCalledWith({
155
+ functionChoices: functionNames,
156
+ promptOptions: options,
157
+ });
158
+ });
159
+ it('should set the function', async () => {
160
+ const selectedFunction = 'function1';
161
+ projectLogsManagerGetFunctionNamesSpy.mockReturnValue([
162
+ selectedFunction,
163
+ 'function2',
164
+ ]);
165
+ projectLogsPromptSpy.mockResolvedValue({
166
+ functionName: selectedFunction,
167
+ });
168
+ await logs_1.default.handler(options);
169
+ expect(projectLogsManagerSetFunctionSpy).toHaveBeenCalledTimes(1);
170
+ expect(projectLogsManagerSetFunctionSpy).toHaveBeenCalledWith(selectedFunction);
171
+ });
172
+ it('should log public functions correctly', async () => {
173
+ const functionNames = ['function1', 'function2'];
174
+ const selectedFunction = 'function1';
175
+ projectLogsManagerGetFunctionNamesSpy.mockReturnValue(functionNames);
176
+ projectLogsPromptSpy.mockResolvedValue({
177
+ functionName: selectedFunction,
178
+ });
179
+ const tableHeaders = ['Header 1', 'Header 2'];
180
+ getTableHeaderSpy.mockReturnValue(tableHeaders);
181
+ ProjectLogsManager_1.ProjectLogsManager.isPublicFunction = true;
182
+ ProjectLogsManager_1.ProjectLogsManager.accountId = options.derivedAccountId;
183
+ ProjectLogsManager_1.ProjectLogsManager.functionName = selectedFunction;
184
+ ProjectLogsManager_1.ProjectLogsManager.endpointName = 'my-endpoint';
185
+ ProjectLogsManager_1.ProjectLogsManager.appId = 123456;
186
+ await logs_1.default.handler(options);
187
+ expect(getTableHeaderSpy).toHaveBeenCalledTimes(1);
188
+ expect(getTableHeaderSpy).toHaveBeenCalledWith([
189
+ 'Account',
190
+ 'Function',
191
+ 'Endpoint',
192
+ ]);
193
+ expect(getTableContentsSpy).toHaveBeenCalledTimes(1);
194
+ expect(getTableContentsSpy).toHaveBeenCalledWith([
195
+ tableHeaders,
196
+ [
197
+ ProjectLogsManager_1.ProjectLogsManager.accountId,
198
+ ProjectLogsManager_1.ProjectLogsManager.functionName,
199
+ ProjectLogsManager_1.ProjectLogsManager.endpointName,
200
+ ],
201
+ ], { border: { bodyLeft: ' ' } });
202
+ expect(uiLinkSpy).toHaveBeenCalledTimes(1);
203
+ expect(uiLinkSpy).toHaveBeenCalledWith('View function logs in HubSpot', `https://app.hubspot.com/private-apps/${options.derivedAccountId}/${ProjectLogsManager_1.ProjectLogsManager.appId}/logs/serverlessGatewayExecution?path=${ProjectLogsManager_1.ProjectLogsManager.endpointName}`);
204
+ expect(uiLineSpy).toHaveBeenCalledTimes(1);
205
+ });
206
+ it('should log private functions correctly', async () => {
207
+ const functionNames = ['function1', 'function2'];
208
+ const selectedFunction = 'function1';
209
+ projectLogsManagerGetFunctionNamesSpy.mockReturnValue(functionNames);
210
+ projectLogsPromptSpy.mockResolvedValue({
211
+ functionName: selectedFunction,
212
+ });
213
+ const tableHeaders = ['Header 1', 'Header 2'];
214
+ getTableHeaderSpy.mockReturnValue(tableHeaders);
215
+ ProjectLogsManager_1.ProjectLogsManager.isPublicFunction = false;
216
+ ProjectLogsManager_1.ProjectLogsManager.accountId = options.derivedAccountId;
217
+ ProjectLogsManager_1.ProjectLogsManager.functionName = selectedFunction;
218
+ ProjectLogsManager_1.ProjectLogsManager.appId = 456789;
219
+ await logs_1.default.handler(options);
220
+ expect(getTableHeaderSpy).toHaveBeenCalledTimes(1);
221
+ expect(getTableHeaderSpy).toHaveBeenCalledWith(['Account', 'Function']);
222
+ expect(getTableContentsSpy).toHaveBeenCalledTimes(1);
223
+ expect(getTableContentsSpy).toHaveBeenCalledWith([
224
+ tableHeaders,
225
+ [ProjectLogsManager_1.ProjectLogsManager.accountId, ProjectLogsManager_1.ProjectLogsManager.functionName],
226
+ ], { border: { bodyLeft: ' ' } });
227
+ expect(uiLinkSpy).toHaveBeenCalledWith('View function logs in HubSpot', `https://app.hubspot.com/private-apps/${options.derivedAccountId}/${ProjectLogsManager_1.ProjectLogsManager.appId}/logs/crm?serverlessFunction=${selectedFunction}`);
228
+ expect(uiLineSpy).toHaveBeenCalledTimes(1);
229
+ });
230
+ it('should handle errors correctly', async () => {
231
+ const error = new Error('Something went wrong');
232
+ projectLogsManagerInitSpy.mockImplementation(() => {
233
+ throw error;
234
+ });
235
+ ProjectLogsManager_1.ProjectLogsManager.projectName = 'Super cool project';
236
+ await logs_1.default.handler(options);
237
+ expect(errorHandlers_1.logError).toHaveBeenCalledTimes(1);
238
+ expect(errorHandlers_1.logError).toHaveBeenCalledWith(error, {
239
+ accountId: options.derivedAccountId,
240
+ projectName: ProjectLogsManager_1.ProjectLogsManager.projectName,
241
+ });
242
+ expect(processExitSpy).toHaveBeenCalledTimes(1);
243
+ expect(processExitSpy).toHaveBeenCalledWith(exitCodes_1.EXIT_CODES.ERROR);
244
+ });
245
+ });
246
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,116 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const yargs_1 = __importDefault(require("yargs"));
7
+ const logger_1 = require("@hubspot/local-dev-lib/logger");
8
+ const projects_1 = require("@hubspot/local-dev-lib/constants/projects");
9
+ const migrate_1 = __importDefault(require("../migrate"));
10
+ const migrate_2 = require("../../../lib/app/migrate");
11
+ const config_1 = require("../../../lib/projects/config");
12
+ const en_1 = require("../../../lang/en");
13
+ const ui_1 = require("../../../lib/ui");
14
+ vi.mock('@hubspot/local-dev-lib/logger');
15
+ vi.mock('../../../lib/app/migrate');
16
+ vi.mock('../../../lib/projects/config');
17
+ vi.mock('../../../lib/ui');
18
+ const { v2025_2 } = projects_1.PLATFORM_VERSIONS;
19
+ describe('commands/project/migrate', () => {
20
+ const yargsMock = yargs_1.default;
21
+ const optionsSpy = vi.spyOn(yargsMock, 'option').mockReturnValue(yargsMock);
22
+ // Mock the imported functions
23
+ const migrateApp2025_2Mock = migrate_2.migrateApp2025_2;
24
+ const getProjectConfigMock = config_1.getProjectConfig;
25
+ const uiBetaTagMock = ui_1.uiBetaTag;
26
+ const uiCommandReferenceMock = ui_1.uiCommandReference;
27
+ const mockExit = vi
28
+ .spyOn(process, 'exit')
29
+ .mockImplementation(() => undefined);
30
+ beforeEach(() => {
31
+ // Mock logger methods
32
+ vi.spyOn(logger_1.logger, 'log').mockImplementation(() => { });
33
+ vi.spyOn(logger_1.logger, 'error').mockImplementation(() => { });
34
+ migrateApp2025_2Mock.mockResolvedValue(undefined);
35
+ getProjectConfigMock.mockResolvedValue({
36
+ projectConfig: { name: 'test-project' },
37
+ });
38
+ uiBetaTagMock.mockReturnValue('beta test description');
39
+ uiCommandReferenceMock.mockReturnValue('command reference');
40
+ mockExit.mockClear();
41
+ });
42
+ afterEach(() => {
43
+ vi.clearAllMocks();
44
+ });
45
+ describe('command', () => {
46
+ it('should have the correct command structure', () => {
47
+ expect(migrate_1.default.command).toEqual('migrate');
48
+ });
49
+ });
50
+ describe('describe', () => {
51
+ it('should provide a description', () => {
52
+ expect(migrate_1.default.describe).toBe(undefined);
53
+ });
54
+ });
55
+ describe('builder', () => {
56
+ it('should support the correct options', () => {
57
+ migrate_1.default.builder(yargsMock);
58
+ expect(optionsSpy).toHaveBeenCalledWith('platform-version', {
59
+ type: 'string',
60
+ choices: [v2025_2],
61
+ default: v2025_2,
62
+ hidden: true,
63
+ });
64
+ expect(optionsSpy).toHaveBeenCalledWith('unstable', {
65
+ type: 'boolean',
66
+ default: false,
67
+ hidden: true,
68
+ });
69
+ });
70
+ });
71
+ describe('handler', () => {
72
+ let options;
73
+ beforeEach(() => {
74
+ options = {
75
+ platformVersion: v2025_2,
76
+ unstable: false,
77
+ derivedAccountId: 123,
78
+ };
79
+ });
80
+ it('should exit with error if no project config exists', async () => {
81
+ getProjectConfigMock.mockResolvedValue({ projectConfig: null });
82
+ await migrate_1.default.handler(options);
83
+ expect(logger_1.logger.error).toHaveBeenCalledWith(en_1.commands.project.migrate.errors.noProjectConfig('command reference'));
84
+ expect(mockExit).toHaveBeenCalledWith(1);
85
+ expect(mockExit).toHaveBeenCalledTimes(1);
86
+ });
87
+ it('should call migrateApp2025_2 with correct parameters', async () => {
88
+ await migrate_1.default.handler(options);
89
+ expect(migrateApp2025_2Mock).toHaveBeenCalledWith(123, {
90
+ ...options,
91
+ name: 'test-project',
92
+ platformVersion: v2025_2,
93
+ }, { projectConfig: { name: 'test-project' } });
94
+ expect(mockExit).toHaveBeenCalledWith(0);
95
+ expect(mockExit).toHaveBeenCalledTimes(1);
96
+ });
97
+ it('should use unstable platform version when unstable flag is true', async () => {
98
+ options.unstable = true;
99
+ await migrate_1.default.handler(options);
100
+ expect(migrateApp2025_2Mock).toHaveBeenCalledWith(123, {
101
+ ...options,
102
+ name: 'test-project',
103
+ platformVersion: projects_1.PLATFORM_VERSIONS.unstable,
104
+ }, { projectConfig: { name: 'test-project' } });
105
+ expect(mockExit).toHaveBeenCalledWith(0);
106
+ expect(mockExit).toHaveBeenCalledTimes(1);
107
+ });
108
+ it('should handle errors and exit with error code', async () => {
109
+ const error = new Error('Test error');
110
+ migrateApp2025_2Mock.mockRejectedValue(error);
111
+ await migrate_1.default.handler(options);
112
+ expect(mockExit).toHaveBeenCalledWith(1);
113
+ expect(mockExit).toHaveBeenCalledTimes(1);
114
+ });
115
+ });
116
+ });
@@ -0,0 +1 @@
1
+ export {};