source: peerreviewplugin/trunk/codereview/tests/test_reviewview.py

Last change on this file was 18261, checked in by Cinc-th, 2 years ago

PeerReviewPlugin: no longer use CamelCase URLs. Fixed a testcase using unicode strings for Python3.

Refs #14005

File size: 5.3 KB
Line 
1# -*- coding: utf-8 -*-
2# Copyright (c) 2019 Cinc
3# All rights reserved.
4#
5# Redistribution and use in source and binary forms, with or without
6# modification, are permitted provided that the following conditions
7# are met:
8# 1. Redistributions of source code must retain the above copyright
9#    notice, this list of conditions and the following disclaimer.
10# 2. Redistributions in binary form must reproduce the above copyright
11#    notice, this list of conditions and the following disclaimer in the
12#    documentation and/or other materials provided with the distribution.
13# 3. The name of the author may not be used to endorse or promote products
14#    derived from this software without specific prior written permission.
15#
16# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
17# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
18# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
19# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
20# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
21# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
23# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
25# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26
27import unittest
28from codereview.model import PeerReviewModelProvider, ReviewFileModel
29from codereview.peerReviewView import PeerReviewView
30from codereview.tests.util import prepare_comments, prepare_file_data, prepare_review_data
31from trac.test import EnvironmentStub, MockRequest
32
33class TestPeerReviewView(unittest.TestCase):
34
35    def setUp(self):
36        self.env = EnvironmentStub(default_data=True, enable=['trac.*',
37                                                             'codereview.model.*',
38                                                             'codereview.peerreviewnew.*',
39                                                             'codereview.peerreviewmain.*',
40                                                             'codereview.tracgenericclass.*'])
41        PeerReviewModelProvider(self.env).environment_created()
42        self.plugin = PeerReviewView(self.env)
43        self.req = MockRequest(self.env, path_info="/peerreviewview/1")
44        prepare_review_data(self.env)
45        prepare_file_data(self.env)
46        prepare_comments(self.env)
47
48
49    def tearDown(self):
50        self.env.shutdown()
51
52    def test_get_active_navigation_item(self):
53        self.assertEqual('peerreviewmain', self.plugin.get_active_navigation_item(self.req))
54
55    def test_get_navigation_items(self):
56        self.assertEqual(0, len(self.plugin.get_navigation_items(self.req)))
57
58    def test_match_request(self):
59        paths = ("/peerreviewview/", "/peerreviewview",
60                 "/peerreviewview/abc", "/peerreviewview/1a",
61                 "/peerreviewview/a1")
62
63        req = MockRequest(self.env, path_info="/peerreviewview/1")
64        self.assertTrue(self.plugin.match_request(req))
65
66        for path in paths:
67            req = MockRequest(self.env, path_info=path)
68            self.assertIsNone(self.plugin.match_request(req))
69
70    def test_get_files_for_review_id_no_comments(self):
71        req = MockRequest(self.env, authname='user1')
72        review_id = 1
73        files = self.plugin.get_files_for_review_id(req, review_id)
74        self.assertIsInstance(files[0], ReviewFileModel)
75        self.assertEqual(2, len(files))
76        # Since we didn't want comment information the following attributes are not set
77        try:
78            foo = files[0].num_comments
79            self.assertIsNone(foo)
80        except AttributeError:
81            pass
82        try:
83            foo = files[0].num_notread
84            self.assertIsNone(foo)
85        except AttributeError:
86            pass
87
88        # Another test with different number of associated files
89        review_id = 2
90        files = self.plugin.get_files_for_review_id(req, review_id)
91        self.assertIsInstance(files[0], ReviewFileModel)
92        self.assertEqual(3, len(files))
93
94    def test_get_files_for_review_id_with_comments(self):
95        req = MockRequest(self.env, authname='user1')
96        review_id = 1
97        files = self.plugin.get_files_for_review_id(req, review_id, True)
98        self.assertIsInstance(files[0], ReviewFileModel)
99        self.assertEqual(2, len(files))
100        for item in files:
101            if item['file_id'] == 1:
102                self.assertEqual(2, item.num_comments)
103                self.assertEqual(2, item.num_notread)
104            else:
105                self.assertEqual(3, item.num_comments)
106                self.assertEqual(3, item.num_notread)
107
108        review_id = 2
109        files = self.plugin.get_files_for_review_id(req, review_id, True)
110        self.assertIsInstance(files[0], ReviewFileModel)
111        self.assertEqual(3, len(files))
112        for item in files:
113            if item['file_id'] == 3:
114                self.assertEqual(2, item.num_comments)
115                self.assertEqual(2, item.num_notread)
116            else:
117                self.assertEqual(0, item.num_comments)
118                self.assertEqual(0, item.num_notread)
119
120
121def test_suite():
122    suite = unittest.TestSuite()
123    suite.addTest(unittest.makeSuite(TestPeerReviewView))
124    return suite
Note: See TracBrowser for help on using the repository browser.