diff --git a/tests/test_generator.py b/tests/test_generator.py new file mode 100644 index 0000000..ad91be5 --- /dev/null +++ b/tests/test_generator.py @@ -0,0 +1,79 @@ +"""Tests for interactive cron generator.""" + +import pytest +from unittest.mock import patch, MagicMock +from cronparse.generator import ( + prompt_specific_values, + prompt_specific_dow_values, +) + + +class TestPromptSpecificValues: + """Tests for prompt_specific_values function.""" + + @patch("cronparse.generator.click") + def test_enter_done_immediately(self, mock_click): + """Test that entering 'done' immediately uses default value.""" + mock_click.prompt.side_effect = ["done"] + result = prompt_specific_values("test", 1, 10) + assert result == [1] + + @patch("cronparse.generator.click") + def test_enter_single_value(self, mock_click): + """Test entering a single specific value.""" + mock_click.prompt.side_effect = ["5", "done"] + result = prompt_specific_values("test", 1, 10) + assert result == [5] + + @patch("cronparse.generator.click") + def test_enter_multiple_values(self, mock_click): + """Test entering multiple specific values.""" + mock_click.prompt.side_effect = ["3", "7", "9", "done"] + result = prompt_specific_values("test", 1, 10) + assert result == [3, 7, 9] + + @patch("cronparse.generator.click") + def test_duplicate_value_not_added(self, mock_click): + """Test that duplicate values are not added.""" + mock_click.prompt.side_effect = ["5", "5", "done"] + result = prompt_specific_values("test", 1, 10) + assert result == [5] + + @patch("cronparse.generator.click") + def test_invalid_value_shows_error(self, mock_click): + """Test that invalid values show error and continue.""" + mock_click.prompt.side_effect = ["invalid", "5", "done"] + result = prompt_specific_values("test", 1, 10) + assert result == [5] + + +class TestPromptSpecificDowValues: + """Tests for prompt_specific_dow_values function.""" + + @patch("cronparse.generator.click") + def test_enter_done_immediately(self, mock_click): + """Test that entering 'done' immediately uses default (0=Sunday).""" + mock_click.prompt.side_effect = ["done"] + result = prompt_specific_dow_values() + assert result == [0] + + @patch("cronparse.generator.click") + def test_enter_single_day(self, mock_click): + """Test entering a single day of week.""" + mock_click.prompt.side_effect = ["1", "done"] + result = prompt_specific_dow_values() + assert result == [1] + + @patch("cronparse.generator.click") + def test_enter_multiple_days(self, mock_click): + """Test entering multiple days of week.""" + mock_click.prompt.side_effect = ["1", "3", "5", "done"] + result = prompt_specific_dow_values() + assert result == [1, 3, 5] + + @patch("cronparse.generator.click") + def test_invalid_day_shows_error(self, mock_click): + """Test that invalid day shows error.""" + mock_click.prompt.side_effect = ["7", "1", "done"] + result = prompt_specific_dow_values() + assert result == [1]