package artifacts import ( "path/filepath" "testing" ) func TestSessionWorkDirForCampaign(t *testing.T) { root := "/tmp/workspace" got := SessionWorkDirForCampaign(root, "forsaken", "2026-04-19") want := filepath.Join(root, "work", "forsaken", "2026-04-19") if got != want { t.Fatalf("SessionWorkDirForCampaign() = %q, want %q", got, want) } } func TestSessionManifestPathForCampaign(t *testing.T) { root := "/tmp/workspace" got := SessionManifestPathForCampaign(root, "forsaken", "2026-04-19") want := filepath.Join(root, "work", "forsaken", "2026-04-19", "manifest.json") if got != want { t.Fatalf("SessionManifestPathForCampaign() = %q, want %q", got, want) } } func TestSessionRunRootAndStageDirForCampaign(t *testing.T) { root := "/tmp/workspace" runID := "20260515T031522Z-a1b2c3d4" runRoot := SessionRunRootForCampaign(root, "forsaken", "2026-04-19", runID) wantRoot := filepath.Join(root, "work", "forsaken", "2026-04-19", "runs", runID) if runRoot != wantRoot { t.Fatalf("SessionRunRootForCampaign() = %q, want %q", runRoot, wantRoot) } stageDir := SessionRunStageDirForCampaign(root, "forsaken", "2026-04-19", runID, "transcribe") wantStage := filepath.Join(root, "work", "forsaken", "2026-04-19", "runs", runID, "transcribe") if stageDir != wantStage { t.Fatalf("SessionRunStageDirForCampaign() = %q, want %q", stageDir, wantStage) } } func TestSessionRunManifestPathForCampaign(t *testing.T) { root := "/tmp/workspace" runID := "20260515T031522Z-a1b2c3d4" got := SessionRunManifestPathForCampaign(root, "forsaken", "2026-04-19", runID) want := filepath.Join(root, "work", "forsaken", "2026-04-19", "runs", runID, "manifest.json") if got != want { t.Fatalf("SessionRunManifestPathForCampaign() = %q, want %q", got, want) } } func TestSessionPreviousPathsForCampaign(t *testing.T) { root := "/tmp/workspace" previousDir := SessionPreviousDirForCampaign(root, "forsaken", "2026-04-19") wantPreviousDir := filepath.Join(root, "work", "forsaken", "2026-04-19", "previous") if previousDir != wantPreviousDir { t.Fatalf("SessionPreviousDirForCampaign() = %q, want %q", previousDir, wantPreviousDir) } manifestPath := SessionPreviousManifestPathForCampaign(root, "forsaken", "2026-04-19") wantManifestPath := filepath.Join(root, "work", "forsaken", "2026-04-19", "previous", "manifest.json") if manifestPath != wantManifestPath { t.Fatalf("SessionPreviousManifestPathForCampaign() = %q, want %q", manifestPath, wantManifestPath) } artifactsDir := SessionPreviousArtifactsDirForCampaign(root, "forsaken", "2026-04-19") wantArtifactsDir := filepath.Join(root, "work", "forsaken", "2026-04-19", "previous", "artifacts") if artifactsDir != wantArtifactsDir { t.Fatalf("SessionPreviousArtifactsDirForCampaign() = %q, want %q", artifactsDir, wantArtifactsDir) } artifactPath := SessionPreviousArtifactPathForCampaign(root, "forsaken", "2026-04-19", "session_recap.md") wantArtifactPath := filepath.Join(root, "work", "forsaken", "2026-04-19", "previous", "artifacts", "session_recap.md") if artifactPath != wantArtifactPath { t.Fatalf("SessionPreviousArtifactPathForCampaign() = %q, want %q", artifactPath, wantArtifactPath) } } func TestSessionPreviousPathsFromSessionPaths(t *testing.T) { paths := buildSessionPaths("/tmp/workspace", "forsaken", "2026-04-19") if got := SessionPreviousDir(paths); got != paths.PreviousDir { t.Fatalf("SessionPreviousDir() = %q, want %q", got, paths.PreviousDir) } if got := SessionPreviousManifestPath(paths); got != paths.PreviousManifestPath { t.Fatalf("SessionPreviousManifestPath() = %q, want %q", got, paths.PreviousManifestPath) } if got := SessionPreviousArtifactsDir(paths); got != paths.PreviousArtifactsDir { t.Fatalf("SessionPreviousArtifactsDir() = %q, want %q", got, paths.PreviousArtifactsDir) } got := SessionPreviousArtifactPath(paths, "quest_log.json") want := filepath.Join(paths.PreviousArtifactsDir, "quest_log.json") if got != want { t.Fatalf("SessionPreviousArtifactPath() = %q, want %q", got, want) } } func TestSessionSpoolAudioDir(t *testing.T) { root := "/var/spool/narratio" got := SessionSpoolAudioDir(root, "forsaken", "2026-04-19", "20260515T031522Z-a1b2c3d4") want := filepath.Join(root, "forsaken", "2026-04-19", "20260515T031522Z-a1b2c3d4", "audio") if got != want { t.Fatalf("SessionSpoolAudioDir() = %q, want %q", got, want) } }