// Page secret actions must mask typed input with EchoPassword and never leak plaintext in views.
// Echo masking and view rendering live purely inside Bubble Tea models;
// E2E lacks a PTY harness to observe unsubmitted keystroke echo.
package tui
import (
"strings"
"testing"
"charm.land/bubbles/v2/textinput"
tea "charm.land/bubbletea/v2"
)
func TestPageSecretInputIsMasked(t *testing.T) {
doc := &PageDocument{Title: "webhooks", Actions: []PageAction{
{Key: "k", Label: "rotate", Run: "rotate_with_secret", Input: "secret", Prompt: "replacement"},
}}
m := NewPageViewModel(nil, "session", "/webhooks")
m.Doc = doc
m.Busy = false
m.SetSize(80, 24)
m, _ = m.Update(tea.KeyPressMsg{Code: 'k', Text: "k"})
if m.Mode != modeText || m.TextInput.EchoMode != textinput.EchoPassword {
t.Fatalf("secret action should mask input: %+v", m)
}
m.TextInput.SetValue("sensitive-signing-key")
if strings.Contains(m.View(), "sensitive-signing-key") {
t.Fatal("secret was rendered on the page")
}
}