weather/forecast_test.go
2026-01-28 12:24:50 -05:00

81 lines
1.9 KiB
Go

package main
import (
"strings"
"testing"
)
func TestIconForForecast(t *testing.T) {
icon := iconForForecast("Thunderstorms", true)
if icon != "\ue31d" {
t.Fatalf("expected thunderstorm icon, got %q", icon)
}
icon = iconForForecast("Partly Cloudy", false)
if icon != "\ue379" {
t.Fatalf("expected partly cloudy night icon, got %q", icon)
}
icon = iconForForecast("Mostly Sunny", true)
if icon != "\ue30c" {
t.Fatalf("expected mostly sunny icon, got %q", icon)
}
icon = iconForForecast("Overcast", true)
if icon != "\ue312" {
t.Fatalf("expected cloudy icon, got %q", icon)
}
icon = iconForForecast("Rain", true)
if icon != "\ue318" {
t.Fatalf("expected rain icon, got %q", icon)
}
icon = iconForForecast("Snow", true)
if icon != "\ue31a" {
t.Fatalf("expected snow icon, got %q", icon)
}
}
func TestFormatOutputPopAlways(t *testing.T) {
pop := 20
loc := Location{City: "Testville", State: "TS"}
period := ForecastPeriod{
Temp: 70,
Unit: "F",
Summary: "Clear",
Pop: &pop,
}
out := FormatOutput(loc, period, false, false)
if !strings.Contains(out, "20%") {
t.Fatalf("expected pop to be shown above threshold, got %q", out)
}
if strings.Contains(out, "\ue371") || strings.Contains(out, "\uf2dc") {
t.Fatalf("expected no pop icon in plain mode, got %q", out)
}
}
func TestFormatOutputPopIcon(t *testing.T) {
pop := 60
loc := Location{City: "Testville", State: "TS"}
period := ForecastPeriod{
Temp: 30,
Unit: "F",
Summary: "Snow",
Pop: &pop,
IsDaytime: true,
}
out := FormatOutput(loc, period, false, true)
if !strings.Contains(out, "\uf2dc 60%") {
t.Fatalf("expected snow pop icon before pop, got %q", out)
}
if !strings.Contains(out, "\ue31a 30°F") {
t.Fatalf("expected precip icon before temperature, got %q", out)
}
if !strings.Contains(out, "\uf2dc 60% in") {
t.Fatalf("expected pop to precede location, got %q", out)
}
}