Skip to content

Commit 5c38a67

Browse files
AnnatarHeclaude
andcommitted
fix(cc): update statusline tests for new git info parameters
Update test function signatures to match new formatStatuslineOutput and getDaemonInfoWithFallback APIs. Add tests for git branch display including dirty branch indicator. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
1 parent fadef4b commit 5c38a67

1 file changed

Lines changed: 50 additions & 23 deletions

File tree

commands/cc_statusline_test.go

Lines changed: 50 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -40,16 +40,18 @@ func (s *CCStatuslineTestSuite) TearDownTest() {
4040
os.Remove(s.socketPath)
4141
}
4242

43-
// getDailyCostWithDaemonFallback Tests
43+
// getDaemonInfoWithFallback Tests
4444

45-
func (s *CCStatuslineTestSuite) TestGetDailyStats_UsesDaemonWhenAvailable() {
45+
func (s *CCStatuslineTestSuite) TestGetDaemonInfo_UsesDaemonWhenAvailable() {
4646
// Start mock daemon socket
4747
listener, err := net.Listen("unix", s.socketPath)
4848
assert.NoError(s.T(), err)
4949
s.listener = listener
5050

5151
expectedCost := 15.67
5252
expectedSessionSeconds := 3600
53+
expectedBranch := "main"
54+
expectedDirty := true
5355
go func() {
5456
conn, _ := listener.Accept()
5557
defer conn.Close()
@@ -62,6 +64,8 @@ func (s *CCStatuslineTestSuite) TestGetDailyStats_UsesDaemonWhenAvailable() {
6264
TotalSessionSeconds: expectedSessionSeconds,
6365
TimeRange: "today",
6466
CachedAt: time.Now(),
67+
GitBranch: expectedBranch,
68+
GitDirty: expectedDirty,
6569
}
6670
json.NewEncoder(conn).Encode(response)
6771
}()
@@ -72,27 +76,31 @@ func (s *CCStatuslineTestSuite) TestGetDailyStats_UsesDaemonWhenAvailable() {
7276
SocketPath: s.socketPath,
7377
}
7478

75-
stats := getDailyStatsWithDaemonFallback(context.Background(), config)
79+
result := getDaemonInfoWithFallback(context.Background(), config, "/some/path")
7680

77-
assert.Equal(s.T(), expectedCost, stats.Cost)
78-
assert.Equal(s.T(), expectedSessionSeconds, stats.SessionSeconds)
81+
assert.Equal(s.T(), expectedCost, result.Cost)
82+
assert.Equal(s.T(), expectedSessionSeconds, result.SessionSeconds)
83+
assert.Equal(s.T(), expectedBranch, result.GitBranch)
84+
assert.Equal(s.T(), expectedDirty, result.GitDirty)
7985
}
8086

81-
func (s *CCStatuslineTestSuite) TestGetDailyStats_FallbackWhenDaemonUnavailable() {
87+
func (s *CCStatuslineTestSuite) TestGetDaemonInfo_FallbackWhenDaemonUnavailable() {
8288
// No socket exists, should fall back to cached API
8389
config := model.ShellTimeConfig{
8490
SocketPath: "/nonexistent/socket.sock",
8591
Token: "", // No token means FetchDailyStatsCached returns zero values
8692
}
8793

88-
stats := getDailyStatsWithDaemonFallback(context.Background(), config)
94+
result := getDaemonInfoWithFallback(context.Background(), config, "")
8995

9096
// Should return zero values (from cache fallback with no token)
91-
assert.Equal(s.T(), float64(0), stats.Cost)
92-
assert.Equal(s.T(), 0, stats.SessionSeconds)
97+
assert.Equal(s.T(), float64(0), result.Cost)
98+
assert.Equal(s.T(), 0, result.SessionSeconds)
99+
assert.Empty(s.T(), result.GitBranch)
100+
assert.False(s.T(), result.GitDirty)
93101
}
94102

95-
func (s *CCStatuslineTestSuite) TestGetDailyStats_FallbackOnDaemonError() {
103+
func (s *CCStatuslineTestSuite) TestGetDaemonInfo_FallbackOnDaemonError() {
96104
// Start mock daemon that returns error
97105
listener, err := net.Listen("unix", s.socketPath)
98106
assert.NoError(s.T(), err)
@@ -111,14 +119,16 @@ func (s *CCStatuslineTestSuite) TestGetDailyStats_FallbackOnDaemonError() {
111119
Token: "", // No token
112120
}
113121

114-
stats := getDailyStatsWithDaemonFallback(context.Background(), config)
122+
result := getDaemonInfoWithFallback(context.Background(), config, "")
115123

116124
// Should fall back and return zero values
117-
assert.Equal(s.T(), float64(0), stats.Cost)
118-
assert.Equal(s.T(), 0, stats.SessionSeconds)
125+
assert.Equal(s.T(), float64(0), result.Cost)
126+
assert.Equal(s.T(), 0, result.SessionSeconds)
127+
assert.Empty(s.T(), result.GitBranch)
128+
assert.False(s.T(), result.GitDirty)
119129
}
120130

121-
func (s *CCStatuslineTestSuite) TestGetDailyStats_UsesDefaultSocketPath() {
131+
func (s *CCStatuslineTestSuite) TestGetDaemonInfo_UsesDefaultSocketPath() {
122132
// Test that default socket path is used when config is empty
123133
config := model.ShellTimeConfig{
124134
SocketPath: "", // Empty path - should use model.DefaultSocketPath
@@ -127,54 +137,71 @@ func (s *CCStatuslineTestSuite) TestGetDailyStats_UsesDefaultSocketPath() {
127137

128138
// This should use model.DefaultSocketPath internally
129139
// Since no daemon is running at the default path, it will fall back to cached API
130-
// The function should not panic and should return a valid stats struct
131-
stats := getDailyStatsWithDaemonFallback(context.Background(), config)
140+
// The function should not panic and should return a valid result struct
141+
result := getDaemonInfoWithFallback(context.Background(), config, "")
132142

133143
// We can't assert on exact values since the global cache might have data
134144
// from previous tests. Just verify the function returns without error
135145
// and returns non-negative values
136-
assert.GreaterOrEqual(s.T(), stats.Cost, float64(0))
137-
assert.GreaterOrEqual(s.T(), stats.SessionSeconds, 0)
146+
assert.GreaterOrEqual(s.T(), result.Cost, float64(0))
147+
assert.GreaterOrEqual(s.T(), result.SessionSeconds, 0)
138148
}
139149

140150
// formatStatuslineOutput Tests
141151

142152
func (s *CCStatuslineTestSuite) TestFormatStatuslineOutput_AllValues() {
143-
output := formatStatuslineOutput("claude-opus-4", 1.23, 4.56, 3661, 75.0)
153+
output := formatStatuslineOutput("claude-opus-4", 1.23, 4.56, 3661, 75.0, "main", false)
144154

145155
// Should contain all components
156+
assert.Contains(s.T(), output, "🌿 main")
146157
assert.Contains(s.T(), output, "🤖 claude-opus-4")
147158
assert.Contains(s.T(), output, "$1.23")
148159
assert.Contains(s.T(), output, "$4.56")
149160
assert.Contains(s.T(), output, "1h1m") // Session time (3661 seconds = 1h 1m 1s)
150161
assert.Contains(s.T(), output, "75%") // Context percentage
151162
}
152163

164+
func (s *CCStatuslineTestSuite) TestFormatStatuslineOutput_WithDirtyBranch() {
165+
output := formatStatuslineOutput("claude-opus-4", 1.23, 4.56, 3661, 75.0, "feature/test", true)
166+
167+
// Should contain branch with asterisk for dirty
168+
assert.Contains(s.T(), output, "🌿 feature/test*")
169+
assert.Contains(s.T(), output, "🤖 claude-opus-4")
170+
}
171+
172+
func (s *CCStatuslineTestSuite) TestFormatStatuslineOutput_NoBranch() {
173+
output := formatStatuslineOutput("claude-opus-4", 1.23, 4.56, 3661, 75.0, "", false)
174+
175+
// Should show "-" for no branch
176+
assert.Contains(s.T(), output, "🌿 -")
177+
assert.Contains(s.T(), output, "🤖 claude-opus-4")
178+
}
179+
153180
func (s *CCStatuslineTestSuite) TestFormatStatuslineOutput_ZeroDailyCost() {
154-
output := formatStatuslineOutput("claude-sonnet", 0.50, 0, 300, 50.0)
181+
output := formatStatuslineOutput("claude-sonnet", 0.50, 0, 300, 50.0, "main", false)
155182

156183
// Should show "-" for zero daily cost
157184
assert.Contains(s.T(), output, "📊 -")
158185
assert.Contains(s.T(), output, "5m0s") // Session time (300 seconds = 5m)
159186
}
160187

161188
func (s *CCStatuslineTestSuite) TestFormatStatuslineOutput_ZeroSessionSeconds() {
162-
output := formatStatuslineOutput("claude-sonnet", 0.50, 1.0, 0, 50.0)
189+
output := formatStatuslineOutput("claude-sonnet", 0.50, 1.0, 0, 50.0, "main", false)
163190

164191
// Should show "-" for zero session seconds
165192
assert.Contains(s.T(), output, "⏱️ -")
166193
}
167194

168195
func (s *CCStatuslineTestSuite) TestFormatStatuslineOutput_HighContextPercentage() {
169-
output := formatStatuslineOutput("test-model", 1.0, 1.0, 60, 85.0)
196+
output := formatStatuslineOutput("test-model", 1.0, 1.0, 60, 85.0, "main", false)
170197

171198
// Should contain the percentage (color codes may vary)
172199
assert.Contains(s.T(), output, "85%")
173200
assert.Contains(s.T(), output, "1m0s")
174201
}
175202

176203
func (s *CCStatuslineTestSuite) TestFormatStatuslineOutput_LowContextPercentage() {
177-
output := formatStatuslineOutput("test-model", 1.0, 1.0, 45, 25.0)
204+
output := formatStatuslineOutput("test-model", 1.0, 1.0, 45, 25.0, "main", false)
178205

179206
// Should contain the percentage
180207
assert.Contains(s.T(), output, "25%")

0 commit comments

Comments
 (0)