Compare commits

...

2 Commits

Author SHA1 Message Date
2c103f7f96 clean up tests 2026-01-22 22:28:38 -05:00
52a1054757 Sort branches by commit date like lazygit
Use git for-each-ref with --sort=-committerdate to order branches by
last commit date (newest first), matching lazygit's default behavior.
Added e2e test with controlled commit dates to verify ordering.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-22 19:14:22 -05:00
19 changed files with 288 additions and 20 deletions
+7 -1
View File
@@ -12,4 +12,10 @@
e2e:setup {:doc "Setup standard e2e test repo"
:task (e2e/setup-test-repo)}
e2e:setup-cursor {:doc "Setup cursor navigation test repo"
:task (e2e/setup-cursor-test-repo)}}}
:task (e2e/setup-cursor-test-repo)}
e2e:setup-branch-order {:doc "Setup branch order test repo"
:task (e2e/setup-branch-order-test-repo)}
e2e:cleanup-branch-order {:doc "Cleanup branch order test repo"
:task (e2e/cleanup-branch-order-test-repo)}
e2e:cleanup {:doc "Cleanup all e2e test repos"
:task (e2e/cleanup-all)}}}
View File
+14 -4
View File
@@ -86,13 +86,23 @@
;; === Branches ===
(defn branches
"Returns list of local branches."
"Returns list of local branches, sorted by last commit date (newest first).
This matches lazygit's default branch ordering."
[]
(->> (sh "git" "branch" "--format=%(refname:short)")
(->> (sh "git" "for-each-ref"
"--sort=-committerdate"
"--format=%(refname:short)"
"refs/heads/")
lines))
(defn remote-branches []
(->> (sh "git" "branch" "-r" "--format=%(refname:short)")
(defn remote-branches
"Returns list of remote branches, sorted by last commit date (newest first).
This matches lazygit's default remote branch ordering."
[]
(->> (sh "git" "for-each-ref"
"--sort=-committerdate"
"--format=%(refname:short)"
"refs/remotes/")
lines))
;; === Actions ===
+116
View File
@@ -75,6 +75,112 @@
(println "Cursor test repo created at" repo-dir)
repo-dir))
(defn setup-branch-order-test-repo
"Setup test repo with branches having different commit dates to test sorting.
Creates branches in alphabetical order but with commits in reverse order,
so date-sorted results should differ from alphabetical.
Commit dates:
- main: 2024-01-04 (newest, so it appears first)
- gamma-branch: 2024-01-03
- beta-branch: 2024-01-02
- alpha-branch: 2024-01-01 (oldest)
Expected date-sorted order: main, gamma-branch, beta-branch, alpha-branch
Alphabetical order would be: alpha-branch, beta-branch, gamma-branch, main"
([] (setup-branch-order-test-repo "/tmp/lazygitclj-e2e-branch-order"))
([repo-dir]
(fs/delete-tree repo-dir)
(fs/create-dirs repo-dir)
;; Initialize repo
(shell {:dir repo-dir} "git" "init" "-b" "main")
(shell {:dir repo-dir} "git" "config" "user.email" "test@example.com")
(shell {:dir repo-dir} "git" "config" "user.name" "Test User")
;; Initial commit on main (will be updated later with a specific date)
(spit (fs/file repo-dir "README.md") "# Branch Order Test\n")
(shell {:dir repo-dir} "git" "add" ".")
(shell {:dir repo-dir :extra-env {"GIT_COMMITTER_DATE" "2024-01-04T10:00:00"}}
"git" "commit" "-m" "Initial commit" "--date=2024-01-04T10:00:00")
;; Create branches with commits in specific order (oldest to newest):
;; alpha-branch (oldest) -> beta-branch -> gamma-branch -> main (newest)
;; This way, date-sorted order should be: main, gamma, beta, alpha
;; while alphabetical would be: alpha, beta, gamma, main
;; Create alpha-branch (oldest)
(shell {:dir repo-dir} "git" "checkout" "-b" "alpha-branch")
(spit (fs/file repo-dir "alpha.txt") "alpha content\n")
(shell {:dir repo-dir} "git" "add" ".")
;; Use GIT_COMMITTER_DATE to set specific commit times
(shell {:dir repo-dir :extra-env {"GIT_COMMITTER_DATE" "2024-01-01T10:00:00"}}
"git" "commit" "-m" "Add alpha" "--date=2024-01-01T10:00:00")
;; Create beta-branch (middle)
(shell {:dir repo-dir} "git" "checkout" "main")
(shell {:dir repo-dir} "git" "checkout" "-b" "beta-branch")
(spit (fs/file repo-dir "beta.txt") "beta content\n")
(shell {:dir repo-dir} "git" "add" ".")
(shell {:dir repo-dir :extra-env {"GIT_COMMITTER_DATE" "2024-01-02T10:00:00"}}
"git" "commit" "-m" "Add beta" "--date=2024-01-02T10:00:00")
;; Create gamma-branch
(shell {:dir repo-dir} "git" "checkout" "main")
(shell {:dir repo-dir} "git" "checkout" "-b" "gamma-branch")
(spit (fs/file repo-dir "gamma.txt") "gamma content\n")
(shell {:dir repo-dir} "git" "add" ".")
(shell {:dir repo-dir :extra-env {"GIT_COMMITTER_DATE" "2024-01-03T10:00:00"}}
"git" "commit" "-m" "Add gamma" "--date=2024-01-03T10:00:00")
;; Return to main
(shell {:dir repo-dir} "git" "checkout" "main")
(println "Branch order test repo created at" repo-dir)
(println "Expected date-sorted order: main, gamma-branch, beta-branch, alpha-branch")
repo-dir))
(defn cleanup-branch-order-test-repo
"Clean up the branch order test repo."
([] (cleanup-branch-order-test-repo "/tmp/lazygitclj-e2e-branch-order"))
([repo-dir]
(fs/delete-tree repo-dir)
(println "Cleaned up" repo-dir)))
(def test-repo-paths
"All test repo paths created by e2e tests."
["/tmp/lazygitclj-e2e-test"
"/tmp/lazygitclj-e2e-nav"
"/tmp/lazygitclj-e2e-stage"
"/tmp/lazygitclj-e2e-commit"
"/tmp/lazygitclj-e2e-commit-verify"
"/tmp/lazygitclj-e2e-branch"
"/tmp/lazygitclj-e2e-branches-tabs"
"/tmp/lazygitclj-e2e-commits-tabs"
"/tmp/lazygitclj-e2e-stash"
"/tmp/lazygitclj-e2e-stash-menu"
"/tmp/lazygitclj-e2e-help"
"/tmp/lazygitclj-e2e-reset"
"/tmp/lazygitclj-e2e-undo"
"/tmp/lazygitclj-e2e-cursor"
"/tmp/lazygitclj-e2e-branch-order"
;; Additional test repos from older/manual tests
"/tmp/lazygitclj-e2e-modal"
"/tmp/lazygitclj-e2e-modal-large"
"/tmp/lazygitclj-e2e-modal-narrow"
"/tmp/lazygitclj-e2e-modal-small"
"/tmp/lazygitclj-e2e-scroll"])
(defn cleanup-all
"Clean up all test repos."
[]
(println "Cleaning up e2e test repos...")
(doseq [path test-repo-paths]
(when (fs/exists? path)
(fs/delete-tree path)
(println " Removed" path)))
(println "Cleanup complete."))
(def tests
"List of e2e test tapes."
["test/e2e/navigation.tape"
@@ -85,6 +191,7 @@
"test/e2e/branches.tape"
"test/e2e/branch-operations.tape"
"test/e2e/branches-tabs.tape"
"test/e2e/branch-order.tape"
"test/e2e/commits-tabs.tape"
"test/e2e/stash-operations.tape"
"test/e2e/stash-menu.tape"
@@ -109,6 +216,9 @@
(println "Running lazygitclj VHS e2e tests...")
(println "=================================")
;; Clean up any leftover test repos before starting
(cleanup-all)
(let [results (map run-tape tests)
passed (count (filter true? results))
failed (count (filter false? results))]
@@ -118,6 +228,9 @@
(println (str "Results: " passed " passed, " failed " failed"))
(println "=================================")
;; Clean up after tests complete
(cleanup-all)
(when (pos? failed)
(System/exit 1))))
@@ -127,5 +240,8 @@
(case (first args)
"setup" (setup-test-repo (or (second args) "/tmp/lazygitclj-e2e-test"))
"setup-cursor" (setup-cursor-test-repo (or (second args) "/tmp/lazygitclj-e2e-cursor"))
"setup-branch-order" (setup-branch-order-test-repo (or (second args) "/tmp/lazygitclj-e2e-branch-order"))
"cleanup-branch-order" (cleanup-branch-order-test-repo (or (second args) "/tmp/lazygitclj-e2e-branch-order"))
"cleanup" (cleanup-all)
"run" (run-all)
(run-all))))
+6 -1
View File
@@ -13,7 +13,7 @@ Set Height 600
Set Framerate 10
# Setup test repo and run lazygitclj
Type "./test/e2e/setup-test-repo.sh /tmp/lazygitclj-e2e-branch && cd /tmp/lazygitclj-e2e-branch && bb --config /home/ajet/repos/lazygitclj/bb.edn start"
Type "cd /home/ajet/repos/lazygitclj && bb e2e:setup /tmp/lazygitclj-e2e-branch && cd /tmp/lazygitclj-e2e-branch && bb --config /home/ajet/repos/lazygitclj/bb.edn start"
Enter
Sleep 2s
@@ -69,3 +69,8 @@ Sleep 500ms
# Quit
Type "q"
Sleep 1s
# Cleanup test repo
Type "rm -rf /tmp/lazygitclj-e2e-branch"
Enter
Sleep 500ms
+66
View File
@@ -0,0 +1,66 @@
# VHS E2E test for lazygitclj - Branch ordering by commit date
# Tests that branches are sorted by commit date (newest first) like lazygit
#
# Setup creates branches with specific commit dates:
# - main: 2024-01-04 (newest)
# - gamma-branch: 2024-01-03
# - beta-branch: 2024-01-02
# - alpha-branch: 2024-01-01 (oldest)
#
# Expected order in UI (by date): main, gamma-branch, beta-branch, alpha-branch
# Alphabetical order would be: alpha-branch, beta-branch, gamma-branch, main
Output test/e2e/output/branch-order.gif
Output test/e2e/output/branch-order.ascii
Require bb
Set Shell "bash"
Set FontSize 14
Set Width 1000
Set Height 600
Set Framerate 10
# Setup test repo with branches having different commit dates
Type "cd /home/ajet/repos/lazygitclj && bb e2e:setup-branch-order"
Enter
Sleep 1s
# Run lazygitclj in the test repo
Type "cd /tmp/lazygitclj-e2e-branch-order && bb --config /home/ajet/repos/lazygitclj/bb.edn start"
Enter
Sleep 2s
# Switch to Branches panel (panel 3)
Type "3"
Sleep 500ms
# The branches panel should show branches in date order:
# gamma-branch (newest), beta-branch, alpha-branch, main (oldest)
# Take a moment to verify the order visually
Sleep 2s
# Navigate down through the branches to verify order
Type "j"
Sleep 300ms
Type "j"
Sleep 300ms
Type "j"
Sleep 300ms
# Navigate back up
Type "k"
Sleep 300ms
Type "k"
Sleep 300ms
Type "k"
Sleep 300ms
# Quit
Type "q"
Sleep 1s
# Cleanup test repo
Type "cd /home/ajet/repos/lazygitclj && bb e2e:cleanup-branch-order"
Enter
Sleep 500ms
+6 -1
View File
@@ -13,7 +13,7 @@ Set Height 600
Set Framerate 10
# Setup test repo with tags and run lazygitclj
Type "./test/e2e/setup-test-repo.sh /tmp/lazygitclj-e2e-branches-tabs && cd /tmp/lazygitclj-e2e-branches-tabs && git tag v1.0.0 && bb --config /home/ajet/repos/lazygitclj/bb.edn start"
Type "cd /home/ajet/repos/lazygitclj && bb e2e:setup /tmp/lazygitclj-e2e-branches-tabs && cd /tmp/lazygitclj-e2e-branches-tabs && git tag v1.0.0 && bb --config /home/ajet/repos/lazygitclj/bb.edn start"
Enter
Sleep 2s
@@ -46,3 +46,8 @@ Sleep 500ms
# Quit
Type "q"
Sleep 1s
# Cleanup test repo
Type "rm -rf /tmp/lazygitclj-e2e-branches-tabs"
Enter
Sleep 500ms
+7 -2
View File
@@ -12,8 +12,8 @@ Set Width 1000
Set Height 600
Set Framerate 10
# Setup test repo (clean working tree) and run lazygitclj
Type "cd /tmp && rm -rf lazygitclj-e2e-branch && git clone /tmp/lazygitclj-e2e-nav lazygitclj-e2e-branch 2>/dev/null && cd lazygitclj-e2e-branch && git checkout main && bb --config /home/ajet/repos/lazygitclj/bb.edn start"
# Setup test repo and run lazygitclj
Type "cd /home/ajet/repos/lazygitclj && bb e2e:setup /tmp/lazygitclj-e2e-branch && cd /tmp/lazygitclj-e2e-branch && bb --config /home/ajet/repos/lazygitclj/bb.edn start"
Enter
Sleep 2s
@@ -37,3 +37,8 @@ Sleep 500ms
# Quit
Type "q"
Sleep 1s
# Cleanup test repo
Type "rm -rf /tmp/lazygitclj-e2e-branch"
Enter
Sleep 500ms
+5
View File
@@ -83,3 +83,8 @@ Sleep 500ms
Type "git show --stat HEAD"
Enter
Sleep 1s
# Cleanup test repo
Type "rm -rf /tmp/lazygitclj-e2e-commit-verify"
Enter
Sleep 500ms
+6 -1
View File
@@ -13,7 +13,7 @@ Set Height 600
Set Framerate 10
# Setup test repo and run lazygitclj
Type "./test/e2e/setup-test-repo.sh /tmp/lazygitclj-e2e-commit && cd /tmp/lazygitclj-e2e-commit && bb --config /home/ajet/repos/lazygitclj/bb.edn start"
Type "cd /home/ajet/repos/lazygitclj && bb e2e:setup /tmp/lazygitclj-e2e-commit && cd /tmp/lazygitclj-e2e-commit && bb --config /home/ajet/repos/lazygitclj/bb.edn start"
Enter
Sleep 2s
@@ -48,3 +48,8 @@ Sleep 500ms
# Quit
Type "q"
Sleep 1s
# Cleanup test repo
Type "rm -rf /tmp/lazygitclj-e2e-commit"
Enter
Sleep 500ms
+6 -1
View File
@@ -13,7 +13,7 @@ Set Height 600
Set Framerate 10
# Setup test repo and run lazygitclj
Type "./test/e2e/setup-test-repo.sh /tmp/lazygitclj-e2e-commits-tabs && cd /tmp/lazygitclj-e2e-commits-tabs && bb --config /home/ajet/repos/lazygitclj/bb.edn start"
Type "cd /home/ajet/repos/lazygitclj && bb e2e:setup /tmp/lazygitclj-e2e-commits-tabs && cd /tmp/lazygitclj-e2e-commits-tabs && bb --config /home/ajet/repos/lazygitclj/bb.edn start"
Enter
Sleep 2s
@@ -44,3 +44,8 @@ Sleep 500ms
# Quit
Type "q"
Sleep 1s
# Cleanup test repo
Type "rm -rf /tmp/lazygitclj-e2e-commits-tabs"
Enter
Sleep 500ms
+7 -2
View File
@@ -12,8 +12,8 @@ Set Width 1000
Set Height 600
Set Framerate 10
# Setup test repo with many files using setup script
Type "./test/e2e/setup-cursor-test.sh && cd /tmp/lazygitclj-e2e-cursor && bb --config /home/ajet/repos/lazygitclj/bb.edn start"
# Setup test repo with many files
Type "cd /home/ajet/repos/lazygitclj && bb e2e:setup-cursor && cd /tmp/lazygitclj-e2e-cursor && bb --config /home/ajet/repos/lazygitclj/bb.edn start"
Enter
Sleep 3s
@@ -50,3 +50,8 @@ Sleep 500ms
# Quit
Type "q"
Sleep 1s
# Cleanup test repo
Type "rm -rf /tmp/lazygitclj-e2e-cursor"
Enter
Sleep 500ms
+6 -1
View File
@@ -13,7 +13,7 @@ Set Height 600
Set Framerate 10
# Setup test repo and run lazygitclj
Type "./test/e2e/setup-test-repo.sh /tmp/lazygitclj-e2e-help && cd /tmp/lazygitclj-e2e-help && bb --config /home/ajet/repos/lazygitclj/bb.edn start"
Type "cd /home/ajet/repos/lazygitclj && bb e2e:setup /tmp/lazygitclj-e2e-help && cd /tmp/lazygitclj-e2e-help && bb --config /home/ajet/repos/lazygitclj/bb.edn start"
Enter
Sleep 2s
@@ -36,3 +36,8 @@ Sleep 1s
# Quit the app
Type "q"
Sleep 1s
# Cleanup test repo
Type "rm -rf /tmp/lazygitclj-e2e-help"
Enter
Sleep 500ms
+6 -1
View File
@@ -13,7 +13,7 @@ Set Height 600
Set Framerate 10
# Setup test repo and run lazygitclj
Type "./test/e2e/setup-test-repo.sh /tmp/lazygitclj-e2e-nav && cd /tmp/lazygitclj-e2e-nav && bb --config /home/ajet/repos/lazygitclj/bb.edn start"
Type "cd /home/ajet/repos/lazygitclj && bb e2e:setup /tmp/lazygitclj-e2e-nav && cd /tmp/lazygitclj-e2e-nav && bb --config /home/ajet/repos/lazygitclj/bb.edn start"
Enter
Sleep 2s
@@ -77,3 +77,8 @@ Sleep 300ms
# Quit with q
Type "q"
Sleep 1s
# Cleanup test repo
Type "rm -rf /tmp/lazygitclj-e2e-nav"
Enter
Sleep 500ms
+6 -1
View File
@@ -13,7 +13,7 @@ Set Height 600
Set Framerate 10
# Setup test repo with changes and run lazygitclj
Type "./test/e2e/setup-test-repo.sh /tmp/lazygitclj-e2e-reset && cd /tmp/lazygitclj-e2e-reset && bb --config /home/ajet/repos/lazygitclj/bb.edn start"
Type "cd /home/ajet/repos/lazygitclj && bb e2e:setup /tmp/lazygitclj-e2e-reset && cd /tmp/lazygitclj-e2e-reset && bb --config /home/ajet/repos/lazygitclj/bb.edn start"
Enter
Sleep 2s
@@ -55,3 +55,8 @@ Sleep 1s
# Quit
Type "q"
Sleep 1s
# Cleanup test repo
Type "rm -rf /tmp/lazygitclj-e2e-reset"
Enter
Sleep 500ms
+6 -1
View File
@@ -13,7 +13,7 @@ Set Height 600
Set Framerate 10
# Setup test repo and run lazygitclj
Type "./test/e2e/setup-test-repo.sh /tmp/lazygitclj-e2e-stage && cd /tmp/lazygitclj-e2e-stage && bb --config /home/ajet/repos/lazygitclj/bb.edn start"
Type "cd /home/ajet/repos/lazygitclj && bb e2e:setup /tmp/lazygitclj-e2e-stage && cd /tmp/lazygitclj-e2e-stage && bb --config /home/ajet/repos/lazygitclj/bb.edn start"
Enter
Sleep 2s
@@ -43,3 +43,8 @@ Sleep 500ms
# Quit
Type "q"
Sleep 1s
# Cleanup test repo
Type "rm -rf /tmp/lazygitclj-e2e-stage"
Enter
Sleep 500ms
+6 -1
View File
@@ -13,7 +13,7 @@ Set Height 600
Set Framerate 10
# Setup test repo with changes and run lazygitclj
Type "./test/e2e/setup-test-repo.sh /tmp/lazygitclj-e2e-stash-menu && cd /tmp/lazygitclj-e2e-stash-menu && bb --config /home/ajet/repos/lazygitclj/bb.edn start"
Type "cd /home/ajet/repos/lazygitclj && bb e2e:setup /tmp/lazygitclj-e2e-stash-menu && cd /tmp/lazygitclj-e2e-stash-menu && bb --config /home/ajet/repos/lazygitclj/bb.edn start"
Enter
Sleep 2s
@@ -48,3 +48,8 @@ Sleep 500ms
# Quit
Type "q"
Sleep 1s
# Cleanup test repo
Type "rm -rf /tmp/lazygitclj-e2e-stash-menu"
Enter
Sleep 500ms
+6 -1
View File
@@ -13,7 +13,7 @@ Set Height 600
Set Framerate 10
# Setup test repo and run lazygitclj
Type "./test/e2e/setup-test-repo.sh /tmp/lazygitclj-e2e-stash && cd /tmp/lazygitclj-e2e-stash && bb --config /home/ajet/repos/lazygitclj/bb.edn start"
Type "cd /home/ajet/repos/lazygitclj && bb e2e:setup /tmp/lazygitclj-e2e-stash && cd /tmp/lazygitclj-e2e-stash && bb --config /home/ajet/repos/lazygitclj/bb.edn start"
Enter
Sleep 2s
@@ -57,3 +57,8 @@ Sleep 1s
# Quit
Type "q"
Sleep 1s
# Cleanup test repo
Type "rm -rf /tmp/lazygitclj-e2e-stash"
Enter
Sleep 500ms
+6 -1
View File
@@ -13,7 +13,7 @@ Set Height 600
Set Framerate 10
# Setup test repo and make some changes
Type "./test/e2e/setup-test-repo.sh /tmp/lazygitclj-e2e-undo && cd /tmp/lazygitclj-e2e-undo && bb --config /home/ajet/repos/lazygitclj/bb.edn start"
Type "cd /home/ajet/repos/lazygitclj && bb e2e:setup /tmp/lazygitclj-e2e-undo && cd /tmp/lazygitclj-e2e-undo && bb --config /home/ajet/repos/lazygitclj/bb.edn start"
Enter
Sleep 2s
@@ -57,3 +57,8 @@ Sleep 1s
# Quit
Type "q"
Sleep 1s
# Cleanup test repo
Type "rm -rf /tmp/lazygitclj-e2e-undo"
Enter
Sleep 500ms