Curate current and hourly prompt exports

This commit is contained in:
2026-06-15 20:32:12 +00:00
parent e5af7477af
commit 1bfd865333
6 changed files with 278 additions and 0 deletions

View File

@@ -162,6 +162,11 @@ func TestGenerateReportWritesReportAndPreflight(t *testing.T) {
if !strings.Contains(string(snapshotData), module.SnapshotSchemaVersion) || !strings.Contains(string(snapshotData), `"metadata"`) || !strings.Contains(string(snapshotData), `"derived_daily_summary"`) {
t.Fatalf("module snapshot missing expected stanzas:\n%s", string(snapshotData))
}
for _, want := range []string{`"condition_text_lower"`, `"hour_label"`, `"text_description_lower"`, `"mention_precipitation"`} {
if !strings.Contains(string(snapshotData), want) {
t.Fatalf("module snapshot missing rich helper field %q:\n%s", want, string(snapshotData))
}
}
data, err := os.ReadFile(result.DataPackagePath)
if err != nil {
t.Fatalf("read data package: %v", err)
@@ -222,6 +227,11 @@ func TestGenerateReportWritesReportAndPreflight(t *testing.T) {
if !ok || current["condition_text"] != "Clear" {
t.Fatalf("data package current conditions = %#v, want current conditions", savedDataPackage.Briefing.Values["current_conditions"])
}
for _, omitted := range []string{"condition_text_lower", "wind_direction_text"} {
if _, ok := current[omitted]; ok {
t.Fatalf("data package current conditions contains helper field %q: %#v", omitted, current)
}
}
narrative, ok := savedDataPackage.Briefing.Values["narrative_forecast"].(map[string]any)
if !ok || narrative["product"] != "narrative" || !strings.Contains(string(data), "Morning storms, then partly sunny.") {
t.Fatalf("data package narrative forecast = %#v, want narrative forecast", savedDataPackage.Briefing.Values["narrative_forecast"])
@@ -230,6 +240,19 @@ func TestGenerateReportWritesReportAndPreflight(t *testing.T) {
if !ok || hourly["product"] != "hourly" || !strings.Contains(string(data), "Showers and thunderstorms") {
t.Fatalf("data package hourly forecast = %#v, want hourly forecast", savedDataPackage.Briefing.Values["hourly_forecast"])
}
periods, ok := hourly["periods"].([]any)
if !ok || len(periods) == 0 {
t.Fatalf("data package hourly periods = %#v, want prompt period rows", hourly["periods"])
}
firstPeriod, ok := periods[0].(map[string]any)
if !ok {
t.Fatalf("data package hourly first period = %#v, want mapping", periods[0])
}
for _, omitted := range []string{"hour_label", "text_description_lower", "mention_precipitation"} {
if _, ok := firstPeriod[omitted]; ok {
t.Fatalf("data package hourly period contains helper field %q: %#v", omitted, firstPeriod)
}
}
story, ok := savedDataPackage.Briefing.Values["weather_story"].(map[string]any)
if !ok || story["title"] != "Several Chances for Rain Through Monday" {
t.Fatalf("data package weather story = %#v, want weather story title", savedDataPackage.Briefing.Values["weather_story"])