package middleware import ( "strings" "testing" "github.com/stretchr/testify/require" ) func TestMaskSensitiveJSONMasksPasswordAndTokenFields(t *testing.T) { body := []byte(`{"username":"admin","password":"secret123","old_password":"old","new_password":"new1","token":"jwt-token","remark":"ok","nested":{"password":"x","value":1},"items":[{"pass":"p","name":"a"}]}`) masked := string(maskSensitiveJSON(body)) // 敏感字段脱敏 require.NotContains(t, masked, "secret123") require.NotContains(t, masked, "jwt-token") require.Contains(t, masked, "******") // 非敏感字段保留 require.Contains(t, masked, `"username":"admin"`) require.Contains(t, masked, `"remark":"ok"`) require.Contains(t, masked, `"value":1`) require.Contains(t, masked, `"name":"a"`) } func TestMaskSensitiveJSONFieldNamesCaseInsensitive(t *testing.T) { body := []byte(`{"Password":"UPPER","New_Password":"x"}`) masked := string(maskSensitiveJSON(body)) require.NotContains(t, masked, "UPPER") require.Contains(t, masked, "******") } func TestMaskSensitiveJSONPassesThroughNonJSON(t *testing.T) { body := []byte(`not a json body`) require.Equal(t, string(body), string(maskSensitiveJSON(body))) } func TestMaskResponseTruncatesLongContent(t *testing.T) { long := strings.Repeat("x", 5000) // JSON 数组包裹后仍超长 → 截断标记 resp := maskResponse(`{"data":"` + long + `"}`) require.Equal(t, "[超出记录长度]", resp) } func TestMaskResponseKeepsShortContent(t *testing.T) { resp := maskResponse(`{"code":0,"msg":"ok"}`) require.Equal(t, `{"code":0,"msg":"ok"}`, resp) }