2026-06-14 23:25:55 +00:00
package generatedtext
import (
"strings"
"testing"
)
func TestValidateTomorrowNormalizesJSON ( t * testing . T ) {
value , normalized , err := ValidateTomorrow ( [ ] byte ( ` {
"summary" : " Storms become more likely tomorrow. " ,
"forecast_discussion" : [
" A front will keep showers in the forecast. " ,
"" ,
" Temperatures stay seasonable by afternoon. "
] ,
2026-08-01 01:25:57 +00:00
"precipitation_timing" : " Rain is most likely before sunrise. "
2026-06-14 23:25:55 +00:00
} ` ) )
if err != nil {
t . Fatalf ( "ValidateTomorrow() error = %v" , err )
}
if value . Summary != "Storms become more likely tomorrow." {
t . Fatalf ( "Summary = %q, want trimmed summary" , value . Summary )
}
if strings . Join ( value . ForecastDiscussion , "|" ) != "A front will keep showers in the forecast.|Temperatures stay seasonable by afternoon." {
t . Fatalf ( "ForecastDiscussion = %#v, want trimmed non-empty paragraphs" , value . ForecastDiscussion )
}
if value . PrecipitationTiming != "Rain is most likely before sunrise." {
t . Fatalf ( "PrecipitationTiming = %q, want trimmed precipitation timing" , value . PrecipitationTiming )
}
2026-08-01 01:25:57 +00:00
want := ` { "summary":"Storms become more likely tomorrow.","forecast_discussion":["A front will keep showers in the forecast.","Temperatures stay seasonable by afternoon."],"precipitation_timing":"Rain is most likely before sunrise."} `
2026-06-14 23:25:55 +00:00
if string ( normalized ) != want {
t . Fatalf ( "normalized = %s, want %s" , normalized , want )
}
}
2026-08-01 01:25:57 +00:00
func TestValidateTomorrowPreservesRequiredEmptyPrecipitationTiming ( t * testing . T ) {
2026-06-14 23:25:55 +00:00
_ , normalized , err := ValidateTomorrow ( [ ] byte ( ` {
"summary" : "Storms become more likely tomorrow." ,
"forecast_discussion" : [ "A front will keep showers in the forecast." ] ,
2026-08-01 01:25:57 +00:00
"precipitation_timing" : " "
2026-06-14 23:25:55 +00:00
} ` ) )
if err != nil {
t . Fatalf ( "ValidateTomorrow() error = %v" , err )
}
2026-08-01 01:25:57 +00:00
want := ` { "summary":"Storms become more likely tomorrow.","forecast_discussion":["A front will keep showers in the forecast."],"precipitation_timing":""} `
2026-06-14 23:25:55 +00:00
if string ( normalized ) != want {
t . Fatalf ( "normalized = %s, want %s" , normalized , want )
}
}
func TestValidateTomorrowRejectsInvalidInput ( t * testing . T ) {
tests := [ ] struct {
name string
in string
want string
} {
{
name : "malformed" ,
in : ` { ` ,
want : "decode tomorrow generated text" ,
} ,
{
name : "unknown field" ,
in : ` { "summary":"Storms become more likely tomorrow.","forecast_discussion":["A front will keep showers in the forecast."],"extra":"value"} ` ,
want : ` unknown field "extra" ` ,
} ,
{
name : "missing summary" ,
in : ` { "forecast_discussion":["A front will keep showers in the forecast."]} ` ,
want : "summary is required" ,
} ,
{
name : "blank summary" ,
in : ` { "summary":" ","forecast_discussion":["A front will keep showers in the forecast."]} ` ,
want : "summary is required" ,
} ,
{
name : "missing forecast discussion" ,
in : ` { "summary":"Storms become more likely tomorrow."} ` ,
want : "forecast discussion is required" ,
} ,
{
name : "blank forecast discussion" ,
in : ` { "summary":"Storms become more likely tomorrow.","forecast_discussion":[" ",""]} ` ,
want : "forecast discussion is required" ,
} ,
{
name : "forecast discussion wrong type" ,
in : ` { "summary":"Storms become more likely tomorrow.","forecast_discussion":"A front will keep showers in the forecast."} ` ,
want : "cannot unmarshal string" ,
} ,
{
name : "multiple values" ,
in : ` { "summary":"Storms become more likely tomorrow.","forecast_discussion":["A front will keep showers in the forecast."]} { } ` ,
want : "multiple JSON values" ,
} ,
}
for _ , test := range tests {
t . Run ( test . name , func ( t * testing . T ) {
_ , _ , err := ValidateTomorrow ( [ ] byte ( test . in ) )
if err == nil {
t . Fatal ( "ValidateTomorrow() error = nil, want error" )
}
if ! strings . Contains ( err . Error ( ) , test . want ) {
t . Fatalf ( "ValidateTomorrow() error = %v, want %q" , err , test . want )
}
} )
}
}