package services import ( "testing" "github.com/stretchr/testify/assert" ) func TestGetClimateRegionIDByState(t *testing.T) { tests := []struct { name string state string expected uint }{ {"Massachusetts → Cold (5)", "MA", 5}, {"Florida → Hot-Humid (1)", "FL", 1}, {"Arizona → Hot-Dry (2)", "AZ", 2}, {"Alaska → Arctic (8)", "AK", 8}, {"Minnesota → Very Cold (6)", "MN", 6}, {"Tennessee → Mixed-Humid (3)", "TN", 3}, {"Missouri → Mixed (4)", "MO", 4}, {"Unknown state → 0", "XX", 0}, {"Empty string → 0", "", 0}, {"Lowercase input", "ma", 5}, {"Whitespace trimmed", " TX ", 2}, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { result := GetClimateRegionIDByState(tt.state) assert.Equal(t, tt.expected, result) }) } } func TestZipToState(t *testing.T) { tests := []struct { name string zip string expected string }{ {"Boston MA", "02101", "MA"}, {"Miami FL", "33101", "FL"}, {"Phoenix AZ", "85001", "AZ"}, {"Anchorage AK", "99501", "AK"}, {"New York NY", "10001", "NY"}, {"Chicago IL", "60601", "IL"}, {"Houston TX", "77001", "TX"}, {"Denver CO", "80201", "CO"}, {"DC", "20001", "DC"}, {"Too short", "12", ""}, {"Empty", "", ""}, {"Non-numeric", "abcde", ""}, {"Unrecognized prefix", "00100", ""}, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { result := ZipToState(tt.zip) assert.Equal(t, tt.expected, result) }) } } func TestStateToClimateRegion_AllStatesPresent(t *testing.T) { // All 50 states + DC should be in the map allStates := []string{ "AL", "AK", "AZ", "AR", "CA", "CO", "CT", "DE", "FL", "GA", "HI", "ID", "IL", "IN", "IA", "KS", "KY", "LA", "ME", "MD", "MA", "MI", "MN", "MS", "MO", "MT", "NE", "NV", "NH", "NJ", "NM", "NY", "NC", "ND", "OH", "OK", "OR", "PA", "RI", "SC", "SD", "TN", "TX", "UT", "VT", "VA", "WA", "WV", "WI", "WY", "DC", } for _, state := range allStates { t.Run(state, func(t *testing.T) { regionID := GetClimateRegionIDByState(state) assert.Greater(t, regionID, uint(0), "State %s should map to a region", state) assert.LessOrEqual(t, regionID, uint(8), "State %s region should be 1-8, got %d", state, regionID) }) } }