feat(ui): sidebar kontainer + panel detail (ListContainers, navigasi j/k, klik pilih, refresh r)
CI / test (push) Successful in 21s

This commit is contained in:
oxpoe committed 2026-10-15 09:31:39 +07:00
1 parent 18055979da
commit fe781591e3
4 files changed
+336 -42

No files matched your search

+34 -4
View File
@@ -8,6 +8,7 @@
package e2e
import (
"context"
"os"
"os/exec"
"path/filepath"
@@ -18,6 +19,8 @@ import (
"time"
"github.com/creack/pty"
"gitea.oxpoe.qzz.io/oxpoe/tia-love/internal/docker"
)
const (
@@ -210,12 +213,39 @@ func TestDoctorCommand(t *testing.T) {
func TestMouseAndNavigateKeys(t *testing.T) {
u := startTUI(t)
u.waitContains("belum ada klik", 5*time.Second)
// klik kiri di tengah layar (SGR 1006: ESC [ < 0 ; x ; y M)
u.send("\x1b[<0;60;10M\x1b[<0;60;10m")
u.waitContains("klik #1", 3*time.Second)
u.waitContains("Kontainer", 5*time.Second)
u.send("j")
u.send("k")
u.send("\x1b[<0;10;3M\x1b[<0;10;3m") // klik kiri di area sidebar
u.send("r") // muat ulang
u.send("q")
if code := u.waitExit(5 * time.Second); code != 0 {
t.Fatalf("exit code %d, mau 0", code)
}
}
// TestClickSelectsContainer — lokal/CI-with-docker saja: klik baris sidebar
// harus memindahkan penanda pilihan (▶) ke kontainer.
func TestClickSelectsContainer(t *testing.T) {
if _, err := os.Stat("/var/run/docker.sock"); err != nil {
t.Skip("docker socket tidak ada")
}
cl, err := docker.New()
if err != nil {
t.Skipf("docker: %v", err)
}
defer cl.Close()
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
items, err := cl.ListContainers(ctx)
if err != nil || len(items) == 0 {
t.Skipf("tidak ada kontainer (err=%v, n=%d)", err, len(items))
}
u := startTUI(t)
u.waitContains("Kontainer (", 5*time.Second)
u.send("\x1b[<0;10;4M\x1b[<0;10;4m") // klik baris item pertama sidebar
u.waitContains("▶", 3*time.Second)
u.send("q")
if code := u.waitExit(5 * time.Second); code != 0 {
t.Fatalf("exit code %d, mau 0", code)