93 lines
2.4 KiB
Go
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)
|
|
}
|
|
}
|