~saurabhanandiit/gtg/exportFixed

« back to all changes in this revision

Viewing changes to GTG/tests/test_search_filter.py

  • Committer: Izidor Matušov
  • Date: 2012-02-29 10:06:41 UTC
  • mfrom: (1098 gtg)
  • mto: This revision was merged to the branch mainline in revision 1103.
  • Revision ID: izidor.matusov@gmail.com-20120229100641-q1uns4yqz1fem2z4
Merged with the current trunk & solved problems with offset

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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
 
5
#
 
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
 
9
# version.
 
10
#
 
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
 
14
# details.
 
15
#
 
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
# -----------------------------------------------------------------------------
 
19
 
 
20
""" Tests for search filter """
 
21
 
 
22
import unittest
 
23
from GTG.core.search import search_filter
 
24
from GTG.tools.dates import Date
 
25
 
 
26
d = Date.parse
 
27
 
 
28
class FakeTask:
 
29
    def __init__(self, title="", body="", tags=[], due_date=""):
 
30
        self.title = title
 
31
        self.body = body
 
32
        self.tags = tags
 
33
        self.due_date = Date.parse(due_date)
 
34
 
 
35
    def get_title(self):
 
36
        return self.title
 
37
 
 
38
    def get_excerpt(self, strip_tags=False):
 
39
        return self.body
 
40
 
 
41
    def get_tags_name(self):
 
42
        return self.tags
 
43
 
 
44
    def get_due_date(self):
 
45
        return self.due_date
 
46
 
 
47
class TestSearchFilter(unittest.TestCase):
 
48
 
 
49
    def test_empty(self):
 
50
        self.assertFalse(search_filter(FakeTask()))
 
51
 
 
52
    def test_single_tag(self):
 
53
        task = FakeTask(tags = ['@a'])
 
54
 
 
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")]}))
 
58
 
 
59
    def test_double_tag(self):
 
60
        p = {"q": [("tag", True, "@a"), ("tag", True, "@b")]}
 
61
        task = FakeTask(tags = ['@a'])
 
62
 
 
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))
 
70
 
 
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))
 
79
 
 
80
    def test_simple_tag_or(self):
 
81
        task = FakeTask(tags = ['@a', '@b'])
 
82
 
 
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")])]}))
 
87
 
 
88
    def test_simple_word_in_title(self):
 
89
        task = FakeTask(title="GTG is the best ToDo manager for GNOME")
 
90
 
 
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')]}))
 
97
 
 
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')]}))
 
106
 
 
107
        # test literals
 
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')]}))
 
112
 
 
113
    def test_simple_before(self):
 
114
        v = FakeTask(due_date="2012-02-14")
 
115
 
 
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'))]}))
 
123
 
 
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'))]}))
 
127
 
 
128
    def test_simple_after(self):
 
129
        t = FakeTask(due_date="2012-06-01")
 
130
 
 
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'))]}))
 
135
 
 
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)]}))
 
143
 
 
144
def test_suite():
 
145
    return unittest.TestLoader().loadTestsFromName(__name__)