@camaradesuk/git-worktree-tools 1.3.0 → 1.4.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.
Files changed (284) hide show
  1. package/README.md +290 -3
  2. package/dist/api/clean.d.ts +65 -0
  3. package/dist/api/clean.d.ts.map +1 -0
  4. package/dist/api/clean.js +209 -0
  5. package/dist/api/clean.js.map +1 -0
  6. package/dist/api/create.d.ts +88 -0
  7. package/dist/api/create.d.ts.map +1 -0
  8. package/dist/api/create.js +373 -0
  9. package/dist/api/create.js.map +1 -0
  10. package/dist/api/index.d.ts +15 -0
  11. package/dist/api/index.d.ts.map +1 -0
  12. package/dist/api/index.js +19 -0
  13. package/dist/api/index.js.map +1 -0
  14. package/dist/api/list.d.ts +74 -0
  15. package/dist/api/list.d.ts.map +1 -0
  16. package/dist/api/list.js +80 -0
  17. package/dist/api/list.js.map +1 -0
  18. package/dist/api/state.d.ts +43 -0
  19. package/dist/api/state.d.ts.map +1 -0
  20. package/dist/api/state.js +70 -0
  21. package/dist/api/state.js.map +1 -0
  22. package/dist/cli/cleanpr.js +171 -28
  23. package/dist/cli/cleanpr.js.map +1 -1
  24. package/dist/cli/cleanpr.test.js +459 -7
  25. package/dist/cli/cleanpr.test.js.map +1 -1
  26. package/dist/cli/newpr.js +189 -28
  27. package/dist/cli/newpr.js.map +1 -1
  28. package/dist/cli/newpr.test.js +349 -0
  29. package/dist/cli/newpr.test.js.map +1 -1
  30. package/dist/cli/wtconfig.d.ts +14 -0
  31. package/dist/cli/wtconfig.d.ts.map +1 -0
  32. package/dist/cli/wtconfig.js +948 -0
  33. package/dist/cli/wtconfig.js.map +1 -0
  34. package/dist/cli/wtconfig.test.d.ts +5 -0
  35. package/dist/cli/wtconfig.test.d.ts.map +1 -0
  36. package/dist/cli/wtconfig.test.js +1281 -0
  37. package/dist/cli/wtconfig.test.js.map +1 -0
  38. package/dist/cli/wtlink.js +5 -0
  39. package/dist/cli/wtlink.js.map +1 -1
  40. package/dist/cli/wtstate.d.ts +8 -0
  41. package/dist/cli/wtstate.d.ts.map +1 -0
  42. package/dist/cli/wtstate.js +83 -0
  43. package/dist/cli/wtstate.js.map +1 -0
  44. package/dist/cli/wtstate.test.d.ts +5 -0
  45. package/dist/cli/wtstate.test.d.ts.map +1 -0
  46. package/dist/cli/wtstate.test.js +193 -0
  47. package/dist/cli/wtstate.test.js.map +1 -0
  48. package/dist/e2e/cleanpr/cleanpr.e2e.test.d.ts +2 -0
  49. package/dist/e2e/cleanpr/cleanpr.e2e.test.d.ts.map +1 -0
  50. package/dist/e2e/cleanpr/cleanpr.e2e.test.js +326 -0
  51. package/dist/e2e/cleanpr/cleanpr.e2e.test.js.map +1 -0
  52. package/dist/e2e/helpers/cli-runner.d.ts +103 -0
  53. package/dist/e2e/helpers/cli-runner.d.ts.map +1 -0
  54. package/dist/e2e/helpers/cli-runner.js +200 -0
  55. package/dist/e2e/helpers/cli-runner.js.map +1 -0
  56. package/dist/e2e/helpers/gh-mock.d.ts +87 -0
  57. package/dist/e2e/helpers/gh-mock.d.ts.map +1 -0
  58. package/dist/e2e/helpers/gh-mock.js +384 -0
  59. package/dist/e2e/helpers/gh-mock.js.map +1 -0
  60. package/dist/e2e/helpers/index.d.ts +12 -0
  61. package/dist/e2e/helpers/index.d.ts.map +1 -0
  62. package/dist/e2e/helpers/index.js +16 -0
  63. package/dist/e2e/helpers/index.js.map +1 -0
  64. package/dist/e2e/helpers/pty-wrapper.d.ts +118 -0
  65. package/dist/e2e/helpers/pty-wrapper.d.ts.map +1 -0
  66. package/dist/e2e/helpers/pty-wrapper.js +276 -0
  67. package/dist/e2e/helpers/pty-wrapper.js.map +1 -0
  68. package/dist/e2e/helpers/scenario-harness.d.ts +55 -0
  69. package/dist/e2e/helpers/scenario-harness.d.ts.map +1 -0
  70. package/dist/e2e/helpers/scenario-harness.js +360 -0
  71. package/dist/e2e/helpers/scenario-harness.js.map +1 -0
  72. package/dist/e2e/helpers/test-context.d.ts +120 -0
  73. package/dist/e2e/helpers/test-context.d.ts.map +1 -0
  74. package/dist/e2e/helpers/test-context.js +263 -0
  75. package/dist/e2e/helpers/test-context.js.map +1 -0
  76. package/dist/e2e/lswt/lswt.e2e.test.d.ts +2 -0
  77. package/dist/e2e/lswt/lswt.e2e.test.d.ts.map +1 -0
  78. package/dist/e2e/lswt/lswt.e2e.test.js +328 -0
  79. package/dist/e2e/lswt/lswt.e2e.test.js.map +1 -0
  80. package/dist/e2e/newpr/newpr.e2e.test.d.ts +2 -0
  81. package/dist/e2e/newpr/newpr.e2e.test.d.ts.map +1 -0
  82. package/dist/e2e/newpr/newpr.e2e.test.js +286 -0
  83. package/dist/e2e/newpr/newpr.e2e.test.js.map +1 -0
  84. package/dist/e2e/newpr/scenarios.e2e.test.d.ts +2 -0
  85. package/dist/e2e/newpr/scenarios.e2e.test.d.ts.map +1 -0
  86. package/dist/e2e/newpr/scenarios.e2e.test.js +426 -0
  87. package/dist/e2e/newpr/scenarios.e2e.test.js.map +1 -0
  88. package/dist/e2e/workflows/pr-lifecycle.e2e.test.d.ts +2 -0
  89. package/dist/e2e/workflows/pr-lifecycle.e2e.test.d.ts.map +1 -0
  90. package/dist/e2e/workflows/pr-lifecycle.e2e.test.js +298 -0
  91. package/dist/e2e/workflows/pr-lifecycle.e2e.test.js.map +1 -0
  92. package/dist/e2e/wtlink/wtlink.e2e.test.d.ts +2 -0
  93. package/dist/e2e/wtlink/wtlink.e2e.test.d.ts.map +1 -0
  94. package/dist/e2e/wtlink/wtlink.e2e.test.js +364 -0
  95. package/dist/e2e/wtlink/wtlink.e2e.test.js.map +1 -0
  96. package/dist/index.d.ts +15 -1
  97. package/dist/index.d.ts.map +1 -1
  98. package/dist/index.js +14 -0
  99. package/dist/index.js.map +1 -1
  100. package/dist/lib/ai/base-provider.d.ts +58 -0
  101. package/dist/lib/ai/base-provider.d.ts.map +1 -0
  102. package/dist/lib/ai/base-provider.js +246 -0
  103. package/dist/lib/ai/base-provider.js.map +1 -0
  104. package/dist/lib/ai/base-provider.test.d.ts +7 -0
  105. package/dist/lib/ai/base-provider.test.d.ts.map +1 -0
  106. package/dist/lib/ai/base-provider.test.js +320 -0
  107. package/dist/lib/ai/base-provider.test.js.map +1 -0
  108. package/dist/lib/ai/cli-provider.d.ts +87 -0
  109. package/dist/lib/ai/cli-provider.d.ts.map +1 -0
  110. package/dist/lib/ai/cli-provider.js +280 -0
  111. package/dist/lib/ai/cli-provider.js.map +1 -0
  112. package/dist/lib/ai/cli-provider.test.d.ts +5 -0
  113. package/dist/lib/ai/cli-provider.test.d.ts.map +1 -0
  114. package/dist/lib/ai/cli-provider.test.js +462 -0
  115. package/dist/lib/ai/cli-provider.test.js.map +1 -0
  116. package/dist/lib/ai/fallback-provider.d.ts +20 -0
  117. package/dist/lib/ai/fallback-provider.d.ts.map +1 -0
  118. package/dist/lib/ai/fallback-provider.js +125 -0
  119. package/dist/lib/ai/fallback-provider.js.map +1 -0
  120. package/dist/lib/ai/fallback-provider.test.d.ts +7 -0
  121. package/dist/lib/ai/fallback-provider.test.d.ts.map +1 -0
  122. package/dist/lib/ai/fallback-provider.test.js +165 -0
  123. package/dist/lib/ai/fallback-provider.test.js.map +1 -0
  124. package/dist/lib/ai/generation-service.d.ts +44 -0
  125. package/dist/lib/ai/generation-service.d.ts.map +1 -0
  126. package/dist/lib/ai/generation-service.js +107 -0
  127. package/dist/lib/ai/generation-service.js.map +1 -0
  128. package/dist/lib/ai/generation-service.test.d.ts +7 -0
  129. package/dist/lib/ai/generation-service.test.d.ts.map +1 -0
  130. package/dist/lib/ai/generation-service.test.js +213 -0
  131. package/dist/lib/ai/generation-service.test.js.map +1 -0
  132. package/dist/lib/ai/index.d.ts +19 -0
  133. package/dist/lib/ai/index.d.ts.map +1 -0
  134. package/dist/lib/ai/index.js +22 -0
  135. package/dist/lib/ai/index.js.map +1 -0
  136. package/dist/lib/ai/provider-manager.d.ts +109 -0
  137. package/dist/lib/ai/provider-manager.d.ts.map +1 -0
  138. package/dist/lib/ai/provider-manager.js +270 -0
  139. package/dist/lib/ai/provider-manager.js.map +1 -0
  140. package/dist/lib/ai/provider-manager.test.d.ts +5 -0
  141. package/dist/lib/ai/provider-manager.test.d.ts.map +1 -0
  142. package/dist/lib/ai/provider-manager.test.js +312 -0
  143. package/dist/lib/ai/provider-manager.test.js.map +1 -0
  144. package/dist/lib/ai/types.d.ts +166 -0
  145. package/dist/lib/ai/types.d.ts.map +1 -0
  146. package/dist/lib/ai/types.js +19 -0
  147. package/dist/lib/ai/types.js.map +1 -0
  148. package/dist/lib/cleanpr/args.d.ts.map +1 -1
  149. package/dist/lib/cleanpr/args.js +18 -0
  150. package/dist/lib/cleanpr/args.js.map +1 -1
  151. package/dist/lib/cleanpr/args.test.js +88 -11
  152. package/dist/lib/cleanpr/args.test.js.map +1 -1
  153. package/dist/lib/cleanpr/cleanup.d.ts +2 -0
  154. package/dist/lib/cleanpr/cleanup.d.ts.map +1 -1
  155. package/dist/lib/cleanpr/cleanup.js +30 -2
  156. package/dist/lib/cleanpr/cleanup.js.map +1 -1
  157. package/dist/lib/cleanpr/cleanup.test.js +37 -5
  158. package/dist/lib/cleanpr/cleanup.test.js.map +1 -1
  159. package/dist/lib/cleanpr/types.d.ts +10 -0
  160. package/dist/lib/cleanpr/types.d.ts.map +1 -1
  161. package/dist/lib/cleanpr/worktree-info.test.js +72 -1
  162. package/dist/lib/cleanpr/worktree-info.test.js.map +1 -1
  163. package/dist/lib/config.d.ts +170 -1
  164. package/dist/lib/config.d.ts.map +1 -1
  165. package/dist/lib/config.js +129 -2
  166. package/dist/lib/config.js.map +1 -1
  167. package/dist/lib/config.test.js +406 -2
  168. package/dist/lib/config.test.js.map +1 -1
  169. package/dist/lib/hooks/executor.d.ts +35 -0
  170. package/dist/lib/hooks/executor.d.ts.map +1 -0
  171. package/dist/lib/hooks/executor.js +401 -0
  172. package/dist/lib/hooks/executor.js.map +1 -0
  173. package/dist/lib/hooks/executor.test.d.ts +5 -0
  174. package/dist/lib/hooks/executor.test.d.ts.map +1 -0
  175. package/dist/lib/hooks/executor.test.js +648 -0
  176. package/dist/lib/hooks/executor.test.js.map +1 -0
  177. package/dist/lib/hooks/index.d.ts +25 -0
  178. package/dist/lib/hooks/index.d.ts.map +1 -0
  179. package/dist/lib/hooks/index.js +26 -0
  180. package/dist/lib/hooks/index.js.map +1 -0
  181. package/dist/lib/hooks/templates.d.ts +74 -0
  182. package/dist/lib/hooks/templates.d.ts.map +1 -0
  183. package/dist/lib/hooks/templates.js +270 -0
  184. package/dist/lib/hooks/templates.js.map +1 -0
  185. package/dist/lib/hooks/templates.test.d.ts +5 -0
  186. package/dist/lib/hooks/templates.test.d.ts.map +1 -0
  187. package/dist/lib/hooks/templates.test.js +163 -0
  188. package/dist/lib/hooks/templates.test.js.map +1 -0
  189. package/dist/lib/hooks/types.d.ts +161 -0
  190. package/dist/lib/hooks/types.d.ts.map +1 -0
  191. package/dist/lib/hooks/types.js +73 -0
  192. package/dist/lib/hooks/types.js.map +1 -0
  193. package/dist/lib/hooks/types.test.d.ts +5 -0
  194. package/dist/lib/hooks/types.test.d.ts.map +1 -0
  195. package/dist/lib/hooks/types.test.js +132 -0
  196. package/dist/lib/hooks/types.test.js.map +1 -0
  197. package/dist/lib/json-output.d.ts +172 -0
  198. package/dist/lib/json-output.d.ts.map +1 -0
  199. package/dist/lib/json-output.js +134 -0
  200. package/dist/lib/json-output.js.map +1 -0
  201. package/dist/lib/json-output.test.d.ts +5 -0
  202. package/dist/lib/json-output.test.d.ts.map +1 -0
  203. package/dist/lib/json-output.test.js +259 -0
  204. package/dist/lib/json-output.test.js.map +1 -0
  205. package/dist/lib/lswt/action-executors.test.js +6 -0
  206. package/dist/lib/lswt/action-executors.test.js.map +1 -1
  207. package/dist/lib/newpr/action-deps.d.ts +15 -0
  208. package/dist/lib/newpr/action-deps.d.ts.map +1 -0
  209. package/dist/lib/newpr/action-deps.js +22 -0
  210. package/dist/lib/newpr/action-deps.js.map +1 -0
  211. package/dist/lib/newpr/args.d.ts.map +1 -1
  212. package/dist/lib/newpr/args.js +56 -0
  213. package/dist/lib/newpr/args.js.map +1 -1
  214. package/dist/lib/newpr/hook-runner.d.ts +80 -0
  215. package/dist/lib/newpr/hook-runner.d.ts.map +1 -0
  216. package/dist/lib/newpr/hook-runner.js +182 -0
  217. package/dist/lib/newpr/hook-runner.js.map +1 -0
  218. package/dist/lib/newpr/hook-runner.test.d.ts +7 -0
  219. package/dist/lib/newpr/hook-runner.test.d.ts.map +1 -0
  220. package/dist/lib/newpr/hook-runner.test.js +301 -0
  221. package/dist/lib/newpr/hook-runner.test.js.map +1 -0
  222. package/dist/lib/newpr/index.d.ts +3 -0
  223. package/dist/lib/newpr/index.d.ts.map +1 -1
  224. package/dist/lib/newpr/index.js +3 -0
  225. package/dist/lib/newpr/index.js.map +1 -1
  226. package/dist/lib/newpr/types.d.ts +9 -0
  227. package/dist/lib/newpr/types.d.ts.map +1 -1
  228. package/dist/lib/wtconfig/config-manager.d.ts +72 -0
  229. package/dist/lib/wtconfig/config-manager.d.ts.map +1 -0
  230. package/dist/lib/wtconfig/config-manager.js +408 -0
  231. package/dist/lib/wtconfig/config-manager.js.map +1 -0
  232. package/dist/lib/wtconfig/config-manager.test.d.ts +5 -0
  233. package/dist/lib/wtconfig/config-manager.test.d.ts.map +1 -0
  234. package/dist/lib/wtconfig/config-manager.test.js +501 -0
  235. package/dist/lib/wtconfig/config-manager.test.js.map +1 -0
  236. package/dist/lib/wtconfig/environment.d.ts +23 -0
  237. package/dist/lib/wtconfig/environment.d.ts.map +1 -0
  238. package/dist/lib/wtconfig/environment.js +242 -0
  239. package/dist/lib/wtconfig/environment.js.map +1 -0
  240. package/dist/lib/wtconfig/environment.test.d.ts +5 -0
  241. package/dist/lib/wtconfig/environment.test.d.ts.map +1 -0
  242. package/dist/lib/wtconfig/environment.test.js +246 -0
  243. package/dist/lib/wtconfig/environment.test.js.map +1 -0
  244. package/dist/lib/wtconfig/index.d.ts +7 -0
  245. package/dist/lib/wtconfig/index.d.ts.map +1 -0
  246. package/dist/lib/wtconfig/index.js +8 -0
  247. package/dist/lib/wtconfig/index.js.map +1 -0
  248. package/dist/lib/wtconfig/types.d.ts +97 -0
  249. package/dist/lib/wtconfig/types.d.ts.map +1 -0
  250. package/dist/lib/wtconfig/types.js +5 -0
  251. package/dist/lib/wtconfig/types.js.map +1 -0
  252. package/dist/lib/wtstate/analyze.d.ts +13 -0
  253. package/dist/lib/wtstate/analyze.d.ts.map +1 -0
  254. package/dist/lib/wtstate/analyze.js +165 -0
  255. package/dist/lib/wtstate/analyze.js.map +1 -0
  256. package/dist/lib/wtstate/analyze.test.d.ts +5 -0
  257. package/dist/lib/wtstate/analyze.test.d.ts.map +1 -0
  258. package/dist/lib/wtstate/analyze.test.js +282 -0
  259. package/dist/lib/wtstate/analyze.test.js.map +1 -0
  260. package/dist/lib/wtstate/args.d.ts +17 -0
  261. package/dist/lib/wtstate/args.d.ts.map +1 -0
  262. package/dist/lib/wtstate/args.js +91 -0
  263. package/dist/lib/wtstate/args.js.map +1 -0
  264. package/dist/lib/wtstate/args.test.d.ts +5 -0
  265. package/dist/lib/wtstate/args.test.d.ts.map +1 -0
  266. package/dist/lib/wtstate/args.test.js +120 -0
  267. package/dist/lib/wtstate/args.test.js.map +1 -0
  268. package/dist/lib/wtstate/index.d.ts +7 -0
  269. package/dist/lib/wtstate/index.d.ts.map +1 -0
  270. package/dist/lib/wtstate/index.js +8 -0
  271. package/dist/lib/wtstate/index.js.map +1 -0
  272. package/dist/lib/wtstate/types.d.ts +64 -0
  273. package/dist/lib/wtstate/types.d.ts.map +1 -0
  274. package/dist/lib/wtstate/types.js +5 -0
  275. package/dist/lib/wtstate/types.js.map +1 -0
  276. package/dist/mcp/server.d.ts +14 -0
  277. package/dist/mcp/server.d.ts.map +1 -0
  278. package/dist/mcp/server.js +339 -0
  279. package/dist/mcp/server.js.map +1 -0
  280. package/dist/mcp/server.test.d.ts +9 -0
  281. package/dist/mcp/server.test.d.ts.map +1 -0
  282. package/dist/mcp/server.test.js +390 -0
  283. package/dist/mcp/server.test.js.map +1 -0
  284. package/package.json +8 -2
@@ -0,0 +1,426 @@
1
+ import { describe, it, expect, beforeAll, afterAll, beforeEach } from 'vitest';
2
+ import fs from 'fs';
3
+ import path from 'path';
4
+ import { execSync } from 'child_process';
5
+ import { runCli, runCliJson, createTestContext, GH_AVAILABLE, } from '../helpers/index.js';
6
+ /**
7
+ * E2E tests for newpr across all 12 git state scenarios.
8
+ *
9
+ * These tests verify that newpr correctly:
10
+ * 1. Detects the git state scenario
11
+ * 2. Applies the appropriate action
12
+ * 3. Creates the branch, PR, and worktree
13
+ */
14
+ describe.skipIf(!GH_AVAILABLE)('newpr e2e - git state scenarios', () => {
15
+ // Test each scenario with non-interactive mode
16
+ describe('non-interactive mode', () => {
17
+ // Scenarios where newpr should succeed and create a PR with worktree
18
+ // These scenarios create a NEW branch, so worktree creation works
19
+ const successScenarios = [
20
+ 'main_clean_same',
21
+ 'main_staged_same',
22
+ 'main_unstaged_same',
23
+ 'main_both_same',
24
+ 'main_clean_ahead',
25
+ 'main_changes_ahead',
26
+ 'branch_same_as_main', // Creates new branch from main
27
+ ];
28
+ // Scenarios where user is on a feature branch with divergent commits
29
+ // These scenarios use the CURRENT branch for PR, which means worktree
30
+ // creation fails because git can't create a worktree for a branch
31
+ // that's already checked out. The PR is created successfully but
32
+ // the worktree step fails.
33
+ const branchPrScenarios = ['branch_divergent', 'branch_with_changes'];
34
+ describe.each(successScenarios)('scenario: %s', (scenario) => {
35
+ let ctx;
36
+ beforeAll(() => {
37
+ ctx = createTestContext({ scenario });
38
+ });
39
+ afterAll(() => {
40
+ ctx.cleanup();
41
+ });
42
+ it('creates PR successfully in non-interactive mode', () => {
43
+ const result = runCli('newpr', ['test-feature-description', '--non-interactive'], {
44
+ cwd: ctx.repoDir,
45
+ env: ctx.env,
46
+ });
47
+ // Should succeed
48
+ expect(result.exitCode).toBe(0);
49
+ // Output should indicate success
50
+ expect(result.stdout.toLowerCase()).toMatch(/created|success|pr/i);
51
+ });
52
+ it('outputs valid JSON with --json flag', () => {
53
+ // Reset to re-run
54
+ ctx.reset();
55
+ // Re-create scenario state if needed
56
+ const freshCtx = createTestContext({ scenario });
57
+ try {
58
+ const jsonResult = runCliJson('newpr', ['test-json-feature', '--non-interactive'], {
59
+ cwd: freshCtx.repoDir,
60
+ env: freshCtx.env,
61
+ });
62
+ // Should have data
63
+ expect(jsonResult.data).not.toBeNull();
64
+ if (jsonResult.data) {
65
+ // Verify required fields
66
+ expect(typeof jsonResult.data.prNumber).toBe('number');
67
+ expect(jsonResult.data.prUrl).toContain('github.com');
68
+ expect(jsonResult.data.branch).toBeTruthy();
69
+ expect(jsonResult.data.worktreePath).toBeTruthy();
70
+ // Verify worktree was created
71
+ expect(fs.existsSync(jsonResult.data.worktreePath)).toBe(true);
72
+ }
73
+ }
74
+ finally {
75
+ freshCtx.cleanup();
76
+ }
77
+ });
78
+ });
79
+ // Test scenarios where user is on a feature branch
80
+ // These scenarios try to create PR for current branch, which works,
81
+ // but worktree creation fails because the branch is already checked out
82
+ describe.each(branchPrScenarios)('scenario: %s (branch PR)', (scenario) => {
83
+ let ctx;
84
+ beforeAll(() => {
85
+ ctx = createTestContext({ scenario });
86
+ });
87
+ afterAll(() => {
88
+ ctx.cleanup();
89
+ });
90
+ it('fails because branch is already checked out', () => {
91
+ const result = runCli('newpr', ['test-feature-description', '--non-interactive'], {
92
+ cwd: ctx.repoDir,
93
+ env: ctx.env,
94
+ });
95
+ // Currently fails because git can't create worktree for a branch
96
+ // that's already checked out. This is a known limitation.
97
+ // The PR creation part succeeds, but worktree creation fails.
98
+ expect(result.exitCode).not.toBe(0);
99
+ expect(result.stderr).toMatch(/already.*worktree|already.*checked out|already used/i);
100
+ });
101
+ it('would benefit from switching to main before creating worktree', () => {
102
+ // This test documents the expected improvement:
103
+ // The tool should detect that it's on the same branch and either:
104
+ // 1. Skip worktree creation (you're already there)
105
+ // 2. Switch to main first, then create worktree
106
+ // For now, we document this as expected behavior to fix
107
+ const freshCtx = createTestContext({ scenario });
108
+ try {
109
+ const result = runCli('newpr', ['worktree-fix-test', '--non-interactive'], {
110
+ cwd: freshCtx.repoDir,
111
+ env: freshCtx.env,
112
+ });
113
+ // Currently this fails - when fixed, change to expect(result.exitCode).toBe(0)
114
+ expect(result.exitCode).not.toBe(0);
115
+ }
116
+ finally {
117
+ freshCtx.cleanup();
118
+ }
119
+ });
120
+ });
121
+ // Special case: detached_head
122
+ describe('scenario: detached_head', () => {
123
+ let ctx;
124
+ beforeAll(() => {
125
+ ctx = createTestContext({ scenario: 'detached_head' });
126
+ });
127
+ afterAll(() => {
128
+ ctx.cleanup();
129
+ });
130
+ it('creates new branch from detached HEAD', () => {
131
+ const result = runCli('newpr', ['detached-feature', '--non-interactive'], {
132
+ cwd: ctx.repoDir,
133
+ env: ctx.env,
134
+ });
135
+ // Should succeed - creates a branch from the detached HEAD
136
+ expect(result.exitCode).toBe(0);
137
+ });
138
+ });
139
+ // Special case: branch_ancestor (already merged)
140
+ describe('scenario: branch_ancestor', () => {
141
+ let ctx;
142
+ beforeAll(() => {
143
+ ctx = createTestContext({ scenario: 'branch_ancestor' });
144
+ });
145
+ afterAll(() => {
146
+ ctx.cleanup();
147
+ });
148
+ it('handles already-merged branch gracefully', () => {
149
+ const result = runCli('newpr', ['ancestor-feature', '--non-interactive'], {
150
+ cwd: ctx.repoDir,
151
+ env: ctx.env,
152
+ });
153
+ // May succeed or show a warning - verify it doesn't crash
154
+ // The behavior depends on whether the branch has any unique commits
155
+ expect(result.exitCode).toBeLessThanOrEqual(1);
156
+ });
157
+ });
158
+ // Special case: pr_worktree (running from existing PR worktree)
159
+ describe('scenario: pr_worktree', () => {
160
+ let ctx;
161
+ beforeAll(() => {
162
+ ctx = createTestContext({ scenario: 'pr_worktree' });
163
+ });
164
+ afterAll(() => {
165
+ ctx.cleanup();
166
+ });
167
+ it('warns when running from PR worktree', () => {
168
+ // Run from the PR worktree, not the main repo
169
+ const result = runCli('newpr', ['nested-feature', '--non-interactive'], {
170
+ cwd: ctx.worktreeDir,
171
+ env: ctx.env,
172
+ });
173
+ // Should either warn and fail, or proceed with caution
174
+ // The exact behavior depends on implementation
175
+ if (result.exitCode !== 0) {
176
+ expect(result.stderr.toLowerCase()).toMatch(/worktree|already|pr/i);
177
+ }
178
+ });
179
+ });
180
+ });
181
+ // Test specific action selection
182
+ describe('action selection with --action', () => {
183
+ describe('main_unstaged_same', () => {
184
+ let ctx;
185
+ beforeEach(() => {
186
+ ctx = createTestContext({ scenario: 'main_unstaged_same' });
187
+ });
188
+ afterAll(() => {
189
+ // Clean up will happen in beforeEach for next test
190
+ });
191
+ it('commit_all stages and commits all files', () => {
192
+ const result = runCli('newpr', ['commit-all-feature', '--non-interactive', '--action', 'commit_all'], { cwd: ctx.repoDir, env: ctx.env });
193
+ expect(result.exitCode).toBe(0);
194
+ ctx.cleanup();
195
+ });
196
+ });
197
+ describe('main_staged_same', () => {
198
+ let ctx;
199
+ beforeEach(() => {
200
+ ctx = createTestContext({ scenario: 'main_staged_same' });
201
+ });
202
+ it('commit_staged commits only staged files', () => {
203
+ const result = runCli('newpr', ['commit-staged-feature', '--non-interactive', '--action', 'commit_staged'], { cwd: ctx.repoDir, env: ctx.env });
204
+ expect(result.exitCode).toBe(0);
205
+ ctx.cleanup();
206
+ });
207
+ });
208
+ describe('main_both_same', () => {
209
+ let ctx;
210
+ beforeEach(() => {
211
+ ctx = createTestContext({ scenario: 'main_both_same' });
212
+ });
213
+ it('commit_staged handles staged files (default action)', () => {
214
+ // For main_both_same, the default action is commit_staged with stashUnstaged
215
+ // The action name is just 'commit_staged' - the stash behavior is internal
216
+ const result = runCli('newpr', ['both-feature', '--non-interactive', '--action', 'commit_staged'], { cwd: ctx.repoDir, env: ctx.env });
217
+ expect(result.exitCode).toBe(0);
218
+ ctx.cleanup();
219
+ });
220
+ it('commit_all stages and commits all changes', () => {
221
+ const result = runCli('newpr', ['both-all-feature', '--non-interactive', '--action', 'commit_all'], { cwd: ctx.repoDir, env: ctx.env });
222
+ expect(result.exitCode).toBe(0);
223
+ ctx.cleanup();
224
+ });
225
+ });
226
+ });
227
+ // Verify worktree creation across scenarios
228
+ describe('worktree creation verification', () => {
229
+ const worktreeScenarios = [
230
+ 'main_clean_same',
231
+ 'main_staged_same',
232
+ 'main_unstaged_same',
233
+ ];
234
+ it.each(worktreeScenarios)('creates worktree with correct naming pattern for %s', (scenario) => {
235
+ const ctx = createTestContext({ scenario });
236
+ try {
237
+ const result = runCliJson('newpr', ['worktree-test', '--non-interactive'], {
238
+ cwd: ctx.repoDir,
239
+ env: ctx.env,
240
+ });
241
+ expect(result.data).not.toBeNull();
242
+ if (result.data) {
243
+ const worktreePath = result.data.worktreePath;
244
+ // Verify worktree exists
245
+ expect(fs.existsSync(worktreePath)).toBe(true);
246
+ // Verify naming pattern (should contain .pr and number)
247
+ expect(worktreePath).toMatch(/\.pr\d+/);
248
+ // Verify it's a git worktree (has .git file)
249
+ const gitPath = path.join(worktreePath, '.git');
250
+ expect(fs.existsSync(gitPath)).toBe(true);
251
+ }
252
+ }
253
+ finally {
254
+ ctx.cleanup();
255
+ }
256
+ });
257
+ });
258
+ // Verify file preservation across scenarios
259
+ describe('file preservation', () => {
260
+ it('unstaged files appear in worktree for main_unstaged_same', () => {
261
+ const ctx = createTestContext({ scenario: 'main_unstaged_same' });
262
+ try {
263
+ const result = runCliJson('newpr', ['file-preservation-test', '--non-interactive'], {
264
+ cwd: ctx.repoDir,
265
+ env: ctx.env,
266
+ });
267
+ expect(result.data).not.toBeNull();
268
+ if (result.data) {
269
+ const worktreePath = result.data.worktreePath;
270
+ // The new file should be committed and present in the worktree
271
+ // Check for the docs directory which is created in the scenario
272
+ const docsPath = path.join(worktreePath, 'docs');
273
+ // It should either exist (committed) or be handled appropriately
274
+ // The exact behavior depends on the action taken
275
+ }
276
+ }
277
+ finally {
278
+ ctx.cleanup();
279
+ }
280
+ });
281
+ it('staged files are committed for main_staged_same', () => {
282
+ const ctx = createTestContext({ scenario: 'main_staged_same' });
283
+ try {
284
+ const result = runCliJson('newpr', ['staged-preservation-test', '--non-interactive'], {
285
+ cwd: ctx.repoDir,
286
+ env: ctx.env,
287
+ });
288
+ expect(result.data).not.toBeNull();
289
+ if (result.data) {
290
+ const worktreePath = result.data.worktreePath;
291
+ // Verify the staged file is in the worktree
292
+ const stagedFile = path.join(worktreePath, 'staged-file.ts');
293
+ expect(fs.existsSync(stagedFile)).toBe(true);
294
+ }
295
+ }
296
+ finally {
297
+ ctx.cleanup();
298
+ }
299
+ });
300
+ });
301
+ // Test branch creation from different points
302
+ describe('branch creation points', () => {
303
+ it('creates branch from origin/main for main_clean_same', () => {
304
+ const ctx = createTestContext({ scenario: 'main_clean_same' });
305
+ try {
306
+ const result = runCliJson('newpr', ['origin-branch-test', '--non-interactive'], {
307
+ cwd: ctx.repoDir,
308
+ env: ctx.env,
309
+ });
310
+ expect(result.data).not.toBeNull();
311
+ if (result.data) {
312
+ // Get the commit the new branch is based on
313
+ const worktreePath = result.data.worktreePath;
314
+ const branchCommit = execSync('git rev-parse HEAD', {
315
+ cwd: worktreePath,
316
+ encoding: 'utf8',
317
+ }).trim();
318
+ // Get origin/main commit
319
+ const originMainCommit = execSync('git rev-parse origin/main', {
320
+ cwd: ctx.repoDir,
321
+ encoding: 'utf8',
322
+ }).trim();
323
+ // For main_clean_same, the commits should be related
324
+ // (branch is created from origin/main plus any new commit)
325
+ }
326
+ }
327
+ finally {
328
+ ctx.cleanup();
329
+ }
330
+ });
331
+ it('uses local commits for main_clean_ahead', () => {
332
+ const ctx = createTestContext({ scenario: 'main_clean_ahead' });
333
+ try {
334
+ const result = runCliJson('newpr', ['ahead-branch-test', '--non-interactive'], {
335
+ cwd: ctx.repoDir,
336
+ env: ctx.env,
337
+ });
338
+ expect(result.data).not.toBeNull();
339
+ if (result.data) {
340
+ // The worktree should contain the local-feature.ts file
341
+ // that was committed locally (ahead of origin)
342
+ const localFeature = path.join(result.data.worktreePath, 'local-feature.ts');
343
+ expect(fs.existsSync(localFeature)).toBe(true);
344
+ }
345
+ }
346
+ finally {
347
+ ctx.cleanup();
348
+ }
349
+ });
350
+ });
351
+ // Test PR draft status
352
+ describe('PR draft status', () => {
353
+ it('creates draft PR by default', () => {
354
+ // Note: PRs are created as drafts by default in newpr
355
+ const ctx = createTestContext({ scenario: 'main_clean_same' });
356
+ try {
357
+ const result = runCli('newpr', ['draft-pr-test', '--non-interactive'], {
358
+ cwd: ctx.repoDir,
359
+ env: ctx.env,
360
+ });
361
+ expect(result.exitCode).toBe(0);
362
+ // The gh mock should have been called with draft=true (default)
363
+ const mockState = ctx.ghMock?.getState();
364
+ if (mockState) {
365
+ // Find the created PR - should be a draft
366
+ for (const [, pr] of mockState.prs) {
367
+ if (pr.headRefName.includes('draft-pr-test') || pr.headRefName.includes('feat')) {
368
+ expect(pr.isDraft).toBe(true);
369
+ }
370
+ }
371
+ }
372
+ }
373
+ finally {
374
+ ctx.cleanup();
375
+ }
376
+ });
377
+ it('creates ready-for-review PR when --ready is specified', () => {
378
+ const ctx = createTestContext({ scenario: 'main_staged_same' });
379
+ try {
380
+ const result = runCli('newpr', ['ready-pr-test', '--non-interactive', '--ready'], {
381
+ cwd: ctx.repoDir,
382
+ env: ctx.env,
383
+ });
384
+ expect(result.exitCode).toBe(0);
385
+ // The gh mock should have been called with draft=false
386
+ const mockState = ctx.ghMock?.getState();
387
+ if (mockState) {
388
+ for (const [, pr] of mockState.prs) {
389
+ if (pr.headRefName.includes('ready-pr-test') || pr.headRefName.includes('feat')) {
390
+ expect(pr.isDraft).toBe(false);
391
+ }
392
+ }
393
+ }
394
+ }
395
+ finally {
396
+ ctx.cleanup();
397
+ }
398
+ });
399
+ });
400
+ // Test --base override (-b)
401
+ describe('--base override', () => {
402
+ it('uses specified base branch', () => {
403
+ const ctx = createTestContext({ scenario: 'main_clean_same' });
404
+ try {
405
+ // Create a develop branch first
406
+ execSync('git branch develop', { cwd: ctx.repoDir, stdio: 'ignore' });
407
+ execSync('git push origin develop', { cwd: ctx.repoDir, stdio: 'ignore' });
408
+ const result = runCli('newpr', ['base-branch-test', '--non-interactive', '--base', 'develop'], { cwd: ctx.repoDir, env: ctx.env });
409
+ expect(result.exitCode).toBe(0);
410
+ // The PR should be based on develop
411
+ const mockState = ctx.ghMock?.getState();
412
+ if (mockState) {
413
+ for (const [, pr] of mockState.prs) {
414
+ if (pr.headRefName.includes('base-branch')) {
415
+ expect(pr.baseRefName).toBe('develop');
416
+ }
417
+ }
418
+ }
419
+ }
420
+ finally {
421
+ ctx.cleanup();
422
+ }
423
+ });
424
+ });
425
+ });
426
+ //# sourceMappingURL=scenarios.e2e.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scenarios.e2e.test.js","sourceRoot":"","sources":["../../../src/e2e/newpr/scenarios.e2e.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=pr-lifecycle.e2e.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pr-lifecycle.e2e.test.d.ts","sourceRoot":"","sources":["../../../src/e2e/workflows/pr-lifecycle.e2e.test.ts"],"names":[],"mappings":""}