package artifacts import ( "strings" "testing" ) func TestS3KeyConstruction(t *testing.T) { runID := "20260515T031522Z-a1b2c3d4" sessionPrefix := S3SessionPrefix("dnd", "forsaken", "2026-04-19") if sessionPrefix != "dnd/campaigns/forsaken/sessions/2026-04-19/" { t.Fatalf("sessionPrefix = %q", sessionPrefix) } audioPrefix := S3AudioPrefix(sessionPrefix, "audio/") if audioPrefix != "dnd/campaigns/forsaken/sessions/2026-04-19/audio/" { t.Fatalf("audioPrefix = %q", audioPrefix) } sessionConfigKey := S3SessionConfigKey(`dnd\campaigns\forsaken\sessions\2026-04-19\`) if sessionConfigKey != "dnd/campaigns/forsaken/sessions/2026-04-19/session.yml" { t.Fatalf("session config key = %q", sessionConfigKey) } locksKey := S3SessionLocksKey(`dnd\campaigns\forsaken\sessions\2026-04-19\`) if locksKey != "dnd/campaigns/forsaken/sessions/2026-04-19/locks.yml" { t.Fatalf("locks key = %q", locksKey) } runPrefix := S3RunPrefix(sessionPrefix, runID) wantRunPrefix := "dnd/campaigns/forsaken/sessions/2026-04-19/runs/" + runID + "/" if runPrefix != wantRunPrefix { t.Fatalf("runPrefix = %q, want %q", runPrefix, wantRunPrefix) } runPointer := S3CurrentRunPointerKey(sessionPrefix) if runPointer != "dnd/campaigns/forsaken/sessions/2026-04-19/current/run_id.txt" { t.Fatalf("run pointer key = %q", runPointer) } manifestKey := S3CurrentManifestKey(sessionPrefix) if manifestKey != "dnd/campaigns/forsaken/sessions/2026-04-19/current/manifest.json" { t.Fatalf("manifest key = %q", manifestKey) } promoted := S3PromotedArtifactKey(sessionPrefix, "transcripts/trimmed.json") if promoted != "dnd/campaigns/forsaken/sessions/2026-04-19/transcripts/trimmed.json" { t.Fatalf("promoted key = %q", promoted) } runRelative := S3RunRelativeDestinationKey(runPrefix, `logs\whisperx.stdout.log`) if !strings.HasSuffix(runRelative, "/logs/whisperx.stdout.log") { t.Fatalf("runRelative key = %q, want normalized forward slashes", runRelative) } }