// Copyright 2026 Arctel.net // SPDX-License-Identifier: Apache-2.0 package push import ( "testing" "github.com/stretchr/testify/assert" ) func TestParseTemplate(t *testing.T) { tests := []struct { name string template string body map[string]any expected string }{ { name: "simple replacement", template: "hello {{name}}", body: map[string]any{"name": "world"}, expected: "hello world", }, { name: "multiple replacements", template: "{{greeting}} {{name}}!", body: map[string]any{"greeting": "Hello", "name": "Alice"}, expected: "Hello Alice!", }, { name: "missing key preserves placeholder", template: "hello {{name}} and {{other}}", body: map[string]any{"name": "world"}, expected: "hello world and {{other}}", }, { name: "unbalanced placeholders", template: "hello {{name", body: map[string]any{"name": "world"}, expected: "hello {{name", }, { name: "nil value", template: "val: {{val}}", body: map[string]any{"val": nil}, expected: "val: ", }, { name: "basic types", template: "int: {{i}}, float: {{f}}, bool: {{b}}", body: map[string]any{"i": 123, "f": 45.67, "b": true}, expected: "int: 123, float: 45.67, bool: true", }, { name: "complex type slice", template: "items: {{items}}", body: map[string]any{"items": []string{"a", "b"}}, expected: `items: ["a","b"]`, }, { name: "complex type map", template: "obj: {{obj}}", body: map[string]any{"obj": map[string]any{"key": "value"}}, expected: `obj: {"key":"value"}`, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { result := ParseTemplate(tt.template, tt.body) assert.Equal(t, tt.expected, result) }) } } // Synthesized content must render in a stable order, otherwise two identical // notifications produce different text on every send. func TestBodyContentFallbackIsDeterministic(t *testing.T) { body := map[string]any{ "zebra": 1, "alpha": 2, "mike": 3, "charlie": 4, "yankee": 5, } first := bodyContent(body, "%s=%v", ",") for i := 1; i <= 50; i++ { if got := bodyContent(body, "%s=%v", ","); got != first { t.Fatalf("bodyContent order changed on call %d: %q != %q", i, got, first) } } assert.Equal(t, "alpha=2,charlie=4,mike=3,yankee=5,zebra=1", first) }