From c4a6e7bfc76d8b96acb6bf9fde2b4bdb8eaf84ea Mon Sep 17 00:00:00 2001 From: Matt Snider Date: Sat, 24 Nov 2018 15:13:45 +0100 Subject: [PATCH] Add tests for recur --- README.md | 10 +++++ test_requirements.txt | 2 + tests/test_recur.py | 101 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 113 insertions(+) create mode 100644 test_requirements.txt create mode 100644 tests/test_recur.py diff --git a/README.md b/README.md index 3e11955..d410f52 100644 --- a/README.md +++ b/README.md @@ -2,4 +2,14 @@ A tool for migrating Todoist tasks to Taskwarrior. +## Usage +... + +## Development + +### Testing + +```sh +$ python -m pytest tests +``` diff --git a/test_requirements.txt b/test_requirements.txt new file mode 100644 index 0000000..18e0540 --- /dev/null +++ b/test_requirements.txt @@ -0,0 +1,2 @@ +pytest==4.0.0 + diff --git a/tests/test_recur.py b/tests/test_recur.py new file mode 100644 index 0000000..0b49bcf --- /dev/null +++ b/tests/test_recur.py @@ -0,0 +1,101 @@ +""" Recur Tests + +Tests parsing `recur` strings from Todoist `date_string`s +""" +from todoist_taskwarrior import utils + +# TODO: try with every and ev + +def test_hourly(): + assert utils.parse_recur('every hour') == 'hourly' + assert utils.parse_recur('every 1 hour') == 'hourly' + assert utils.parse_recur('every 2 hour') == '2 hours' + assert utils.parse_recur('every 2 hours') == '2 hours' + assert utils.parse_recur('every 3 hours') == '3 hours' + + +def test_every_n_days(): + assert utils.parse_recur('daily') == 'daily' + assert utils.parse_recur('every day') == 'daily' + assert utils.parse_recur('every 1 day') == 'daily' + assert utils.parse_recur('every 1 days') == 'daily' + assert utils.parse_recur('every other day') == '2 days' + assert utils.parse_recur('every 3 day') == '3 days' + assert utils.parse_recur('every 3 days') == '3 days' + + +def test_special(): + # Indicates daily at 9am - the time is saved in the `due` property + assert utils.parse_recur('every morning') == 'daily' + # Indicates daily at 7pm - the time is saved in the `due` property + assert utils.parse_recur('every evening') == 'daily' + + # Weekdays + assert utils.parse_recur('every weekday') == 'weekdays' + assert utils.parse_recur('every workday') == 'weekdays' + + +def test_weekly(): + assert utils.parse_recur('every week') == 'weekly' + assert utils.parse_recur('every 1 week') == 'weekly' + assert utils.parse_recur('every 1 weeks') == 'weekly' + assert utils.parse_recur('weekly') == 'weekly' + assert utils.parse_recur('every 3 week') == '3 weeks' + assert utils.parse_recur('every 3 weeks') == '3 weeks' + + +def test_monthly(): + assert utils.parse_recur('every month') == 'monthly' + assert utils.parse_recur('every 1 month') == 'monthly' + assert utils.parse_recur('every 1 months') == 'monthly' + assert utils.parse_recur('monthly') == 'monthly' + assert utils.parse_recur('every 2 months') == '2 months' + + # ordinal + assert utils.parse_recur('every 2nd month') == '2 months' + assert utils.parse_recur('every 3rd month') == '3 months' + + +def test_day_of_week(): + """ The actual day should be indicated in the `due` property, so here + we just need to ensure that the recurrence is correct. + """ + # TODO: test every day of the week (incl short forms) + assert utils.parse_recur('every mon') == 'weekly' + assert utils.parse_recur('every monday') == 'weekly' + assert utils.parse_recur('every tuesday') == 'weekly' + assert utils.parse_recur('every tues') == 'weekly' + assert utils.parse_recur('every 2nd monday') == '2 weeks' + assert utils.parse_recur('every 3rd friday') == '3 weeks' + + +def test_day_of_month(): + """ The actual due date should be indicated by the `due` property, so here + we just need to ensure a monthly recurrence. + """ + assert utils.parse_recur('every 1st') == 'monthly' + assert utils.parse_recur('every 2nd') == 'monthly' + assert utils.parse_recur('every 3rd') == 'monthly' + assert utils.parse_recur('every 4th') == 'monthly' + assert utils.parse_recur('every 21st') == 'monthly' + assert utils.parse_recur('every 22nd') == 'monthly' + assert utils.parse_recur('every 23rd') == 'monthly' + assert utils.parse_recur('every 24th') == 'monthly' + + # TODO: taskwarrior doesn't support this *exactly* -- monthly just means 30d + # https://github.com/GothenburgBitFactory/taskwarrior/issues/1647 + assert utils.parse_recur('every last day') == 'monthly' + + +def test_annually(): + assert utils.parse_recur('every year') == 'yearly' + assert utils.parse_recur('every 2 year') == '2 years' + assert utils.parse_recur('every 2 years') == '2 years' + + +def test_unsupported(): + # TODO: expect exception + # taskwarrior doesn't support reccurances of form + # - every monday,tuesday,... + pass +