source: peerreviewplugin/tags/0.12/3.1/codereview/tests/review_model.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: 3.5 KB
Line 
1# -*- coding: utf-8 -*-
2
3import unittest
4from trac.web import Href
5from trac.test import EnvironmentStub, Mock, MockPerm
6from ..model import  PeerReviewModel, PeerReviewModelProvider
7from ..tracgenericworkflow.api import  ResourceWorkflowSystem
8from ..tracgenericworkflow.model import GenericWorkflowModelProvider
9
10
11__author__ = 'Cinc'
12__copyright__ = "Copyright 2016"
13__license__ = "BSD"
14
15
16def _prepare_review_data(env):
17    # owner, status, name, notes, parent_is
18    revs = [
19        ['Rev1', 'bar', 'name1', 'note1', 0],
20        ['Rev1', 'closed', 'name2', 'note2', 0],
21        ['Rev2', 'bar', 'name3', 'note3', 1],
22        ['Rev3', 'foo', 'name4', 'note4', 2]
23    ]
24
25    @env.with_transaction()
26    def do_insert(db):
27        for rev in revs:
28            cursor = db.cursor()
29            cursor.execute("INSERT INTO peerreview (owner, status, name, notes, parent_id) "
30                           "VALUES (%s,%s,%s,%s,%s)", rev)
31
32
33class TestReviewModel(unittest.TestCase):
34
35    @classmethod
36    def setUpClass(cls):
37        cls.env = EnvironmentStub(default_data=True, enable=['trac.*', 'codereview.*'])
38        PeerReviewModelProvider(cls.env).environment_created()
39        GenericWorkflowModelProvider(cls.env).environment_created()  # Needed for creating the workflow table
40        _prepare_review_data(cls.env)
41        cls.plugin = ResourceWorkflowSystem(cls.env)
42        cls.req = Mock(href=Href(''), perm=MockPerm(), redirect=lambda x: x)
43        cls.req.authname = 'Tester'
44        cls.req.path_info = '/workflowtransition'
45
46    @classmethod
47    def tearDownClass(cls):
48        cls.env.shutdown()
49
50    def test_get_review(self):
51        rm = PeerReviewModel(self.env, 1)
52        self.assertTrue(isinstance(rm, PeerReviewModel))
53        self.assertTrue(rm.exists)
54
55    def test_query_by_status(self):
56        rm = PeerReviewModel(self.env)
57        rm.clear_props()
58        rm['status'] = 'bar'
59        revs = list(rm.list_matching_objects())
60        self.assertEqual(2, len(revs))
61        rm = PeerReviewModel(self.env)
62        rm.clear_props()
63        rm['status'] = 'closed'
64        revs = list(rm.list_matching_objects())
65        self.assertEqual(1, len(revs))
66
67    def test_query_by_owner(self):
68        rm = PeerReviewModel(self.env)
69        rm.clear_props()
70        rm['owner'] = 'Rev1'
71        revs = list(rm.list_matching_objects())
72        self.assertEqual(2, len(revs))
73
74    def test_change_note(self):
75        rm = PeerReviewModel(self.env, 1)
76        self.assertEqual(u'note1', rm['notes'])
77        rm['notes'] = u'note1_changed'
78        rm.save_changes()
79        rm = PeerReviewModel(self.env, 1)
80        self.assertEqual(u'note1_changed', rm['notes'])
81
82    def test_review_workflow(self):
83        self.req.args = {
84            'id': '4',
85            'res_realm': 'peerreview',
86            'selected_action': 'approve'
87        }
88        rm = PeerReviewModel(self.env, 4)
89        self.assertEqual('foo', rm['status'])
90        # Do workflow transition
91        self.plugin.process_request(self.req)
92        rm_after = PeerReviewModel(self.env, 4)
93        self.assertEqual('approved', rm_after['status'])
94
95    def test_insert_new_review(self):
96        rev = PeerReviewModel(self.env)
97        rev['name'] = 'insert'
98        rev['owner'] = 'Tester'
99        rev.insert()
100        # TODO: this will become an int in the future
101        self.assertEqual(5, rev['review_id'])
102
103
104def review_model_suite():
105    suite = unittest.TestSuite()
106
107    suite.addTest(unittest.makeSuite(TestReviewModel))
108
109    return suite
Note: See TracBrowser for help on using the repository browser.