import unittest

from src.great_ai.utilities import get_sentences


class TestGetSentences(unittest.TestCase):
    def test_default(self) -> None:
        text = "This is a complete sentence. So is this. However this is n"  # ot.
        expected = ["This is a complete sentence.", "So is this.", "However this is n"]

        assert get_sentences(text) == expected
        assert get_sentences(text, ignore_partial=True) == expected[0:2]

    def test_complex(self) -> None:
        text = """
        This is a complete sentence. So is this.
        End of paragraph.


        Negation contractions (like don't or ain't) are resolved.

        However this is not a sent
        """

        expected = [
            "This is a complete sentence.",
            "So is this.",
            "End of paragraph.",
            "Negation contractions (like don't or ain't) are resolved.",
            "However this is not a sent",
        ]

        print(get_sentences(text, ignore_partial=True))

        assert get_sentences(text) == expected
        assert get_sentences(text, ignore_partial=True) == expected[:-1]

    def test_true_casing(self) -> None:
        text = "This is also referred to as a Convolutional Neural Network (CNN)."
        expected = ["this is also referred to as a Convolutional Neural Network (CNN)."]

        assert get_sentences(text, true_case=True) == expected

    def test_remove_punctuation(self) -> None:
        text = "Also, we --- the authors --- have to find less intrusive, and higher potential procedures. "
        expected = [
            "Also we the authors have to find less intrusive and higher potential procedures"
        ]

        assert get_sentences(text, remove_punctuation=True) == expected

    def test_empty(self) -> None:
        assert get_sentences("") == []
        assert get_sentences(" ") == []
        assert get_sentences("  \n ") == []
        assert get_sentences("", ignore_partial=True) == []
        assert get_sentences("", true_case=True) == []
        assert get_sentences("", remove_punctuation=True) == []
