source: peerreviewplugin/tags/0.12/3.1/codereview/tests/new_review.py

Last change on this file was 15525, checked in by Cinc-th, 7 years ago

PeerReviewPlugin: make tests work on OS X.

File size: 6.8 KB
Line 
1# -*- coding: utf-8 -*-
2
3import unittest
4from trac.admin.console import TracAdmin
5from trac.web import Href
6from trac.perm import PermissionError
7from trac.test import EnvironmentStub, Mock, MockPerm
8from ..model import  get_users, PeerReviewModel, PeerReviewerModel, PeerReviewModelProvider
9from ..peerReviewNew import add_users_to_data, create_file_hash_id, NewReviewModule
10
11__author__ = 'Cinc'
12
13__copyright__ = "Copyright 2016"
14__license__ = "BSD"
15
16def _add_permissions(env):
17    admin = TracAdmin()
18    admin.env_set('Testenv', env)
19    admin.onecmd("permission add Tester TICKET_VIEW")  # User not allowed to perform code reviews
20    admin.onecmd("permission add Rev1 TRAC_ADMIN")
21    admin.onecmd("permission add Rev2 CODE_REVIEW_DEV")
22    admin.onecmd("permission add Rev3 CODE_REVIEW_MGR")
23    admin.onecmd("permission add Rev1 RevGroup")
24    admin.onecmd("permission add Rev2 RevGroup")
25
26
27class TestCreateFileHashId(unittest.TestCase):
28
29    def test_hash(self):
30
31        f = {
32            'path': "path",
33            'revision': 123,
34            'line_start': 1234,
35            'line_end': 5678
36        }
37        self. assertEqual('id2008204331', create_file_hash_id(f))
38
39class TestComponent(unittest.TestCase):
40
41    @classmethod
42    def setUpClass(cls):
43        cls.env = EnvironmentStub(default_data=True, enable=['trac.*',
44                                                             'codereview.model.*',
45                                                             'codereview.peerreviewnew.*',
46                                                             'codereview.peerreviewmain.*',
47                                                             'codereview.tracgenericclass.*'])
48        PeerReviewModelProvider(cls.env).environment_created()
49        cls.plugin =  NewReviewModule(cls.env)
50        cls.req = Mock(href=Mock(), perm=MockPerm())
51
52    @classmethod
53    def tearDownClass(cls):
54        cls.env.shutdown()
55
56    def test_get_active_navigation_item(self):
57        self.assertEqual('peerReviewMain', self.plugin.get_active_navigation_item(self.req))
58
59    def test_get_navigation_items(self):
60        self.assertEqual(0, len(self.plugin.get_navigation_items(self.req)))
61
62
63class TestUserHandling(unittest.TestCase):
64
65    @classmethod
66    def setUpClass(cls):
67        cls.env = EnvironmentStub(default_data=True,
68                                  enable=['trac.*',
69                                          'codereview.model.*',
70                                          'codereview.peerreviewnew.*',
71                                          'codereview.peerreviewmain.*',
72                                          'codereview.tracgenericclass.*'])
73        PeerReviewModelProvider(cls.env).environment_created()
74        cls.plugin =  NewReviewModule(cls.env)
75        _add_permissions(cls.env)
76        reviewer = PeerReviewerModel(cls.env)
77        reviewer['review_id'] = 1
78        reviewer['reviewer'] = 'Rev1'
79        reviewer.insert()
80        reviewer = PeerReviewerModel(cls.env)
81        reviewer['review_id'] = 1
82        reviewer['reviewer'] = 'Rev2'
83        reviewer.insert()
84
85    @classmethod
86    def tearDownClass(cls):
87        cls.env.shutdown()
88
89    def test_get_code_review_users(self):
90        self.assertEqual(3,len(get_users(self.env)))
91
92    def test_add_users_to_data_dict_no_review(self):
93        data = {}
94        add_users_to_data(self.env, 0, data)
95        self.assertTrue('users' in data)
96        self.assertEqual(3, len(data['users']))
97        # There is no review so we have no assigned users.
98        self.assertTrue('assigned_users' in data)
99        self.assertEqual(0, len(data['assigned_users']))
100
101        self.assertTrue('unassigned_users' in data)
102        self.assertEqual(3, len(data['unassigned_users']))
103        self.assertTrue('emptyList' in data)
104        self.assertEqual(0, data['emptyList'])
105
106    def test_add_users_to_data_dict(self):
107        data = {}
108        add_users_to_data(self.env, 1, data)
109        self.assertTrue('users' in data)
110        self.assertEqual(3, len(data['users']))
111        # There is no review so we have no assigned users.
112        self.assertTrue('assigned_users' in data)
113        self.assertEqual(2, len(data['assigned_users']))
114
115        self.assertTrue('unassigned_users' in data)
116        self.assertEqual(1, len(data['unassigned_users']))
117        self.assertTrue('emptyList' in data)
118        self.assertEqual(0, data['emptyList'])
119
120
121class TestCreateCodeReview(unittest.TestCase):
122
123    @classmethod
124    def setUpClass(cls):
125        cls.env = EnvironmentStub(default_data=True, enable=['trac.*',
126                                                             'codereview.model.*',
127                                                             'codereview.peerreviewnew.*',
128                                                             'codereview.peerreviewmain.*',
129                                                             'codereview.tracgenericclass.*'])
130        PeerReviewModelProvider(cls.env).environment_created()
131        _add_permissions(cls.env)
132        cls.plugin =  NewReviewModule(cls.env)
133        cls.req = Mock(href=Mock(), perm=MockPerm())
134        cls.req.authname = 'Tester'
135
136        cls.req.args={
137            'Name': 'review_name',
138            'Notes': 'review_notes',
139            'project': 'review_project',
140            'user': ['Rev1', 'Rev2'],
141            # 'file': 'path,file_revision,123,789'
142        }
143
144    @classmethod
145    def tearDownClass(cls):
146        cls.env.shutdown()
147
148    def test_create_code_review(self):
149        review_id = self.plugin.createCodeReview(self.req)
150        self.assertEqual(1, review_id)
151        review = PeerReviewModel(self.env, review_id)
152        self.assertTrue(isinstance(review, PeerReviewModel))
153        items = [
154            [u'review_name', 'name'],
155            [u'review_notes', 'notes'],
156            [u'review_project', 'project'],
157            [u'Tester', 'owner'],
158            [u'new', 'status'],
159            [0, 'parent_id']
160        ]
161        for item in items:
162            self.assertEqual(item[0], review[item[1]])
163        rm = PeerReviewerModel(self.env)
164        rm.clear_props()
165        rm['review_id'] = review_id
166        reviewers = list(rm.list_matching_objects())
167        self.assertEqual(2, len(reviewers))
168        for rev in reviewers:
169            self.assertEqual(1, rev['review_id'])
170            self.assertTrue(rev['reviewer'] in ['Rev1', 'Rev2'])
171            self.assertEqual(u'new', rev['status'])
172
173def new_review_suite():
174    suite = unittest.TestSuite()
175
176    suite.addTest(unittest.makeSuite(TestCreateFileHashId))
177    suite.addTest(unittest.makeSuite(TestComponent))
178    suite.addTest(unittest.makeSuite(TestUserHandling))
179    suite.addTest(unittest.makeSuite(TestCreateCodeReview))
180
181    return suite
Note: See TracBrowser for help on using the repository browser.