Files
kandev/apps/backend/internal/github/service_pr_watch_test.go
T
2026-06-20 10:05:25 +01:00

91 lines
2.5 KiB
Go

package github
import (
"context"
"testing"
"time"
)
func TestService_GetTaskPRByOwnerRepoNumber(t *testing.T) {
ctx := context.Background()
now := time.Now().UTC()
t.Run("returns exact owner repo number match", func(t *testing.T) {
store := newTestStore(t)
svc := NewService(nil, "pat", nil, store, nil, testLogger(t))
want := &TaskPR{
TaskID: "task-1",
RepositoryID: "repo-backend",
Owner: "kdlbs",
Repo: "kandev",
PRNumber: 1446,
PRURL: "https://github.com/kdlbs/kandev/pull/1446",
PRTitle: "CI automation",
HeadBranch: "feature/ci",
BaseBranch: "main",
State: "open",
CreatedAt: now,
}
if err := store.CreateTaskPR(ctx, want); err != nil {
t.Fatalf("create matching task PR: %v", err)
}
if err := store.CreateTaskPR(ctx, &TaskPR{
TaskID: "task-1",
RepositoryID: "repo-other",
Owner: "kdlbs",
Repo: "kandev",
PRNumber: 1447,
CreatedAt: now,
}); err != nil {
t.Fatalf("create non-matching task PR: %v", err)
}
got, err := svc.GetTaskPRByOwnerRepoNumber(ctx, "task-1", "kdlbs", "kandev", 1446)
if err != nil {
t.Fatalf("get task PR by owner/repo/number: %v", err)
}
if got == nil || got.RepositoryID != want.RepositoryID || got.PRNumber != want.PRNumber {
t.Fatalf("expected exact matching PR, got %+v", got)
}
})
t.Run("returns nil when no PR matches", func(t *testing.T) {
store := newTestStore(t)
svc := NewService(nil, "pat", nil, store, nil, testLogger(t))
if err := store.CreateTaskPR(ctx, &TaskPR{
TaskID: "task-1",
RepositoryID: "repo-backend",
Owner: "kdlbs",
Repo: "kandev",
PRNumber: 1446,
CreatedAt: now,
}); err != nil {
t.Fatalf("create task PR: %v", err)
}
got, err := svc.GetTaskPRByOwnerRepoNumber(ctx, "task-1", "kdlbs", "kandev", 9999)
if err != nil {
t.Fatalf("get task PR by owner/repo/number: %v", err)
}
if got != nil {
t.Fatalf("expected no match, got %+v", got)
}
})
t.Run("propagates store list errors", func(t *testing.T) {
store := newTestStore(t)
svc := NewService(nil, "pat", nil, store, nil, testLogger(t))
if err := store.ro.Close(); err != nil {
t.Fatalf("close store read db: %v", err)
}
got, err := svc.GetTaskPRByOwnerRepoNumber(ctx, "task-1", "kdlbs", "kandev", 1446)
if err == nil {
t.Fatalf("expected store error, got nil")
}
if got != nil {
t.Fatalf("expected nil PR on error, got %+v", got)
}
})
}