Files
superwork/tui/internal/tui/toolbar_test.go
T
2026-06-23 05:02:15 +08:00

109 lines
3.0 KiB
Go

package tui
import (
"testing"
"superwork-tui/internal/files"
"superwork-tui/internal/git"
"superwork-tui/internal/issue"
)
func TestBranchSyncKey_ReturnsCmd(t *testing.T) {
m := makeLoadedModel([]issue.Issue{{Number: 1, Column: issue.ColumnTodo}}, 0, 0)
_, cmd := sendKey(m, "S")
if cmd == nil {
t.Error("S key should return a branchSyncCheckCmd")
}
}
func TestEnvLockKey_ReturnsCmd(t *testing.T) {
m := makeLoadedModel([]issue.Issue{{Number: 1, Column: issue.ColumnTodo}}, 0, 0)
_, cmd := sendKey(m, "E")
if cmd == nil {
t.Error("E key should return an envLockToggleCmd")
}
}
func TestPrDiffKey_NoIssue_NoOp(t *testing.T) {
m := makeLoadedModel([]issue.Issue{{Number: 1, Column: issue.ColumnTodo}}, 0, 0)
iss := issue.Issue{Number: 1, Column: issue.ColumnTodo}
m.state = stateDetail
m.detailIss = &iss
m2, cmd := sendKey(m, "g")
if cmd != nil {
t.Error("g key with no PR should not return cmd")
}
if m2.statusMsg == "" {
t.Error("g key with no PR should set statusMsg")
}
}
func TestPrDiffKey_WithPR_ReturnsCmd(t *testing.T) {
m := makeLoadedModel([]issue.Issue{}, 0, 0)
iss := issue.Issue{Number: 5, Column: issue.ColumnReview, PR: "42", Branch: "feature/abc"}
m.state = stateDetail
m.detailIss = &iss
_, cmd := sendKey(m, "g")
if cmd == nil {
t.Error("g key with PR and Branch should return prDiffSummaryCmd")
}
}
func TestBranchSyncStatusMsg_SetsConfirm(t *testing.T) {
m := makeLoadedModel([]issue.Issue{}, 0, 0)
msg := branchSyncStatusMsg{
status: git.BranchSyncStatus{
Behind: 3,
DevBranch: "dev",
AutoBuildBranch: "build",
},
}
next, _ := m.Update(msg)
m2 := next.(Model)
if m2.confirmPend == nil {
t.Error("branchSyncStatusMsg should set confirmPend")
}
if m2.confirmPend.action != confirmBranchSync {
t.Errorf("action = %v, want confirmBranchSync", m2.confirmPend.action)
}
}
func TestBranchSyncStatusMsg_Unavailable_SetsStatus(t *testing.T) {
m := makeLoadedModel([]issue.Issue{}, 0, 0)
msg := branchSyncStatusMsg{
status: git.BranchSyncStatus{Unavailable: true, Reason: "not a repo"},
}
next, _ := m.Update(msg)
m2 := next.(Model)
if m2.confirmPend != nil {
t.Error("unavailable status should not set confirmPend")
}
if m2.statusMsg == "" {
t.Error("unavailable status should set statusMsg")
}
}
func TestEnvLockDoneMsg_UpdatesState(t *testing.T) {
m := makeLoadedModel([]issue.Issue{}, 0, 0)
msg := envLockDoneMsg{locked: true, result: files.EnvLockResult{Total: 3, OK: []string{"a", "b", "c"}}}
next, _ := m.Update(msg)
m2 := next.(Model)
if !m2.envLocked {
t.Error("envLocked should be true after lock")
}
if m2.statusMsg == "" {
t.Error("statusMsg should be set")
}
}
func TestBranchSyncConfirm_Y_RunsSync(t *testing.T) {
m := makeLoadedModel([]issue.Issue{}, 0, 0)
status := git.BranchSyncStatus{Behind: 1, DevBranch: "dev", AutoBuildBranch: "build"}
m.branchSyncPending = &status
m.confirmPend = &confirmPending{action: confirmBranchSync}
_, cmd := sendKey(m, "y")
if cmd == nil {
t.Error("confirming branchSync with y should return branchSyncRunCmd")
}
}