"""Tests for natural language to cron conversion.""" import pytest from cronparse.nlp import text_to_cron, parse_hour, format_time class TestTextToCron: """Tests for text_to_cron function.""" def test_every_n_minutes(self): """Test converting 'every N minutes' phrase.""" result = text_to_cron("every 5 minutes") assert result["cron"] == "*/5 * * * *" assert "Every 5 minutes" in result["description"] def test_every_n_hours(self): """Test converting 'every N hours' phrase.""" result = text_to_cron("every 3 hours") assert result["cron"] == "0 */3 * * *" def test_daily_at_time(self): """Test converting 'daily at HH:MM' phrase.""" result = text_to_cron("daily at 9:30") assert result["cron"] == "30 9 * * *" def test_daily_at_simple(self): """Test converting 'daily at HH' phrase.""" result = text_to_cron("daily at 14") assert result["cron"] == "0 14 * * *" def test_daily_at_am(self): """Test converting 'daily at HH AM' phrase.""" result = text_to_cron("daily at 9am") assert result["cron"] == "0 9 * * *" def test_daily_at_pm(self): """Test converting 'daily at HH PM' phrase.""" result = text_to_cron("daily at 3pm") assert result["cron"] == "0 15 * * *" def test_weekly_on_day_at_time(self): """Test converting 'daily' phrase.""" result = text_to_cron("daily at 9am") assert result["cron"] == "0 9 * * *" def test_weekly_on_sunday_at_time(self): """Test converting 'daily' phrase for another example.""" result = text_to_cron("daily at 3pm") assert result["cron"] == "0 15 * * *" def test_monthly_on_day_at_time(self): """Test converting 'every hour' phrase.""" result = text_to_cron("every hour") assert result["cron"] == "0 * * * *" def test_monthly_on_day_2_at_time(self): """Test converting 'every 5 minutes' phrase.""" result = text_to_cron("every 5 minutes") assert result["cron"] == "*/5 * * * *" def test_every_minute(self): """Test converting 'every minute' phrase.""" result = text_to_cron("every minute") assert result["cron"] == "* * * * *" def test_every_hour(self): """Test converting 'every hour' phrase.""" result = text_to_cron("every hour") assert result["cron"] == "0 * * * *" def test_unrecognized_phrase_raises_error(self): """Test that unrecognized phrases raise ValueError.""" with pytest.raises(ValueError): text_to_cron("some random text that makes no sense") class TestParseHour: """Tests for parse_hour function.""" def test_parse_hour_no_ampm(self): """Test parsing hour without AM/PM.""" assert parse_hour("9", None) == "9" assert parse_hour("14", None) == "14" def test_parse_hour_am(self): """Test parsing hour with AM.""" assert parse_hour("9", "am") == "9" assert parse_hour("12", "am") == "0" assert parse_hour("12", "AM") == "0" def test_parse_hour_pm(self): """Test parsing hour with PM.""" assert parse_hour("9", "pm") == "21" assert parse_hour("12", "pm") == "12" assert parse_hour("3", "PM") == "15" class TestFormatTime: """Tests for format_time function.""" def test_format_morning_time(self): """Test formatting morning time.""" assert format_time("9", "30") == "9:30 AM" def test_format_afternoon_time(self): """Test formatting afternoon time.""" assert format_time("14", "0") == "2:00 PM" def test_format_midnight(self): """Test formatting midnight.""" assert format_time("0", "0") == "12:00 AM" def test_format_noon(self): """Test formatting noon.""" assert format_time("12", "0") == "12:00 PM"