Test   A
last analyzed

Complexity

Total Complexity 8

Size/Duplication

Total Lines 77
Duplicated Lines 0 %

Importance

Changes 7
Bugs 2 Features 2
Metric Value
c 7
b 2
f 2
dl 0
loc 77
rs 10
wmc 8

8 Methods

Rating   Name   Duplication   Size   Complexity  
A setUpClass() 0 8 1
A test_filter_string() 0 8 1
A test_completed() 0 8 1
A tearDownClass() 0 3 1
A test_filter_or() 0 3 1
A test_new_delete() 0 7 1
A make_tasks() 0 23 1
A test_filter() 0 7 1
1
import unittest
2
from PyQt5 import QtCore
3
from datetime import date, timedelta
4
5
from qtodotxt2.lib import tasklib
6
from qtodotxt2.lib.file import File
7
from qtodotxt2.lib.filters import IncompleteTasksFilter, ContextFilter, ProjectFilter, DueThisMonthFilter, \
8
    DueThisWeekFilter, DueTodayFilter, DueOverdueFilter
9
from qtodotxt2.main_controller import MainController
10
11
12
class Test(unittest.TestCase):
13
14
    @classmethod
15
    def setUpClass(cls):
16
        QtCore.QCoreApplication.setOrganizationName("QTodoTxt")
17
        QtCore.QCoreApplication.setApplicationName("Testing")
18
        QtCore.QSettings().setValue("Preferences/auto_save", False)
19
        cls.ctrl = MainController([])
20
        cls.ctrl.allTasks = cls.make_tasks()
21
        cls.ctrl.showCompleted = True
22
    
23
    @staticmethod
24
    def make_tasks():
25
        today = date.today().isoformat()
26
        tomorrow = (date.today() + timedelta(days=1)).isoformat()
27
        nextweek = (date.today() + timedelta(days=8)).isoformat()
28
        tasks = []
29
        t = tasklib.Task("(A) Task home due:{} +project1 @context2".format(today))
30
        tasks.append(t)
31
        t = tasklib.Task("(B) Task due:{} +project2 @context1".format(tomorrow))
32
        tasks.append(t)
33
        t = tasklib.Task("Task due:2015-04-01 +project2 @context1")
34
        tasks.append(t)
35
        t = tasklib.Task("TOTO due:2015-04-02 +project3")
36
        tasks.append(t)
37
        t = tasklib.Task("TOTO due:{}".format(tomorrow))
38
        tasks.append(t)
39
        t = tasklib.Task("x (B) Task due:{} +project1 @context1".format(tomorrow))
40
        tasks.append(t)
41
        t = tasklib.Task("x (B) Task due:{} +project2 @context3".format(tomorrow))
42
        tasks.append(t)
43
        t = tasklib.Task("(B) Task home +project2 @context3")
44
        tasks.append(t)
45
        return tasks
46
47
48
    @classmethod
49
    def tearDownClass(cls):
50
        pass
51
52
    def test_completed(self):
53
        self.ctrl.showCompleted = True
54
        self.ctrl.applyFilters()
55
        self.assertEqual(len(self.ctrl.filteredTasks), len(self.ctrl.allTasks))
56
        self.ctrl.showCompleted = False
57
        self.ctrl.applyFilters()
58
        self.assertEqual(len(self.ctrl.filteredTasks), len(self.ctrl.allTasks) - 2)
59
        self.ctrl.showCompleted = True
60
61
    def test_new_delete(self):
62
        count = len(self.ctrl.allTasks)
63
        idx = self.ctrl.newTask("My funny new task + PeaceProject")
64
        self.assertEqual(count + 1,  len(self.ctrl.allTasks))
65
        task = self.ctrl.filteredTasks[idx]
66
        self.ctrl.deleteTasks([task])
67
        self.assertEqual(count,  len(self.ctrl.allTasks))
68
69
    def test_filter(self):
70
        self.ctrl.applyFilters([DueTodayFilter()])
71
        self.assertEqual(len(self.ctrl.filteredTasks), 1)
72
        print("START")
73
        self.ctrl.applyFilters([DueOverdueFilter()])
74
        self.assertEqual(len(self.ctrl.filteredTasks), 2)
75
        self.ctrl.applyFilters([])
76
77
    def test_filter_string(self):
78
        self.ctrl.searchText = "home"
79
        self.assertEqual(len(self.ctrl.filteredTasks), 2)
80
        self.ctrl.searchText = "+project2"
81
        self.assertEqual(len(self.ctrl.filteredTasks), 4)
82
        self.ctrl.searchText = "!due home"
83
        self.assertEqual(len(self.ctrl.filteredTasks), 1)
84
        self.ctrl.searchText = ""
85
86
    def test_filter_or(self):
87
        self.ctrl.searchText = "home | TOTO"
88
        self.assertEqual(len(self.ctrl.filteredTasks), 4)
89