| 1 | # -*- coding: utf-8 -*- |
|---|
| 2 | |
|---|
| 3 | import unittest |
|---|
| 4 | from trac.admin.console import TracAdmin |
|---|
| 5 | from trac.web import Href |
|---|
| 6 | from trac.perm import PermissionError |
|---|
| 7 | from trac.test import EnvironmentStub, Mock, MockPerm |
|---|
| 8 | from ..model import get_users, PeerReviewModel, PeerReviewerModel, PeerReviewModelProvider |
|---|
| 9 | from ..peerReviewNew import add_users_to_data, create_file_hash_id, NewReviewModule |
|---|
| 10 | |
|---|
| 11 | __author__ = 'Cinc' |
|---|
| 12 | |
|---|
| 13 | __copyright__ = "Copyright 2016" |
|---|
| 14 | __license__ = "BSD" |
|---|
| 15 | |
|---|
| 16 | def _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 | |
|---|
| 27 | class 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 | |
|---|
| 39 | class 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 | |
|---|
| 63 | class 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 | |
|---|
| 121 | class 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 | |
|---|
| 173 | def 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 |
|---|