From 48e78e9be1cb39473a8220dd0d293c9e65ffb07d Mon Sep 17 00:00:00 2001 From: Jeffrey Morgan Date: Thu, 11 Dec 2025 14:47:55 -0800 Subject: [PATCH] template: add yesterdayDate helper function (#13431) --- template/template.go | 3 ++ template/template_test.go | 67 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 70 insertions(+) diff --git a/template/template.go b/template/template.go index c90190d7a..39b6ad7b0 100644 --- a/template/template.go +++ b/template/template.go @@ -127,6 +127,9 @@ var funcs = template.FuncMap{ // Default format is YYYY-MM-DD return time.Now().Format("2006-01-02") }, + "yesterdayDate": func(args ...string) string { + return time.Now().AddDate(0, 0, -1).Format("2006-01-02") + }, "toTypeScriptType": func(v any) string { if param, ok := v.(api.ToolProperty); ok { return param.ToTypeScriptType() diff --git a/template/template_test.go b/template/template_test.go index 74388d6ef..fbea0ed09 100644 --- a/template/template_test.go +++ b/template/template_test.go @@ -10,6 +10,7 @@ import ( "slices" "strings" "testing" + "time" "github.com/google/go-cmp/cmp" @@ -451,6 +452,72 @@ func TestExecuteWithSuffix(t *testing.T) { } } +func TestDateFunctions(t *testing.T) { + t.Run("currentDate", func(t *testing.T) { + tmpl, err := Parse("{{- range .Messages }}{{ .Content }}{{ end }} Today is {{ currentDate }}") + if err != nil { + t.Fatal(err) + } + + var b bytes.Buffer + if err := tmpl.Execute(&b, Values{Messages: []api.Message{{Role: "user", Content: "Hello"}}}); err != nil { + t.Fatal(err) + } + + expected := "Hello Today is " + time.Now().Format("2006-01-02") + if b.String() != expected { + t.Errorf("got %q, want %q", b.String(), expected) + } + }) + + t.Run("yesterdayDate", func(t *testing.T) { + tmpl, err := Parse("{{- range .Messages }}{{ .Content }}{{ end }} Yesterday was {{ yesterdayDate }}") + if err != nil { + t.Fatal(err) + } + + var b bytes.Buffer + if err := tmpl.Execute(&b, Values{Messages: []api.Message{{Role: "user", Content: "Hello"}}}); err != nil { + t.Fatal(err) + } + + expected := "Hello Yesterday was " + time.Now().AddDate(0, 0, -1).Format("2006-01-02") + if b.String() != expected { + t.Errorf("got %q, want %q", b.String(), expected) + } + }) + + t.Run("yesterdayDate format", func(t *testing.T) { + tmpl, err := Parse("{{- range .Messages }}{{ end }}{{ yesterdayDate }}") + if err != nil { + t.Fatal(err) + } + + var b bytes.Buffer + if err := tmpl.Execute(&b, Values{Messages: []api.Message{{Role: "user", Content: "Hello"}}}); err != nil { + t.Fatal(err) + } + + // Verify the format matches YYYY-MM-DD + result := b.String() + if len(result) != 10 { + t.Errorf("expected date length 10, got %d: %q", len(result), result) + } + + // Parse and verify it's a valid date + parsed, err := time.Parse("2006-01-02", result) + if err != nil { + t.Errorf("failed to parse date %q: %v", result, err) + } + + // Verify it's yesterday + yesterday := time.Now().AddDate(0, 0, -1) + if parsed.Year() != yesterday.Year() || parsed.Month() != yesterday.Month() || parsed.Day() != yesterday.Day() { + t.Errorf("expected yesterday's date, got %v", parsed) + } + }) +} + func TestCollate(t *testing.T) { cases := []struct { name string