from __future__ import annotations

import pytest

from firecrawl_client.exceptions import (
    FirecrawlBadRequest,
    FirecrawlError,
    FirecrawlRateLimited,
    FirecrawlServerError,
    FirecrawlTimeout,
)


def test_all_subclasses_inherit_from_base():
    for cls in (FirecrawlTimeout, FirecrawlRateLimited, FirecrawlServerError, FirecrawlBadRequest):
        assert issubclass(cls, FirecrawlError)


def test_all_subclasses_distinct():
    classes = {FirecrawlTimeout, FirecrawlRateLimited, FirecrawlServerError, FirecrawlBadRequest}
    assert len(classes) == 4


def test_can_raise_and_catch_as_base():
    with pytest.raises(FirecrawlError):
        raise FirecrawlServerError("500 boom")


def test_carry_message():
    e = FirecrawlBadRequest("400 invalid url")
    assert "400 invalid url" in str(e)
