defmodule MvWeb.Components.CoreComponentsBadgeTest do
  @moduledoc """
  Unit tests for the Core Components badge (WCAG-compliant, non-transparent).
  """
  use MvWeb.ConnCase, async: true

  import Phoenix.Component
  import Phoenix.LiveViewTest
  import MvWeb.CoreComponents

  describe "badge/1" do
    test "default variant renders with badge and badge-neutral classes (visible, not ghost)" do
      assigns = %{}

      html =
        rendered_to_string(~H"""
        <.badge variant="neutral">Label</.badge>
        """)

      assert html =~ "badge"
      assert html =~ "badge-neutral"
      assert html =~ "badge-soft"
      refute html =~ "badge-ghost"
      assert html =~ "Label"
    end

    test "success variant renders badge-success and badge-soft" do
      assigns = %{}

      html =
        rendered_to_string(~H"""
        <.badge variant="success">Paid</.badge>
        """)

      assert html =~ "badge-success"
      assert html =~ "badge-soft"
      assert html =~ "Paid"
    end

    test "outline style includes bg-base-100 for contrast" do
      assigns = %{}

      html =
        rendered_to_string(~H"""
        <.badge variant="primary" style="outline">Outline</.badge>
        """)

      assert html =~ "badge-outline"
      assert html =~ "bg-base-100"
      assert html =~ "Outline"
    end

    test "solid style has no badge-soft or badge-outline" do
      assigns = %{}

      html =
        rendered_to_string(~H"""
        <.badge variant="error" style="solid">Error</.badge>
        """)

      assert html =~ "badge-error"
      refute html =~ "badge-soft"
      refute html =~ "badge-outline"
      assert html =~ "Error"
    end

    test "size sm adds badge-sm" do
      assigns = %{}

      html =
        rendered_to_string(~H"""
        <.badge variant="neutral" size="sm">Small</.badge>
        """)

      assert html =~ "badge-sm"
      assert html =~ "Small"
    end

    test "renders as span (non-interactive)" do
      assigns = %{}

      html =
        rendered_to_string(~H"""
        <.badge variant="info">Info</.badge>
        """)

      assert html =~ ~r/<span[^>]*class="[^"]*badge[^"]*"/
      refute html =~ ~r/<button/
    end
  end
end
