package systemviews import ( "testing" "github.com/stretchr/testify/assert" ) func TestRenderAppFrame_ReturnsFragment(t *testing.T) { t.Parallel() page := renderedPage{ route: RouteHistory, subtitle: "History", body: ``, } theme := shellTheme{RootClass: "sv-dark"} out := renderAppFrame(page, theme) // Must be a fragment — no full document tags. assert.NotContains(t, out, "
  • hello
  • `) // Subtitle rendered. assert.Contains(t, out, "History") } func TestRenderAppFrame_DefaultThemeClass(t *testing.T) { t.Parallel() page := renderedPage{ route: RouteFavorites, subtitle: "Favorites", body: `

    content

    `, } // Empty theme — should still get sv-app with sv-dark default. out := renderAppFrame(page, shellTheme{}) assert.Contains(t, out, `class="sv-app sv-dark"`) assert.Contains(t, out, `data-route="favorites"`) assert.Contains(t, out, `data-page-title="Favorites"`) } func TestRenderAppFrame_DocumentTitleUsesExplicitTitle(t *testing.T) { t.Parallel() page := renderedPage{ route: RouteHistory, title: "History — 12 entries", subtitle: "Recent visits", body: `

    content

    `, } out := renderAppFrame(page, shellTheme{}) assert.Contains(t, out, `data-page-title="History — 12 entries"`) assert.Contains(t, out, "Recent visits") } func TestRenderAppFrame_InlineVarsApplied(t *testing.T) { t.Parallel() page := renderedPage{ route: RouteConfig, subtitle: "Config", body: `

    settings

    `, } theme := shellTheme{ RootClass: "sv-light", InlineVars: "--sv-background: #fff;", } out := renderAppFrame(page, theme) assert.Contains(t, out, `style="--sv-background: #fff;"`) assert.Contains(t, out, `class="sv-app sv-light"`) } func TestListHTMLWrapsRows(t *testing.T) { t.Parallel() out := listHTML(`
  • entry
  • `, "Nothing here") assert.Contains(t, out, `class="sv-list"`) assert.Contains(t, out, `class="sv-list-row"`) assert.Contains(t, out, "entry") } func TestListHTMLEmptyState(t *testing.T) { t.Parallel() out := listHTML("", "Nothing here") assert.Contains(t, out, `class="sv-empty"`) assert.Contains(t, out, "Nothing here") } func TestLinkHTMLSanitizesHref(t *testing.T) { t.Parallel() out := linkHTML("javascript:alert(1)", "Bad") assert.Contains(t, out, `class="sv-link"`) assert.Contains(t, out, `href="#"`) assert.Contains(t, out, "Bad") } func TestKVHTMLRendersPairs(t *testing.T) { t.Parallel() out := kvHTML([]kvPair{{Label: "Engine", Value: "webkit"}}) assert.Contains(t, out, `class="sv-kv"`) assert.Contains(t, out, "Engine") assert.Contains(t, out, "webkit") } func TestKVHTMLEmptySlice(t *testing.T) { t.Parallel() out := kvHTML(nil) assert.Contains(t, out, `class="sv-empty"`) assert.Contains(t, out, "No configuration details") } func TestKVHTMLAllEmptyRows(t *testing.T) { t.Parallel() out := kvHTML([]kvPair{{}, {Label: " ", Value: ""}}) assert.Contains(t, out, `class="sv-empty"`) assert.Contains(t, out, "No configuration details") } func TestErrorStateHTML(t *testing.T) { t.Parallel() out := errorStateHTML("boom") assert.Contains(t, out, `class="sv-error"`) assert.Contains(t, out, `role="alert"`) assert.Contains(t, out, "boom") } func TestSectionHTML(t *testing.T) { t.Parallel() out := sectionHTML("test-section", "Test Title", "

    inner

    ") assert.Contains(t, out, `class="sv-section test-section"`) assert.Contains(t, out, "Test Title") assert.Contains(t, out, "

    inner

    ") } func TestEmptyStateHTML(t *testing.T) { t.Parallel() out := emptyStateHTML("Nothing here") assert.Contains(t, out, `class="sv-empty"`) assert.Contains(t, out, "Nothing here") }