import { describe, expect, it } from 'vitest';
import DefaultIndexBody from './DefaultIndexBody.astro';
import {
  INDEX_HERO_SAFE,
  INDEX_HERO_XSS,
  INDEX_MOD_CARDS,
  INDEX_POSTS,
  INDEX_SITE_NAME,
  assertHeroSanitized,
  assertIndexEmptyState,
  assertNoMainElement,
  assertSiteNameInH1,
  renderBodyComponent,
} from '../../test/body-component-render';

describe('DefaultIndexBody', () => {
  it('renders siteName in h1 and omits main', async () => {
    const html = await renderBodyComponent(DefaultIndexBody, {
      siteName: INDEX_SITE_NAME,
      heroHtml: INDEX_HERO_SAFE,
      posts: INDEX_POSTS,
      modCards: INDEX_MOD_CARDS,
    });
    assertSiteNameInH1(html, INDEX_SITE_NAME);
    assertNoMainElement(html);
    expect(html).toContain('Alpha post');
  });

  it('shows empty state when posts is empty', async () => {
    const html = await renderBodyComponent(DefaultIndexBody, {
      siteName: INDEX_SITE_NAME,
      heroHtml: '',
      posts: [],
      modCards: INDEX_MOD_CARDS,
    });
    assertIndexEmptyState(html);
  });

  it('sanitizes heroHtml before cms-body output', async () => {
    const html = await renderBodyComponent(DefaultIndexBody, {
      siteName: INDEX_SITE_NAME,
      heroHtml: INDEX_HERO_XSS,
      posts: [],
      modCards: [],
    });
    assertHeroSanitized(html);
  });
});
