From 6028efd26cf2e4855bdaee11359ddff379a06146 Mon Sep 17 00:00:00 2001 From: wucm667 Date: Wed, 18 Mar 2026 14:13:52 +0800 Subject: [PATCH] =?UTF-8?q?test:=20=E6=B7=BB=E5=8A=A0=20injectSiteTitle=20?= =?UTF-8?q?=E5=87=BD=E6=95=B0=E7=9A=84=E5=8D=95=E5=85=83=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/internal/web/embed_test.go | 72 ++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) diff --git a/backend/internal/web/embed_test.go b/backend/internal/web/embed_test.go index f270b624..fd47c4da 100644 --- a/backend/internal/web/embed_test.go +++ b/backend/internal/web/embed_test.go @@ -20,6 +20,78 @@ func init() { gin.SetMode(gin.TestMode) } +func TestInjectSiteTitle(t *testing.T) { + t.Run("replaces_title_with_site_name", func(t *testing.T) { + html := []byte(`Sub2API - AI API Gateway`) + settingsJSON := []byte(`{"site_name":"MyCustomSite"}`) + + result := injectSiteTitle(html, settingsJSON) + + assert.Contains(t, string(result), "MyCustomSite - AI API Gateway") + assert.NotContains(t, string(result), "Sub2API") + }) + + t.Run("returns_unchanged_when_site_name_empty", func(t *testing.T) { + html := []byte(`Sub2API - AI API Gateway`) + settingsJSON := []byte(`{"site_name":""}`) + + result := injectSiteTitle(html, settingsJSON) + + assert.Equal(t, string(html), string(result)) + }) + + t.Run("returns_unchanged_when_site_name_missing", func(t *testing.T) { + html := []byte(`Sub2API - AI API Gateway`) + settingsJSON := []byte(`{"other_field":"value"}`) + + result := injectSiteTitle(html, settingsJSON) + + assert.Equal(t, string(html), string(result)) + }) + + t.Run("returns_unchanged_when_invalid_json", func(t *testing.T) { + html := []byte(`Sub2API - AI API Gateway`) + settingsJSON := []byte(`{invalid json}`) + + result := injectSiteTitle(html, settingsJSON) + + assert.Equal(t, string(html), string(result)) + }) + + t.Run("returns_unchanged_when_no_title_tag", func(t *testing.T) { + html := []byte(``) + settingsJSON := []byte(`{"site_name":"MyCustomSite"}`) + + result := injectSiteTitle(html, settingsJSON) + + assert.Equal(t, string(html), string(result)) + }) + + t.Run("returns_unchanged_when_title_has_attributes", func(t *testing.T) { + // The function looks for "" literally, so attributes are not supported + // This is acceptable since index.html uses plain <title> without attributes + html := []byte(`<html><head><title lang="en">Sub2API`) + settingsJSON := []byte(`{"site_name":"NewSite"}`) + + result := injectSiteTitle(html, settingsJSON) + + // Should return unchanged since with attributes is not matched + assert.Equal(t, string(html), string(result)) + }) + + t.Run("preserves_rest_of_html", func(t *testing.T) { + html := []byte(`<html><head><meta charset="UTF-8"><title>Sub2API
`) + settingsJSON := []byte(`{"site_name":"TestSite"}`) + + result := injectSiteTitle(html, settingsJSON) + + assert.Contains(t, string(result), ``) + assert.Contains(t, string(result), ``) + assert.Contains(t, string(result), `
`) + assert.Contains(t, string(result), "TestSite - AI API Gateway") + }) +} + func TestReplaceNoncePlaceholder(t *testing.T) { t.Run("replaces_single_placeholder", func(t *testing.T) { html := []byte(``)