diff --git a/internal/reporttemplate/reporttemplate_test.go b/internal/reporttemplate/reporttemplate_test.go index 8baa11b..121da19 100644 --- a/internal/reporttemplate/reporttemplate_test.go +++ b/internal/reporttemplate/reporttemplate_test.go @@ -730,6 +730,17 @@ func TestRenderHourlyOmitsConditionalSectionsForClearWeather(t *testing.T) { t.Fatalf("clear render includes %q:\n%s", unwanted, text) } } + if strings.Contains(text, "\n\n\n") { + t.Fatalf("clear render includes excess blank lines:\n%s", text) + } + for _, want := range []string{ + "Currently, it is 72°F and cloudy.\n\n## Hourly Forecast", + "- **9:00 AM:** 71°F and mostly cloudy.\n\n## Forecast Discussion", + } { + if !strings.Contains(text, want) { + t.Fatalf("clear render missing spacing %q:\n%s", want, text) + } + } } func TestRenderHourlyUsesSharedOpenEndedPrecipitationTiming(t *testing.T) { diff --git a/internal/reporttemplate/templates/hourly.md.tmpl b/internal/reporttemplate/templates/hourly.md.tmpl index a083edc..c5ed0ad 100644 --- a/internal/reporttemplate/templates/hourly.md.tmpl +++ b/internal/reporttemplate/templates/hourly.md.tmpl @@ -5,26 +5,23 @@ {{ .GeneratedText.Summary }} ## Current Conditions -{{ with .Modules.CurrentConditions }} -{{ with .TemperatureF }}Currently, it is {{ . }}°F{{ with $.Modules.CurrentConditions.ConditionTextLower }} and {{ . }}{{ end }}.{{ else }}{{ with .ConditionText }}Currently, it is {{ . }}.{{ else }}Current conditions are unavailable.{{ end }}{{ end }}{{ with .ApparentTemperatureF }} It feels like {{ . }}°F{{ with $.Modules.CurrentConditions.RelativeHumidityPercent }}, with a relative humidity of {{ . }}%{{ end }}{{ with $.Modules.CurrentConditions.WindDirectionText }} and winds from the {{ . }}{{ with $.Modules.CurrentConditions.WindSpeedMph }} at {{ . }} mph{{ end }}{{ end }}.{{ else }}{{ with .RelativeHumidityPercent }} Relative humidity is {{ . }}%.{{ end }}{{ with .WindDirectionText }} Winds are from the {{ . }}{{ with $.Modules.CurrentConditions.WindSpeedMph }} at {{ . }} mph{{ end }}.{{ end }}{{ end }} -{{ else }} -Current conditions are unavailable. -{{ end }} -{{ with .Modules.AlertDigest }}{{ with .Relevant }} -## Active Alerts -{{ range . }} +{{ with .Modules.CurrentConditions }}{{ with .TemperatureF }}Currently, it is {{ . }}°F{{ with $.Modules.CurrentConditions.ConditionTextLower }} and {{ . }}{{ end }}.{{ else }}{{ with .ConditionText }}Currently, it is {{ . }}.{{ else }}Current conditions are unavailable.{{ end }}{{ end }}{{ with .ApparentTemperatureF }} It feels like {{ . }}°F{{ with $.Modules.CurrentConditions.RelativeHumidityPercent }}, with a relative humidity of {{ . }}%{{ end }}{{ with $.Modules.CurrentConditions.WindDirectionText }} and winds from the {{ . }}{{ with $.Modules.CurrentConditions.WindSpeedMph }} at {{ . }} mph{{ end }}{{ end }}.{{ else }}{{ with .RelativeHumidityPercent }} Relative humidity is {{ . }}%.{{ end }}{{ with .WindDirectionText }} Winds are from the {{ . }}{{ with $.Modules.CurrentConditions.WindSpeedMph }} at {{ . }} mph{{ end }}.{{ end }}{{ end }}{{ else }}Current conditions are unavailable.{{ end }} + +{{ if and .Modules.AlertDigest .Modules.AlertDigest.Relevant }}## Active Alerts +{{ range .Modules.AlertDigest.Relevant -}} - **{{ if .Event }}{{ .Event }}{{ else }}{{ .Headline }}{{ end }}**{{ with .Headline }}: {{ . }}{{ end }} {{ end }} -{{ end }}{{ end }} + +{{ end -}} ## Hourly Forecast {{ with .Modules.HourlyForecast }}{{ range .Periods -}} - **{{ if .HourLabel }}{{ .HourLabel }}{{ else }}{{ .Name }}{{ end }}:**{{ with .TemperatureF }} {{ . }}°F{{ end }}{{ with .TextDescriptionLower }} and {{ . }}{{ else }}{{ with .TextDescription }} and {{ . }}{{ end }}{{ end }}.{{ if .MentionPrecipitation }}{{ with .ProbabilityOfPrecipitationPercent }} Probability of precipitation is {{ . }}%.{{ end }}{{ end }} {{ else }}- No hourly forecast rows are available. {{ end }}{{ else }}- No hourly forecast rows are available. -{{ end }} - -{{ template "precipitation_timing" . }} +{{ end -}} +{{ if and .Modules.PrecipTiming .Modules.PrecipTiming.PrecipitationWindows }}{{ template "precipitation_timing" . }}{{ else }} +{{ end -}} ## Forecast Discussion {{ .GeneratedText.ForecastDiscussion }}