Add SPC provider parsing helpers
This commit is contained in:
90
internal/providers/spc/geojson_test.go
Normal file
90
internal/providers/spc/geojson_test.go
Normal file
@@ -0,0 +1,90 @@
|
||||
package spc
|
||||
|
||||
import (
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
|
||||
func TestDecodeGeoJSONExposesSPCPropertiesAndCompactGeometry(t *testing.T) {
|
||||
raw := readTestFile(t, "day1_cat.geojson")
|
||||
|
||||
got, err := DecodeGeoJSON(raw)
|
||||
if err != nil {
|
||||
t.Fatalf("DecodeGeoJSON() error = %v", err)
|
||||
}
|
||||
if got.Type != "FeatureCollection" {
|
||||
t.Fatalf("Type = %q, want FeatureCollection", got.Type)
|
||||
}
|
||||
if len(got.Features) != 1 {
|
||||
t.Fatalf("Features length = %d, want 1", len(got.Features))
|
||||
}
|
||||
|
||||
feature := got.Features[0]
|
||||
props := feature.Properties
|
||||
if props.ValidISO != "2026-06-11T13:00:00Z" {
|
||||
t.Fatalf("VALID_ISO = %q", props.ValidISO)
|
||||
}
|
||||
if props.ExpireISO != "2026-06-12T12:00:00Z" {
|
||||
t.Fatalf("EXPIRE_ISO = %q", props.ExpireISO)
|
||||
}
|
||||
if props.IssueISO != "2026-06-11T12:34:56Z" {
|
||||
t.Fatalf("ISSUE_ISO = %q", props.IssueISO)
|
||||
}
|
||||
if props.Forecaster != "SMITH" {
|
||||
t.Fatalf("FORECASTER = %q", props.Forecaster)
|
||||
}
|
||||
if props.Label != "SLGT" {
|
||||
t.Fatalf("LABEL = %q", props.Label)
|
||||
}
|
||||
if props.Label2 != "Slight Risk" {
|
||||
t.Fatalf("LABEL2 = %q", props.Label2)
|
||||
}
|
||||
if props.DN == nil || *props.DN != 3 {
|
||||
t.Fatalf("DN = %v, want 3", props.DN)
|
||||
}
|
||||
|
||||
wantGeometry := `{"type":"Polygon","coordinates":[[[-91.0,38.0],[-90.0,38.0],[-90.0,39.0],[-91.0,39.0],[-91.0,38.0]]]}`
|
||||
if string(feature.Geometry) != wantGeometry {
|
||||
t.Fatalf("Geometry = %s, want %s", feature.Geometry, wantGeometry)
|
||||
}
|
||||
if strings.Contains(string(feature.Geometry), "\n") || strings.Contains(string(feature.Geometry), " ") {
|
||||
t.Fatalf("Geometry is not compact: %q", feature.Geometry)
|
||||
}
|
||||
}
|
||||
|
||||
func TestDecodeGeoJSONParsesSeverityRankString(t *testing.T) {
|
||||
raw := readTestFile(t, "day2_torn.geojson")
|
||||
|
||||
got, err := DecodeGeoJSON(raw)
|
||||
if err != nil {
|
||||
t.Fatalf("DecodeGeoJSON() error = %v", err)
|
||||
}
|
||||
props := got.Features[0].Properties
|
||||
if props.DN == nil || *props.DN != 5 {
|
||||
t.Fatalf("DN = %v, want 5", props.DN)
|
||||
}
|
||||
}
|
||||
|
||||
func TestParseISOTimestampTrimsAndReturnsUTC(t *testing.T) {
|
||||
got, err := ParseISOTimestamp(" 2026-06-11T12:34:56Z ")
|
||||
if err != nil {
|
||||
t.Fatalf("ParseISOTimestamp() error = %v", err)
|
||||
}
|
||||
want := time.Date(2026, 6, 11, 12, 34, 56, 0, time.UTC)
|
||||
if !got.Equal(want) {
|
||||
t.Fatalf("ParseISOTimestamp() = %s, want %s", got, want)
|
||||
}
|
||||
}
|
||||
|
||||
func readTestFile(t *testing.T, name string) []byte {
|
||||
t.Helper()
|
||||
path := filepath.Join("testdata", name)
|
||||
raw, err := os.ReadFile(path)
|
||||
if err != nil {
|
||||
t.Fatalf("read %s: %v", path, err)
|
||||
}
|
||||
return raw
|
||||
}
|
||||
Reference in New Issue
Block a user