package spells import ( "reflect" "strings" "testing" "gitea.maximumdirect.net/eric/notarius/internal/framework/pipeline" ) func TestNewReturnsExtractorWithMetadata(t *testing.T) { extractor := New() if extractor == nil { t.Fatal("New() = nil, want extractor") } if extractor.Key() != Key { t.Fatalf("extractor.Key() = %q, want %q", extractor.Key(), Key) } if extractor.ArtifactType() != ArtifactType { t.Fatalf("extractor.ArtifactType() = %q, want %q", extractor.ArtifactType(), ArtifactType) } if extractor.SchemaVersion() != SchemaVersion { t.Fatalf("extractor.SchemaVersion() = %q, want %q", extractor.SchemaVersion(), SchemaVersion) } } func TestModuleSpec(t *testing.T) { got := ModuleSpec() want := pipeline.ModuleSpec{ Key: Key, Stage: pipeline.StageExtract, Requires: []string{ "chunks", "source.transcript", }, Provides: []string{ "dnd.spell_casts", }, } if !reflect.DeepEqual(got, want) { t.Fatalf("ModuleSpec() = %#v, want %#v", got, want) } got.Requires[0] = "changed" got.Provides[0] = "changed" again := ModuleSpec() if !reflect.DeepEqual(again, want) { t.Fatalf("ModuleSpec() after caller mutation = %#v, want %#v", again, want) } } func TestRegisterMakesExtractorBuildable(t *testing.T) { registry := pipeline.NewExtractorRegistry() if err := Register(registry); err != nil { t.Fatalf("Register() error = %v, want nil", err) } extractor, err := registry.Build(Key) if err != nil { t.Fatalf("Build() error = %v, want nil", err) } if extractor.Key() != Key { t.Fatalf("extractor.Key() = %q, want %q", extractor.Key(), Key) } } func TestRegisterStoresModuleSpec(t *testing.T) { registry := pipeline.NewExtractorRegistry() if err := Register(registry); err != nil { t.Fatalf("Register() error = %v, want nil", err) } got, ok := registry.Spec(Key) if !ok { t.Fatal("Spec() ok = false, want true") } want := ModuleSpec() if !reflect.DeepEqual(got, want) { t.Fatalf("Spec() = %#v, want %#v", got, want) } } func TestRegisterNilRegistryReturnsError(t *testing.T) { err := Register(nil) if err == nil { t.Fatal("Register(nil) error = nil, want error") } if !strings.Contains(err.Error(), "extractor registry") { t.Fatalf("Register(nil) error = %q, want registry context", err.Error()) } }