layout: bar atas workspace ala mock draf-tia + bar TAB membentang penuh
CI / test (push) Successful in 27s

- Bar workspace jadi panel: judul 'workspace' di border, subjudul daftar seksi
  (stack, kontainer, image, volume, jaringan), pill Cari + tombol [+ stack]
  dan [konversi] di kanan — semua klikable (klik = paritas tombol huruf).
- Detail kontainer: bar TAB kini membentang penuh di atas TAB content dan
  kolom Aksi Tab (mock TAB ACTION); hit-test tab & kolom disesuaikan.
- Tes: unit TestWorkspaceBar (lebar 40/80/120) + e2e TestWorkspaceBar
  (subjudul tampil, klik [+ stack] membuka modal); posisi klik e2e lain
  digeser mengikuti tinggi bar.
This commit is contained in:
oxpoe committed 2026-10-16 03:39:21 +07:00
1 parent b7866f917b
commit 75ead4be8a
5 files changed
+128 -60

No files matched your search

+30 -4
View File
@@ -22,6 +22,7 @@ import (
"github.com/creack/pty"
"gitea.oxpoe.qzz.io/oxpoe/tia-love/internal/docker"
"gitea.oxpoe.qzz.io/oxpoe/tia-love/internal/i18n"
)
const (
@@ -711,6 +712,31 @@ func TestTabActionColumn(t *testing.T) {
}
}
// TestWorkspaceBar — bar atas workspace (mock draf-tia): judul, subjudul
// daftar seksi, dan tombol [+ stack] yang bisa diklik (membuka modal konverter).
func TestWorkspaceBar(t *testing.T) {
sub := strings.ToLower(i18n.T("section.stacks")) + ", " +
strings.ToLower(i18n.T("section.containers")) + ", " +
strings.ToLower(i18n.T("section.images")) + ", " +
strings.ToLower(i18n.T("section.volumes")) + ", " +
strings.ToLower(i18n.T("section.networks"))
u := startTUI(t)
u.waitContains("beranda", 5*time.Second)
u.send("2")
u.waitContains(sub, 5*time.Second)
u.waitContains("workspace", 3*time.Second)
if !u.clickText("+ stack") {
t.Fatal("tombol [+ stack] tidak ditemukan di bar workspace")
}
u.waitContains("Konversi docker run", 3*time.Second) // modal terbuka
u.send("\x03") // Ctrl+C = tutup modal (bukan keluar)
u.waitContains(sub, 3*time.Second)
u.send("q")
if code := u.waitExit(5 * time.Second); code != 0 {
t.Fatalf("exit code %d, mau 0", code)
}
}
// TestConvertCommand — CLI `tia-love convert`: hasil di stdout, exit code jelas.
func TestConvertCommand(t *testing.T) {
out, err := exec.Command(binPath, "convert", "docker run -p 80:80 --name web nginx").CombinedOutput()
@@ -877,7 +903,7 @@ func TestMouseAndNavigateKeys(t *testing.T) {
u.waitContains("Kontainer", 3*time.Second)
u.send("j")
u.send("k")
u.send("\x1b[<0;10;4M\x1b[<0;10;4m") // klik kiri di area sidebar
u.send("\x1b[<0;10;8M\x1b[<0;10;8m") // klik kiri di baris daftar sidebar
u.send("r") // muat ulang
u.send("q")
if code := u.waitExit(5 * time.Second); code != 0 {
@@ -916,9 +942,9 @@ func TestClickSelectsContainer(t *testing.T) {
u.waitContains(short(items[0].Name), 5*time.Second)
u.waitHighlighted(short(items[0].Name), 3*time.Second) // seleksi awal (kursor 0)
// klik baris item ke-2: xterm y=5 (1-based) → app row 4 → indeks 1
// (header + toolbar + border panel di atasnya).
u.send("\x1b[<0;10;5M\x1b[<0;10;5m")
// klik baris item ke-2: xterm y=8 (1-based) → app row 7 → indeks 1
// (header + bar workspace 4 baris + border panel di atasnya).
u.send("\x1b[<0;10;8M\x1b[<0;10;8m")
u.waitHighlighted(short(items[1].Name), 3*time.Second)
u.send("q")