Files
narratio/internal/artifacts/catalog_test.go

189 lines
6.1 KiB
Go

package artifacts
import "testing"
func TestArtifactCatalogRegisterBuiltInsAndLookup(t *testing.T) {
catalog := NewArtifactCatalog()
if err := catalog.RegisterBuiltIns(); err != nil {
t.Fatalf("RegisterBuiltIns() error = %v", err)
}
entry, ok := catalog.Lookup(ArtifactTranscriptFinal)
if !ok {
t.Fatalf("Lookup(%q) ok = false, want true", ArtifactTranscriptFinal)
}
if !entry.Planned {
t.Fatalf("entry.Planned = false, want true")
}
if entry.Executable {
t.Fatalf("entry.Executable = true, want false")
}
if entry.CanonicalRelPath != "transcripts/final.json" {
t.Fatalf("entry.CanonicalRelPath = %q, want transcripts/final.json", entry.CanonicalRelPath)
}
}
func TestArtifactCatalogRegisterConfiguredArtifactsDefaultsToEnabled(t *testing.T) {
catalog := NewArtifactCatalog()
if err := catalog.RegisterConfiguredArtifacts(map[string]ConfiguredArtifactDefinition{
"player_handout": {Enabled: false, OutputPath: "artifacts/player_handout.md"},
"session_recap": {Enabled: true, OutputPath: "artifacts/session_recap.md"},
}, nil); err != nil {
t.Fatalf("RegisterConfiguredArtifacts() error = %v", err)
}
recapID, ok := catalog.SourceIDForConfiguredKey("session_recap")
if !ok {
t.Fatal("SourceIDForConfiguredKey(session_recap) ok = false, want true")
}
recap, ok := catalog.Lookup(recapID)
if !ok {
t.Fatalf("Lookup(%q) ok = false, want true", recapID)
}
if !recap.Executable {
t.Fatalf("recap.Executable = false, want true")
}
handoutID, ok := catalog.SourceIDForConfiguredKey("player_handout")
if !ok {
t.Fatal("SourceIDForConfiguredKey(player_handout) ok = false, want true")
}
handout, ok := catalog.Lookup(handoutID)
if !ok {
t.Fatalf("Lookup(%q) ok = false, want true", handoutID)
}
if handout.Executable {
t.Fatalf("handout.Executable = true, want false")
}
}
func TestArtifactCatalogRegisterConfiguredArtifactsSelectedSetOverridesEnabled(t *testing.T) {
catalog := NewArtifactCatalog()
if err := catalog.RegisterConfiguredArtifacts(
map[string]ConfiguredArtifactDefinition{
"session_recap": {Enabled: true, OutputPath: "artifacts/session_recap.md"},
"player_handout": {Enabled: false, OutputPath: "artifacts/player_handout.md"},
},
[]string{"player_handout"},
); err != nil {
t.Fatalf("RegisterConfiguredArtifacts() error = %v", err)
}
entries := catalog.ListConfigured()
if len(entries) != 2 {
t.Fatalf("ListConfigured() len = %d, want 2", len(entries))
}
if entries[0].ConfiguredKey != "player_handout" || entries[0].Executable != true {
t.Fatalf("entries[0] = %+v, want player_handout executable", entries[0])
}
if entries[1].ConfiguredKey != "session_recap" || entries[1].Executable != false {
t.Fatalf("entries[1] = %+v, want session_recap disabled by selection", entries[1])
}
}
func TestArtifactCatalogRejectsSelectedUnknownArtifact(t *testing.T) {
catalog := NewArtifactCatalog()
err := catalog.RegisterConfiguredArtifacts(
map[string]ConfiguredArtifactDefinition{
"session_recap": {Enabled: true, OutputPath: "artifacts/session_recap.md"},
},
[]string{"unknown"},
)
if err == nil {
t.Fatal("RegisterConfiguredArtifacts() error = nil, want non-nil")
}
}
func TestArtifactCatalogRejectsConfiguredSourceConflictAcrossRegistrations(t *testing.T) {
catalog := NewArtifactCatalog()
if err := catalog.RegisterConfiguredArtifacts(
map[string]ConfiguredArtifactDefinition{
"session_recap": {Enabled: true, OutputPath: "artifacts/session_recap.md"},
},
nil,
); err != nil {
t.Fatalf("RegisterConfiguredArtifacts() first call error = %v", err)
}
err := catalog.RegisterConfiguredArtifacts(
map[string]ConfiguredArtifactDefinition{
"session_recap": {Enabled: true, OutputPath: "artifacts/session_recap.md"},
},
nil,
)
if err == nil {
t.Fatal("RegisterConfiguredArtifacts() error = nil, want non-nil")
}
}
func TestArtifactCatalogMarkAvailableGenerated(t *testing.T) {
catalog := NewArtifactCatalog()
if err := catalog.RegisterConfiguredArtifacts(
map[string]ConfiguredArtifactDefinition{
"session_recap": {Enabled: true, OutputPath: "artifacts/session_recap.md"},
},
nil,
); err != nil {
t.Fatalf("RegisterConfiguredArtifacts() error = %v", err)
}
sourceID, _ := catalog.SourceIDForConfiguredKey("session_recap")
if err := catalog.MarkAvailableGenerated(sourceID, "/tmp/session_recap.md"); err != nil {
t.Fatalf("MarkAvailableGenerated() error = %v", err)
}
entry, _ := catalog.Lookup(sourceID)
if !entry.Available {
t.Fatalf("entry.Available = false, want true")
}
if entry.Provenance != ArtifactProvenanceGeneratedCurrentAnalyzeRun {
t.Fatalf("entry.Provenance = %q, want %q", entry.Provenance, ArtifactProvenanceGeneratedCurrentAnalyzeRun)
}
}
func TestArtifactCatalogMarkAvailableFromDisk(t *testing.T) {
catalog := NewArtifactCatalog()
if err := catalog.RegisterConfiguredArtifacts(
map[string]ConfiguredArtifactDefinition{
"session_recap": {Enabled: false, OutputPath: "artifacts/session_recap.md"},
},
nil,
); err != nil {
t.Fatalf("RegisterConfiguredArtifacts() error = %v", err)
}
sourceID, _ := catalog.SourceIDForConfiguredKey("session_recap")
if err := catalog.MarkAvailableFromDisk(sourceID, "/tmp/session_recap.md"); err != nil {
t.Fatalf("MarkAvailableFromDisk() error = %v", err)
}
entry, _ := catalog.Lookup(sourceID)
if !entry.Available {
t.Fatalf("entry.Available = false, want true")
}
if entry.Provenance != ArtifactProvenanceDisabledFromDisk {
t.Fatalf("entry.Provenance = %q, want %q", entry.Provenance, ArtifactProvenanceDisabledFromDisk)
}
}
func TestArtifactCatalogLookupPlannedButUnavailable(t *testing.T) {
catalog := NewArtifactCatalog()
if err := catalog.RegisterConfiguredArtifacts(
map[string]ConfiguredArtifactDefinition{
"session_recap": {Enabled: true, OutputPath: "artifacts/session_recap.md"},
},
nil,
); err != nil {
t.Fatalf("RegisterConfiguredArtifacts() error = %v", err)
}
sourceID, _ := catalog.SourceIDForConfiguredKey("session_recap")
entry, ok := catalog.Lookup(sourceID)
if !ok {
t.Fatalf("Lookup(%q) ok = false, want true", sourceID)
}
if !entry.Planned {
t.Fatalf("entry.Planned = false, want true")
}
if entry.Available {
t.Fatalf("entry.Available = true, want false")
}
}