43 lines
2.1 KiB
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)
|
|
}
|
|
})
|
|
}
|
|
}
|