package plugin import ( "io/fs" "testing" "git.dev.alexdunmow.com/block/core/blocks" ) type recordingBlockRegistry struct { registeredKey string registeredSource string overrideSource string schemaPrefix string } func (r *recordingBlockRegistry) Register(meta blocks.BlockMeta, _ blocks.BlockFunc) { r.registeredKey = meta.Key r.registeredSource = meta.Source } func (r *recordingBlockRegistry) RegisterTemplateOverride(_, _ string, _ blocks.BlockFunc) {} func (r *recordingBlockRegistry) RegisterTemplateOverrideWithSource(_, _, source string, _ blocks.BlockFunc) { r.overrideSource = source } func (r *recordingBlockRegistry) LoadSchemasFromFS(fsys fs.FS) error { return r.LoadSchemasFromFSWithPrefix(fsys, "") } func (r *recordingBlockRegistry) LoadSchemasFromFSWithPrefix(_ fs.FS, prefix string) error { r.schemaPrefix = prefix return nil } func TestPluginBlockRegistryPrefixesOnlyUnqualifiedKeys(t *testing.T) { inner := &recordingBlockRegistry{} registry := NewPluginBlockRegistry(inner, "course") registry.Register(blocks.BlockMeta{Key: "lesson"}, nil) if inner.registeredKey != "course:lesson" { t.Fatalf("Register() key = %q, want course:lesson", inner.registeredKey) } if inner.registeredSource != "course" { t.Fatalf("Register() source = %q, want course", inner.registeredSource) } registry.Register(blocks.BlockMeta{Key: "course:lesson"}, nil) if inner.registeredKey != "course:lesson" { t.Fatalf("Register() double-prefixed qualified key: %q", inner.registeredKey) } } func TestPluginBlockRegistryTracksOverrideAndSchemaSource(t *testing.T) { inner := &recordingBlockRegistry{} registry := NewPluginBlockRegistry(inner, "course") registry.RegisterTemplateOverride("shared-theme", "lesson", nil) if inner.overrideSource != "course" { t.Fatalf("override source = %q, want course", inner.overrideSource) } if err := registry.LoadSchemasFromFS(nil); err != nil { t.Fatalf("LoadSchemasFromFS() error = %v", err) } if inner.schemaPrefix != "course" { t.Fatalf("schema prefix = %q, want course", inner.schemaPrefix) } }