This repository has been archived on 2026-07-17. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
gitea-codex/internal/store/sqlstore/sqlstore_test.go
T
Space-Banane f19b271642
ci / test (pull_request) Successful in 1m54s
ci / publish (pull_request) Has been skipped
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>
2026-07-12 21:51:01 +02:00

53 lines
1.8 KiB
Go

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)
}
}