@camaradesuk/git-worktree-tools 1.10.0 → 1.12.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 (431) hide show
  1. package/README.md +4 -4
  2. package/dist/lib/config.d.ts +2 -1
  3. package/dist/lib/config.d.ts.map +1 -1
  4. package/dist/lib/config.js +11 -0
  5. package/dist/lib/config.js.map +1 -1
  6. package/package.json +12 -3
  7. package/schemas/worktreerc.schema.json +1 -1
  8. package/dist/api/list.test.d.ts +0 -5
  9. package/dist/api/list.test.d.ts.map +0 -1
  10. package/dist/api/list.test.js +0 -390
  11. package/dist/api/list.test.js.map +0 -1
  12. package/dist/cli/cleanpr.test.d.ts +0 -2
  13. package/dist/cli/cleanpr.test.d.ts.map +0 -1
  14. package/dist/cli/cleanpr.test.js +0 -954
  15. package/dist/cli/cleanpr.test.js.map +0 -1
  16. package/dist/cli/lswt.test.d.ts +0 -2
  17. package/dist/cli/lswt.test.d.ts.map +0 -1
  18. package/dist/cli/lswt.test.js +0 -376
  19. package/dist/cli/lswt.test.js.map +0 -1
  20. package/dist/cli/newpr.test.d.ts +0 -2
  21. package/dist/cli/newpr.test.d.ts.map +0 -1
  22. package/dist/cli/newpr.test.js +0 -1182
  23. package/dist/cli/newpr.test.js.map +0 -1
  24. package/dist/cli/prs.test.d.ts +0 -8
  25. package/dist/cli/prs.test.d.ts.map +0 -1
  26. package/dist/cli/prs.test.js +0 -463
  27. package/dist/cli/prs.test.js.map +0 -1
  28. package/dist/cli/wt/clean.test.d.ts +0 -8
  29. package/dist/cli/wt/clean.test.d.ts.map +0 -1
  30. package/dist/cli/wt/clean.test.js +0 -624
  31. package/dist/cli/wt/clean.test.js.map +0 -1
  32. package/dist/cli/wt/completion.test.d.ts +0 -5
  33. package/dist/cli/wt/completion.test.d.ts.map +0 -1
  34. package/dist/cli/wt/completion.test.js +0 -275
  35. package/dist/cli/wt/completion.test.js.map +0 -1
  36. package/dist/cli/wt/config.test.d.ts +0 -7
  37. package/dist/cli/wt/config.test.d.ts.map +0 -1
  38. package/dist/cli/wt/config.test.js +0 -440
  39. package/dist/cli/wt/config.test.js.map +0 -1
  40. package/dist/cli/wt/entry.test.d.ts +0 -8
  41. package/dist/cli/wt/entry.test.d.ts.map +0 -1
  42. package/dist/cli/wt/entry.test.js +0 -201
  43. package/dist/cli/wt/entry.test.js.map +0 -1
  44. package/dist/cli/wt/init.test.d.ts +0 -5
  45. package/dist/cli/wt/init.test.d.ts.map +0 -1
  46. package/dist/cli/wt/init.test.js +0 -165
  47. package/dist/cli/wt/init.test.js.map +0 -1
  48. package/dist/cli/wt/init.unit.test.d.ts +0 -5
  49. package/dist/cli/wt/init.unit.test.d.ts.map +0 -1
  50. package/dist/cli/wt/init.unit.test.js +0 -432
  51. package/dist/cli/wt/init.unit.test.js.map +0 -1
  52. package/dist/cli/wt/interactive-menu.test.d.ts +0 -12
  53. package/dist/cli/wt/interactive-menu.test.d.ts.map +0 -1
  54. package/dist/cli/wt/interactive-menu.test.js +0 -796
  55. package/dist/cli/wt/interactive-menu.test.js.map +0 -1
  56. package/dist/cli/wt/list.test.d.ts +0 -10
  57. package/dist/cli/wt/list.test.d.ts.map +0 -1
  58. package/dist/cli/wt/list.test.js +0 -157
  59. package/dist/cli/wt/list.test.js.map +0 -1
  60. package/dist/cli/wt/prs.test.d.ts +0 -5
  61. package/dist/cli/wt/prs.test.d.ts.map +0 -1
  62. package/dist/cli/wt/prs.test.js +0 -410
  63. package/dist/cli/wt/prs.test.js.map +0 -1
  64. package/dist/cli/wt/run-command.test.d.ts +0 -5
  65. package/dist/cli/wt/run-command.test.d.ts.map +0 -1
  66. package/dist/cli/wt/run-command.test.js +0 -88
  67. package/dist/cli/wt/run-command.test.js.map +0 -1
  68. package/dist/cli/wt/state.test.d.ts +0 -9
  69. package/dist/cli/wt/state.test.d.ts.map +0 -1
  70. package/dist/cli/wt/state.test.js +0 -127
  71. package/dist/cli/wt/state.test.js.map +0 -1
  72. package/dist/cli/wt/wt.test.d.ts +0 -8
  73. package/dist/cli/wt/wt.test.d.ts.map +0 -1
  74. package/dist/cli/wt/wt.test.js +0 -739
  75. package/dist/cli/wt/wt.test.js.map +0 -1
  76. package/dist/cli/wt.unit.test.d.ts +0 -7
  77. package/dist/cli/wt.unit.test.d.ts.map +0 -1
  78. package/dist/cli/wt.unit.test.js +0 -160
  79. package/dist/cli/wt.unit.test.js.map +0 -1
  80. package/dist/cli/wtconfig.test.d.ts +0 -5
  81. package/dist/cli/wtconfig.test.d.ts.map +0 -1
  82. package/dist/cli/wtconfig.test.js +0 -1289
  83. package/dist/cli/wtconfig.test.js.map +0 -1
  84. package/dist/cli/wtlink.test.d.ts +0 -2
  85. package/dist/cli/wtlink.test.d.ts.map +0 -1
  86. package/dist/cli/wtlink.test.js +0 -249
  87. package/dist/cli/wtlink.test.js.map +0 -1
  88. package/dist/cli/wtstate.test.d.ts +0 -5
  89. package/dist/cli/wtstate.test.d.ts.map +0 -1
  90. package/dist/cli/wtstate.test.js +0 -193
  91. package/dist/cli/wtstate.test.js.map +0 -1
  92. package/dist/e2e/cleanpr/cleanpr.e2e.test.d.ts +0 -2
  93. package/dist/e2e/cleanpr/cleanpr.e2e.test.d.ts.map +0 -1
  94. package/dist/e2e/cleanpr/cleanpr.e2e.test.js +0 -326
  95. package/dist/e2e/cleanpr/cleanpr.e2e.test.js.map +0 -1
  96. package/dist/e2e/cli.e2e.test.d.ts +0 -2
  97. package/dist/e2e/cli.e2e.test.d.ts.map +0 -1
  98. package/dist/e2e/cli.e2e.test.js +0 -417
  99. package/dist/e2e/cli.e2e.test.js.map +0 -1
  100. package/dist/e2e/lswt/lswt.e2e.test.d.ts +0 -2
  101. package/dist/e2e/lswt/lswt.e2e.test.d.ts.map +0 -1
  102. package/dist/e2e/lswt/lswt.e2e.test.js +0 -361
  103. package/dist/e2e/lswt/lswt.e2e.test.js.map +0 -1
  104. package/dist/e2e/newpr/newpr.e2e.test.d.ts +0 -2
  105. package/dist/e2e/newpr/newpr.e2e.test.d.ts.map +0 -1
  106. package/dist/e2e/newpr/newpr.e2e.test.js +0 -286
  107. package/dist/e2e/newpr/newpr.e2e.test.js.map +0 -1
  108. package/dist/e2e/newpr/scenarios.e2e.test.d.ts +0 -2
  109. package/dist/e2e/newpr/scenarios.e2e.test.d.ts.map +0 -1
  110. package/dist/e2e/newpr/scenarios.e2e.test.js +0 -426
  111. package/dist/e2e/newpr/scenarios.e2e.test.js.map +0 -1
  112. package/dist/e2e/newpr-full-flow.e2e.test.d.ts +0 -2
  113. package/dist/e2e/newpr-full-flow.e2e.test.d.ts.map +0 -1
  114. package/dist/e2e/newpr-full-flow.e2e.test.js +0 -280
  115. package/dist/e2e/newpr-full-flow.e2e.test.js.map +0 -1
  116. package/dist/e2e/prs/prs.e2e.test.d.ts +0 -7
  117. package/dist/e2e/prs/prs.e2e.test.d.ts.map +0 -1
  118. package/dist/e2e/prs/prs.e2e.test.js +0 -606
  119. package/dist/e2e/prs/prs.e2e.test.js.map +0 -1
  120. package/dist/e2e/workflows/pr-lifecycle.e2e.test.d.ts +0 -2
  121. package/dist/e2e/workflows/pr-lifecycle.e2e.test.d.ts.map +0 -1
  122. package/dist/e2e/workflows/pr-lifecycle.e2e.test.js +0 -298
  123. package/dist/e2e/workflows/pr-lifecycle.e2e.test.js.map +0 -1
  124. package/dist/e2e/wt/interactive-menu.e2e.test.d.ts +0 -8
  125. package/dist/e2e/wt/interactive-menu.e2e.test.d.ts.map +0 -1
  126. package/dist/e2e/wt/interactive-menu.e2e.test.js +0 -583
  127. package/dist/e2e/wt/interactive-menu.e2e.test.js.map +0 -1
  128. package/dist/e2e/wt/wt.e2e.test.d.ts +0 -9
  129. package/dist/e2e/wt/wt.e2e.test.d.ts.map +0 -1
  130. package/dist/e2e/wt/wt.e2e.test.js +0 -597
  131. package/dist/e2e/wt/wt.e2e.test.js.map +0 -1
  132. package/dist/e2e/wtlink/wtlink.e2e.test.d.ts +0 -2
  133. package/dist/e2e/wtlink/wtlink.e2e.test.d.ts.map +0 -1
  134. package/dist/e2e/wtlink/wtlink.e2e.test.js +0 -416
  135. package/dist/e2e/wtlink/wtlink.e2e.test.js.map +0 -1
  136. package/dist/integration/git.integration.test.d.ts +0 -2
  137. package/dist/integration/git.integration.test.d.ts.map +0 -1
  138. package/dist/integration/git.integration.test.js +0 -336
  139. package/dist/integration/git.integration.test.js.map +0 -1
  140. package/dist/integration/lswt-remote-pr.integration.test.d.ts +0 -2
  141. package/dist/integration/lswt-remote-pr.integration.test.d.ts.map +0 -1
  142. package/dist/integration/lswt-remote-pr.integration.test.js +0 -222
  143. package/dist/integration/lswt-remote-pr.integration.test.js.map +0 -1
  144. package/dist/integration/newpr-branchfrom-head.integration.test.d.ts +0 -2
  145. package/dist/integration/newpr-branchfrom-head.integration.test.d.ts.map +0 -1
  146. package/dist/integration/newpr-branchfrom-head.integration.test.js +0 -498
  147. package/dist/integration/newpr-branchfrom-head.integration.test.js.map +0 -1
  148. package/dist/integration/newpr.integration.test.d.ts +0 -2
  149. package/dist/integration/newpr.integration.test.d.ts.map +0 -1
  150. package/dist/integration/newpr.integration.test.js +0 -460
  151. package/dist/integration/newpr.integration.test.js.map +0 -1
  152. package/dist/integration/prs.integration.test.d.ts +0 -8
  153. package/dist/integration/prs.integration.test.d.ts.map +0 -1
  154. package/dist/integration/prs.integration.test.js +0 -478
  155. package/dist/integration/prs.integration.test.js.map +0 -1
  156. package/dist/lib/ai/base-provider.test.d.ts +0 -7
  157. package/dist/lib/ai/base-provider.test.d.ts.map +0 -1
  158. package/dist/lib/ai/base-provider.test.js +0 -319
  159. package/dist/lib/ai/base-provider.test.js.map +0 -1
  160. package/dist/lib/ai/cli-provider.test.d.ts +0 -5
  161. package/dist/lib/ai/cli-provider.test.d.ts.map +0 -1
  162. package/dist/lib/ai/cli-provider.test.js +0 -460
  163. package/dist/lib/ai/cli-provider.test.js.map +0 -1
  164. package/dist/lib/ai/fallback-provider.test.d.ts +0 -7
  165. package/dist/lib/ai/fallback-provider.test.d.ts.map +0 -1
  166. package/dist/lib/ai/fallback-provider.test.js +0 -165
  167. package/dist/lib/ai/fallback-provider.test.js.map +0 -1
  168. package/dist/lib/ai/generation-service.test.d.ts +0 -7
  169. package/dist/lib/ai/generation-service.test.d.ts.map +0 -1
  170. package/dist/lib/ai/generation-service.test.js +0 -213
  171. package/dist/lib/ai/generation-service.test.js.map +0 -1
  172. package/dist/lib/ai/provider-manager.test.d.ts +0 -5
  173. package/dist/lib/ai/provider-manager.test.d.ts.map +0 -1
  174. package/dist/lib/ai/provider-manager.test.js +0 -312
  175. package/dist/lib/ai/provider-manager.test.js.map +0 -1
  176. package/dist/lib/ai/repo-docs.test.d.ts +0 -5
  177. package/dist/lib/ai/repo-docs.test.d.ts.map +0 -1
  178. package/dist/lib/ai/repo-docs.test.js +0 -357
  179. package/dist/lib/ai/repo-docs.test.js.map +0 -1
  180. package/dist/lib/cleanpr/args.test.d.ts +0 -2
  181. package/dist/lib/cleanpr/args.test.d.ts.map +0 -1
  182. package/dist/lib/cleanpr/args.test.js +0 -269
  183. package/dist/lib/cleanpr/args.test.js.map +0 -1
  184. package/dist/lib/cleanpr/cleanup.test.d.ts +0 -2
  185. package/dist/lib/cleanpr/cleanup.test.d.ts.map +0 -1
  186. package/dist/lib/cleanpr/cleanup.test.js +0 -296
  187. package/dist/lib/cleanpr/cleanup.test.js.map +0 -1
  188. package/dist/lib/cleanpr/worktree-info.test.d.ts +0 -2
  189. package/dist/lib/cleanpr/worktree-info.test.d.ts.map +0 -1
  190. package/dist/lib/cleanpr/worktree-info.test.js +0 -228
  191. package/dist/lib/cleanpr/worktree-info.test.js.map +0 -1
  192. package/dist/lib/colors.test.d.ts +0 -2
  193. package/dist/lib/colors.test.d.ts.map +0 -1
  194. package/dist/lib/colors.test.js +0 -142
  195. package/dist/lib/colors.test.js.map +0 -1
  196. package/dist/lib/config-editor.test.d.ts +0 -11
  197. package/dist/lib/config-editor.test.d.ts.map +0 -1
  198. package/dist/lib/config-editor.test.js +0 -526
  199. package/dist/lib/config-editor.test.js.map +0 -1
  200. package/dist/lib/config-migration/detector.test.d.ts +0 -5
  201. package/dist/lib/config-migration/detector.test.d.ts.map +0 -1
  202. package/dist/lib/config-migration/detector.test.js +0 -201
  203. package/dist/lib/config-migration/detector.test.js.map +0 -1
  204. package/dist/lib/config-migration/reporter.test.d.ts +0 -5
  205. package/dist/lib/config-migration/reporter.test.d.ts.map +0 -1
  206. package/dist/lib/config-migration/reporter.test.js +0 -305
  207. package/dist/lib/config-migration/reporter.test.js.map +0 -1
  208. package/dist/lib/config-migration/runner.test.d.ts +0 -5
  209. package/dist/lib/config-migration/runner.test.d.ts.map +0 -1
  210. package/dist/lib/config-migration/runner.test.js +0 -235
  211. package/dist/lib/config-migration/runner.test.js.map +0 -1
  212. package/dist/lib/config-validation.test.d.ts +0 -5
  213. package/dist/lib/config-validation.test.d.ts.map +0 -1
  214. package/dist/lib/config-validation.test.js +0 -423
  215. package/dist/lib/config-validation.test.js.map +0 -1
  216. package/dist/lib/config.test.d.ts +0 -2
  217. package/dist/lib/config.test.d.ts.map +0 -1
  218. package/dist/lib/config.test.js +0 -554
  219. package/dist/lib/config.test.js.map +0 -1
  220. package/dist/lib/constants.test.d.ts +0 -5
  221. package/dist/lib/constants.test.d.ts.map +0 -1
  222. package/dist/lib/constants.test.js +0 -180
  223. package/dist/lib/constants.test.js.map +0 -1
  224. package/dist/lib/deprecation.test.d.ts +0 -2
  225. package/dist/lib/deprecation.test.d.ts.map +0 -1
  226. package/dist/lib/deprecation.test.js +0 -71
  227. package/dist/lib/deprecation.test.js.map +0 -1
  228. package/dist/lib/errors.test.d.ts +0 -2
  229. package/dist/lib/errors.test.d.ts.map +0 -1
  230. package/dist/lib/errors.test.js +0 -117
  231. package/dist/lib/errors.test.js.map +0 -1
  232. package/dist/lib/git.test.d.ts +0 -2
  233. package/dist/lib/git.test.d.ts.map +0 -1
  234. package/dist/lib/git.test.js +0 -608
  235. package/dist/lib/git.test.js.map +0 -1
  236. package/dist/lib/github.test.d.ts +0 -2
  237. package/dist/lib/github.test.d.ts.map +0 -1
  238. package/dist/lib/github.test.js +0 -441
  239. package/dist/lib/github.test.js.map +0 -1
  240. package/dist/lib/global-check.test.d.ts +0 -5
  241. package/dist/lib/global-check.test.d.ts.map +0 -1
  242. package/dist/lib/global-check.test.js +0 -150
  243. package/dist/lib/global-check.test.js.map +0 -1
  244. package/dist/lib/global-config.test.d.ts +0 -5
  245. package/dist/lib/global-config.test.d.ts.map +0 -1
  246. package/dist/lib/global-config.test.js +0 -282
  247. package/dist/lib/global-config.test.js.map +0 -1
  248. package/dist/lib/hooks/confirmation.test.d.ts +0 -7
  249. package/dist/lib/hooks/confirmation.test.d.ts.map +0 -1
  250. package/dist/lib/hooks/confirmation.test.js +0 -300
  251. package/dist/lib/hooks/confirmation.test.js.map +0 -1
  252. package/dist/lib/hooks/executor.test.d.ts +0 -5
  253. package/dist/lib/hooks/executor.test.d.ts.map +0 -1
  254. package/dist/lib/hooks/executor.test.js +0 -648
  255. package/dist/lib/hooks/executor.test.js.map +0 -1
  256. package/dist/lib/hooks/templates.test.d.ts +0 -5
  257. package/dist/lib/hooks/templates.test.d.ts.map +0 -1
  258. package/dist/lib/hooks/templates.test.js +0 -163
  259. package/dist/lib/hooks/templates.test.js.map +0 -1
  260. package/dist/lib/hooks/types.test.d.ts +0 -5
  261. package/dist/lib/hooks/types.test.d.ts.map +0 -1
  262. package/dist/lib/hooks/types.test.js +0 -132
  263. package/dist/lib/hooks/types.test.js.map +0 -1
  264. package/dist/lib/json-output.test.d.ts +0 -5
  265. package/dist/lib/json-output.test.d.ts.map +0 -1
  266. package/dist/lib/json-output.test.js +0 -261
  267. package/dist/lib/json-output.test.js.map +0 -1
  268. package/dist/lib/logger.test.d.ts +0 -14
  269. package/dist/lib/logger.test.d.ts.map +0 -1
  270. package/dist/lib/logger.test.js +0 -692
  271. package/dist/lib/logger.test.js.map +0 -1
  272. package/dist/lib/lswt/action-executors.test.d.ts +0 -2
  273. package/dist/lib/lswt/action-executors.test.d.ts.map +0 -1
  274. package/dist/lib/lswt/action-executors.test.js +0 -1127
  275. package/dist/lib/lswt/action-executors.test.js.map +0 -1
  276. package/dist/lib/lswt/actions.test.d.ts +0 -2
  277. package/dist/lib/lswt/actions.test.d.ts.map +0 -1
  278. package/dist/lib/lswt/actions.test.js +0 -497
  279. package/dist/lib/lswt/actions.test.js.map +0 -1
  280. package/dist/lib/lswt/args.test.d.ts +0 -2
  281. package/dist/lib/lswt/args.test.d.ts.map +0 -1
  282. package/dist/lib/lswt/args.test.js +0 -195
  283. package/dist/lib/lswt/args.test.js.map +0 -1
  284. package/dist/lib/lswt/environment.test.d.ts +0 -2
  285. package/dist/lib/lswt/environment.test.d.ts.map +0 -1
  286. package/dist/lib/lswt/environment.test.js +0 -544
  287. package/dist/lib/lswt/environment.test.js.map +0 -1
  288. package/dist/lib/lswt/formatters.test.d.ts +0 -2
  289. package/dist/lib/lswt/formatters.test.d.ts.map +0 -1
  290. package/dist/lib/lswt/formatters.test.js +0 -323
  291. package/dist/lib/lswt/formatters.test.js.map +0 -1
  292. package/dist/lib/lswt/fuzzy-search.test.d.ts +0 -5
  293. package/dist/lib/lswt/fuzzy-search.test.d.ts.map +0 -1
  294. package/dist/lib/lswt/fuzzy-search.test.js +0 -207
  295. package/dist/lib/lswt/fuzzy-search.test.js.map +0 -1
  296. package/dist/lib/lswt/interactive.test.d.ts +0 -2
  297. package/dist/lib/lswt/interactive.test.d.ts.map +0 -1
  298. package/dist/lib/lswt/interactive.test.js +0 -771
  299. package/dist/lib/lswt/interactive.test.js.map +0 -1
  300. package/dist/lib/lswt/table.test.d.ts +0 -5
  301. package/dist/lib/lswt/table.test.d.ts.map +0 -1
  302. package/dist/lib/lswt/table.test.js +0 -262
  303. package/dist/lib/lswt/table.test.js.map +0 -1
  304. package/dist/lib/lswt/worktree-info.test.d.ts +0 -2
  305. package/dist/lib/lswt/worktree-info.test.d.ts.map +0 -1
  306. package/dist/lib/lswt/worktree-info.test.js +0 -484
  307. package/dist/lib/lswt/worktree-info.test.js.map +0 -1
  308. package/dist/lib/newpr/action-deps.test.d.ts +0 -5
  309. package/dist/lib/newpr/action-deps.test.d.ts.map +0 -1
  310. package/dist/lib/newpr/action-deps.test.js +0 -111
  311. package/dist/lib/newpr/action-deps.test.js.map +0 -1
  312. package/dist/lib/newpr/actions.test.d.ts +0 -2
  313. package/dist/lib/newpr/actions.test.d.ts.map +0 -1
  314. package/dist/lib/newpr/actions.test.js +0 -254
  315. package/dist/lib/newpr/actions.test.js.map +0 -1
  316. package/dist/lib/newpr/args.test.d.ts +0 -2
  317. package/dist/lib/newpr/args.test.d.ts.map +0 -1
  318. package/dist/lib/newpr/args.test.js +0 -479
  319. package/dist/lib/newpr/args.test.js.map +0 -1
  320. package/dist/lib/newpr/hook-runner.test.d.ts +0 -7
  321. package/dist/lib/newpr/hook-runner.test.d.ts.map +0 -1
  322. package/dist/lib/newpr/hook-runner.test.js +0 -422
  323. package/dist/lib/newpr/hook-runner.test.js.map +0 -1
  324. package/dist/lib/newpr/plan-generator.test.d.ts +0 -7
  325. package/dist/lib/newpr/plan-generator.test.d.ts.map +0 -1
  326. package/dist/lib/newpr/plan-generator.test.js +0 -387
  327. package/dist/lib/newpr/plan-generator.test.js.map +0 -1
  328. package/dist/lib/newpr/scenario-handler.test.d.ts +0 -2
  329. package/dist/lib/newpr/scenario-handler.test.d.ts.map +0 -1
  330. package/dist/lib/newpr/scenario-handler.test.js +0 -256
  331. package/dist/lib/newpr/scenario-handler.test.js.map +0 -1
  332. package/dist/lib/prompts.test.d.ts +0 -2
  333. package/dist/lib/prompts.test.d.ts.map +0 -1
  334. package/dist/lib/prompts.test.js +0 -807
  335. package/dist/lib/prompts.test.js.map +0 -1
  336. package/dist/lib/prs/actions.test.d.ts +0 -5
  337. package/dist/lib/prs/actions.test.d.ts.map +0 -1
  338. package/dist/lib/prs/actions.test.js +0 -356
  339. package/dist/lib/prs/actions.test.js.map +0 -1
  340. package/dist/lib/prs/command.test.d.ts +0 -11
  341. package/dist/lib/prs/command.test.d.ts.map +0 -1
  342. package/dist/lib/prs/command.test.js +0 -409
  343. package/dist/lib/prs/command.test.js.map +0 -1
  344. package/dist/lib/prs/data.test.d.ts +0 -5
  345. package/dist/lib/prs/data.test.d.ts.map +0 -1
  346. package/dist/lib/prs/data.test.js +0 -417
  347. package/dist/lib/prs/data.test.js.map +0 -1
  348. package/dist/lib/prs/details.test.d.ts +0 -5
  349. package/dist/lib/prs/details.test.d.ts.map +0 -1
  350. package/dist/lib/prs/details.test.js +0 -325
  351. package/dist/lib/prs/details.test.js.map +0 -1
  352. package/dist/lib/prs/filters.test.d.ts +0 -5
  353. package/dist/lib/prs/filters.test.d.ts.map +0 -1
  354. package/dist/lib/prs/filters.test.js +0 -312
  355. package/dist/lib/prs/filters.test.js.map +0 -1
  356. package/dist/lib/prs/formatters.test.d.ts +0 -2
  357. package/dist/lib/prs/formatters.test.d.ts.map +0 -1
  358. package/dist/lib/prs/formatters.test.js +0 -387
  359. package/dist/lib/prs/formatters.test.js.map +0 -1
  360. package/dist/lib/prs/interactive.test.d.ts +0 -5
  361. package/dist/lib/prs/interactive.test.d.ts.map +0 -1
  362. package/dist/lib/prs/interactive.test.js +0 -517
  363. package/dist/lib/prs/interactive.test.js.map +0 -1
  364. package/dist/lib/schema.test.d.ts +0 -10
  365. package/dist/lib/schema.test.d.ts.map +0 -1
  366. package/dist/lib/schema.test.js +0 -309
  367. package/dist/lib/schema.test.js.map +0 -1
  368. package/dist/lib/state-detection.test.d.ts +0 -2
  369. package/dist/lib/state-detection.test.d.ts.map +0 -1
  370. package/dist/lib/state-detection.test.js +0 -451
  371. package/dist/lib/state-detection.test.js.map +0 -1
  372. package/dist/lib/ui/error.test.d.ts +0 -2
  373. package/dist/lib/ui/error.test.d.ts.map +0 -1
  374. package/dist/lib/ui/error.test.js +0 -143
  375. package/dist/lib/ui/error.test.js.map +0 -1
  376. package/dist/lib/ui/output.test.d.ts +0 -2
  377. package/dist/lib/ui/output.test.d.ts.map +0 -1
  378. package/dist/lib/ui/output.test.js +0 -59
  379. package/dist/lib/ui/output.test.js.map +0 -1
  380. package/dist/lib/ui/status.test.d.ts +0 -2
  381. package/dist/lib/ui/status.test.d.ts.map +0 -1
  382. package/dist/lib/ui/status.test.js +0 -158
  383. package/dist/lib/ui/status.test.js.map +0 -1
  384. package/dist/lib/ui/table.test.d.ts +0 -2
  385. package/dist/lib/ui/table.test.d.ts.map +0 -1
  386. package/dist/lib/ui/table.test.js +0 -115
  387. package/dist/lib/ui/table.test.js.map +0 -1
  388. package/dist/lib/ui/theme.test.d.ts +0 -2
  389. package/dist/lib/ui/theme.test.d.ts.map +0 -1
  390. package/dist/lib/ui/theme.test.js +0 -76
  391. package/dist/lib/ui/theme.test.js.map +0 -1
  392. package/dist/lib/wtconfig/config-manager.test.d.ts +0 -5
  393. package/dist/lib/wtconfig/config-manager.test.d.ts.map +0 -1
  394. package/dist/lib/wtconfig/config-manager.test.js +0 -501
  395. package/dist/lib/wtconfig/config-manager.test.js.map +0 -1
  396. package/dist/lib/wtconfig/environment.test.d.ts +0 -5
  397. package/dist/lib/wtconfig/environment.test.d.ts.map +0 -1
  398. package/dist/lib/wtconfig/environment.test.js +0 -285
  399. package/dist/lib/wtconfig/environment.test.js.map +0 -1
  400. package/dist/lib/wtlink/config-manifest.test.d.ts +0 -2
  401. package/dist/lib/wtlink/config-manifest.test.d.ts.map +0 -1
  402. package/dist/lib/wtlink/config-manifest.test.js +0 -486
  403. package/dist/lib/wtlink/config-manifest.test.js.map +0 -1
  404. package/dist/lib/wtlink/link-configs.test.d.ts +0 -2
  405. package/dist/lib/wtlink/link-configs.test.d.ts.map +0 -1
  406. package/dist/lib/wtlink/link-configs.test.js +0 -612
  407. package/dist/lib/wtlink/link-configs.test.js.map +0 -1
  408. package/dist/lib/wtlink/main-menu.test.d.ts +0 -5
  409. package/dist/lib/wtlink/main-menu.test.d.ts.map +0 -1
  410. package/dist/lib/wtlink/main-menu.test.js +0 -126
  411. package/dist/lib/wtlink/main-menu.test.js.map +0 -1
  412. package/dist/lib/wtlink/manage-manifest.test.d.ts +0 -2
  413. package/dist/lib/wtlink/manage-manifest.test.d.ts.map +0 -1
  414. package/dist/lib/wtlink/manage-manifest.test.js +0 -714
  415. package/dist/lib/wtlink/manage-manifest.test.js.map +0 -1
  416. package/dist/lib/wtlink/validate-manifest.test.d.ts +0 -2
  417. package/dist/lib/wtlink/validate-manifest.test.d.ts.map +0 -1
  418. package/dist/lib/wtlink/validate-manifest.test.js +0 -220
  419. package/dist/lib/wtlink/validate-manifest.test.js.map +0 -1
  420. package/dist/lib/wtstate/analyze.test.d.ts +0 -5
  421. package/dist/lib/wtstate/analyze.test.d.ts.map +0 -1
  422. package/dist/lib/wtstate/analyze.test.js +0 -282
  423. package/dist/lib/wtstate/analyze.test.js.map +0 -1
  424. package/dist/lib/wtstate/args.test.d.ts +0 -5
  425. package/dist/lib/wtstate/args.test.d.ts.map +0 -1
  426. package/dist/lib/wtstate/args.test.js +0 -120
  427. package/dist/lib/wtstate/args.test.js.map +0 -1
  428. package/dist/mcp/server.test.d.ts +0 -9
  429. package/dist/mcp/server.test.d.ts.map +0 -1
  430. package/dist/mcp/server.test.js +0 -550
  431. package/dist/mcp/server.test.js.map +0 -1
@@ -1,325 +0,0 @@
1
- /**
2
- * Tests for PR detail view
3
- */
4
- import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
5
- import { formatDetailHeader, formatDetailMetadata, formatDetailLabels, formatDetailReviews, formatDetailCI, formatDetailChanges, formatDetailWorktree, formatDetailActions, formatPrDetailView, showPrDetail, createDefaultDetailDeps, } from './details.js';
6
- // Helper to create mock PR display items
7
- function createMockPr(overrides = {}) {
8
- return {
9
- number: 42,
10
- title: 'Add dark mode toggle',
11
- state: 'OPEN',
12
- isDraft: false,
13
- url: 'https://github.com/test/repo/pull/42',
14
- headBranch: 'feat/dark-mode',
15
- baseBranch: 'main',
16
- author: 'testuser',
17
- createdAt: new Date(Date.now() - 2 * 60 * 60 * 1000).toISOString(), // 2 hours ago
18
- updatedAt: new Date(Date.now() - 30 * 60 * 1000).toISOString(), // 30 mins ago
19
- labels: ['enhancement', 'frontend'],
20
- reviewDecision: 'APPROVED',
21
- approvalCount: 2,
22
- reviewCount: 2,
23
- checksStatus: 'SUCCESS',
24
- additions: 342,
25
- deletions: 89,
26
- changedFiles: 12,
27
- hasWorktree: true,
28
- worktreePath: '../repo.pr42',
29
- ...overrides,
30
- };
31
- }
32
- describe('details', () => {
33
- describe('formatDetailHeader', () => {
34
- it('should include PR number', () => {
35
- const pr = createMockPr({ number: 123 });
36
- const result = formatDetailHeader(pr);
37
- expect(result).toContain('#123');
38
- });
39
- it('should include box characters', () => {
40
- const pr = createMockPr();
41
- const result = formatDetailHeader(pr);
42
- expect(result).toContain('╔');
43
- expect(result).toContain('╚');
44
- });
45
- });
46
- describe('formatDetailMetadata', () => {
47
- it('should include title', () => {
48
- const pr = createMockPr({ title: 'My Amazing Feature' });
49
- const result = formatDetailMetadata(pr);
50
- expect(result).toContain('My Amazing Feature');
51
- });
52
- it('should include author', () => {
53
- const pr = createMockPr({ author: 'alice' });
54
- const result = formatDetailMetadata(pr);
55
- expect(result).toContain('@alice');
56
- });
57
- it('should include branch info', () => {
58
- const pr = createMockPr({ headBranch: 'feat/test', baseBranch: 'main' });
59
- const result = formatDetailMetadata(pr);
60
- expect(result).toContain('feat/test');
61
- expect(result).toContain('main');
62
- });
63
- it('should show draft status', () => {
64
- const pr = createMockPr({ isDraft: true });
65
- const result = formatDetailMetadata(pr);
66
- expect(result).toContain('DRAFT');
67
- });
68
- it('should show ready for review for open non-draft', () => {
69
- const pr = createMockPr({ isDraft: false, state: 'OPEN' });
70
- const result = formatDetailMetadata(pr);
71
- expect(result).toContain('Ready for review');
72
- });
73
- });
74
- describe('formatDetailLabels', () => {
75
- it('should show none when no labels', () => {
76
- const pr = createMockPr({ labels: [] });
77
- const result = formatDetailLabels(pr);
78
- expect(result).toContain('none');
79
- });
80
- it('should show labels in brackets', () => {
81
- const pr = createMockPr({ labels: ['bug', 'urgent'] });
82
- const result = formatDetailLabels(pr);
83
- expect(result).toContain('[bug]');
84
- expect(result).toContain('[urgent]');
85
- });
86
- });
87
- describe('formatDetailReviews', () => {
88
- it('should show approved with count', () => {
89
- const pr = createMockPr({ reviewDecision: 'APPROVED', approvalCount: 3 });
90
- const result = formatDetailReviews(pr);
91
- expect(result).toContain('Approved');
92
- expect(result).toContain('3 approvals');
93
- });
94
- it('should show singular for 1 approval', () => {
95
- const pr = createMockPr({ reviewDecision: 'APPROVED', approvalCount: 1 });
96
- const result = formatDetailReviews(pr);
97
- expect(result).toContain('1 approval');
98
- expect(result).not.toContain('approvals');
99
- });
100
- it('should show changes requested', () => {
101
- const pr = createMockPr({ reviewDecision: 'CHANGES_REQUESTED' });
102
- const result = formatDetailReviews(pr);
103
- expect(result).toContain('Changes requested');
104
- });
105
- it('should show review required', () => {
106
- const pr = createMockPr({ reviewDecision: 'REVIEW_REQUIRED' });
107
- const result = formatDetailReviews(pr);
108
- expect(result).toContain('Review required');
109
- });
110
- it('should show review count when no decision but has reviews', () => {
111
- const pr = createMockPr({ reviewDecision: null, reviewCount: 2 });
112
- const result = formatDetailReviews(pr);
113
- expect(result).toContain('2 reviews');
114
- });
115
- it('should show no reviews yet', () => {
116
- const pr = createMockPr({ reviewDecision: null, reviewCount: 0 });
117
- const result = formatDetailReviews(pr);
118
- expect(result).toContain('No reviews yet');
119
- });
120
- });
121
- describe('formatDetailCI', () => {
122
- it('should show all checks passing for SUCCESS', () => {
123
- const pr = createMockPr({ checksStatus: 'SUCCESS' });
124
- const result = formatDetailCI(pr);
125
- expect(result).toContain('All checks passing');
126
- });
127
- it('should show checks failing for FAILURE', () => {
128
- const pr = createMockPr({ checksStatus: 'FAILURE' });
129
- const result = formatDetailCI(pr);
130
- expect(result).toContain('checks failing');
131
- });
132
- it('should show checks pending for PENDING', () => {
133
- const pr = createMockPr({ checksStatus: 'PENDING' });
134
- const result = formatDetailCI(pr);
135
- expect(result).toContain('Checks pending');
136
- });
137
- it('should show no CI checks for null', () => {
138
- const pr = createMockPr({ checksStatus: null });
139
- const result = formatDetailCI(pr);
140
- expect(result).toContain('No CI checks');
141
- });
142
- });
143
- describe('formatDetailChanges', () => {
144
- it('should show additions and deletions', () => {
145
- const pr = createMockPr({ additions: 100, deletions: 50 });
146
- const result = formatDetailChanges(pr);
147
- expect(result).toContain('+100');
148
- expect(result).toContain('-50');
149
- });
150
- it('should show file count', () => {
151
- const pr = createMockPr({ changedFiles: 5 });
152
- const result = formatDetailChanges(pr);
153
- expect(result).toContain('5 files');
154
- });
155
- it('should show singular for 1 file', () => {
156
- const pr = createMockPr({ changedFiles: 1 });
157
- const result = formatDetailChanges(pr);
158
- expect(result).toContain('1 file');
159
- expect(result).not.toContain('1 files');
160
- });
161
- });
162
- describe('formatDetailWorktree', () => {
163
- it('should show worktree path when exists', () => {
164
- const pr = createMockPr({ hasWorktree: true, worktreePath: '/path/to/worktree' });
165
- const result = formatDetailWorktree(pr);
166
- expect(result).toContain('/path/to/worktree');
167
- });
168
- it('should show not created when no worktree', () => {
169
- const pr = createMockPr({ hasWorktree: false, worktreePath: null });
170
- const result = formatDetailWorktree(pr);
171
- expect(result).toContain('Not created');
172
- });
173
- });
174
- describe('formatDetailActions', () => {
175
- it('should show open worktree when has worktree', () => {
176
- const pr = createMockPr({ hasWorktree: true });
177
- const result = formatDetailActions(pr);
178
- expect(result).toContain('Open worktree');
179
- expect(result).toContain('[e]');
180
- expect(result).toContain('[t]');
181
- });
182
- it('should show create worktree when no worktree', () => {
183
- const pr = createMockPr({ hasWorktree: false });
184
- const result = formatDetailActions(pr);
185
- expect(result).toContain('Create worktree');
186
- });
187
- it('should include browser and copy actions', () => {
188
- const pr = createMockPr();
189
- const result = formatDetailActions(pr);
190
- expect(result).toContain('[b]');
191
- expect(result).toContain('[c]');
192
- expect(result).toContain('[n]');
193
- });
194
- });
195
- describe('formatPrDetailView', () => {
196
- it('should include all sections', () => {
197
- const pr = createMockPr();
198
- const result = formatPrDetailView(pr);
199
- expect(result).toContain('#42'); // Header
200
- expect(result).toContain('Add dark mode toggle'); // Title
201
- expect(result).toContain('@testuser'); // Author
202
- expect(result).toContain('enhancement'); // Labels
203
- expect(result).toContain('Approved'); // Reviews
204
- expect(result).toContain('passing'); // CI
205
- expect(result).toContain('+342'); // Changes
206
- expect(result).toContain('repo.pr42'); // Worktree
207
- expect(result).toContain('[w]'); // Actions
208
- });
209
- });
210
- describe('showPrDetail', () => {
211
- let consoleSpy;
212
- let clearSpy;
213
- beforeEach(() => {
214
- consoleSpy = vi.spyOn(console, 'log').mockImplementation(() => { });
215
- clearSpy = vi.spyOn(console, 'clear').mockImplementation(() => { });
216
- });
217
- afterEach(() => {
218
- consoleSpy.mockRestore();
219
- clearSpy.mockRestore();
220
- });
221
- it('should return back action on q key', async () => {
222
- const pr = createMockPr();
223
- const deps = {
224
- waitForKey: vi.fn().mockResolvedValue('q'),
225
- };
226
- const result = await showPrDetail(pr, deps);
227
- expect(result).toBe('back');
228
- });
229
- it('should return back action on escape', async () => {
230
- const pr = createMockPr();
231
- const deps = {
232
- waitForKey: vi.fn().mockResolvedValue('back'),
233
- };
234
- const result = await showPrDetail(pr, deps);
235
- expect(result).toBe('back');
236
- });
237
- it('should return create_worktree for w key when no worktree', async () => {
238
- const pr = createMockPr({ hasWorktree: false });
239
- const deps = {
240
- waitForKey: vi.fn().mockResolvedValue('w'),
241
- };
242
- const result = await showPrDetail(pr, deps);
243
- expect(result).toBe('create_worktree');
244
- });
245
- it('should return open_worktree for w key when has worktree', async () => {
246
- const pr = createMockPr({ hasWorktree: true });
247
- const deps = {
248
- waitForKey: vi.fn().mockResolvedValue('w'),
249
- };
250
- const result = await showPrDetail(pr, deps);
251
- expect(result).toBe('open_worktree');
252
- });
253
- it('should return open_browser for b key', async () => {
254
- const pr = createMockPr();
255
- const deps = {
256
- waitForKey: vi.fn().mockResolvedValue('b'),
257
- };
258
- const result = await showPrDetail(pr, deps);
259
- expect(result).toBe('open_browser');
260
- });
261
- it('should return open_editor for e key when has worktree', async () => {
262
- const pr = createMockPr({ hasWorktree: true });
263
- const deps = {
264
- waitForKey: vi.fn().mockResolvedValue('e'),
265
- };
266
- const result = await showPrDetail(pr, deps);
267
- expect(result).toBe('open_editor');
268
- });
269
- it('should ignore e key when no worktree and wait for another key', async () => {
270
- const pr = createMockPr({ hasWorktree: false });
271
- let callCount = 0;
272
- const deps = {
273
- waitForKey: vi.fn().mockImplementation(() => {
274
- callCount++;
275
- if (callCount === 1)
276
- return Promise.resolve('e');
277
- return Promise.resolve('q');
278
- }),
279
- };
280
- const result = await showPrDetail(pr, deps);
281
- expect(callCount).toBe(2);
282
- expect(result).toBe('back');
283
- });
284
- it('should return open_terminal for t key when has worktree', async () => {
285
- const pr = createMockPr({ hasWorktree: true });
286
- const deps = {
287
- waitForKey: vi.fn().mockResolvedValue('t'),
288
- };
289
- const result = await showPrDetail(pr, deps);
290
- expect(result).toBe('open_terminal');
291
- });
292
- it('should return copy_url for c key', async () => {
293
- const pr = createMockPr();
294
- const deps = {
295
- waitForKey: vi.fn().mockResolvedValue('c'),
296
- };
297
- const result = await showPrDetail(pr, deps);
298
- expect(result).toBe('copy_url');
299
- });
300
- it('should return copy_number for n key', async () => {
301
- const pr = createMockPr();
302
- const deps = {
303
- waitForKey: vi.fn().mockResolvedValue('n'),
304
- };
305
- const result = await showPrDetail(pr, deps);
306
- expect(result).toBe('copy_number');
307
- });
308
- it('should return refresh for r key', async () => {
309
- const pr = createMockPr();
310
- const deps = {
311
- waitForKey: vi.fn().mockResolvedValue('r'),
312
- };
313
- const result = await showPrDetail(pr, deps);
314
- expect(result).toBe('refresh');
315
- });
316
- });
317
- describe('createDefaultDetailDeps', () => {
318
- it('should return deps object with waitForKey function', () => {
319
- const deps = createDefaultDetailDeps();
320
- expect(deps).toHaveProperty('waitForKey');
321
- expect(typeof deps.waitForKey).toBe('function');
322
- });
323
- });
324
- });
325
- //# sourceMappingURL=details.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"details.test.js","sourceRoot":"","sources":["../../../src/lib/prs/details.test.ts"],"names":[],"mappings":"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"}
@@ -1,5 +0,0 @@
1
- /**
2
- * Tests for PR filter state management
3
- */
4
- export {};
5
- //# sourceMappingURL=filters.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"filters.test.d.ts","sourceRoot":"","sources":["../../../src/lib/prs/filters.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -1,312 +0,0 @@
1
- /**
2
- * Tests for PR filter state management
3
- */
4
- import { describe, it, expect } from 'vitest';
5
- import { toggleStateFilter, setExclusiveState, setAllStates, cycleDraftFilter, cycleWorktreeFilter, toggleLabelFilter, setAuthorFilter, setSearchQuery, clearFilters, isDefaultFilters, describeFilters, handleFilterShortcut, } from './filters.js';
6
- import { createDefaultFilterState } from './types.js';
7
- describe('filters', () => {
8
- describe('toggleStateFilter', () => {
9
- it('should add state when not present', () => {
10
- const filters = createDefaultFilterState(); // has OPEN
11
- const result = toggleStateFilter(filters, 'MERGED');
12
- expect(result.states.has('OPEN')).toBe(true);
13
- expect(result.states.has('MERGED')).toBe(true);
14
- });
15
- it('should remove state when present and not last', () => {
16
- const filters = {
17
- ...createDefaultFilterState(),
18
- states: new Set(['OPEN', 'MERGED']),
19
- };
20
- const result = toggleStateFilter(filters, 'MERGED');
21
- expect(result.states.has('OPEN')).toBe(true);
22
- expect(result.states.has('MERGED')).toBe(false);
23
- });
24
- it('should not remove last state', () => {
25
- const filters = createDefaultFilterState(); // only OPEN
26
- const result = toggleStateFilter(filters, 'OPEN');
27
- expect(result.states.has('OPEN')).toBe(true);
28
- expect(result.states.size).toBe(1);
29
- });
30
- it('should not mutate original filters', () => {
31
- const filters = createDefaultFilterState();
32
- const originalSize = filters.states.size;
33
- toggleStateFilter(filters, 'MERGED');
34
- expect(filters.states.size).toBe(originalSize);
35
- });
36
- });
37
- describe('setExclusiveState', () => {
38
- it('should set single state', () => {
39
- const filters = {
40
- ...createDefaultFilterState(),
41
- states: new Set(['OPEN', 'MERGED', 'CLOSED']),
42
- };
43
- const result = setExclusiveState(filters, 'CLOSED');
44
- expect(result.states.size).toBe(1);
45
- expect(result.states.has('CLOSED')).toBe(true);
46
- });
47
- });
48
- describe('setAllStates', () => {
49
- it('should set all three states', () => {
50
- const filters = createDefaultFilterState();
51
- const result = setAllStates(filters);
52
- expect(result.states.size).toBe(3);
53
- expect(result.states.has('OPEN')).toBe(true);
54
- expect(result.states.has('MERGED')).toBe(true);
55
- expect(result.states.has('CLOSED')).toBe(true);
56
- });
57
- });
58
- describe('cycleDraftFilter', () => {
59
- it('should cycle true -> only', () => {
60
- const filters = {
61
- ...createDefaultFilterState(),
62
- showDrafts: true,
63
- };
64
- const result = cycleDraftFilter(filters);
65
- expect(result.showDrafts).toBe('only');
66
- });
67
- it('should cycle only -> false', () => {
68
- const filters = {
69
- ...createDefaultFilterState(),
70
- showDrafts: 'only',
71
- };
72
- const result = cycleDraftFilter(filters);
73
- expect(result.showDrafts).toBe(false);
74
- });
75
- it('should cycle false -> true', () => {
76
- const filters = {
77
- ...createDefaultFilterState(),
78
- showDrafts: false,
79
- };
80
- const result = cycleDraftFilter(filters);
81
- expect(result.showDrafts).toBe(true);
82
- });
83
- });
84
- describe('cycleWorktreeFilter', () => {
85
- it('should cycle null -> true', () => {
86
- const filters = createDefaultFilterState();
87
- const result = cycleWorktreeFilter(filters);
88
- expect(result.hasWorktree).toBe(true);
89
- });
90
- it('should cycle true -> false', () => {
91
- const filters = {
92
- ...createDefaultFilterState(),
93
- hasWorktree: true,
94
- };
95
- const result = cycleWorktreeFilter(filters);
96
- expect(result.hasWorktree).toBe(false);
97
- });
98
- it('should cycle false -> null', () => {
99
- const filters = {
100
- ...createDefaultFilterState(),
101
- hasWorktree: false,
102
- };
103
- const result = cycleWorktreeFilter(filters);
104
- expect(result.hasWorktree).toBe(null);
105
- });
106
- });
107
- describe('toggleLabelFilter', () => {
108
- it('should add label when not present', () => {
109
- const filters = createDefaultFilterState();
110
- const result = toggleLabelFilter(filters, 'preview');
111
- expect(result.labels).toContain('preview');
112
- });
113
- it('should remove label when present', () => {
114
- const filters = {
115
- ...createDefaultFilterState(),
116
- labels: ['preview', 'bug'],
117
- };
118
- const result = toggleLabelFilter(filters, 'preview');
119
- expect(result.labels).not.toContain('preview');
120
- expect(result.labels).toContain('bug');
121
- });
122
- it('should match labels case-insensitively', () => {
123
- const filters = {
124
- ...createDefaultFilterState(),
125
- labels: ['Preview'],
126
- };
127
- const result = toggleLabelFilter(filters, 'preview');
128
- expect(result.labels).not.toContain('Preview');
129
- });
130
- });
131
- describe('setAuthorFilter', () => {
132
- it('should set author', () => {
133
- const filters = createDefaultFilterState();
134
- const result = setAuthorFilter(filters, 'chris');
135
- expect(result.author).toBe('chris');
136
- });
137
- it('should clear author with null', () => {
138
- const filters = {
139
- ...createDefaultFilterState(),
140
- author: 'chris',
141
- };
142
- const result = setAuthorFilter(filters, null);
143
- expect(result.author).toBe(null);
144
- });
145
- });
146
- describe('setSearchQuery', () => {
147
- it('should set search query', () => {
148
- const filters = createDefaultFilterState();
149
- const result = setSearchQuery(filters, 'dark mode');
150
- expect(result.searchQuery).toBe('dark mode');
151
- });
152
- });
153
- describe('clearFilters', () => {
154
- it('should reset to default state', () => {
155
- const result = clearFilters();
156
- expect(result.states.size).toBe(1);
157
- expect(result.states.has('OPEN')).toBe(true);
158
- expect(result.showDrafts).toBe(true);
159
- expect(result.labels).toEqual([]);
160
- expect(result.author).toBe(null);
161
- expect(result.hasWorktree).toBe(null);
162
- expect(result.searchQuery).toBe('');
163
- });
164
- });
165
- describe('isDefaultFilters', () => {
166
- it('should return true for default filters', () => {
167
- const filters = createDefaultFilterState();
168
- expect(isDefaultFilters(filters)).toBe(true);
169
- });
170
- it('should return false when states differ', () => {
171
- const filters = {
172
- ...createDefaultFilterState(),
173
- states: new Set(['OPEN', 'MERGED']),
174
- };
175
- expect(isDefaultFilters(filters)).toBe(false);
176
- });
177
- it('should return false when showDrafts differs', () => {
178
- const filters = {
179
- ...createDefaultFilterState(),
180
- showDrafts: false,
181
- };
182
- expect(isDefaultFilters(filters)).toBe(false);
183
- });
184
- it('should return false when labels present', () => {
185
- const filters = {
186
- ...createDefaultFilterState(),
187
- labels: ['bug'],
188
- };
189
- expect(isDefaultFilters(filters)).toBe(false);
190
- });
191
- it('should return false when author set', () => {
192
- const filters = {
193
- ...createDefaultFilterState(),
194
- author: 'chris',
195
- };
196
- expect(isDefaultFilters(filters)).toBe(false);
197
- });
198
- it('should return false when hasWorktree set', () => {
199
- const filters = {
200
- ...createDefaultFilterState(),
201
- hasWorktree: true,
202
- };
203
- expect(isDefaultFilters(filters)).toBe(false);
204
- });
205
- it('should return false when search query set', () => {
206
- const filters = {
207
- ...createDefaultFilterState(),
208
- searchQuery: 'test',
209
- };
210
- expect(isDefaultFilters(filters)).toBe(false);
211
- });
212
- });
213
- describe('describeFilters', () => {
214
- it('should describe default as "all" for open only', () => {
215
- const filters = createDefaultFilterState();
216
- expect(describeFilters(filters)).toBe('open');
217
- });
218
- it('should describe multiple states', () => {
219
- const filters = {
220
- ...createDefaultFilterState(),
221
- states: new Set(['OPEN', 'MERGED']),
222
- };
223
- const desc = describeFilters(filters);
224
- expect(desc).toContain('open');
225
- expect(desc).toContain('merged');
226
- });
227
- it('should describe drafts only', () => {
228
- const filters = {
229
- ...createDefaultFilterState(),
230
- showDrafts: 'only',
231
- };
232
- expect(describeFilters(filters)).toContain('drafts only');
233
- });
234
- it('should describe no drafts', () => {
235
- const filters = {
236
- ...createDefaultFilterState(),
237
- showDrafts: false,
238
- };
239
- expect(describeFilters(filters)).toContain('no drafts');
240
- });
241
- it('should describe with worktree', () => {
242
- const filters = {
243
- ...createDefaultFilterState(),
244
- hasWorktree: true,
245
- };
246
- expect(describeFilters(filters)).toContain('with worktree');
247
- });
248
- it('should describe without worktree', () => {
249
- const filters = {
250
- ...createDefaultFilterState(),
251
- hasWorktree: false,
252
- };
253
- expect(describeFilters(filters)).toContain('without worktree');
254
- });
255
- it('should describe labels', () => {
256
- const filters = {
257
- ...createDefaultFilterState(),
258
- labels: ['preview', 'bug'],
259
- };
260
- expect(describeFilters(filters)).toContain('labels: preview, bug');
261
- });
262
- it('should describe author', () => {
263
- const filters = {
264
- ...createDefaultFilterState(),
265
- author: 'chris',
266
- };
267
- expect(describeFilters(filters)).toContain('by @chris');
268
- });
269
- it('should describe search query', () => {
270
- const filters = {
271
- ...createDefaultFilterState(),
272
- searchQuery: 'dark mode',
273
- };
274
- expect(describeFilters(filters)).toContain('"dark mode"');
275
- });
276
- });
277
- describe('handleFilterShortcut', () => {
278
- it('should handle "o" to toggle OPEN', () => {
279
- const filters = {
280
- ...createDefaultFilterState(),
281
- states: new Set(['OPEN', 'MERGED']),
282
- };
283
- const result = handleFilterShortcut('o', filters);
284
- expect(result).not.toBe(null);
285
- expect(result.states.has('OPEN')).toBe(false);
286
- });
287
- it('should handle "m" to toggle MERGED', () => {
288
- const filters = createDefaultFilterState();
289
- const result = handleFilterShortcut('m', filters);
290
- expect(result).not.toBe(null);
291
- expect(result.states.has('MERGED')).toBe(true);
292
- });
293
- it('should handle "x" to toggle CLOSED', () => {
294
- const filters = createDefaultFilterState();
295
- const result = handleFilterShortcut('x', filters);
296
- expect(result).not.toBe(null);
297
- expect(result.states.has('CLOSED')).toBe(true);
298
- });
299
- it('should handle "d" to cycle draft filter', () => {
300
- const filters = createDefaultFilterState();
301
- const result = handleFilterShortcut('d', filters);
302
- expect(result).not.toBe(null);
303
- expect(result.showDrafts).toBe('only');
304
- });
305
- it('should return null for unhandled key', () => {
306
- const filters = createDefaultFilterState();
307
- const result = handleFilterShortcut('z', filters);
308
- expect(result).toBe(null);
309
- });
310
- });
311
- });
312
- //# sourceMappingURL=filters.test.js.map