-
Notifications
You must be signed in to change notification settings - Fork 22
Expand file tree
/
Copy pathtest_things_cli.py
More file actions
112 lines (98 loc) · 3.63 KB
/
test_things_cli.py
File metadata and controls
112 lines (98 loc) · 3.63 KB
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
109
110
111
112
#!/usr/bin/env python3
"""Module documentation goes here."""
import io
import sys
import unittest
from things_cli import cli
class ThingsCLICase(unittest.TestCase):
"""Class documentation goes here."""
things3_cli = cli.ThingsCLI(database="tests/main.sqlite")
def _test_main(self, args, expected):
new_out = io.StringIO()
old_out = sys.stdout
try:
sys.stdout = new_out
self.things3_cli.main(args)
finally:
sys.stdout = old_out
self.assertIn(expected, new_out.getvalue())
def test_methods(self):
"""Invoke all commands."""
parser = self.things3_cli.get_parser()
for command in parser._subparsers._actions[
1
].choices: # noqa # pylint: disable=protected-access
if command not in ["feedback", "search", "logtoday", "logyesterday", "createdtoday"]:
args = parser.parse_args([command])
self._test_main(args, " ")
args = parser.parse_args(["-r", command])
self._test_main(args, " ")
args = parser.parse_args(["-r", "-o", command])
self._test_main(args, " ")
args = parser.parse_args(["-r", "-c", command])
self._test_main(args, ";")
args = parser.parse_args(["-r", "-j", command])
self._test_main(args, " ")
elif command in ["logtoday","logyesterday"]:
args = parser.parse_args([command])
self._test_main(args, "")
elif command in ["search"]:
args = parser.parse_args([command, "To-Do in Inbox"])
self._test_main(args, "To-Do in Inbox")
args = parser.parse_args(["search", "To-Do"])
self._test_main(args, "To-Do in Today")
def test_noparam(self):
"""Test no parameter."""
new_out = io.StringIO()
old_out = sys.stdout
with self.assertRaises(SystemExit):
sys.stderr = new_out
self.things3_cli.main()
sys.stderr = old_out
self.assertIn("usage:", new_out.getvalue())
with self.assertRaises(SystemExit):
sys.stderr = new_out
cli.main()
sys.stderr = old_out
self.assertIn("usage:", new_out.getvalue())
def test_today(self):
"""Test Today."""
args = self.things3_cli.get_parser().parse_args(
["-d", "tests/main.sqlite", "today"]
)
new_out = io.StringIO()
old_out = sys.stdout
try:
sys.stdout = new_out
self.things3_cli.main(args)
finally:
sys.stdout = old_out
self.assertIn("To-Do in Today", new_out.getvalue())
def test_csv(self):
"""Test Next via CSV."""
args = self.things3_cli.get_parser().parse_args(
["-d", "tests/main.sqlite", "-c", "anytime"]
)
new_out = io.StringIO()
old_out = sys.stdout
try:
sys.stdout = new_out
self.things3_cli.main(args)
finally:
sys.stdout = old_out
self.assertIn("E18tg5qepzrQk9J6jQtb5C", new_out.getvalue())
def test_json(self):
"""Test Upcoming via JSON."""
args = self.things3_cli.get_parser().parse_args(
["-d", "tests/main.sqlite", "-j", "upcoming"]
)
new_out = io.StringIO()
old_out = sys.stdout
try:
sys.stdout = new_out
self.things3_cli.main(args)
finally:
sys.stdout = old_out
self.assertIn("7F4vqUNiTvGKaCUfv5pqYG", new_out.getvalue())
if __name__ == "__main__":
unittest.main()