Files
jbergner 1a56dec079
release-tag / release-image (push) Successful in 3m57s
RC-16
2026-08-14 14:19:16 +02:00

93 lines
2.4 KiB
Go

package data
import (
"context"
"testing"
"neuralhunt/internal/auth"
)
func TestPlaceDrawTimeAndAdminRewardsCreditDelegatedOwner(t *testing.T) {
ctx := context.Background()
db, err := OpenSQLite(ctx, t.TempDir()+"/place-rewards.db")
if err != nil {
t.Fatal(err)
}
defer db.Close()
s := New(db)
jwk := auth.PublicJWK{Kty: "EC", Crv: "P-256", X: "AQ", Y: "Ag"}
for _, id := range []string{"owner", "worker"} {
if err := s.UpsertClient(ctx, id, jwk); err != nil {
t.Fatal(err)
}
}
if err := s.SetIdentityDelegation(ctx, "worker", "owner"); err != nil {
t.Fatal(err)
}
if err := s.EnsureActiveTasks(ctx, 1, 28); err != nil {
t.Fatal(err)
}
tasks, err := s.ActiveTasks(ctx)
if err != nil || len(tasks) != 1 {
t.Fatalf("tasks=%d err=%v", len(tasks), err)
}
task := tasks[0]
owner, points, created, err := s.PlaceRewardDraw(ctx, task.ID, "worker", task.Revision, 7, 25, 3, true)
if err != nil {
t.Fatal(err)
}
if owner != "owner" || points != 75 || !created {
t.Fatalf("draw owner=%q points=%v created=%v", owner, points, created)
}
_, _, created, err = s.PlaceRewardDraw(ctx, task.ID, "worker", task.Revision, 7, 25, 3, true)
if err != nil {
t.Fatal(err)
}
if created {
t.Fatal("duplicate draw reward was credited")
}
owner, points, created, err = s.PlaceRewardTimeIntervals(ctx, task.ID, "worker", task.Revision, 8, 20, 1, 60)
if err != nil {
t.Fatal(err)
}
if owner != "owner" || points != 20 || !created {
t.Fatalf("time reward owner=%q points=%v created=%v", owner, points, created)
}
_, _, created, err = s.PlaceRewardTimeIntervals(ctx, task.ID, "worker", task.Revision, 8, 20, 1, 60)
if err != nil {
t.Fatal(err)
}
if created {
t.Fatal("duplicate time reward was credited")
}
grant, err := s.PlaceAdminGrant(ctx, "worker", 5.5, "support bonus")
if err != nil {
t.Fatal(err)
}
if grant.OwnerClientID != "owner" || grant.SourceClientID != "worker" || grant.Points != 5.5 || grant.Kind != "admin" {
t.Fatalf("grant=%+v", grant)
}
wallet, err := s.PlaceWallet(ctx, "owner", 100)
if err != nil {
t.Fatal(err)
}
if wallet.BalancePoints != 100.5 || wallet.EarnedPoints != 100.5 || wallet.AvailablePixels != 1 {
t.Fatalf("wallet=%+v", wallet)
}
if len(wallet.RecentEarnings) < 3 {
t.Fatalf("expected recent rewards, got %+v", wallet.RecentEarnings)
}
events, err := s.PlaceBonusEvents(ctx, "owner", 10)
if err != nil {
t.Fatal(err)
}
if len(events) != 3 {
t.Fatalf("bonus events=%+v", events)
}
}