57 lines
1.4 KiB
Go
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)
|
|
}
|
|
}
|