feat. rebuild service in Go
Rebuild the Gitea Codex review bot from the product contract with a Go HTTP service, durable SQL queue, typed Gitea client, isolated runner, and deployment updates. Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,52 @@
|
||||
package sqlstore
|
||||
|
||||
import (
|
||||
"context"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"gitea-codex-bot/internal/config"
|
||||
"gitea-codex-bot/internal/domain"
|
||||
)
|
||||
|
||||
func TestSQLiteMigrationsAndJobLifecycle(t *testing.T) {
|
||||
settings := config.Settings{DatabaseURL: "sqlite://" + t.TempDir() + "/test.db"}
|
||||
st, err := Open(settings)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
defer st.Close()
|
||||
ctx := context.Background()
|
||||
if err := st.Migrate(ctx); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
event := domain.WebhookEvent{EventName: "issue_comment", DeliveryID: "d1", Repo: "acme/repo", PRNumber: 9, HeadSHA: "abc123", CommentID: 11, CommentBody: "@codex review", Sender: "alice", PayloadSHA256: "digest"}
|
||||
inserted, err := st.InsertWebhookEvent(ctx, event)
|
||||
if err != nil || !inserted {
|
||||
t.Fatalf("insert event: %v %v", inserted, err)
|
||||
}
|
||||
duplicate, err := st.InsertWebhookEvent(ctx, event)
|
||||
if err != nil || duplicate {
|
||||
t.Fatalf("duplicate event result: %v %v", duplicate, err)
|
||||
}
|
||||
job, err := st.EnqueueJob(ctx, event, domain.ParsedCommand{Name: "review", Raw: event.CommentBody, Mode: "summary"})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
claimed, run, err := st.ClaimNextJob(ctx, time.Now().UTC(), 5*time.Minute, 2)
|
||||
if err != nil || claimed == nil || run == nil {
|
||||
t.Fatalf("claim: %#v %#v %v", claimed, run, err)
|
||||
}
|
||||
result := domain.ReviewResult{Verdict: "correct", Confidence: 1, Summary: "ok", Findings: []domain.Finding{}}
|
||||
if err := st.FinishJob(ctx, job.ID, run.ID, true, false, &result, nil); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
latest, err := st.LatestJob(ctx)
|
||||
if err != nil || latest == nil || latest.Status != domain.JobSucceeded {
|
||||
t.Fatalf("latest: %#v %v", latest, err)
|
||||
}
|
||||
remaining, err := st.CooldownRemaining(ctx, event.Repo, event.PRNumber, time.Minute)
|
||||
if err != nil || remaining <= 0 {
|
||||
t.Fatalf("cooldown: %d %v", remaining, err)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user