agent-orchestrator/backend/internal/service/session/status_test.go

43 lines
2.1 KiB
Go

package session
import (
"testing"
"github.com/aoagents/agent-orchestrator/backend/internal/domain"
)
func statusRec(activity domain.ActivityState, terminated bool) domain.SessionRecord {
return domain.SessionRecord{Activity: domain.Activity{State: activity}, IsTerminated: terminated}
}
func statusPR(facts domain.PRFacts) *domain.PRFacts { return &facts }
func TestServiceDerivesStatusFromSessionFactsAndPR(t *testing.T) {
tests := []struct {
name string
rec domain.SessionRecord
pr *domain.PRFacts
want domain.SessionStatus
}{
{"terminated", statusRec(domain.ActivityExited, true), nil, domain.StatusTerminated},
{"merged-pr", statusRec(domain.ActivityIdle, true), statusPR(domain.PRFacts{Merged: true}), domain.StatusMerged},
{"needs-input", statusRec(domain.ActivityWaitingInput, false), statusPR(domain.PRFacts{CI: domain.CIFailing}), domain.StatusNeedsInput},
{"ci-failed", statusRec(domain.ActivityIdle, false), statusPR(domain.PRFacts{CI: domain.CIFailing}), domain.StatusCIFailed},
{"draft", statusRec(domain.ActivityIdle, false), statusPR(domain.PRFacts{Draft: true}), domain.StatusDraft},
{"changes-requested", statusRec(domain.ActivityIdle, false), statusPR(domain.PRFacts{Review: domain.ReviewChangesRequest}), domain.StatusChangesRequested},
{"mergeable", statusRec(domain.ActivityIdle, false), statusPR(domain.PRFacts{Mergeability: domain.MergeMergeable}), domain.StatusMergeable},
{"approved", statusRec(domain.ActivityIdle, false), statusPR(domain.PRFacts{Review: domain.ReviewApproved}), domain.StatusApproved},
{"review-pending", statusRec(domain.ActivityIdle, false), statusPR(domain.PRFacts{Review: domain.ReviewRequired}), domain.StatusReviewPending},
{"pr-open", statusRec(domain.ActivityIdle, false), statusPR(domain.PRFacts{}), domain.StatusPROpen},
{"working", statusRec(domain.ActivityActive, false), nil, domain.StatusWorking},
{"idle", statusRec(domain.ActivityIdle, false), nil, domain.StatusIdle},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if got := deriveStatus(tt.rec, tt.pr); got != tt.want {
t.Fatalf("got %q want %q", got, tt.want)
}
})
}
}