test: Add unit tests for formatTrackBeadID helper
Extract the cross-rig bead formatting logic into a testable helper function and add comprehensive unit tests: - TestFormatTrackBeadID: 8 test cases covering HQ beads, cross-rig beads, and edge cases (single segment, empty string, many segments) - TestFormatTrackBeadIDConsumerCompatibility: 3 test cases verifying the external ref format can be correctly parsed by consumers in convoy.go, model.go, feed/convoy.go, and web/fetcher.go The helper function includes godoc with examples showing expected behavior for different bead ID formats.
This commit is contained in:
@@ -1240,15 +1240,7 @@ func createAutoConvoy(beadID, beadTitle string) (string, error) {
|
||||
}
|
||||
|
||||
// Add tracking relation: convoy tracks the issue
|
||||
// Format cross-prefix beads as external refs so bd can resolve them
|
||||
trackBeadID := beadID
|
||||
if !strings.HasPrefix(beadID, "hq-") {
|
||||
parts := strings.SplitN(beadID, "-", 3)
|
||||
if len(parts) >= 2 {
|
||||
rigPrefix := parts[0] + "-" + parts[1]
|
||||
trackBeadID = fmt.Sprintf("external:%s:%s", rigPrefix, beadID)
|
||||
}
|
||||
}
|
||||
trackBeadID := formatTrackBeadID(beadID)
|
||||
depArgs := []string{"dep", "add", convoyID, trackBeadID, "--type=tracks"}
|
||||
depCmd := exec.Command("bd", depArgs...)
|
||||
depCmd.Dir = townBeads
|
||||
@@ -1408,3 +1400,24 @@ func runBatchSling(beadIDs []string, rigName string, townBeadsDir string) error
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// formatTrackBeadID formats a bead ID for use in convoy tracking dependencies.
|
||||
// Cross-rig beads (non-hq- prefixed) are formatted as external references
|
||||
// so the bd tool can resolve them when running from HQ context.
|
||||
//
|
||||
// Examples:
|
||||
// - "hq-abc123" -> "hq-abc123" (HQ beads unchanged)
|
||||
// - "gt-mol-xyz" -> "external:gt-mol:gt-mol-xyz"
|
||||
// - "beads-task-123" -> "external:beads-task:beads-task-123"
|
||||
func formatTrackBeadID(beadID string) string {
|
||||
if strings.HasPrefix(beadID, "hq-") {
|
||||
return beadID
|
||||
}
|
||||
parts := strings.SplitN(beadID, "-", 3)
|
||||
if len(parts) >= 2 {
|
||||
rigPrefix := parts[0] + "-" + parts[1]
|
||||
return fmt.Sprintf("external:%s:%s", rigPrefix, beadID)
|
||||
}
|
||||
// Fallback for malformed IDs (single segment)
|
||||
return beadID
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user