export_test.go raw

   1  package database
   2  
   3  import (
   4  	"bufio"
   5  	"bytes"
   6  	"testing"
   7  
   8  	"next.orly.dev/pkg/nostr/encoders/event"
   9  	"next.orly.dev/pkg/lol/chk"
  10  )
  11  
  12  // TestExport tests the Export function by:
  13  // 1. Using the shared database with events from examples.Cache
  14  // 2. Checking that events can be exported
  15  // 3. Verifying the exported events can be parsed
  16  func TestExport(t *testing.T) {
  17  	// Use shared database (skips in short mode)
  18  	db, ctx := GetSharedDB(t)
  19  	savedEvents := GetSharedEvents(t)
  20  
  21  	t.Logf("Shared database has %d events", len(savedEvents))
  22  
  23  	// Test 1: Export all events and verify they can be parsed
  24  	var exportBuffer bytes.Buffer
  25  	db.Export(ctx, &exportBuffer)
  26  
  27  	// Parse the exported events and count them
  28  	exportedIDs := make(map[string]bool)
  29  	exportScanner := bufio.NewScanner(&exportBuffer)
  30  	exportScanner.Buffer(make([]byte, 0, 1_000_000_000), 1_000_000_000)
  31  	exportCount := 0
  32  	for exportScanner.Scan() {
  33  		b := exportScanner.Bytes()
  34  		ev := event.New()
  35  		if _, err := ev.Unmarshal(b); chk.E(err) {
  36  			t.Fatal(err)
  37  		}
  38  		exportedIDs[string(ev.ID)] = true
  39  		exportCount++
  40  	}
  41  	// Check for scanner errors
  42  	if err := exportScanner.Err(); err != nil {
  43  		t.Fatalf("Scanner error: %v", err)
  44  	}
  45  
  46  	t.Logf("Found %d events in the export", exportCount)
  47  
  48  	// Verify we exported a reasonable number of events
  49  	if exportCount == 0 {
  50  		t.Fatal("Export returned no events")
  51  	}
  52  }
  53