|
|
|
|
@@ -27,7 +27,6 @@ func TestPathsUseRunIDAndWorkspace(t *testing.T) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for _, want := range []string{
|
|
|
|
|
filepath.Join("snapshots", "daily", "2026-05-29", "20260529T100000.000000000Z_daily_today.briefing.json"),
|
|
|
|
|
filepath.Join("snapshots", "daily", "2026-05-29", "20260529T100000.000000000Z_daily_today.modules.json"),
|
|
|
|
|
filepath.Join("snapshots", "daily", "2026-05-29", "20260529T100000.000000000Z_daily_today.metadata.json"),
|
|
|
|
|
filepath.Join("data-packages", "daily", "2026-05-29", "20260529T100000.000000000Z_daily_today.data_package.yaml"),
|
|
|
|
|
@@ -44,7 +43,7 @@ func TestPathsUseRunIDAndWorkspace(t *testing.T) {
|
|
|
|
|
func TestSaveArtifactsAndMetadataRoundTrip(t *testing.T) {
|
|
|
|
|
store := newTestStore(t)
|
|
|
|
|
resolved := resolveDailyAt(t, "2026-05-29T05:00:00-05:00")
|
|
|
|
|
briefingPackage := stateBriefingPackage(resolved)
|
|
|
|
|
briefingMetadata := stateBriefingMetadata(resolved)
|
|
|
|
|
snapshot, err := module.NewSnapshot([]module.Output{{ID: module.Metadata, StanzaName: "metadata", Value: map[string]string{"run_id": resolved.Metadata().RunID}}})
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatalf("NewSnapshot() error = %v", err)
|
|
|
|
|
@@ -53,7 +52,7 @@ func TestSaveArtifactsAndMetadataRoundTrip(t *testing.T) {
|
|
|
|
|
Metadata: promptinput.Metadata{
|
|
|
|
|
RunID: resolved.Metadata().RunID,
|
|
|
|
|
ReportID: resolved.Definition.ID,
|
|
|
|
|
Variant: briefingPackage.Metadata.Variant,
|
|
|
|
|
Variant: briefingMetadata.Variant,
|
|
|
|
|
PromptID: resolved.Definition.PromptID,
|
|
|
|
|
GeneratedAt: resolved.GeneratedAt,
|
|
|
|
|
Timezone: resolved.Timezone,
|
|
|
|
|
@@ -65,10 +64,6 @@ func TestSaveArtifactsAndMetadataRoundTrip(t *testing.T) {
|
|
|
|
|
t.Fatalf("Build() error = %v", err)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
briefingPath, err := store.SaveBriefing(context.Background(), resolved, briefingPackage)
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatalf("SaveBriefing() error = %v", err)
|
|
|
|
|
}
|
|
|
|
|
dataPackagePath, err := store.SaveDataPackage(context.Background(), resolved, dataPackage)
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatalf("SaveDataPackage() error = %v", err)
|
|
|
|
|
@@ -131,8 +126,7 @@ func TestSaveArtifactsAndMetadataRoundTrip(t *testing.T) {
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatalf("Paths() error = %v", err)
|
|
|
|
|
}
|
|
|
|
|
metadata := BuildMetadata(resolved, briefingPackage, ArtifactPaths{
|
|
|
|
|
Briefing: briefingPath,
|
|
|
|
|
metadata := BuildMetadataFromBriefingMetadata(resolved, briefingMetadata, ArtifactPaths{
|
|
|
|
|
ModuleSnapshot: moduleSnapshotPath,
|
|
|
|
|
Metadata: paths.Metadata,
|
|
|
|
|
DataPackage: dataPackagePath,
|
|
|
|
|
@@ -144,18 +138,11 @@ func TestSaveArtifactsAndMetadataRoundTrip(t *testing.T) {
|
|
|
|
|
t.Fatalf("SaveMetadata() error = %v", err)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for _, path := range []string{briefingPath, moduleSnapshotPath, dataPackagePath, preflightPath, notificationPath, renderedReportPath, metadataPath} {
|
|
|
|
|
for _, path := range []string{moduleSnapshotPath, dataPackagePath, preflightPath, notificationPath, renderedReportPath, metadataPath} {
|
|
|
|
|
if _, err := os.Stat(path); err != nil {
|
|
|
|
|
t.Fatalf("expected artifact %q: %v", path, err)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
loadedBriefing, err := store.LoadBriefing(context.Background(), briefingPath)
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatalf("LoadBriefing() error = %v", err)
|
|
|
|
|
}
|
|
|
|
|
if loadedBriefing.Metadata.RunID != resolved.Metadata().RunID {
|
|
|
|
|
t.Fatalf("loaded briefing RunID = %q, want %q", loadedBriefing.Metadata.RunID, resolved.Metadata().RunID)
|
|
|
|
|
}
|
|
|
|
|
loadedSnapshot, err := store.LoadModuleSnapshot(context.Background(), moduleSnapshotPath)
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatalf("LoadModuleSnapshot() error = %v", err)
|
|
|
|
|
@@ -181,7 +168,7 @@ func TestSaveArtifactsAndMetadataRoundTrip(t *testing.T) {
|
|
|
|
|
if decoded.RunID != resolved.Metadata().RunID {
|
|
|
|
|
t.Fatalf("RunID = %q, want %q", decoded.RunID, resolved.Metadata().RunID)
|
|
|
|
|
}
|
|
|
|
|
if decoded.BriefingPath != briefingPath || decoded.ModuleSnapshotPath != moduleSnapshotPath || decoded.DataPackagePath != dataPackagePath || decoded.PreflightPath != preflightPath {
|
|
|
|
|
if decoded.ModuleSnapshotPath != moduleSnapshotPath || decoded.DataPackagePath != dataPackagePath || decoded.PreflightPath != preflightPath {
|
|
|
|
|
t.Fatalf("metadata paths = %#v, want saved artifact paths", decoded)
|
|
|
|
|
}
|
|
|
|
|
if decoded.RenderedReportPath != renderedReportPath {
|
|
|
|
|
@@ -198,17 +185,15 @@ func TestSaveArtifactsAndMetadataRoundTrip(t *testing.T) {
|
|
|
|
|
func TestSaveMetadataUsesExplicitMetadataPath(t *testing.T) {
|
|
|
|
|
store := newTestStore(t)
|
|
|
|
|
resolved := resolveDailyAt(t, "2026-05-29T05:00:00-05:00")
|
|
|
|
|
briefingPackage := stateBriefingPackage(resolved)
|
|
|
|
|
briefingMetadata := stateBriefingMetadata(resolved)
|
|
|
|
|
paths, err := store.Paths(resolved)
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatalf("Paths() error = %v", err)
|
|
|
|
|
}
|
|
|
|
|
otherDir := filepath.Join(t.TempDir(), "other-artifacts")
|
|
|
|
|
otherBriefingPath := filepath.Join(otherDir, resolved.Metadata().RunID+".briefing.json")
|
|
|
|
|
derivedMetadataPath := filepath.Join(otherDir, resolved.Metadata().RunID+".metadata.json")
|
|
|
|
|
|
|
|
|
|
metadata := BuildMetadata(resolved, briefingPackage, ArtifactPaths{
|
|
|
|
|
Briefing: otherBriefingPath,
|
|
|
|
|
metadata := BuildMetadataFromBriefingMetadata(resolved, briefingMetadata, ArtifactPaths{
|
|
|
|
|
ModuleSnapshot: paths.ModuleSnapshot,
|
|
|
|
|
Metadata: paths.Metadata,
|
|
|
|
|
DataPackage: paths.DataPackage,
|
|
|
|
|
@@ -234,26 +219,7 @@ func TestFindPriorSnapshot(t *testing.T) {
|
|
|
|
|
store := newTestStore(t)
|
|
|
|
|
first := resolveDailyAt(t, "2026-05-29T05:00:00-05:00")
|
|
|
|
|
second := resolveDailyAt(t, "2026-05-29T08:00:00-05:00")
|
|
|
|
|
briefingPackage := stateBriefingPackage(first)
|
|
|
|
|
briefingPath, err := store.SaveBriefing(context.Background(), first, briefingPackage)
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatalf("SaveBriefing() error = %v", err)
|
|
|
|
|
}
|
|
|
|
|
paths, err := store.Paths(first)
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatalf("Paths() error = %v", err)
|
|
|
|
|
}
|
|
|
|
|
_, err = store.SaveMetadata(context.Background(), BuildMetadata(first, briefingPackage, ArtifactPaths{
|
|
|
|
|
Briefing: briefingPath,
|
|
|
|
|
ModuleSnapshot: paths.ModuleSnapshot,
|
|
|
|
|
Metadata: paths.Metadata,
|
|
|
|
|
DataPackage: paths.DataPackage,
|
|
|
|
|
Preflight: paths.Preflight,
|
|
|
|
|
RenderedReport: paths.RenderedReport,
|
|
|
|
|
}))
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatalf("SaveMetadata() error = %v", err)
|
|
|
|
|
}
|
|
|
|
|
paths := savePriorMetadata(t, store, first, stateBriefingMetadata(first))
|
|
|
|
|
|
|
|
|
|
prior, err := store.FindPriorSnapshot(context.Background(), second)
|
|
|
|
|
if err != nil {
|
|
|
|
|
@@ -265,9 +231,6 @@ func TestFindPriorSnapshot(t *testing.T) {
|
|
|
|
|
if prior.Metadata.RunID != first.Metadata().RunID {
|
|
|
|
|
t.Fatalf("RunID = %q, want %q", prior.Metadata.RunID, first.Metadata().RunID)
|
|
|
|
|
}
|
|
|
|
|
if prior.BriefingPath != briefingPath {
|
|
|
|
|
t.Fatalf("BriefingPath = %q, want %q", prior.BriefingPath, briefingPath)
|
|
|
|
|
}
|
|
|
|
|
if prior.ModuleSnapshotPath != paths.ModuleSnapshot {
|
|
|
|
|
t.Fatalf("ModuleSnapshotPath = %q, want %q", prior.ModuleSnapshotPath, paths.ModuleSnapshot)
|
|
|
|
|
}
|
|
|
|
|
@@ -277,26 +240,7 @@ func TestFindPriorSnapshotUsesValidDate(t *testing.T) {
|
|
|
|
|
store := newTestStore(t)
|
|
|
|
|
previousDate := resolveDailyAt(t, "2026-05-28T05:00:00-05:00")
|
|
|
|
|
currentDate := resolveDailyAt(t, "2026-05-29T05:00:00-05:00")
|
|
|
|
|
briefingPackage := stateBriefingPackage(previousDate)
|
|
|
|
|
briefingPath, err := store.SaveBriefing(context.Background(), previousDate, briefingPackage)
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatalf("SaveBriefing() error = %v", err)
|
|
|
|
|
}
|
|
|
|
|
paths, err := store.Paths(previousDate)
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatalf("Paths() error = %v", err)
|
|
|
|
|
}
|
|
|
|
|
_, err = store.SaveMetadata(context.Background(), BuildMetadata(previousDate, briefingPackage, ArtifactPaths{
|
|
|
|
|
Briefing: briefingPath,
|
|
|
|
|
ModuleSnapshot: paths.ModuleSnapshot,
|
|
|
|
|
Metadata: paths.Metadata,
|
|
|
|
|
DataPackage: paths.DataPackage,
|
|
|
|
|
Preflight: paths.Preflight,
|
|
|
|
|
RenderedReport: paths.RenderedReport,
|
|
|
|
|
}))
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatalf("SaveMetadata() error = %v", err)
|
|
|
|
|
}
|
|
|
|
|
savePriorMetadata(t, store, previousDate, stateBriefingMetadata(previousDate))
|
|
|
|
|
|
|
|
|
|
prior, err := store.FindPriorSnapshot(context.Background(), currentDate)
|
|
|
|
|
if err != nil {
|
|
|
|
|
@@ -311,26 +255,7 @@ func TestFindPriorSnapshotSupportsThreeDay(t *testing.T) {
|
|
|
|
|
store := newTestStore(t)
|
|
|
|
|
first := resolveThreeDayAt(t, "2026-05-29T05:00:00-05:00")
|
|
|
|
|
second := resolveThreeDayAt(t, "2026-05-29T08:00:00-05:00")
|
|
|
|
|
briefingPackage := stateThreeDayBriefingPackage(first)
|
|
|
|
|
briefingPath, err := store.SaveBriefing(context.Background(), first, briefingPackage)
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatalf("SaveBriefing() error = %v", err)
|
|
|
|
|
}
|
|
|
|
|
paths, err := store.Paths(first)
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatalf("Paths() error = %v", err)
|
|
|
|
|
}
|
|
|
|
|
_, err = store.SaveMetadata(context.Background(), BuildMetadata(first, briefingPackage, ArtifactPaths{
|
|
|
|
|
Briefing: briefingPath,
|
|
|
|
|
ModuleSnapshot: paths.ModuleSnapshot,
|
|
|
|
|
Metadata: paths.Metadata,
|
|
|
|
|
DataPackage: paths.DataPackage,
|
|
|
|
|
Preflight: paths.Preflight,
|
|
|
|
|
RenderedReport: paths.RenderedReport,
|
|
|
|
|
}))
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatalf("SaveMetadata() error = %v", err)
|
|
|
|
|
}
|
|
|
|
|
savePriorMetadata(t, store, first, stateBriefingMetadata(first))
|
|
|
|
|
|
|
|
|
|
prior, err := store.FindPriorSnapshot(context.Background(), second)
|
|
|
|
|
if err != nil {
|
|
|
|
|
@@ -348,26 +273,7 @@ func TestFindPriorSnapshotSupportsWeekend(t *testing.T) {
|
|
|
|
|
store := newTestStore(t)
|
|
|
|
|
first := resolveWeekendAt(t, "2026-05-29T05:00:00-05:00")
|
|
|
|
|
second := resolveWeekendAt(t, "2026-05-29T08:00:00-05:00")
|
|
|
|
|
briefingPackage := stateWeekendBriefingPackage(first)
|
|
|
|
|
briefingPath, err := store.SaveBriefing(context.Background(), first, briefingPackage)
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatalf("SaveBriefing() error = %v", err)
|
|
|
|
|
}
|
|
|
|
|
paths, err := store.Paths(first)
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatalf("Paths() error = %v", err)
|
|
|
|
|
}
|
|
|
|
|
_, err = store.SaveMetadata(context.Background(), BuildMetadata(first, briefingPackage, ArtifactPaths{
|
|
|
|
|
Briefing: briefingPath,
|
|
|
|
|
ModuleSnapshot: paths.ModuleSnapshot,
|
|
|
|
|
Metadata: paths.Metadata,
|
|
|
|
|
DataPackage: paths.DataPackage,
|
|
|
|
|
Preflight: paths.Preflight,
|
|
|
|
|
RenderedReport: paths.RenderedReport,
|
|
|
|
|
}))
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatalf("SaveMetadata() error = %v", err)
|
|
|
|
|
}
|
|
|
|
|
savePriorMetadata(t, store, first, stateBriefingMetadata(first))
|
|
|
|
|
|
|
|
|
|
prior, err := store.FindPriorSnapshot(context.Background(), second)
|
|
|
|
|
if err != nil {
|
|
|
|
|
@@ -385,26 +291,7 @@ func TestFindPriorSnapshotSupportsNarrowedWeekendPeriod(t *testing.T) {
|
|
|
|
|
store := newTestStore(t)
|
|
|
|
|
first := resolveWeekendAt(t, "2026-05-29T19:00:00-05:00")
|
|
|
|
|
second := resolveWeekendAt(t, "2026-05-30T08:00:00-05:00")
|
|
|
|
|
briefingPackage := stateWeekendBriefingPackage(first)
|
|
|
|
|
briefingPath, err := store.SaveBriefing(context.Background(), first, briefingPackage)
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatalf("SaveBriefing() error = %v", err)
|
|
|
|
|
}
|
|
|
|
|
paths, err := store.Paths(first)
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatalf("Paths() error = %v", err)
|
|
|
|
|
}
|
|
|
|
|
_, err = store.SaveMetadata(context.Background(), BuildMetadata(first, briefingPackage, ArtifactPaths{
|
|
|
|
|
Briefing: briefingPath,
|
|
|
|
|
ModuleSnapshot: paths.ModuleSnapshot,
|
|
|
|
|
Metadata: paths.Metadata,
|
|
|
|
|
DataPackage: paths.DataPackage,
|
|
|
|
|
Preflight: paths.Preflight,
|
|
|
|
|
RenderedReport: paths.RenderedReport,
|
|
|
|
|
}))
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatalf("SaveMetadata() error = %v", err)
|
|
|
|
|
}
|
|
|
|
|
savePriorMetadata(t, store, first, stateBriefingMetadata(first))
|
|
|
|
|
|
|
|
|
|
prior, err := store.FindPriorSnapshot(context.Background(), second)
|
|
|
|
|
if err != nil {
|
|
|
|
|
@@ -503,68 +390,46 @@ func resolveWeekendAt(t *testing.T, value string) report.Resolved {
|
|
|
|
|
return resolved
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func stateBriefingPackage(resolved report.Resolved) briefing.Package {
|
|
|
|
|
return briefing.Package{
|
|
|
|
|
Metadata: briefing.Metadata{
|
|
|
|
|
SchemaVersion: briefing.SchemaVersion,
|
|
|
|
|
RunID: resolved.Metadata().RunID,
|
|
|
|
|
ReportID: resolved.Definition.ID,
|
|
|
|
|
Variant: "today",
|
|
|
|
|
PromptID: resolved.Definition.PromptID,
|
|
|
|
|
GeneratedAt: resolved.GeneratedAt,
|
|
|
|
|
Units: "us",
|
|
|
|
|
Timezone: resolved.Timezone,
|
|
|
|
|
Location: &briefing.LocationContext{
|
|
|
|
|
ID: "home",
|
|
|
|
|
Name: "Brentwood",
|
|
|
|
|
Region: "St. Louis Metro",
|
|
|
|
|
Timezone: resolved.Timezone,
|
|
|
|
|
},
|
|
|
|
|
ValidPeriod: resolved.ValidPeriod,
|
|
|
|
|
func stateBriefingMetadata(resolved report.Resolved) briefing.Metadata {
|
|
|
|
|
return briefing.Metadata{
|
|
|
|
|
RunID: resolved.Metadata().RunID,
|
|
|
|
|
ReportID: resolved.Definition.ID,
|
|
|
|
|
Variant: "today",
|
|
|
|
|
PromptID: resolved.Definition.PromptID,
|
|
|
|
|
GeneratedAt: resolved.GeneratedAt,
|
|
|
|
|
Units: "us",
|
|
|
|
|
Timezone: resolved.Timezone,
|
|
|
|
|
Location: &briefing.LocationContext{
|
|
|
|
|
ID: "home",
|
|
|
|
|
Name: "Brentwood",
|
|
|
|
|
Region: "St. Louis Metro",
|
|
|
|
|
Timezone: resolved.Timezone,
|
|
|
|
|
},
|
|
|
|
|
Daily: &briefing.Daily{ForecastSummaryDate: "2026-05-29"},
|
|
|
|
|
ValidPeriod: resolved.ValidPeriod,
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func stateThreeDayBriefingPackage(resolved report.Resolved) briefing.Package {
|
|
|
|
|
return briefing.Package{
|
|
|
|
|
Metadata: briefing.Metadata{
|
|
|
|
|
SchemaVersion: briefing.SchemaVersion,
|
|
|
|
|
RunID: resolved.Metadata().RunID,
|
|
|
|
|
ReportID: resolved.Definition.ID,
|
|
|
|
|
PromptID: resolved.Definition.PromptID,
|
|
|
|
|
GeneratedAt: resolved.GeneratedAt,
|
|
|
|
|
Units: "us",
|
|
|
|
|
Timezone: resolved.Timezone,
|
|
|
|
|
ValidPeriod: resolved.ValidPeriod,
|
|
|
|
|
},
|
|
|
|
|
ThreeDay: &briefing.ThreeDay{
|
|
|
|
|
Days: []briefing.OutlookDay{{Date: "2026-05-29"}},
|
|
|
|
|
},
|
|
|
|
|
func savePriorMetadata(t *testing.T, store *FilesystemStore, resolved report.Resolved, metadata briefing.Metadata) ArtifactPaths {
|
|
|
|
|
t.Helper()
|
|
|
|
|
paths, err := store.Paths(resolved)
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatalf("Paths() error = %v", err)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func stateWeekendBriefingPackage(resolved report.Resolved) briefing.Package {
|
|
|
|
|
return briefing.Package{
|
|
|
|
|
Metadata: briefing.Metadata{
|
|
|
|
|
SchemaVersion: briefing.SchemaVersion,
|
|
|
|
|
RunID: resolved.Metadata().RunID,
|
|
|
|
|
ReportID: resolved.Definition.ID,
|
|
|
|
|
PromptID: resolved.Definition.PromptID,
|
|
|
|
|
GeneratedAt: resolved.GeneratedAt,
|
|
|
|
|
Units: "us",
|
|
|
|
|
Timezone: resolved.Timezone,
|
|
|
|
|
ValidPeriod: resolved.ValidPeriod,
|
|
|
|
|
},
|
|
|
|
|
Weekend: &briefing.Weekend{
|
|
|
|
|
Days: []briefing.OutlookDay{{Date: "2026-05-30"}},
|
|
|
|
|
},
|
|
|
|
|
_, err = store.SaveMetadata(context.Background(), BuildMetadataFromBriefingMetadata(resolved, metadata, ArtifactPaths{
|
|
|
|
|
ModuleSnapshot: paths.ModuleSnapshot,
|
|
|
|
|
Metadata: paths.Metadata,
|
|
|
|
|
DataPackage: paths.DataPackage,
|
|
|
|
|
Preflight: paths.Preflight,
|
|
|
|
|
RenderedReport: paths.RenderedReport,
|
|
|
|
|
}))
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatalf("SaveMetadata() error = %v", err)
|
|
|
|
|
}
|
|
|
|
|
return paths
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func pathsString(paths ArtifactPaths) string {
|
|
|
|
|
return strings.Join([]string{
|
|
|
|
|
paths.Briefing,
|
|
|
|
|
paths.Metadata,
|
|
|
|
|
paths.ModuleSnapshot,
|
|
|
|
|
paths.DataPackage,
|
|
|
|
|
|