Skip to content

Commit

Permalink
make relative parser less greedy, rename test dir
Browse files Browse the repository at this point in the history
  • Loading branch information
Mayerch1 committed Nov 4, 2021
1 parent 5c2367d commit abbfacb
Show file tree
Hide file tree
Showing 10 changed files with 627 additions and 629 deletions.
3 changes: 2 additions & 1 deletion Bot/ReminderCreation.py
Original file line number Diff line number Diff line change
Expand Up @@ -222,7 +222,8 @@ async def process_reminder(self, ctx, author, target, period, message, channel):
rem = Reminder()


info = ''

info = '' if not info else info
if channel is None:
# command was called in DM
rem.g_id = None
Expand Down
40 changes: 20 additions & 20 deletions Bot/lib/input_parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -134,31 +134,31 @@ def _parse_relative(args, utcnow):
intvl = timedelta(hours=0) # default in case of no-match

if arg[0] == None:
info = info + f'• Ignoring {arg}, as required numerical part is missing\n'
else:
if arg[1].startswith('y'):
intvl = relativedelta(years=arg[0])
return (utcnow, f'• Argument {arg} is starting with a number\n', None)

elif arg[1].startswith('mo'):
intvl = relativedelta(months=arg[0])
if arg[1].startswith('y'):
intvl = relativedelta(years=arg[0])

elif arg[1].startswith('w'):
intvl = relativedelta(weeks=arg[0])
elif arg[1].startswith('mo'):
intvl = relativedelta(months=arg[0])

elif arg[1] == 'd' or arg[1].startswith('da'):
# condition must not detect the month 'december'
intvl = timedelta(days=arg[0])
elif arg[1].startswith('w'):
intvl = relativedelta(weeks=arg[0])

elif arg[1].startswith('h'):
intvl = timedelta(hours=arg[0])
elif arg[1] == 'd' or arg[1].startswith('da'):
# condition must not detect the month 'december'
intvl = timedelta(days=arg[0])

elif arg[1].startswith('mi'):
intvl = timedelta(minutes=arg[0])

elif arg[1] == 'm':
intvl = timedelta(minutes=arg[0])
else:
info = info + f'• Ignoring {arg}, as this is not a known interval\n'
elif arg[1].startswith('h'):
intvl = timedelta(hours=arg[0])

elif arg[1].startswith('mi'):
intvl = timedelta(minutes=arg[0])

elif arg[1] == 'm':
intvl = timedelta(minutes=arg[0])
else:
return (utcnow, f'• Unknown parameter {arg}', None)

total_intvl += intvl

Expand Down
14 changes: 7 additions & 7 deletions BotTest.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
from unittest import main
import test.BasicParseTest as BPT
import test.WrapParseTest as WPT
import test.AmbigParseTest as APT
import test.TimezoneParseTest as TPT
import test.AbsParseTest as AbPT
import test.CombineParseTest as CPT
import test.IntervalTest as ITT
import unit_tests.BasicParseTest as BPT
import unit_tests.WrapParseTest as WPT
import unit_tests.AmbigParseTest as APT
import unit_tests.TimezoneParseTest as TPT
import unit_tests.AbsParseTest as AbPT
import unit_tests.CombineParseTest as CPT
import unit_tests.IntervalTest as ITT


if __name__ == '__main__':
Expand Down
84 changes: 42 additions & 42 deletions test/AbsParseTest.py → unit_tests/AbsParseTest.py
Original file line number Diff line number Diff line change
@@ -1,42 +1,42 @@
import unittest
from unittest.mock import MagicMock

from datetime import datetime, timedelta
from dateutil.tz import gettz

import Bot.lib.input_parser as p



class AbsParseTest(unittest.TestCase):

def setUp(self):
self.utcnow = datetime(year=2021, month=1, day=1)


def test_timezone_convert(self):
# timezone in winter is 1h difference
cmp_at = datetime(year=2021, month=1, day=1, hour=0)
at, _ = p.parse('2021-1-1 01:00', self.utcnow, 'Europe/Berlin')

self.assertEqual(at, cmp_at)


def test_summer_time(self):
cmp_at = datetime(year=2021, month=3, day=28, hour=0, minute=59)
at, _ = p.parse('2021-03-28 01:59', self.utcnow, 'Europe/Berlin')
self.assertEqual(at, cmp_at)

cmp_at = datetime(year=2021, month=3, day=28, hour=1)
at, _ = p.parse('2021-03-28 03:00', self.utcnow, 'Europe/Berlin')
self.assertEqual(at, cmp_at)


def test_no_american_format(self):
cmp_at = datetime(year=2021, month=2, day=3)
at, _ = p.parse('3.2.2021', self.utcnow)

self.assertEqual(at, cmp_at)



import unittest
from unittest.mock import MagicMock

from datetime import datetime, timedelta
from dateutil.tz import gettz

import Bot.lib.input_parser as p



class AbsParseTest(unittest.TestCase):

def setUp(self):
self.utcnow = datetime(year=2021, month=1, day=1)


def test_timezone_convert(self):
# timezone in winter is 1h difference
cmp_at = datetime(year=2021, month=1, day=1, hour=0)
at, _ = p.parse('2021-1-1 01:00', self.utcnow, 'Europe/Berlin')

self.assertEqual(at, cmp_at)


def test_summer_time(self):
cmp_at = datetime(year=2021, month=3, day=28, hour=0, minute=59)
at, _ = p.parse('2021-03-28 01:59', self.utcnow, 'Europe/Berlin')
self.assertEqual(at, cmp_at)

cmp_at = datetime(year=2021, month=3, day=28, hour=1)
at, _ = p.parse('2021-03-28 03:00', self.utcnow, 'Europe/Berlin')
self.assertEqual(at, cmp_at)


def test_no_american_format(self):
cmp_at = datetime(year=2021, month=2, day=3)
at, _ = p.parse('3.2.2021', self.utcnow)

self.assertEqual(at, cmp_at)



44 changes: 22 additions & 22 deletions test/AmbigParseTest.py → unit_tests/AmbigParseTest.py
Original file line number Diff line number Diff line change
@@ -1,23 +1,23 @@
import unittest
from unittest.mock import MagicMock

from datetime import datetime, timedelta

import Bot.lib.input_parser as p



class AmbigParseTest(unittest.TestCase):

def setUp(self):
self.utcnow = datetime(year=2021, month=1, day=1)


def test_m_minute(self):
""" keyword m must be interpreted as minutes
a warning is not shown
"""
at, error = p.parse('1m', self.utcnow)

self.assertEqual(at, self.utcnow+timedelta(minutes=1))
import unittest
from unittest.mock import MagicMock

from datetime import datetime, timedelta

import Bot.lib.input_parser as p



class AmbigParseTest(unittest.TestCase):

def setUp(self):
self.utcnow = datetime(year=2021, month=1, day=1)


def test_m_minute(self):
""" keyword m must be interpreted as minutes
a warning is not shown
"""
at, error = p.parse('1m', self.utcnow)

self.assertEqual(at, self.utcnow+timedelta(minutes=1))
self.assertEqual(error, '') # m does not trigger warning anymore
Loading

0 comments on commit abbfacb

Please sign in to comment.