2026-10-14 21:21:54 -07:00
package agents
import (
"context"
"encoding/json"
"path/filepath"
"strings"
"testing"
"time"
"g.fc.run/misc/byre/internal/api"
"g.fc.run/misc/byre/internal/store"
)
func TestSetMergeTitle ( t * testing . T ) {
ctx := context . Background ()
st , err := store . Open ( filepath . Join ( t . TempDir (), "byre.db" ), func ( api . Event ) {})
if err != nil {
t . Fatalf ( "open store: %v" , err )
}
t . Cleanup ( func () { st . Close () })
now := time . Now (). UTC ()
_ , err = st . EnsureUser ( ctx , "alice" , "Alice" )
if err != nil {
t . Fatalf ( "ensure user: %v" , err )
}
err = st . CreateProject ( ctx , api . Project { Id : "p1" , Name : "demo" , RepoPath : "/nonexistent" , DefaultBranch : "main" , Remote : "none" , CreatedBy : "alice" , CreatedAt : now })
if err != nil {
t . Fatalf ( "create project: %v" , err )
}
err = st . CreateTask ( ctx , api . Task { Id : "t1" , ProjectId : "p1" , Title : "Fix the thing" , Branch : "b" , WorktreePath : "/nonexistent" , BaseRef : "x" , Status : api . TaskStatusActive , CreatedBy : "alice" , CreatedAt : now })
if err != nil {
t . Fatalf ( "create task: %v" , err )
}
task , err := st . GetTask ( ctx , "t1" )
if err != nil || task . MergeTitle != "Fix the thing" {
t . Fatalf ( "default merge title %q, want the task title: %v" , task . MergeTitle , err )
}
2026-10-15 09:40:30 -07:00
m := New ( st , DefaultLimits , t . TempDir (), t . TempDir ())
2026-10-14 21:21:54 -07:00
l := & live { id : "s1" , vendor : api . Claude , taskID : "t1" , projectID : "p1" }
call := func ( title string ) error {
raw , err := json . Marshal ( setMergeTitleArgs { Title : title })
if err != nil {
t . Fatalf ( "marshal: %v" , err )
}
_ , err = m . setMergeTitle ( ctx , l , raw )
return err
}
for _ , bad := range [] string { "" , " " , "two\nlines" , strings . Repeat ( "x" , maxMergeTitle + 1 )} {
if call ( bad ) == nil {
t . Fatalf ( "set_merge_title accepted %q" , bad )
}
}
err = call ( " Add retry with backoff to webhook delivery " )
if err != nil {
t . Fatalf ( "set_merge_title: %v" , err )
}
task , err = st . GetTask ( ctx , "t1" )
if err != nil || task . MergeTitle != "Add retry with backoff to webhook delivery" || task . Title != "Fix the thing" {
t . Fatalf ( "after set_merge_title: %+v %v" , task , err )
}
if ! strings . Contains ( mergeInPrompt ( "main" , task . MergeTitle ), `currently "Add retry with backoff to webhook delivery"` ) {
t . Fatalf ( "merge-in prompt doesn't show the current title: %s" , mergeInPrompt ( "main" , task . MergeTitle ))
}
_ , err = st . DiscardTask ( ctx , "t1" , "alice" )
if err != nil {
t . Fatalf ( "discard: %v" , err )
}
if call ( "Too late" ) == nil {
t . Fatalf ( "set_merge_title accepted a title for a closed task" )
}
}