"""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]