package database import ( "testing" "git.mleku.dev/mleku/nostr/encoders/filter" "git.mleku.dev/mleku/nostr/encoders/kind" "git.mleku.dev/mleku/nostr/encoders/tag" "next.orly.dev/pkg/utils" ) func TestQueryForKindsAuthors(t *testing.T) { // Use shared database (read-only test) db, ctx := GetSharedDB(t) events := GetSharedEvents(t) if len(events) < 2 { t.Fatalf("Need at least 2 saved events, got %d", len(events)) } // Test querying by kind and author // Find an event with a specific kind and author testKind := kind.New(1) // Kind 1 is typically text notes kindFilter := kind.NewS(testKind) // Use the author from events[1] authorFilter := tag.NewFromBytesSlice(events[1].Pubkey) idTsPk, err := db.QueryForIds( ctx, &filter.F{ Kinds: kindFilter, Authors: authorFilter, }, ) if err != nil { t.Fatalf("Failed to query for kinds and authors: %v", err) } // Verify we got results if len(idTsPk) == 0 { t.Fatal("did not find any events with the specified kind and author") } // Verify the results have the correct kind and author for i, result := range idTsPk { // Find the event with this ID var found bool for _, ev := range events { if utils.FastEqual(result.Id, ev.ID) { found = true if ev.Kind != testKind.K { t.Fatalf( "result %d has incorrect kind, got %d, expected %d", i, ev.Kind, testKind.K, ) } if !utils.FastEqual(ev.Pubkey, events[1].Pubkey) { t.Fatalf( "result %d has incorrect author, got %x, expected %x", i, ev.Pubkey, events[1].Pubkey, ) } break } } if !found { t.Fatalf("result %d with ID %x not found in events", i, result.Id) } } }