1
0

Actually add Task class w/ tests

This commit is contained in:
Akbar Rahman 2018-06-24 17:34:09 +01:00
parent 27f6dc057d
commit a7db35624b
Signed by: alvierahman90
GPG Key ID: 20609519444A1269
2 changed files with 188 additions and 0 deletions

83
Task.py Normal file
View File

@ -0,0 +1,83 @@
from re import match
from datetime import datetime as d
class Task:
def __init__(self, text):
# defaults
self.text = text
self.completion_date = None
self.creation_date = None
self.priority = None
self.done = False
self.projects = []
self.contexts = []
self.specials = []
arguments = text.split(' ')
counter = 0
if arguments[counter] == 'x':
self.done = True
counter += 1
# try to get priority
priorities = match("\([a-zA-Z]\)", arguments[counter])
if priorities is not None:
self.priority = arguments[counter].split('(')[1].split(')')[0]
counter += 1
# try to get completion date if done
if self.done:
try:
self.completion_date = d.strptime(arguments[counter],
'%Y-%m-%d')
counter += 1
except ValueError as e:
pass
# try to get creation date
try:
self.creation_date = d.strptime(arguments[counter], '%Y-%m-%d')
counter += 1
except ValueError as e:
pass
# you cannot have a completion date w/o a creation date
if self.creation_date is None and self.completion_date is not None:
self.creation_date = self.completion_date
self.completion_date = None
# auto mark tasks with completion date as done
if self.completion_date is not None:
self.done = True
# the rest of the arguments may have projects, contexts, specials
for i in arguments[counter:]:
if len(i) < 1:
continue
if i[0] == '+':
self.projects.append(i.split('+')[1])
elif i[0] == '-':
self.contexts.append(i.split('-')[1])
elif ':' in i:
key, value = i.split(':')
special = {key: value}
self.specials.append(special)
def do(self):
if self.done:
return
self.done = True
self.text = "x " + self.text
def undo(self):
if not self.done:
return
self.done = False
self.text = " ".join(self.text.split("x ")[1:])
def __str__(self):
return self.text

105
Task_tests.py Executable file
View File

@ -0,0 +1,105 @@
#!/usr/bin/env python3
import unittest
import datetime
from Task import Task as T
class TaskTestCase(unittest.TestCase):
def test_basic(self):
task = T("task")
self.assertEqual(task.done, False)
self.assertEqual(task.priority, None)
self.assertEqual(task.completion_date, None)
self.assertEqual(task.creation_date, None)
self.assertEqual(task.projects, [])
self.assertEqual(task.contexts, [])
self.assertEqual(task.specials, [])
def test_basic_done(self):
task = T("x basic test task")
self.assertEqual(task.done, True)
self.assertEqual(task.priority, None)
self.assertEqual(task.completion_date, None)
self.assertEqual(task.creation_date, None)
self.assertEqual(task.projects, [])
self.assertEqual(task.contexts, [])
self.assertEqual(task.specials, [])
def test_prioritized(self):
task = T("(A) prioritized test task")
self.assertEqual(task.done, False)
self.assertEqual(task.priority, 'A')
self.assertEqual(task.completion_date, None)
self.assertEqual(task.creation_date, None)
self.assertEqual(task.projects, [])
self.assertEqual(task.contexts, [])
self.assertEqual(task.specials, [])
def test_prioritized_ignore_incorrect(self):
task = T("(AA) prioritized test task")
self.assertEqual(task.done, False)
self.assertEqual(task.priority, None)
self.assertEqual(task.completion_date, None)
self.assertEqual(task.creation_date, None)
self.assertEqual(task.projects, [])
self.assertEqual(task.contexts, [])
self.assertEqual(task.specials, [])
def test_prioritized_done(self):
task = T("x (A) prioritized test task")
self.assertEqual(task.done, True)
self.assertEqual(task.priority, 'A')
self.assertEqual(task.completion_date, None)
self.assertEqual(task.creation_date, None)
self.assertEqual(task.projects, [])
self.assertEqual(task.contexts, [])
self.assertEqual(task.specials, [])
def test_with_creation_date(self):
task = T("2018-06-24 test task")
self.assertEqual(task.done, False)
self.assertEqual(task.priority, None)
self.assertEqual(task.completion_date, None)
self.assertEqual(task.creation_date,
datetime.datetime(2018, 6, 24, 0, 0))
self.assertEqual(task.projects, [])
self.assertEqual(task.contexts, [])
self.assertEqual(task.specials, [])
def test_with_creation_and_completion_date(self):
task = T("x 2018-06-24 2018-05-24 test task")
self.assertEqual(task.done, True)
self.assertEqual(task.priority, None)
self.assertEqual(task.completion_date,
datetime.datetime(2018, 6, 24, 0, 0))
self.assertEqual(task.creation_date,
datetime.datetime(2018, 5, 24, 0, 0))
self.assertEqual(task.projects, [])
self.assertEqual(task.contexts, [])
self.assertEqual(task.specials, [])
def test_with_creation_and_completion_and_priority_date(self):
task = T("x (B) 2018-06-24 2018-05-24 test task")
self.assertEqual(task.done, True)
self.assertEqual(task.priority, 'B')
self.assertEqual(task.completion_date,
datetime.datetime(2018, 6, 24, 0, 0))
self.assertEqual(task.creation_date,
datetime.datetime(2018, 5, 24, 0, 0))
self.assertEqual(task.projects, [])
self.assertEqual(task.contexts, [])
self.assertEqual(task.specials, [])
def test_special(self):
task = T("special task special:value")
self.assertEqual(task.done, False)
self.assertEqual(task.priority, None)
self.assertEqual(task.completion_date, None)
self.assertEqual(task.creation_date, None)
self.assertEqual(task.projects, [])
self.assertEqual(task.contexts, [])
self.assertEqual(task.specials, [{"special": "value"}])
unittest.main()