1package daemon23import (4 "context"5 "strings"6 "testing"7 "time"89 "github.com/FelineStateMachine/tinyrelay/internal/event"10 "github.com/FelineStateMachine/tinyrelay/internal/policy"11 "github.com/FelineStateMachine/tinyrelay/internal/relay"12)1314func TestPublishReportIsPrivateAndMetadataIsAtomic(t *testing.T) {15 ctx := context.Background()16 app, err := New(ctx, Config{DataDir: t.TempDir(), DefaultTenant: "main"})17 if err != nil {18 t.Fatal(err)19 }20 defer app.Close(ctx)21 secret := strings.Repeat("0", 63) + "1"22 owner, _ := event.PublicKey(secret)23 meta, err := app.Create(ctx, CreateOptions{Name: "main", Owner: owner, Template: "default"})24 if err != nil {25 t.Fatal(err)26 }27 tenant, err := app.tenant(ctx, meta, "http://relay.test")28 if err != nil {29 t.Fatal(err)30 }31 now := time.Now().Unix()32 report := event.Event{Kind: event.KIND_REPORT, CreatedAt: now, Tags: [][]string{{"e", strings.Repeat("a", 64), "spam"}}, Content: "bad"}33 if err := event.Sign(&report, secret); err != nil {34 t.Fatal(err)35 }36 if _, err := tenant.Publish(ctx, report, relay.Session{PubKeys: []string{owner}}); err != nil {37 t.Fatal(err)38 }39 var reports, stored int40 if err := tenant.store.DB().QueryRow(`SELECT count(*) FROM community_reports`).Scan(&reports); err != nil {41 t.Fatal(err)42 }43 if err := tenant.store.DB().QueryRow(`SELECT count(*) FROM events WHERE id=?`, report.ID).Scan(&stored); err != nil {44 t.Fatal(err)45 }46 if reports != 1 || stored != 0 {47 t.Fatalf("report reports=%d stored=%d", reports, stored)48 }49 metadata := event.Event{Kind: event.KIND_EDIT_METADATA, CreatedAt: now + 1, Tags: [][]string{{"name", "renamed"}}}50 if err := event.Sign(&metadata, secret); err != nil {51 t.Fatal(err)52 }53 if _, err := tenant.Publish(ctx, metadata, relay.Session{PubKeys: []string{owner}}); err != nil {54 t.Fatal(err)55 }56 var current policy.Policy57 if err := tenant.store.GetSetting(ctx, "policy", ¤t); err != nil {58 t.Fatal(err)59 }60 if current.Name != "renamed" {61 t.Fatalf("policy name=%q", current.Name)62 }63}