Files
meta-core/internal/schema/indexer_test.go
T
2026-10-19 20:51:00 +00:00

57 lines
1.4 KiB
Go

package schema
import (
"context"
"path/filepath"
"testing"
"github.com/metazla/meta-core/internal/kv"
)
func TestRebuildDerivesTypesFromTheStore(t *testing.T) {
store, err := kv.Open(filepath.Join(t.TempDir(), "kv.db"), kv.Options{})
if err != nil {
t.Fatal(err)
}
defer store.Close()
if err := store.Update(context.Background(), func(tx *kv.Tx) error {
for k, v := range map[string]string{
"file:A/sizeByte": "100",
"file:B/sizeByte": "200",
"file:A/title/eng": "One",
"file:B/title/fre": "Deux",
"file:A/mixed": "1",
"file:B/mixed": "x",
"cid:bafknotrecord": "A",
} {
if err := tx.Put(k, v); err != nil {
return err
}
}
return nil
}); err != nil {
t.Fatal(err)
}
ix := NewIndexer(store)
if got := ix.Snapshot(); got.Source != "pending" || len(got.Fields) != 0 {
t.Fatalf("before a scan: %+v", got)
}
snap, err := ix.Rebuild(context.Background())
if err != nil {
t.Fatal(err)
}
if f := snap.Fields["sizeByte"]; f == nil || f.Type != PrimInt || f.Breakdown["int"] != 2 {
t.Fatalf("sizeByte = %+v", f)
}
if f := snap.Fields["title"]; f == nil || f.KeyHint != KeyHintLanguageCode {
t.Fatalf("title = %+v (want language-keyed)", f)
}
if f := snap.Fields["mixed"]; f == nil || f.Type != PrimMixed {
t.Fatalf("mixed = %+v", f)
}
if len(snap.Fields) != 3 {
t.Fatalf("fields = %v (non-record keys must not count)", snap.Fields)
}
}