91 lines
2.5 KiB
Go
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)
|
|
}
|
|
})
|
|
}
|