80 lines
2.9 KiB
Python
80 lines
2.9 KiB
Python
"""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]
|