diff --git a/internal/cmd/statusline_test.go b/internal/cmd/statusline_test.go new file mode 100644 index 00000000..15975a0d --- /dev/null +++ b/internal/cmd/statusline_test.go @@ -0,0 +1,75 @@ +package cmd + +import "testing" + +func TestExtractRigFromSession(t *testing.T) { + tests := []struct { + session string + want string + }{ + // Standard polecat sessions + {"gt-gastown-slit", "gastown"}, + {"gt-gastown-Toast", "gastown"}, + {"gt-myrig-worker", "myrig"}, + + // Crew sessions + {"gt-gastown-crew-max", "gastown"}, + {"gt-myrig-crew-user", "myrig"}, + + // Witness sessions (daemon.go style: gt--witness) + {"gt-gastown-witness", "gastown"}, + {"gt-myrig-witness", "myrig"}, + + // Witness sessions (witness.go style: gt-witness-) + {"gt-witness-gastown", "gastown"}, + {"gt-witness-myrig", "myrig"}, + + // Refinery sessions + {"gt-gastown-refinery", "gastown"}, + {"gt-myrig-refinery", "myrig"}, + + // Edge cases + {"gt-a-b", "a"}, // minimum valid + {"gt-ab", ""}, // too short, no worker + {"gt-", ""}, // invalid + {"gt", ""}, // invalid + } + + for _, tt := range tests { + t.Run(tt.session, func(t *testing.T) { + got := extractRigFromSession(tt.session) + if got != tt.want { + t.Errorf("extractRigFromSession(%q) = %q, want %q", tt.session, got, tt.want) + } + }) + } +} + +func TestIsPolecatSession(t *testing.T) { + tests := []struct { + session string + want bool + }{ + // Polecat sessions (should return true) + {"gt-gastown-slit", true}, + {"gt-gastown-Toast", true}, + {"gt-myrig-worker", true}, + {"gt-a-b", true}, + + // Non-polecat sessions (should return false) + {"gt-gastown-witness", false}, + {"gt-witness-gastown", false}, + {"gt-gastown-refinery", false}, + {"gt-gastown-crew-max", false}, + {"gt-myrig-crew-user", false}, + } + + for _, tt := range tests { + t.Run(tt.session, func(t *testing.T) { + got := isPolecatSession(tt.session) + if got != tt.want { + t.Errorf("isPolecatSession(%q) = %v, want %v", tt.session, got, tt.want) + } + }) + } +}