import pypdf
import pytest

from swarms.utils import pdf_to_text


@pytest.fixture
def pdf_file(tmpdir):
    pdf_writer = pypdf.PdfWriter()
    pdf_page = pypdf.PageObject.create_blank_page(None, 200, 200)
    pdf_writer.add_page(pdf_page)
    pdf_file = tmpdir.join("temp.pdf")
    with open(pdf_file, "wb") as output:
        pdf_writer.write(output)
    return str(pdf_file)


def test_valid_pdf_to_text(pdf_file):
    result = pdf_to_text(pdf_file)
    assert isinstance(result, str)


def test_non_existing_file():
    with pytest.raises(FileNotFoundError):
        pdf_to_text("non_existing_file.pdf")


def test_passing_non_pdf_file(tmpdir):
    file = tmpdir.join("temp.txt")
    file.write("This is a test")
    with pytest.raises(
        Exception,
        match=r"An error occurred while reading the PDF file",
    ):
        pdf_to_text(str(file))


@pytest.mark.parametrize("invalid_pdf_file", [None, 123, {}, []])
def test_invalid_pdf_to_text(invalid_pdf_file):
    with pytest.raises(Exception):
        pdf_to_text(invalid_pdf_file)