1
# -*- coding: utf-8 -*-
2
# -----------------------------------------------------------------------------
3
# Gettings Things Gnome! - a personal organizer for the GNOME desktop
4
# Copyright (c) 2008-2012 - Lionel Dricot & Bertrand Rousseau
6
# This program is free software: you can redistribute it and/or modify it under
7
# the terms of the GNU General Public License as published by the Free Software
8
# Foundation, either version 3 of the License, or (at your option) any later
11
# This program is distributed in the hope that it will be useful, but WITHOUT
12
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
13
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
16
# You should have received a copy of the GNU General Public License along with
17
# this program. If not, see <http://www.gnu.org/licenses/>.
18
# -----------------------------------------------------------------------------
20
""" Tests for search filter """
23
from GTG.core.search import search_filter
24
from GTG.tools.dates import Date
29
def __init__(self, title="", body="", tags=[], due_date=""):
33
self.due_date = Date.parse(due_date)
38
def get_excerpt(self, strip_tags=False):
41
def get_tags_name(self):
44
def get_due_date(self):
47
class TestSearchFilter(unittest.TestCase):
50
self.assertFalse(search_filter(FakeTask()))
52
def test_single_tag(self):
53
task = FakeTask(tags = ['@a'])
55
self.assertTrue(search_filter(task, {"q": [("tag", True, "@a")]}))
56
self.assertFalse(search_filter(task, {"q": [("tag", True, "@b")]}))
57
self.assertFalse(search_filter(task, {"q": [("tag", True, "@n")]}))
59
def test_double_tag(self):
60
p = {"q": [("tag", True, "@a"), ("tag", True, "@b")]}
61
task = FakeTask(tags = ['@a'])
63
self.assertTrue(search_filter(FakeTask(tags = ['@a', '@b']), p))
64
self.assertTrue(search_filter(FakeTask(tags = ['@b', '@a']), p))
65
self.assertTrue(search_filter(FakeTask(tags = ['@b', '@a', '@a']), p))
66
self.assertTrue(search_filter(FakeTask(tags = ['@b', '@a', '@c', '@d']), p))
67
self.assertTrue(search_filter(FakeTask(tags = ['@b', 'search', '@a']), p))
68
self.assertTrue(search_filter(FakeTask(tags = ['gtg-tags-all', '@b', 'search', '@a']), p))
69
self.assertTrue(search_filter(FakeTask(tags = ['gtg-tags-all', 'gtg-tags-none', '@b', 'search', '@a']), p))
71
self.assertFalse(search_filter(FakeTask(tags = ['@n', '@b']), p))
72
self.assertFalse(search_filter(FakeTask(tags = ['@b', '@n']), p))
73
self.assertFalse(search_filter(FakeTask(tags = ['@a']), p))
74
self.assertFalse(search_filter(FakeTask(tags = ['@b']), p))
75
self.assertFalse(search_filter(FakeTask(tags = ['@b', '@b', '@c', '@d']), p))
76
self.assertFalse(search_filter(FakeTask(tags = ['@b', 'search', '@d']), p))
77
self.assertFalse(search_filter(FakeTask(tags = ['gtg-tags-all', '@g', 'search', '@a']), p))
78
self.assertFalse(search_filter(FakeTask(tags = ['gtg-tags-all', 'gtg-tags-none', '@@b', 'search', '@a']), p))
80
def test_simple_tag_or(self):
81
task = FakeTask(tags = ['@a', '@b'])
83
self.assertTrue(search_filter(task, {"q": [('or', True, [("tag", True, "@a"), ("tag", True, "@b")])]}))
84
self.assertTrue(search_filter(task, {"q": [('or', True, [("tag", True, "@a"), ("tag", True, "@n")])]}))
85
self.assertTrue(search_filter(task, {"q": [('or', True, [("tag", True, "@n"), ("tag", True, "@b")])]}))
86
self.assertFalse(search_filter(task, {"q": [('or', True, [("tag", True, "@n"), ("tag", True, "@n")])]}))
88
def test_simple_word_in_title(self):
89
task = FakeTask(title="GTG is the best ToDo manager for GNOME")
91
# Test the lowercasing
92
self.assertTrue(search_filter(task, {'q': [("word", True, 'GTG')]}))
93
self.assertTrue(search_filter(task, {'q': [("word", True, 'gtg')]}))
94
self.assertTrue(search_filter(task, {'q': [("word", True, 'GtG')]}))
95
self.assertTrue(search_filter(task, {'q': [("word", True, 'Gtg')]}))
96
self.assertTrue(search_filter(task, {'q': [("word", True, 'gTg')]}))
98
self.assertTrue(search_filter(task, {'q': [("word", True, 'GTG')]}))
99
self.assertTrue(search_filter(task, {'q': [("word", True, 'is')]}))
100
self.assertTrue(search_filter(task, {'q': [("word", True, 'the')]}))
101
self.assertTrue(search_filter(task, {'q': [("word", True, 'best')]}))
102
self.assertTrue(search_filter(task, {'q': [("word", True, 'todo')]}))
103
self.assertTrue(search_filter(task, {'q': [("word", True, 'manager')]}))
104
self.assertTrue(search_filter(task, {'q': [("word", True, 'for')]}))
105
self.assertTrue(search_filter(task, {'q': [("word", True, 'GNOME')]}))
108
self.assertTrue(search_filter(task, {'q': [("word", True, 'GTG is')]}))
109
self.assertTrue(search_filter(task, {'q': [("word", True, 'for GNOME')]}))
110
self.assertTrue(search_filter(task, {'q': [("word", False, 'GTG for GNOME')]}))
111
self.assertFalse(search_filter(task, {'q': [("word", True, 'GTG for GNOME')]}))
113
def test_simple_before(self):
114
v = FakeTask(due_date="2012-02-14")
116
self.assertTrue(search_filter(v, {'q': [("before", True, d('2022-01-01'))]}))
117
self.assertTrue(search_filter(v, {'q': [("before", True, d('2012-03-01'))]}))
118
self.assertTrue(search_filter(v, {'q': [("before", True, d('2012-02-20'))]}))
119
self.assertTrue(search_filter(v, {'q': [("before", True, d('2012-02-15'))]}))
120
self.assertFalse(search_filter(v, {'q': [("before", True, d('2012-02-14'))]}))
121
self.assertFalse(search_filter(v, {'q': [("before", True, d('2012-02-13'))]}))
122
self.assertFalse(search_filter(v, {'q': [("before", True, d('2000-01-01'))]}))
124
self.assertFalse(search_filter(v, {'q': [("before", False, d('2012-03-01'))]}))
125
self.assertTrue(search_filter(v, {'q': [("before", False, d('2012-02-14'))]}))
126
self.assertTrue(search_filter(v, {'q': [("before", False, d('2002-02-20'))]}))
128
def test_simple_after(self):
129
t = FakeTask(due_date="2012-06-01")
131
self.assertTrue(search_filter(t, {'q': [("after", True, d('2002-01-01'))]}))
132
self.assertTrue(search_filter(t, {'q': [("after", True, d('2012-05-30'))]}))
133
self.assertFalse(search_filter(t, {'q': [("after", True, d('2013-02-20'))]}))
134
self.assertTrue(search_filter(t, {'q': [("after", False, d('2022-02-15'))]}))
136
def test_dates(self):
137
self.assertTrue(search_filter(FakeTask(due_date="today"), {'q': [("today", True)]}))
138
self.assertTrue(search_filter(FakeTask(due_date="tomorrow"), {'q': [("tomorrow", True)]}))
139
self.assertTrue(search_filter(FakeTask(due_date=""), {'q': [("nodate", True)]}))
140
self.assertTrue(search_filter(FakeTask(due_date="now"), {'q': [("now", True)]}))
141
self.assertTrue(search_filter(FakeTask(due_date="soon"), {'q': [("soon", True)]}))
142
self.assertTrue(search_filter(FakeTask(due_date="someday"), {'q': [("someday", True)]}))
145
return unittest.TestLoader().loadTestsFromName(__name__)