@camaradesuk/git-worktree-tools 1.10.0 → 1.11.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 (426) hide show
  1. package/README.md +4 -4
  2. package/package.json +12 -3
  3. package/dist/api/list.test.d.ts +0 -5
  4. package/dist/api/list.test.d.ts.map +0 -1
  5. package/dist/api/list.test.js +0 -390
  6. package/dist/api/list.test.js.map +0 -1
  7. package/dist/cli/cleanpr.test.d.ts +0 -2
  8. package/dist/cli/cleanpr.test.d.ts.map +0 -1
  9. package/dist/cli/cleanpr.test.js +0 -954
  10. package/dist/cli/cleanpr.test.js.map +0 -1
  11. package/dist/cli/lswt.test.d.ts +0 -2
  12. package/dist/cli/lswt.test.d.ts.map +0 -1
  13. package/dist/cli/lswt.test.js +0 -376
  14. package/dist/cli/lswt.test.js.map +0 -1
  15. package/dist/cli/newpr.test.d.ts +0 -2
  16. package/dist/cli/newpr.test.d.ts.map +0 -1
  17. package/dist/cli/newpr.test.js +0 -1182
  18. package/dist/cli/newpr.test.js.map +0 -1
  19. package/dist/cli/prs.test.d.ts +0 -8
  20. package/dist/cli/prs.test.d.ts.map +0 -1
  21. package/dist/cli/prs.test.js +0 -463
  22. package/dist/cli/prs.test.js.map +0 -1
  23. package/dist/cli/wt/clean.test.d.ts +0 -8
  24. package/dist/cli/wt/clean.test.d.ts.map +0 -1
  25. package/dist/cli/wt/clean.test.js +0 -624
  26. package/dist/cli/wt/clean.test.js.map +0 -1
  27. package/dist/cli/wt/completion.test.d.ts +0 -5
  28. package/dist/cli/wt/completion.test.d.ts.map +0 -1
  29. package/dist/cli/wt/completion.test.js +0 -275
  30. package/dist/cli/wt/completion.test.js.map +0 -1
  31. package/dist/cli/wt/config.test.d.ts +0 -7
  32. package/dist/cli/wt/config.test.d.ts.map +0 -1
  33. package/dist/cli/wt/config.test.js +0 -440
  34. package/dist/cli/wt/config.test.js.map +0 -1
  35. package/dist/cli/wt/entry.test.d.ts +0 -8
  36. package/dist/cli/wt/entry.test.d.ts.map +0 -1
  37. package/dist/cli/wt/entry.test.js +0 -201
  38. package/dist/cli/wt/entry.test.js.map +0 -1
  39. package/dist/cli/wt/init.test.d.ts +0 -5
  40. package/dist/cli/wt/init.test.d.ts.map +0 -1
  41. package/dist/cli/wt/init.test.js +0 -165
  42. package/dist/cli/wt/init.test.js.map +0 -1
  43. package/dist/cli/wt/init.unit.test.d.ts +0 -5
  44. package/dist/cli/wt/init.unit.test.d.ts.map +0 -1
  45. package/dist/cli/wt/init.unit.test.js +0 -432
  46. package/dist/cli/wt/init.unit.test.js.map +0 -1
  47. package/dist/cli/wt/interactive-menu.test.d.ts +0 -12
  48. package/dist/cli/wt/interactive-menu.test.d.ts.map +0 -1
  49. package/dist/cli/wt/interactive-menu.test.js +0 -796
  50. package/dist/cli/wt/interactive-menu.test.js.map +0 -1
  51. package/dist/cli/wt/list.test.d.ts +0 -10
  52. package/dist/cli/wt/list.test.d.ts.map +0 -1
  53. package/dist/cli/wt/list.test.js +0 -157
  54. package/dist/cli/wt/list.test.js.map +0 -1
  55. package/dist/cli/wt/prs.test.d.ts +0 -5
  56. package/dist/cli/wt/prs.test.d.ts.map +0 -1
  57. package/dist/cli/wt/prs.test.js +0 -410
  58. package/dist/cli/wt/prs.test.js.map +0 -1
  59. package/dist/cli/wt/run-command.test.d.ts +0 -5
  60. package/dist/cli/wt/run-command.test.d.ts.map +0 -1
  61. package/dist/cli/wt/run-command.test.js +0 -88
  62. package/dist/cli/wt/run-command.test.js.map +0 -1
  63. package/dist/cli/wt/state.test.d.ts +0 -9
  64. package/dist/cli/wt/state.test.d.ts.map +0 -1
  65. package/dist/cli/wt/state.test.js +0 -127
  66. package/dist/cli/wt/state.test.js.map +0 -1
  67. package/dist/cli/wt/wt.test.d.ts +0 -8
  68. package/dist/cli/wt/wt.test.d.ts.map +0 -1
  69. package/dist/cli/wt/wt.test.js +0 -739
  70. package/dist/cli/wt/wt.test.js.map +0 -1
  71. package/dist/cli/wt.unit.test.d.ts +0 -7
  72. package/dist/cli/wt.unit.test.d.ts.map +0 -1
  73. package/dist/cli/wt.unit.test.js +0 -160
  74. package/dist/cli/wt.unit.test.js.map +0 -1
  75. package/dist/cli/wtconfig.test.d.ts +0 -5
  76. package/dist/cli/wtconfig.test.d.ts.map +0 -1
  77. package/dist/cli/wtconfig.test.js +0 -1289
  78. package/dist/cli/wtconfig.test.js.map +0 -1
  79. package/dist/cli/wtlink.test.d.ts +0 -2
  80. package/dist/cli/wtlink.test.d.ts.map +0 -1
  81. package/dist/cli/wtlink.test.js +0 -249
  82. package/dist/cli/wtlink.test.js.map +0 -1
  83. package/dist/cli/wtstate.test.d.ts +0 -5
  84. package/dist/cli/wtstate.test.d.ts.map +0 -1
  85. package/dist/cli/wtstate.test.js +0 -193
  86. package/dist/cli/wtstate.test.js.map +0 -1
  87. package/dist/e2e/cleanpr/cleanpr.e2e.test.d.ts +0 -2
  88. package/dist/e2e/cleanpr/cleanpr.e2e.test.d.ts.map +0 -1
  89. package/dist/e2e/cleanpr/cleanpr.e2e.test.js +0 -326
  90. package/dist/e2e/cleanpr/cleanpr.e2e.test.js.map +0 -1
  91. package/dist/e2e/cli.e2e.test.d.ts +0 -2
  92. package/dist/e2e/cli.e2e.test.d.ts.map +0 -1
  93. package/dist/e2e/cli.e2e.test.js +0 -417
  94. package/dist/e2e/cli.e2e.test.js.map +0 -1
  95. package/dist/e2e/lswt/lswt.e2e.test.d.ts +0 -2
  96. package/dist/e2e/lswt/lswt.e2e.test.d.ts.map +0 -1
  97. package/dist/e2e/lswt/lswt.e2e.test.js +0 -361
  98. package/dist/e2e/lswt/lswt.e2e.test.js.map +0 -1
  99. package/dist/e2e/newpr/newpr.e2e.test.d.ts +0 -2
  100. package/dist/e2e/newpr/newpr.e2e.test.d.ts.map +0 -1
  101. package/dist/e2e/newpr/newpr.e2e.test.js +0 -286
  102. package/dist/e2e/newpr/newpr.e2e.test.js.map +0 -1
  103. package/dist/e2e/newpr/scenarios.e2e.test.d.ts +0 -2
  104. package/dist/e2e/newpr/scenarios.e2e.test.d.ts.map +0 -1
  105. package/dist/e2e/newpr/scenarios.e2e.test.js +0 -426
  106. package/dist/e2e/newpr/scenarios.e2e.test.js.map +0 -1
  107. package/dist/e2e/newpr-full-flow.e2e.test.d.ts +0 -2
  108. package/dist/e2e/newpr-full-flow.e2e.test.d.ts.map +0 -1
  109. package/dist/e2e/newpr-full-flow.e2e.test.js +0 -280
  110. package/dist/e2e/newpr-full-flow.e2e.test.js.map +0 -1
  111. package/dist/e2e/prs/prs.e2e.test.d.ts +0 -7
  112. package/dist/e2e/prs/prs.e2e.test.d.ts.map +0 -1
  113. package/dist/e2e/prs/prs.e2e.test.js +0 -606
  114. package/dist/e2e/prs/prs.e2e.test.js.map +0 -1
  115. package/dist/e2e/workflows/pr-lifecycle.e2e.test.d.ts +0 -2
  116. package/dist/e2e/workflows/pr-lifecycle.e2e.test.d.ts.map +0 -1
  117. package/dist/e2e/workflows/pr-lifecycle.e2e.test.js +0 -298
  118. package/dist/e2e/workflows/pr-lifecycle.e2e.test.js.map +0 -1
  119. package/dist/e2e/wt/interactive-menu.e2e.test.d.ts +0 -8
  120. package/dist/e2e/wt/interactive-menu.e2e.test.d.ts.map +0 -1
  121. package/dist/e2e/wt/interactive-menu.e2e.test.js +0 -583
  122. package/dist/e2e/wt/interactive-menu.e2e.test.js.map +0 -1
  123. package/dist/e2e/wt/wt.e2e.test.d.ts +0 -9
  124. package/dist/e2e/wt/wt.e2e.test.d.ts.map +0 -1
  125. package/dist/e2e/wt/wt.e2e.test.js +0 -597
  126. package/dist/e2e/wt/wt.e2e.test.js.map +0 -1
  127. package/dist/e2e/wtlink/wtlink.e2e.test.d.ts +0 -2
  128. package/dist/e2e/wtlink/wtlink.e2e.test.d.ts.map +0 -1
  129. package/dist/e2e/wtlink/wtlink.e2e.test.js +0 -416
  130. package/dist/e2e/wtlink/wtlink.e2e.test.js.map +0 -1
  131. package/dist/integration/git.integration.test.d.ts +0 -2
  132. package/dist/integration/git.integration.test.d.ts.map +0 -1
  133. package/dist/integration/git.integration.test.js +0 -336
  134. package/dist/integration/git.integration.test.js.map +0 -1
  135. package/dist/integration/lswt-remote-pr.integration.test.d.ts +0 -2
  136. package/dist/integration/lswt-remote-pr.integration.test.d.ts.map +0 -1
  137. package/dist/integration/lswt-remote-pr.integration.test.js +0 -222
  138. package/dist/integration/lswt-remote-pr.integration.test.js.map +0 -1
  139. package/dist/integration/newpr-branchfrom-head.integration.test.d.ts +0 -2
  140. package/dist/integration/newpr-branchfrom-head.integration.test.d.ts.map +0 -1
  141. package/dist/integration/newpr-branchfrom-head.integration.test.js +0 -498
  142. package/dist/integration/newpr-branchfrom-head.integration.test.js.map +0 -1
  143. package/dist/integration/newpr.integration.test.d.ts +0 -2
  144. package/dist/integration/newpr.integration.test.d.ts.map +0 -1
  145. package/dist/integration/newpr.integration.test.js +0 -460
  146. package/dist/integration/newpr.integration.test.js.map +0 -1
  147. package/dist/integration/prs.integration.test.d.ts +0 -8
  148. package/dist/integration/prs.integration.test.d.ts.map +0 -1
  149. package/dist/integration/prs.integration.test.js +0 -478
  150. package/dist/integration/prs.integration.test.js.map +0 -1
  151. package/dist/lib/ai/base-provider.test.d.ts +0 -7
  152. package/dist/lib/ai/base-provider.test.d.ts.map +0 -1
  153. package/dist/lib/ai/base-provider.test.js +0 -319
  154. package/dist/lib/ai/base-provider.test.js.map +0 -1
  155. package/dist/lib/ai/cli-provider.test.d.ts +0 -5
  156. package/dist/lib/ai/cli-provider.test.d.ts.map +0 -1
  157. package/dist/lib/ai/cli-provider.test.js +0 -460
  158. package/dist/lib/ai/cli-provider.test.js.map +0 -1
  159. package/dist/lib/ai/fallback-provider.test.d.ts +0 -7
  160. package/dist/lib/ai/fallback-provider.test.d.ts.map +0 -1
  161. package/dist/lib/ai/fallback-provider.test.js +0 -165
  162. package/dist/lib/ai/fallback-provider.test.js.map +0 -1
  163. package/dist/lib/ai/generation-service.test.d.ts +0 -7
  164. package/dist/lib/ai/generation-service.test.d.ts.map +0 -1
  165. package/dist/lib/ai/generation-service.test.js +0 -213
  166. package/dist/lib/ai/generation-service.test.js.map +0 -1
  167. package/dist/lib/ai/provider-manager.test.d.ts +0 -5
  168. package/dist/lib/ai/provider-manager.test.d.ts.map +0 -1
  169. package/dist/lib/ai/provider-manager.test.js +0 -312
  170. package/dist/lib/ai/provider-manager.test.js.map +0 -1
  171. package/dist/lib/ai/repo-docs.test.d.ts +0 -5
  172. package/dist/lib/ai/repo-docs.test.d.ts.map +0 -1
  173. package/dist/lib/ai/repo-docs.test.js +0 -357
  174. package/dist/lib/ai/repo-docs.test.js.map +0 -1
  175. package/dist/lib/cleanpr/args.test.d.ts +0 -2
  176. package/dist/lib/cleanpr/args.test.d.ts.map +0 -1
  177. package/dist/lib/cleanpr/args.test.js +0 -269
  178. package/dist/lib/cleanpr/args.test.js.map +0 -1
  179. package/dist/lib/cleanpr/cleanup.test.d.ts +0 -2
  180. package/dist/lib/cleanpr/cleanup.test.d.ts.map +0 -1
  181. package/dist/lib/cleanpr/cleanup.test.js +0 -296
  182. package/dist/lib/cleanpr/cleanup.test.js.map +0 -1
  183. package/dist/lib/cleanpr/worktree-info.test.d.ts +0 -2
  184. package/dist/lib/cleanpr/worktree-info.test.d.ts.map +0 -1
  185. package/dist/lib/cleanpr/worktree-info.test.js +0 -228
  186. package/dist/lib/cleanpr/worktree-info.test.js.map +0 -1
  187. package/dist/lib/colors.test.d.ts +0 -2
  188. package/dist/lib/colors.test.d.ts.map +0 -1
  189. package/dist/lib/colors.test.js +0 -142
  190. package/dist/lib/colors.test.js.map +0 -1
  191. package/dist/lib/config-editor.test.d.ts +0 -11
  192. package/dist/lib/config-editor.test.d.ts.map +0 -1
  193. package/dist/lib/config-editor.test.js +0 -526
  194. package/dist/lib/config-editor.test.js.map +0 -1
  195. package/dist/lib/config-migration/detector.test.d.ts +0 -5
  196. package/dist/lib/config-migration/detector.test.d.ts.map +0 -1
  197. package/dist/lib/config-migration/detector.test.js +0 -201
  198. package/dist/lib/config-migration/detector.test.js.map +0 -1
  199. package/dist/lib/config-migration/reporter.test.d.ts +0 -5
  200. package/dist/lib/config-migration/reporter.test.d.ts.map +0 -1
  201. package/dist/lib/config-migration/reporter.test.js +0 -305
  202. package/dist/lib/config-migration/reporter.test.js.map +0 -1
  203. package/dist/lib/config-migration/runner.test.d.ts +0 -5
  204. package/dist/lib/config-migration/runner.test.d.ts.map +0 -1
  205. package/dist/lib/config-migration/runner.test.js +0 -235
  206. package/dist/lib/config-migration/runner.test.js.map +0 -1
  207. package/dist/lib/config-validation.test.d.ts +0 -5
  208. package/dist/lib/config-validation.test.d.ts.map +0 -1
  209. package/dist/lib/config-validation.test.js +0 -423
  210. package/dist/lib/config-validation.test.js.map +0 -1
  211. package/dist/lib/config.test.d.ts +0 -2
  212. package/dist/lib/config.test.d.ts.map +0 -1
  213. package/dist/lib/config.test.js +0 -554
  214. package/dist/lib/config.test.js.map +0 -1
  215. package/dist/lib/constants.test.d.ts +0 -5
  216. package/dist/lib/constants.test.d.ts.map +0 -1
  217. package/dist/lib/constants.test.js +0 -180
  218. package/dist/lib/constants.test.js.map +0 -1
  219. package/dist/lib/deprecation.test.d.ts +0 -2
  220. package/dist/lib/deprecation.test.d.ts.map +0 -1
  221. package/dist/lib/deprecation.test.js +0 -71
  222. package/dist/lib/deprecation.test.js.map +0 -1
  223. package/dist/lib/errors.test.d.ts +0 -2
  224. package/dist/lib/errors.test.d.ts.map +0 -1
  225. package/dist/lib/errors.test.js +0 -117
  226. package/dist/lib/errors.test.js.map +0 -1
  227. package/dist/lib/git.test.d.ts +0 -2
  228. package/dist/lib/git.test.d.ts.map +0 -1
  229. package/dist/lib/git.test.js +0 -608
  230. package/dist/lib/git.test.js.map +0 -1
  231. package/dist/lib/github.test.d.ts +0 -2
  232. package/dist/lib/github.test.d.ts.map +0 -1
  233. package/dist/lib/github.test.js +0 -441
  234. package/dist/lib/github.test.js.map +0 -1
  235. package/dist/lib/global-check.test.d.ts +0 -5
  236. package/dist/lib/global-check.test.d.ts.map +0 -1
  237. package/dist/lib/global-check.test.js +0 -150
  238. package/dist/lib/global-check.test.js.map +0 -1
  239. package/dist/lib/global-config.test.d.ts +0 -5
  240. package/dist/lib/global-config.test.d.ts.map +0 -1
  241. package/dist/lib/global-config.test.js +0 -282
  242. package/dist/lib/global-config.test.js.map +0 -1
  243. package/dist/lib/hooks/confirmation.test.d.ts +0 -7
  244. package/dist/lib/hooks/confirmation.test.d.ts.map +0 -1
  245. package/dist/lib/hooks/confirmation.test.js +0 -300
  246. package/dist/lib/hooks/confirmation.test.js.map +0 -1
  247. package/dist/lib/hooks/executor.test.d.ts +0 -5
  248. package/dist/lib/hooks/executor.test.d.ts.map +0 -1
  249. package/dist/lib/hooks/executor.test.js +0 -648
  250. package/dist/lib/hooks/executor.test.js.map +0 -1
  251. package/dist/lib/hooks/templates.test.d.ts +0 -5
  252. package/dist/lib/hooks/templates.test.d.ts.map +0 -1
  253. package/dist/lib/hooks/templates.test.js +0 -163
  254. package/dist/lib/hooks/templates.test.js.map +0 -1
  255. package/dist/lib/hooks/types.test.d.ts +0 -5
  256. package/dist/lib/hooks/types.test.d.ts.map +0 -1
  257. package/dist/lib/hooks/types.test.js +0 -132
  258. package/dist/lib/hooks/types.test.js.map +0 -1
  259. package/dist/lib/json-output.test.d.ts +0 -5
  260. package/dist/lib/json-output.test.d.ts.map +0 -1
  261. package/dist/lib/json-output.test.js +0 -261
  262. package/dist/lib/json-output.test.js.map +0 -1
  263. package/dist/lib/logger.test.d.ts +0 -14
  264. package/dist/lib/logger.test.d.ts.map +0 -1
  265. package/dist/lib/logger.test.js +0 -692
  266. package/dist/lib/logger.test.js.map +0 -1
  267. package/dist/lib/lswt/action-executors.test.d.ts +0 -2
  268. package/dist/lib/lswt/action-executors.test.d.ts.map +0 -1
  269. package/dist/lib/lswt/action-executors.test.js +0 -1127
  270. package/dist/lib/lswt/action-executors.test.js.map +0 -1
  271. package/dist/lib/lswt/actions.test.d.ts +0 -2
  272. package/dist/lib/lswt/actions.test.d.ts.map +0 -1
  273. package/dist/lib/lswt/actions.test.js +0 -497
  274. package/dist/lib/lswt/actions.test.js.map +0 -1
  275. package/dist/lib/lswt/args.test.d.ts +0 -2
  276. package/dist/lib/lswt/args.test.d.ts.map +0 -1
  277. package/dist/lib/lswt/args.test.js +0 -195
  278. package/dist/lib/lswt/args.test.js.map +0 -1
  279. package/dist/lib/lswt/environment.test.d.ts +0 -2
  280. package/dist/lib/lswt/environment.test.d.ts.map +0 -1
  281. package/dist/lib/lswt/environment.test.js +0 -544
  282. package/dist/lib/lswt/environment.test.js.map +0 -1
  283. package/dist/lib/lswt/formatters.test.d.ts +0 -2
  284. package/dist/lib/lswt/formatters.test.d.ts.map +0 -1
  285. package/dist/lib/lswt/formatters.test.js +0 -323
  286. package/dist/lib/lswt/formatters.test.js.map +0 -1
  287. package/dist/lib/lswt/fuzzy-search.test.d.ts +0 -5
  288. package/dist/lib/lswt/fuzzy-search.test.d.ts.map +0 -1
  289. package/dist/lib/lswt/fuzzy-search.test.js +0 -207
  290. package/dist/lib/lswt/fuzzy-search.test.js.map +0 -1
  291. package/dist/lib/lswt/interactive.test.d.ts +0 -2
  292. package/dist/lib/lswt/interactive.test.d.ts.map +0 -1
  293. package/dist/lib/lswt/interactive.test.js +0 -771
  294. package/dist/lib/lswt/interactive.test.js.map +0 -1
  295. package/dist/lib/lswt/table.test.d.ts +0 -5
  296. package/dist/lib/lswt/table.test.d.ts.map +0 -1
  297. package/dist/lib/lswt/table.test.js +0 -262
  298. package/dist/lib/lswt/table.test.js.map +0 -1
  299. package/dist/lib/lswt/worktree-info.test.d.ts +0 -2
  300. package/dist/lib/lswt/worktree-info.test.d.ts.map +0 -1
  301. package/dist/lib/lswt/worktree-info.test.js +0 -484
  302. package/dist/lib/lswt/worktree-info.test.js.map +0 -1
  303. package/dist/lib/newpr/action-deps.test.d.ts +0 -5
  304. package/dist/lib/newpr/action-deps.test.d.ts.map +0 -1
  305. package/dist/lib/newpr/action-deps.test.js +0 -111
  306. package/dist/lib/newpr/action-deps.test.js.map +0 -1
  307. package/dist/lib/newpr/actions.test.d.ts +0 -2
  308. package/dist/lib/newpr/actions.test.d.ts.map +0 -1
  309. package/dist/lib/newpr/actions.test.js +0 -254
  310. package/dist/lib/newpr/actions.test.js.map +0 -1
  311. package/dist/lib/newpr/args.test.d.ts +0 -2
  312. package/dist/lib/newpr/args.test.d.ts.map +0 -1
  313. package/dist/lib/newpr/args.test.js +0 -479
  314. package/dist/lib/newpr/args.test.js.map +0 -1
  315. package/dist/lib/newpr/hook-runner.test.d.ts +0 -7
  316. package/dist/lib/newpr/hook-runner.test.d.ts.map +0 -1
  317. package/dist/lib/newpr/hook-runner.test.js +0 -422
  318. package/dist/lib/newpr/hook-runner.test.js.map +0 -1
  319. package/dist/lib/newpr/plan-generator.test.d.ts +0 -7
  320. package/dist/lib/newpr/plan-generator.test.d.ts.map +0 -1
  321. package/dist/lib/newpr/plan-generator.test.js +0 -387
  322. package/dist/lib/newpr/plan-generator.test.js.map +0 -1
  323. package/dist/lib/newpr/scenario-handler.test.d.ts +0 -2
  324. package/dist/lib/newpr/scenario-handler.test.d.ts.map +0 -1
  325. package/dist/lib/newpr/scenario-handler.test.js +0 -256
  326. package/dist/lib/newpr/scenario-handler.test.js.map +0 -1
  327. package/dist/lib/prompts.test.d.ts +0 -2
  328. package/dist/lib/prompts.test.d.ts.map +0 -1
  329. package/dist/lib/prompts.test.js +0 -807
  330. package/dist/lib/prompts.test.js.map +0 -1
  331. package/dist/lib/prs/actions.test.d.ts +0 -5
  332. package/dist/lib/prs/actions.test.d.ts.map +0 -1
  333. package/dist/lib/prs/actions.test.js +0 -356
  334. package/dist/lib/prs/actions.test.js.map +0 -1
  335. package/dist/lib/prs/command.test.d.ts +0 -11
  336. package/dist/lib/prs/command.test.d.ts.map +0 -1
  337. package/dist/lib/prs/command.test.js +0 -409
  338. package/dist/lib/prs/command.test.js.map +0 -1
  339. package/dist/lib/prs/data.test.d.ts +0 -5
  340. package/dist/lib/prs/data.test.d.ts.map +0 -1
  341. package/dist/lib/prs/data.test.js +0 -417
  342. package/dist/lib/prs/data.test.js.map +0 -1
  343. package/dist/lib/prs/details.test.d.ts +0 -5
  344. package/dist/lib/prs/details.test.d.ts.map +0 -1
  345. package/dist/lib/prs/details.test.js +0 -325
  346. package/dist/lib/prs/details.test.js.map +0 -1
  347. package/dist/lib/prs/filters.test.d.ts +0 -5
  348. package/dist/lib/prs/filters.test.d.ts.map +0 -1
  349. package/dist/lib/prs/filters.test.js +0 -312
  350. package/dist/lib/prs/filters.test.js.map +0 -1
  351. package/dist/lib/prs/formatters.test.d.ts +0 -2
  352. package/dist/lib/prs/formatters.test.d.ts.map +0 -1
  353. package/dist/lib/prs/formatters.test.js +0 -387
  354. package/dist/lib/prs/formatters.test.js.map +0 -1
  355. package/dist/lib/prs/interactive.test.d.ts +0 -5
  356. package/dist/lib/prs/interactive.test.d.ts.map +0 -1
  357. package/dist/lib/prs/interactive.test.js +0 -517
  358. package/dist/lib/prs/interactive.test.js.map +0 -1
  359. package/dist/lib/schema.test.d.ts +0 -10
  360. package/dist/lib/schema.test.d.ts.map +0 -1
  361. package/dist/lib/schema.test.js +0 -309
  362. package/dist/lib/schema.test.js.map +0 -1
  363. package/dist/lib/state-detection.test.d.ts +0 -2
  364. package/dist/lib/state-detection.test.d.ts.map +0 -1
  365. package/dist/lib/state-detection.test.js +0 -451
  366. package/dist/lib/state-detection.test.js.map +0 -1
  367. package/dist/lib/ui/error.test.d.ts +0 -2
  368. package/dist/lib/ui/error.test.d.ts.map +0 -1
  369. package/dist/lib/ui/error.test.js +0 -143
  370. package/dist/lib/ui/error.test.js.map +0 -1
  371. package/dist/lib/ui/output.test.d.ts +0 -2
  372. package/dist/lib/ui/output.test.d.ts.map +0 -1
  373. package/dist/lib/ui/output.test.js +0 -59
  374. package/dist/lib/ui/output.test.js.map +0 -1
  375. package/dist/lib/ui/status.test.d.ts +0 -2
  376. package/dist/lib/ui/status.test.d.ts.map +0 -1
  377. package/dist/lib/ui/status.test.js +0 -158
  378. package/dist/lib/ui/status.test.js.map +0 -1
  379. package/dist/lib/ui/table.test.d.ts +0 -2
  380. package/dist/lib/ui/table.test.d.ts.map +0 -1
  381. package/dist/lib/ui/table.test.js +0 -115
  382. package/dist/lib/ui/table.test.js.map +0 -1
  383. package/dist/lib/ui/theme.test.d.ts +0 -2
  384. package/dist/lib/ui/theme.test.d.ts.map +0 -1
  385. package/dist/lib/ui/theme.test.js +0 -76
  386. package/dist/lib/ui/theme.test.js.map +0 -1
  387. package/dist/lib/wtconfig/config-manager.test.d.ts +0 -5
  388. package/dist/lib/wtconfig/config-manager.test.d.ts.map +0 -1
  389. package/dist/lib/wtconfig/config-manager.test.js +0 -501
  390. package/dist/lib/wtconfig/config-manager.test.js.map +0 -1
  391. package/dist/lib/wtconfig/environment.test.d.ts +0 -5
  392. package/dist/lib/wtconfig/environment.test.d.ts.map +0 -1
  393. package/dist/lib/wtconfig/environment.test.js +0 -285
  394. package/dist/lib/wtconfig/environment.test.js.map +0 -1
  395. package/dist/lib/wtlink/config-manifest.test.d.ts +0 -2
  396. package/dist/lib/wtlink/config-manifest.test.d.ts.map +0 -1
  397. package/dist/lib/wtlink/config-manifest.test.js +0 -486
  398. package/dist/lib/wtlink/config-manifest.test.js.map +0 -1
  399. package/dist/lib/wtlink/link-configs.test.d.ts +0 -2
  400. package/dist/lib/wtlink/link-configs.test.d.ts.map +0 -1
  401. package/dist/lib/wtlink/link-configs.test.js +0 -612
  402. package/dist/lib/wtlink/link-configs.test.js.map +0 -1
  403. package/dist/lib/wtlink/main-menu.test.d.ts +0 -5
  404. package/dist/lib/wtlink/main-menu.test.d.ts.map +0 -1
  405. package/dist/lib/wtlink/main-menu.test.js +0 -126
  406. package/dist/lib/wtlink/main-menu.test.js.map +0 -1
  407. package/dist/lib/wtlink/manage-manifest.test.d.ts +0 -2
  408. package/dist/lib/wtlink/manage-manifest.test.d.ts.map +0 -1
  409. package/dist/lib/wtlink/manage-manifest.test.js +0 -714
  410. package/dist/lib/wtlink/manage-manifest.test.js.map +0 -1
  411. package/dist/lib/wtlink/validate-manifest.test.d.ts +0 -2
  412. package/dist/lib/wtlink/validate-manifest.test.d.ts.map +0 -1
  413. package/dist/lib/wtlink/validate-manifest.test.js +0 -220
  414. package/dist/lib/wtlink/validate-manifest.test.js.map +0 -1
  415. package/dist/lib/wtstate/analyze.test.d.ts +0 -5
  416. package/dist/lib/wtstate/analyze.test.d.ts.map +0 -1
  417. package/dist/lib/wtstate/analyze.test.js +0 -282
  418. package/dist/lib/wtstate/analyze.test.js.map +0 -1
  419. package/dist/lib/wtstate/args.test.d.ts +0 -5
  420. package/dist/lib/wtstate/args.test.d.ts.map +0 -1
  421. package/dist/lib/wtstate/args.test.js +0 -120
  422. package/dist/lib/wtstate/args.test.js.map +0 -1
  423. package/dist/mcp/server.test.d.ts +0 -9
  424. package/dist/mcp/server.test.d.ts.map +0 -1
  425. package/dist/mcp/server.test.js +0 -550
  426. 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