~ubuntu-branches/ubuntu/jaunty/trac/jaunty

« back to all changes in this revision

Viewing changes to trac/ticket/tests/roadmap.py

  • Committer: Bazaar Package Importer
  • Author(s): Luis Matos
  • Date: 2008-07-13 23:46:20 UTC
  • mfrom: (1.1.13 upstream)
  • Revision ID: james.westby@ubuntu.com-20080713234620-13ynpdpkbaymfg1z
Tags: 0.11-2
* Re-added python-setup-tools to build dependences. Closes: #490320 #468705
* New upstream release Closes: 489727
* Added sugestion for other vcs support available: git bazaar mercurial 
* Added spamfilter plugin to sugests
* Moved packaging from python-support to python-central
* Added an entry to the NEWS about the cgi Closes: #490275
* Updated 10_remove_trac_suffix_from_title patch to be used in 0.11

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
from trac.config import Configuration
 
2
from trac.test import EnvironmentStub
 
3
from trac.ticket.roadmap import *
 
4
from trac.core import ComponentManager
 
5
 
 
6
import unittest
 
7
 
 
8
class TicketGroupStatsTestCase(unittest.TestCase):
 
9
 
 
10
    def setUp(self):
 
11
        self.stats = TicketGroupStats('title', 'unit')
 
12
 
 
13
    def test_init(self):
 
14
        self.assertEquals('title', self.stats.title, 'title incorrect')
 
15
        self.assertEquals('unit', self.stats.unit, 'unit incorrect')
 
16
        self.assertEquals(0, self.stats.count, 'count not zero')
 
17
        self.assertEquals(0, len(self.stats.intervals), 'intervals not empty')
 
18
 
 
19
    def test_add_iterval(self):
 
20
        self.stats.add_interval('intTitle', 3, {'k1': 'v1'}, 'css', 0)
 
21
        self.stats.refresh_calcs()
 
22
        self.assertEquals(3, self.stats.count, 'count not incremented')
 
23
        int = self.stats.intervals[0]
 
24
        self.assertEquals('intTitle', int['title'], 'title incorrect')
 
25
        self.assertEquals(3, int['count'], 'count incorrect')
 
26
        self.assertEquals({'k1': 'v1'}, int['qry_args'], 'query args incorrect')
 
27
        self.assertEquals('css', int['css_class'], 'css class incorrect')
 
28
        self.assertEquals(100, int['percent'], 'percent incorrect')
 
29
        self.stats.add_interval('intTitle', 3, {'k1': 'v1'}, 'css', 0)
 
30
        self.stats.refresh_calcs()
 
31
        self.assertEquals(50, int['percent'], 'percent not being updated')
 
32
 
 
33
    def test_add_interval_no_prog(self):
 
34
        self.stats.add_interval('intTitle', 3, {'k1': 'v1'}, 'css', 0)
 
35
        self.stats.add_interval('intTitle', 5, {'k1': 'v1'}, 'css', 0)
 
36
        self.stats.refresh_calcs()
 
37
        int = self.stats.intervals[1]
 
38
        self.assertEquals(0, self.stats.done_count, 'count added for no prog')
 
39
        self.assertEquals(0, self.stats.done_percent, 'percent incremented')
 
40
 
 
41
    def test_add_interval_prog(self):
 
42
        self.stats.add_interval('intTitle', 3, {'k1': 'v1'}, 'css', 0)
 
43
        self.stats.add_interval('intTitle', 1, {'k1': 'v1'}, 'css', 1)
 
44
        self.stats.refresh_calcs()
 
45
        self.assertEquals(4, self.stats.count, 'count not incremented')
 
46
        self.assertEquals(1, self.stats.done_count, 'count not added to prog')
 
47
        self.assertEquals(25, self.stats.done_percent, 'done percent not incr')
 
48
 
 
49
    def test_add_interval_fudging(self):
 
50
        self.stats.add_interval('intTitle', 3, {'k1': 'v1'}, 'css', 0)
 
51
        self.stats.add_interval('intTitle', 5, {'k1': 'v1'}, 'css', 1)
 
52
        self.stats.refresh_calcs()
 
53
        self.assertEquals(8, self.stats.count, 'count not incremented')
 
54
        self.assertEquals(5, self.stats.done_count, 'count not added to prog')
 
55
        self.assertEquals(62, self.stats.done_percent,
 
56
                          'done percnt not fudged downward')
 
57
        self.assertEquals(62, self.stats.intervals[1]['percent'],
 
58
                          'interval percent not fudged downward')
 
59
        self.assertEquals(38, self.stats.intervals[0]['percent'],
 
60
                          'interval percent not fudged upward')
 
61
 
 
62
 
 
63
class DefaultTicketGroupStatsProviderTestCase(unittest.TestCase):
 
64
 
 
65
    def setUp(self):
 
66
        self.env = EnvironmentStub(default_data=True)
 
67
 
 
68
        self.milestone1 = Milestone(self.env)
 
69
        self.milestone1.name = 'Test'
 
70
        self.milestone1.insert()
 
71
        self.milestone2 = Milestone(self.env)
 
72
        self.milestone2.name = 'Test2'
 
73
        self.milestone2.insert()
 
74
 
 
75
        tkt1 = Ticket(self.env)
 
76
        tkt1.populate({'summary': 'Foo', 'milestone': 'Test', 'owner': 'foman',
 
77
                        'status': 'new'})
 
78
        tkt1.insert()
 
79
        tkt2 = Ticket(self.env)
 
80
        tkt2.populate({'summary': 'Bar', 'milestone': 'Test',
 
81
                        'status': 'closed', 'owner': 'barman'})
 
82
        tkt2.insert()
 
83
        tkt3 = Ticket(self.env)
 
84
        tkt3.populate({'summary': 'Sum', 'milestone': 'Test', 'owner': 'suman',
 
85
                        'status': 'reopened'})
 
86
        tkt3.insert()
 
87
        self.tkt1 = tkt1
 
88
        self.tkt2 = tkt2
 
89
        self.tkt3 = tkt3
 
90
        
 
91
        prov = DefaultTicketGroupStatsProvider(ComponentManager())
 
92
        prov.env = self.env
 
93
        prov.config = self.env.config
 
94
        self.stats = prov.get_ticket_group_stats([tkt1.id, tkt2.id, tkt3.id])
 
95
 
 
96
    def test_stats(self):
 
97
        self.assertEquals(self.stats.title, 'ticket status', 'title incorrect')
 
98
        self.assertEquals(self.stats.unit, 'ticket', 'unit incorrect')
 
99
        self.assertEquals(2, len(self.stats.intervals), 'more than 2 intervals')
 
100
 
 
101
    def test_closed_interval(self):
 
102
        closed = self.stats.intervals[0]
 
103
        self.assertEquals('closed', closed['title'], 'closed title incorrect')
 
104
        self.assertEquals('closed', closed['css_class'], 'closed class incorrect')
 
105
        self.assertEquals(True, closed['overall_completion'],
 
106
                          'closed should contribute to overall completion')
 
107
        self.assertEquals({'status': ['closed'], 'group': 'resolution'},
 
108
                          closed['qry_args'], 'qry_args incorrect')
 
109
        self.assertEquals(1, closed['count'], 'closed count incorrect')
 
110
        self.assertEquals(33, closed['percent'], 'closed percent incorrect')
 
111
 
 
112
    def test_open_interval(self):
 
113
        open = self.stats.intervals[1]
 
114
        self.assertEquals('active', open['title'], 'open title incorrect')
 
115
        self.assertEquals('open', open['css_class'], 'open class incorrect')
 
116
        self.assertEquals(False, open['overall_completion'],
 
117
                          "open shouldn't contribute to overall completion")
 
118
        self.assertEquals({'status':
 
119
                           [u'assigned', u'new', u'accepted', u'reopened']},
 
120
                          open['qry_args'], 'qry_args incorrect')
 
121
        self.assertEquals(2, open['count'], 'open count incorrect')
 
122
        self.assertEquals(67, open['percent'], 'open percent incorrect')
 
123
 
 
124
 
 
125
def in_tlist(ticket, list):
 
126
    return len([t for t in list if t['id'] == ticket.id]) > 0
 
127
 
 
128
def suite():
 
129
    suite = unittest.TestSuite()
 
130
    suite.addTest(unittest.makeSuite(TicketGroupStatsTestCase, 'test'))
 
131
    suite.addTest(unittest.makeSuite(DefaultTicketGroupStatsProviderTestCase,
 
132
                                      'test'))
 
133
    return suite
 
134
 
 
135
if __name__ == '__main__':
 
136
    unittest.main(defaultTest='suite')