-
-
Notifications
You must be signed in to change notification settings - Fork 19
/
projecttestcase.py
108 lines (86 loc) · 3.49 KB
/
projecttestcase.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
# -*- coding: UTF-8 -*-
"""
Project test cases
@author: Aurélien Gâteau <mail@agateau.com>
@license: GPL v3 or later
"""
import testutils
from yokadi.core import db, dbutils
from yokadi.core.db import Project, Task
from yokadi.core.yokadiexception import YokadiException
from yokadi.ycli.main import YokadiCmd
from yokadi.ycli import tui
from yokadi.tests.yokaditestcase import YokadiTestCase
class ProjectTestCase(YokadiTestCase):
def setUp(self):
YokadiTestCase.setUp(self)
db.connectDatabase("", memoryDatabase=True)
self.session = db.getSession()
tui.clearInputAnswers()
self.cmd = YokadiCmd()
def testAdd(self):
tui.addInputAnswers("y")
self.cmd.do_p_add("p1")
self.cmd.do_p_add("p2")
projects = self.session.query(Project).all()
result = [x.name for x in projects]
expected = ["p1", "p2"]
self.assertEqual(result, expected)
def testEdit(self):
# Create project p1 and rename it to p2
self.cmd.do_p_add("p1")
project = self.session.query(Project).filter_by(id=1).one()
self.assertEqual(project.name, "p1")
tui.addInputAnswers("p2")
self.cmd.do_p_edit("p1")
self.assertEqual(project.name, "p2")
# Create project p3 and try to rename it to p2
self.cmd.do_p_add("p3")
project = self.session.query(Project).filter_by(name="p3").one()
self.assertEqual(project.name, "p3")
tui.addInputAnswers("p2")
self.assertRaises(YokadiException, self.cmd.do_p_edit, "p3")
self.assertEqual(project.name, "p3")
def testRemove(self):
# Create project p1 with one associated task
tui.addInputAnswers("y")
self.cmd.do_p_add("p1")
project = self.session.query(Project).one()
task = dbutils.addTask("p1", "t1", interactive=False)
taskId = task.id
# Remove project, its task should be removed
tui.addInputAnswers("y")
self.cmd.do_p_remove("p1")
self.assertEqual(list(self.session.query(Task).filter_by(id=taskId)), [])
def testStatus(self):
# Create project p1 and test set active and set inactive method
self.cmd.do_p_add("p1")
project = self.session.query(Project).filter_by(id=1).one()
self.assertEqual(project.name, "p1")
self.assertEqual(project.active, True)
self.cmd.do_p_set_inactive("p1")
self.assertEqual(project.active, False)
self.cmd.do_p_set_active("p1")
self.assertEqual(project.active, True)
def testMerge(self):
COUNT = 4
for x in range(COUNT):
dbutils.addTask('p1', 'p1-t{}'.format(x), interactive=False)
dbutils.addTask('p2', 'p2-t{}'.format(x), interactive=False)
# Merge p1 into p2
tui.addInputAnswers("y")
self.cmd.do_p_merge("p1 p2")
# p2 should have both its tasks and all p1 tasks now
project = self.session.query(Project).filter_by(name="p2").one()
tasks = set([x.title for x in project.tasks])
expected = set()
for x in range(COUNT):
expected.add('p1-t{}'.format(x))
expected.add('p2-t{}'.format(x))
self.assertEqual(tasks, expected)
# p1 should be gone
testutils.assertQueryEmpty(self, self.session.query(Project).filter_by(name="p1"))
def testMergeItselfFails(self):
project = Project(name="p1")
self.assertRaises(YokadiException, project.merge, self.session, project)
# vi: ts=4 sw=4 et