annotate bitten/tests/web_ui.py @ 629:f3bb52da9e3c

0.6dev: Adding support for attachments to configurations and build - full web implementation that mirrors what is available in Ticket and Wiki. Also added a new generic `<attach/>` command that enables attaching files to be part of a recipe and uploaded by slaves as part of build. Tests and updated documentation included. Closes #132.
author osimons
date Tue, 11 Aug 2009 22:47:55 +0000
parents 99831ab37fd3
children 29a5793c452a
rev   line source
410
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
1 # -*- coding: utf-8 -*-
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
2 #
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
3 # Copyright (C) 2005-2007 Christopher Lenz <cmlenz@gmx.de>
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
4 # Copyright (C) 2007 Edgewall Software
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
5 # All rights reserved.
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
6 #
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
7 # This software is licensed as described in the file COPYING, which
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
8 # you should have received as part of this distribution. The terms
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
9 # are also available at http://bitten.edgewall.org/wiki/License.
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
10
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
11 import shutil
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
12 import tempfile
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
13 import unittest
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
14
439
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
15 from trac.core import TracError
410
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
16 from trac.db import DatabaseManager
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
17 from trac.perm import PermissionCache, PermissionSystem
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
18 from trac.test import EnvironmentStub, Mock
439
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
19 from trac.util.html import Markup
575
9ae8f6a95d4b 0.6dev: Adding tests for [645], and also reworked web_ui testcase classes to inherit from an abstract class that contains all the shared `setUp()` and `tearDown()` code.
osimons
parents: 562
diff changeset
20 from trac.web.api import HTTPNotFound
410
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
21 from trac.web.href import Href
439
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
22 from bitten.main import BuildSystem
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
23 from bitten.model import Build, BuildConfig, BuildStep, TargetPlatform, schema
575
9ae8f6a95d4b 0.6dev: Adding tests for [645], and also reworked web_ui testcase classes to inherit from an abstract class that contains all the shared `setUp()` and `tearDown()` code.
osimons
parents: 562
diff changeset
24 from bitten.web_ui import BuildConfigController, BuildController, \
9ae8f6a95d4b 0.6dev: Adding tests for [645], and also reworked web_ui testcase classes to inherit from an abstract class that contains all the shared `setUp()` and `tearDown()` code.
osimons
parents: 562
diff changeset
25 SourceFileLinkFormatter
410
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
26
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
27
575
9ae8f6a95d4b 0.6dev: Adding tests for [645], and also reworked web_ui testcase classes to inherit from an abstract class that contains all the shared `setUp()` and `tearDown()` code.
osimons
parents: 562
diff changeset
28 class AbstractWebUITestCase(unittest.TestCase):
410
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
29
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
30 def setUp(self):
458
c9ac97df8a5e Fix build listener invocation.
cmlenz
parents: 440
diff changeset
31 self.env = EnvironmentStub(enable=['trac.*', 'bitten.*'])
410
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
32 self.env.path = tempfile.mkdtemp()
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
33
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
34 # Create tables
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
35 db = self.env.get_db_cnx()
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
36 cursor = db.cursor()
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
37 connector, _ = DatabaseManager(self.env)._get_connector()
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
38 for table in schema:
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
39 for stmt in connector.to_sql(table):
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
40 cursor.execute(stmt)
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
41
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
42 # Set up permissions
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
43 self.env.config.set('trac', 'permission_store',
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
44 'DefaultPermissionStore')
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
45
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
46 # Hook up a dummy repository
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
47 self.repos = Mock(
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
48 get_node=lambda path, rev=None: Mock(get_history=lambda: [],
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
49 isdir=True),
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
50 normalize_path=lambda path: path,
562
a8c84285e67a Complete rights restrictions for build configs etc - see #384. Also enhance tests to work with this code (but don't yet check that rights are restricted properly)
dfraser
parents: 528
diff changeset
51 sync=lambda: None,
410
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
52 )
562
a8c84285e67a Complete rights restrictions for build configs etc - see #384. Also enhance tests to work with this code (but don't yet check that rights are restricted properly)
dfraser
parents: 528
diff changeset
53 self.repos.authz = Mock(has_permission=lambda path: True, assert_permission=lambda path: None)
410
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
54 self.env.get_repository = lambda authname=None: self.repos
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
55
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
56 def tearDown(self):
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
57 shutil.rmtree(self.env.path)
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
58
575
9ae8f6a95d4b 0.6dev: Adding tests for [645], and also reworked web_ui testcase classes to inherit from an abstract class that contains all the shared `setUp()` and `tearDown()` code.
osimons
parents: 562
diff changeset
59
9ae8f6a95d4b 0.6dev: Adding tests for [645], and also reworked web_ui testcase classes to inherit from an abstract class that contains all the shared `setUp()` and `tearDown()` code.
osimons
parents: 562
diff changeset
60 class BuildConfigControllerTestCase(AbstractWebUITestCase):
9ae8f6a95d4b 0.6dev: Adding tests for [645], and also reworked web_ui testcase classes to inherit from an abstract class that contains all the shared `setUp()` and `tearDown()` code.
osimons
parents: 562
diff changeset
61
410
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
62 def test_overview(self):
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
63 PermissionSystem(self.env).grant_permission('joe', 'BUILD_VIEW')
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
64 req = Mock(method='GET', base_path='', cgi_location='',
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
65 path_info='/build', href=Href('/trac'), args={}, chrome={},
562
a8c84285e67a Complete rights restrictions for build configs etc - see #384. Also enhance tests to work with this code (but don't yet check that rights are restricted properly)
dfraser
parents: 528
diff changeset
66 perm=PermissionCache(self.env, 'joe'), authname='joe')
410
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
67
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
68 module = BuildConfigController(self.env)
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
69 assert module.match_request(req)
503
a7c795920c4a Merging trac-0.11 branch to trunk. This revision is equivalent to [571].
wbell
parents: 458
diff changeset
70 _, data, _ = module.process_request(req)
410
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
71
503
a7c795920c4a Merging trac-0.11 branch to trunk. This revision is equivalent to [571].
wbell
parents: 458
diff changeset
72 self.assertEqual('overview', data['page_mode'])
410
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
73
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
74 def test_view_config(self):
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
75 config = BuildConfig(self.env, name='test', path='trunk')
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
76 config.insert()
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
77 platform = TargetPlatform(self.env, config='test', name='any')
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
78 platform.insert()
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
79
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
80 PermissionSystem(self.env).grant_permission('joe', 'BUILD_VIEW')
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
81 req = Mock(method='GET', base_path='', cgi_location='',
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
82 path_info='/build/test', href=Href('/trac'), args={},
503
a7c795920c4a Merging trac-0.11 branch to trunk. This revision is equivalent to [571].
wbell
parents: 458
diff changeset
83 chrome={}, authname='joe',
410
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
84 perm=PermissionCache(self.env, 'joe'))
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
85
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
86 root = Mock(get_entries=lambda: ['foo'],
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
87 get_history=lambda: [('trunk', rev, 'edit') for rev in
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
88 range(123, 111, -1)])
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
89 self.repos = Mock(get_node=lambda path, rev=None: root,
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
90 sync=lambda: None, normalize_path=lambda path: path)
562
a8c84285e67a Complete rights restrictions for build configs etc - see #384. Also enhance tests to work with this code (but don't yet check that rights are restricted properly)
dfraser
parents: 528
diff changeset
91 self.repos.authz = Mock(has_permission=lambda path: True, assert_permission=lambda path: None)
410
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
92
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
93 module = BuildConfigController(self.env)
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
94 assert module.match_request(req)
503
a7c795920c4a Merging trac-0.11 branch to trunk. This revision is equivalent to [571].
wbell
parents: 458
diff changeset
95 _, data, _ = module.process_request(req)
410
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
96
503
a7c795920c4a Merging trac-0.11 branch to trunk. This revision is equivalent to [571].
wbell
parents: 458
diff changeset
97 self.assertEqual('view_config', data['page_mode'])
a7c795920c4a Merging trac-0.11 branch to trunk. This revision is equivalent to [571].
wbell
parents: 458
diff changeset
98 assert not 'next' in req.chrome['links']
410
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
99
629
f3bb52da9e3c 0.6dev: Adding support for attachments to configurations and build - full web implementation that mirrors what is available in Ticket and Wiki. Also added a new generic `<attach/>` command that enables attaching files to be part of a recipe and uploaded by slaves as part of build.
osimons
parents: 593
diff changeset
100 from trac.resource import Resource
f3bb52da9e3c 0.6dev: Adding support for attachments to configurations and build - full web implementation that mirrors what is available in Ticket and Wiki. Also added a new generic `<attach/>` command that enables attaching files to be part of a recipe and uploaded by slaves as part of build.
osimons
parents: 593
diff changeset
101 self.assertEquals(Resource('build', 'test'), data['context'].resource)
f3bb52da9e3c 0.6dev: Adding support for attachments to configurations and build - full web implementation that mirrors what is available in Ticket and Wiki. Also added a new generic `<attach/>` command that enables attaching files to be part of a recipe and uploaded by slaves as part of build.
osimons
parents: 593
diff changeset
102
f3bb52da9e3c 0.6dev: Adding support for attachments to configurations and build - full web implementation that mirrors what is available in Ticket and Wiki. Also added a new generic `<attach/>` command that enables attaching files to be part of a recipe and uploaded by slaves as part of build.
osimons
parents: 593
diff changeset
103 self.assertEquals([], data['config']['attachments']['attachments'])
f3bb52da9e3c 0.6dev: Adding support for attachments to configurations and build - full web implementation that mirrors what is available in Ticket and Wiki. Also added a new generic `<attach/>` command that enables attaching files to be part of a recipe and uploaded by slaves as part of build.
osimons
parents: 593
diff changeset
104 self.assertEquals('/trac/attachment/build/test/',
f3bb52da9e3c 0.6dev: Adding support for attachments to configurations and build - full web implementation that mirrors what is available in Ticket and Wiki. Also added a new generic `<attach/>` command that enables attaching files to be part of a recipe and uploaded by slaves as part of build.
osimons
parents: 593
diff changeset
105 data['config']['attachments']['attach_href'])
f3bb52da9e3c 0.6dev: Adding support for attachments to configurations and build - full web implementation that mirrors what is available in Ticket and Wiki. Also added a new generic `<attach/>` command that enables attaching files to be part of a recipe and uploaded by slaves as part of build.
osimons
parents: 593
diff changeset
106
410
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
107 def test_view_config_paging(self):
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
108 config = BuildConfig(self.env, name='test', path='trunk')
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
109 config.insert()
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
110 platform = TargetPlatform(self.env, config='test', name='any')
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
111 platform.insert()
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
112
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
113 PermissionSystem(self.env).grant_permission('joe', 'BUILD_VIEW')
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
114 req = Mock(method='GET', base_path='', cgi_location='',
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
115 path_info='/build/test', href=Href('/trac'), args={},
503
a7c795920c4a Merging trac-0.11 branch to trunk. This revision is equivalent to [571].
wbell
parents: 458
diff changeset
116 chrome={}, authname='joe',
410
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
117 perm=PermissionCache(self.env, 'joe'))
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
118
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
119 root = Mock(get_entries=lambda: ['foo'],
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
120 get_history=lambda: [('trunk', rev, 'edit') for rev in
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
121 range(123, 110, -1)])
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
122 self.repos = Mock(get_node=lambda path, rev=None: root,
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
123 sync=lambda: None, normalize_path=lambda path: path)
562
a8c84285e67a Complete rights restrictions for build configs etc - see #384. Also enhance tests to work with this code (but don't yet check that rights are restricted properly)
dfraser
parents: 528
diff changeset
124 self.repos.authz = Mock(has_permission=lambda path: True, assert_permission=lambda path: None)
410
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
125
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
126 module = BuildConfigController(self.env)
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
127 assert module.match_request(req)
503
a7c795920c4a Merging trac-0.11 branch to trunk. This revision is equivalent to [571].
wbell
parents: 458
diff changeset
128 _, data, _ = module.process_request(req)
410
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
129
503
a7c795920c4a Merging trac-0.11 branch to trunk. This revision is equivalent to [571].
wbell
parents: 458
diff changeset
130 if req.chrome:
410
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
131 self.assertEqual('/trac/build/test?page=2',
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
132 req.chrome['links']['next'][0]['href'])
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
133
575
9ae8f6a95d4b 0.6dev: Adding tests for [645], and also reworked web_ui testcase classes to inherit from an abstract class that contains all the shared `setUp()` and `tearDown()` code.
osimons
parents: 562
diff changeset
134 def test_raise_404(self):
9ae8f6a95d4b 0.6dev: Adding tests for [645], and also reworked web_ui testcase classes to inherit from an abstract class that contains all the shared `setUp()` and `tearDown()` code.
osimons
parents: 562
diff changeset
135 PermissionSystem(self.env).grant_permission('joe', 'BUILD_VIEW')
9ae8f6a95d4b 0.6dev: Adding tests for [645], and also reworked web_ui testcase classes to inherit from an abstract class that contains all the shared `setUp()` and `tearDown()` code.
osimons
parents: 562
diff changeset
136 module = BuildConfigController(self.env)
9ae8f6a95d4b 0.6dev: Adding tests for [645], and also reworked web_ui testcase classes to inherit from an abstract class that contains all the shared `setUp()` and `tearDown()` code.
osimons
parents: 562
diff changeset
137 req = Mock(method='GET', base_path='', cgi_location='',
9ae8f6a95d4b 0.6dev: Adding tests for [645], and also reworked web_ui testcase classes to inherit from an abstract class that contains all the shared `setUp()` and `tearDown()` code.
osimons
parents: 562
diff changeset
138 path_info='/build/nonexisting', href=Href('/trac'), args={},
9ae8f6a95d4b 0.6dev: Adding tests for [645], and also reworked web_ui testcase classes to inherit from an abstract class that contains all the shared `setUp()` and `tearDown()` code.
osimons
parents: 562
diff changeset
139 chrome={}, authname='joe',
9ae8f6a95d4b 0.6dev: Adding tests for [645], and also reworked web_ui testcase classes to inherit from an abstract class that contains all the shared `setUp()` and `tearDown()` code.
osimons
parents: 562
diff changeset
140 perm=PermissionCache(self.env, 'joe'))
9ae8f6a95d4b 0.6dev: Adding tests for [645], and also reworked web_ui testcase classes to inherit from an abstract class that contains all the shared `setUp()` and `tearDown()` code.
osimons
parents: 562
diff changeset
141 self.failUnless(module.match_request(req))
9ae8f6a95d4b 0.6dev: Adding tests for [645], and also reworked web_ui testcase classes to inherit from an abstract class that contains all the shared `setUp()` and `tearDown()` code.
osimons
parents: 562
diff changeset
142 try:
9ae8f6a95d4b 0.6dev: Adding tests for [645], and also reworked web_ui testcase classes to inherit from an abstract class that contains all the shared `setUp()` and `tearDown()` code.
osimons
parents: 562
diff changeset
143 module.process_request(req)
9ae8f6a95d4b 0.6dev: Adding tests for [645], and also reworked web_ui testcase classes to inherit from an abstract class that contains all the shared `setUp()` and `tearDown()` code.
osimons
parents: 562
diff changeset
144 except Exception, e:
9ae8f6a95d4b 0.6dev: Adding tests for [645], and also reworked web_ui testcase classes to inherit from an abstract class that contains all the shared `setUp()` and `tearDown()` code.
osimons
parents: 562
diff changeset
145 self.failUnless(isinstance(e, HTTPNotFound))
9ae8f6a95d4b 0.6dev: Adding tests for [645], and also reworked web_ui testcase classes to inherit from an abstract class that contains all the shared `setUp()` and `tearDown()` code.
osimons
parents: 562
diff changeset
146 self.assertEquals(str(e), "404 Not Found (Build configuration "
9ae8f6a95d4b 0.6dev: Adding tests for [645], and also reworked web_ui testcase classes to inherit from an abstract class that contains all the shared `setUp()` and `tearDown()` code.
osimons
parents: 562
diff changeset
147 "'nonexisting' does not exist.)")
9ae8f6a95d4b 0.6dev: Adding tests for [645], and also reworked web_ui testcase classes to inherit from an abstract class that contains all the shared `setUp()` and `tearDown()` code.
osimons
parents: 562
diff changeset
148 return
9ae8f6a95d4b 0.6dev: Adding tests for [645], and also reworked web_ui testcase classes to inherit from an abstract class that contains all the shared `setUp()` and `tearDown()` code.
osimons
parents: 562
diff changeset
149 self.fail("This should have raised HTTPNotFound")
439
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
150
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
151
575
9ae8f6a95d4b 0.6dev: Adding tests for [645], and also reworked web_ui testcase classes to inherit from an abstract class that contains all the shared `setUp()` and `tearDown()` code.
osimons
parents: 562
diff changeset
152 class BuildControllerTestCase(AbstractWebUITestCase):
439
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
153
629
f3bb52da9e3c 0.6dev: Adding support for attachments to configurations and build - full web implementation that mirrors what is available in Ticket and Wiki. Also added a new generic `<attach/>` command that enables attaching files to be part of a recipe and uploaded by slaves as part of build.
osimons
parents: 593
diff changeset
154 def test_view_build(self):
f3bb52da9e3c 0.6dev: Adding support for attachments to configurations and build - full web implementation that mirrors what is available in Ticket and Wiki. Also added a new generic `<attach/>` command that enables attaching files to be part of a recipe and uploaded by slaves as part of build.
osimons
parents: 593
diff changeset
155 config = BuildConfig(self.env, name='test', path='trunk')
f3bb52da9e3c 0.6dev: Adding support for attachments to configurations and build - full web implementation that mirrors what is available in Ticket and Wiki. Also added a new generic `<attach/>` command that enables attaching files to be part of a recipe and uploaded by slaves as part of build.
osimons
parents: 593
diff changeset
156 config.insert()
f3bb52da9e3c 0.6dev: Adding support for attachments to configurations and build - full web implementation that mirrors what is available in Ticket and Wiki. Also added a new generic `<attach/>` command that enables attaching files to be part of a recipe and uploaded by slaves as part of build.
osimons
parents: 593
diff changeset
157 platform = TargetPlatform(self.env, config='test', name='any')
f3bb52da9e3c 0.6dev: Adding support for attachments to configurations and build - full web implementation that mirrors what is available in Ticket and Wiki. Also added a new generic `<attach/>` command that enables attaching files to be part of a recipe and uploaded by slaves as part of build.
osimons
parents: 593
diff changeset
158 platform.insert()
f3bb52da9e3c 0.6dev: Adding support for attachments to configurations and build - full web implementation that mirrors what is available in Ticket and Wiki. Also added a new generic `<attach/>` command that enables attaching files to be part of a recipe and uploaded by slaves as part of build.
osimons
parents: 593
diff changeset
159 build = Build(self.env, config='test', platform=1, rev=123, rev_time=42,
f3bb52da9e3c 0.6dev: Adding support for attachments to configurations and build - full web implementation that mirrors what is available in Ticket and Wiki. Also added a new generic `<attach/>` command that enables attaching files to be part of a recipe and uploaded by slaves as part of build.
osimons
parents: 593
diff changeset
160 status=Build.SUCCESS, slave='hal')
f3bb52da9e3c 0.6dev: Adding support for attachments to configurations and build - full web implementation that mirrors what is available in Ticket and Wiki. Also added a new generic `<attach/>` command that enables attaching files to be part of a recipe and uploaded by slaves as part of build.
osimons
parents: 593
diff changeset
161 build.insert()
f3bb52da9e3c 0.6dev: Adding support for attachments to configurations and build - full web implementation that mirrors what is available in Ticket and Wiki. Also added a new generic `<attach/>` command that enables attaching files to be part of a recipe and uploaded by slaves as part of build.
osimons
parents: 593
diff changeset
162
f3bb52da9e3c 0.6dev: Adding support for attachments to configurations and build - full web implementation that mirrors what is available in Ticket and Wiki. Also added a new generic `<attach/>` command that enables attaching files to be part of a recipe and uploaded by slaves as part of build.
osimons
parents: 593
diff changeset
163 PermissionSystem(self.env).grant_permission('joe', 'BUILD_VIEW')
f3bb52da9e3c 0.6dev: Adding support for attachments to configurations and build - full web implementation that mirrors what is available in Ticket and Wiki. Also added a new generic `<attach/>` command that enables attaching files to be part of a recipe and uploaded by slaves as part of build.
osimons
parents: 593
diff changeset
164 req = Mock(method='GET', base_path='', cgi_location='',
f3bb52da9e3c 0.6dev: Adding support for attachments to configurations and build - full web implementation that mirrors what is available in Ticket and Wiki. Also added a new generic `<attach/>` command that enables attaching files to be part of a recipe and uploaded by slaves as part of build.
osimons
parents: 593
diff changeset
165 path_info='/build/test/1', href=Href('/trac'), args={},
f3bb52da9e3c 0.6dev: Adding support for attachments to configurations and build - full web implementation that mirrors what is available in Ticket and Wiki. Also added a new generic `<attach/>` command that enables attaching files to be part of a recipe and uploaded by slaves as part of build.
osimons
parents: 593
diff changeset
166 chrome={}, authname='joe',
f3bb52da9e3c 0.6dev: Adding support for attachments to configurations and build - full web implementation that mirrors what is available in Ticket and Wiki. Also added a new generic `<attach/>` command that enables attaching files to be part of a recipe and uploaded by slaves as part of build.
osimons
parents: 593
diff changeset
167 perm=PermissionCache(self.env, 'joe'))
f3bb52da9e3c 0.6dev: Adding support for attachments to configurations and build - full web implementation that mirrors what is available in Ticket and Wiki. Also added a new generic `<attach/>` command that enables attaching files to be part of a recipe and uploaded by slaves as part of build.
osimons
parents: 593
diff changeset
168
f3bb52da9e3c 0.6dev: Adding support for attachments to configurations and build - full web implementation that mirrors what is available in Ticket and Wiki. Also added a new generic `<attach/>` command that enables attaching files to be part of a recipe and uploaded by slaves as part of build.
osimons
parents: 593
diff changeset
169 root = Mock(get_entries=lambda: ['foo'],
f3bb52da9e3c 0.6dev: Adding support for attachments to configurations and build - full web implementation that mirrors what is available in Ticket and Wiki. Also added a new generic `<attach/>` command that enables attaching files to be part of a recipe and uploaded by slaves as part of build.
osimons
parents: 593
diff changeset
170 get_history=lambda: [('trunk', rev, 'edit') for rev in
f3bb52da9e3c 0.6dev: Adding support for attachments to configurations and build - full web implementation that mirrors what is available in Ticket and Wiki. Also added a new generic `<attach/>` command that enables attaching files to be part of a recipe and uploaded by slaves as part of build.
osimons
parents: 593
diff changeset
171 range(123, 111, -1)])
f3bb52da9e3c 0.6dev: Adding support for attachments to configurations and build - full web implementation that mirrors what is available in Ticket and Wiki. Also added a new generic `<attach/>` command that enables attaching files to be part of a recipe and uploaded by slaves as part of build.
osimons
parents: 593
diff changeset
172 self.repos = Mock(get_node=lambda path, rev=None: root,
f3bb52da9e3c 0.6dev: Adding support for attachments to configurations and build - full web implementation that mirrors what is available in Ticket and Wiki. Also added a new generic `<attach/>` command that enables attaching files to be part of a recipe and uploaded by slaves as part of build.
osimons
parents: 593
diff changeset
173 sync=lambda: None,
f3bb52da9e3c 0.6dev: Adding support for attachments to configurations and build - full web implementation that mirrors what is available in Ticket and Wiki. Also added a new generic `<attach/>` command that enables attaching files to be part of a recipe and uploaded by slaves as part of build.
osimons
parents: 593
diff changeset
174 normalize_path=lambda path: path,
f3bb52da9e3c 0.6dev: Adding support for attachments to configurations and build - full web implementation that mirrors what is available in Ticket and Wiki. Also added a new generic `<attach/>` command that enables attaching files to be part of a recipe and uploaded by slaves as part of build.
osimons
parents: 593
diff changeset
175 get_changeset=lambda rev: Mock(author='joe'))
f3bb52da9e3c 0.6dev: Adding support for attachments to configurations and build - full web implementation that mirrors what is available in Ticket and Wiki. Also added a new generic `<attach/>` command that enables attaching files to be part of a recipe and uploaded by slaves as part of build.
osimons
parents: 593
diff changeset
176 self.repos.authz = Mock(has_permission=lambda path: True, assert_permission=lambda path: None)
f3bb52da9e3c 0.6dev: Adding support for attachments to configurations and build - full web implementation that mirrors what is available in Ticket and Wiki. Also added a new generic `<attach/>` command that enables attaching files to be part of a recipe and uploaded by slaves as part of build.
osimons
parents: 593
diff changeset
177
f3bb52da9e3c 0.6dev: Adding support for attachments to configurations and build - full web implementation that mirrors what is available in Ticket and Wiki. Also added a new generic `<attach/>` command that enables attaching files to be part of a recipe and uploaded by slaves as part of build.
osimons
parents: 593
diff changeset
178 module = BuildController(self.env)
f3bb52da9e3c 0.6dev: Adding support for attachments to configurations and build - full web implementation that mirrors what is available in Ticket and Wiki. Also added a new generic `<attach/>` command that enables attaching files to be part of a recipe and uploaded by slaves as part of build.
osimons
parents: 593
diff changeset
179 assert module.match_request(req)
f3bb52da9e3c 0.6dev: Adding support for attachments to configurations and build - full web implementation that mirrors what is available in Ticket and Wiki. Also added a new generic `<attach/>` command that enables attaching files to be part of a recipe and uploaded by slaves as part of build.
osimons
parents: 593
diff changeset
180 _, data, _ = module.process_request(req)
f3bb52da9e3c 0.6dev: Adding support for attachments to configurations and build - full web implementation that mirrors what is available in Ticket and Wiki. Also added a new generic `<attach/>` command that enables attaching files to be part of a recipe and uploaded by slaves as part of build.
osimons
parents: 593
diff changeset
181
f3bb52da9e3c 0.6dev: Adding support for attachments to configurations and build - full web implementation that mirrors what is available in Ticket and Wiki. Also added a new generic `<attach/>` command that enables attaching files to be part of a recipe and uploaded by slaves as part of build.
osimons
parents: 593
diff changeset
182 self.assertEqual('view_build', data['page_mode'])
f3bb52da9e3c 0.6dev: Adding support for attachments to configurations and build - full web implementation that mirrors what is available in Ticket and Wiki. Also added a new generic `<attach/>` command that enables attaching files to be part of a recipe and uploaded by slaves as part of build.
osimons
parents: 593
diff changeset
183
f3bb52da9e3c 0.6dev: Adding support for attachments to configurations and build - full web implementation that mirrors what is available in Ticket and Wiki. Also added a new generic `<attach/>` command that enables attaching files to be part of a recipe and uploaded by slaves as part of build.
osimons
parents: 593
diff changeset
184 from trac.resource import Resource
f3bb52da9e3c 0.6dev: Adding support for attachments to configurations and build - full web implementation that mirrors what is available in Ticket and Wiki. Also added a new generic `<attach/>` command that enables attaching files to be part of a recipe and uploaded by slaves as part of build.
osimons
parents: 593
diff changeset
185 self.assertEquals(Resource('build', 'test/1'), data['context'].resource)
f3bb52da9e3c 0.6dev: Adding support for attachments to configurations and build - full web implementation that mirrors what is available in Ticket and Wiki. Also added a new generic `<attach/>` command that enables attaching files to be part of a recipe and uploaded by slaves as part of build.
osimons
parents: 593
diff changeset
186
f3bb52da9e3c 0.6dev: Adding support for attachments to configurations and build - full web implementation that mirrors what is available in Ticket and Wiki. Also added a new generic `<attach/>` command that enables attaching files to be part of a recipe and uploaded by slaves as part of build.
osimons
parents: 593
diff changeset
187 self.assertEquals([], data['build']['attachments']['attachments'])
f3bb52da9e3c 0.6dev: Adding support for attachments to configurations and build - full web implementation that mirrors what is available in Ticket and Wiki. Also added a new generic `<attach/>` command that enables attaching files to be part of a recipe and uploaded by slaves as part of build.
osimons
parents: 593
diff changeset
188 self.assertEquals('/trac/attachment/build/test/1/',
f3bb52da9e3c 0.6dev: Adding support for attachments to configurations and build - full web implementation that mirrors what is available in Ticket and Wiki. Also added a new generic `<attach/>` command that enables attaching files to be part of a recipe and uploaded by slaves as part of build.
osimons
parents: 593
diff changeset
189 data['build']['attachments']['attach_href'])
f3bb52da9e3c 0.6dev: Adding support for attachments to configurations and build - full web implementation that mirrors what is available in Ticket and Wiki. Also added a new generic `<attach/>` command that enables attaching files to be part of a recipe and uploaded by slaves as part of build.
osimons
parents: 593
diff changeset
190
575
9ae8f6a95d4b 0.6dev: Adding tests for [645], and also reworked web_ui testcase classes to inherit from an abstract class that contains all the shared `setUp()` and `tearDown()` code.
osimons
parents: 562
diff changeset
191 def test_raise_404(self):
9ae8f6a95d4b 0.6dev: Adding tests for [645], and also reworked web_ui testcase classes to inherit from an abstract class that contains all the shared `setUp()` and `tearDown()` code.
osimons
parents: 562
diff changeset
192 PermissionSystem(self.env).grant_permission('joe', 'BUILD_VIEW')
9ae8f6a95d4b 0.6dev: Adding tests for [645], and also reworked web_ui testcase classes to inherit from an abstract class that contains all the shared `setUp()` and `tearDown()` code.
osimons
parents: 562
diff changeset
193 module = BuildController(self.env)
9ae8f6a95d4b 0.6dev: Adding tests for [645], and also reworked web_ui testcase classes to inherit from an abstract class that contains all the shared `setUp()` and `tearDown()` code.
osimons
parents: 562
diff changeset
194 config = BuildConfig(self.env, name='existing', path='trunk')
9ae8f6a95d4b 0.6dev: Adding tests for [645], and also reworked web_ui testcase classes to inherit from an abstract class that contains all the shared `setUp()` and `tearDown()` code.
osimons
parents: 562
diff changeset
195 config.insert()
9ae8f6a95d4b 0.6dev: Adding tests for [645], and also reworked web_ui testcase classes to inherit from an abstract class that contains all the shared `setUp()` and `tearDown()` code.
osimons
parents: 562
diff changeset
196 req = Mock(method='GET', base_path='', cgi_location='',
9ae8f6a95d4b 0.6dev: Adding tests for [645], and also reworked web_ui testcase classes to inherit from an abstract class that contains all the shared `setUp()` and `tearDown()` code.
osimons
parents: 562
diff changeset
197 path_info='/build/existing/42', href=Href('/trac'), args={},
9ae8f6a95d4b 0.6dev: Adding tests for [645], and also reworked web_ui testcase classes to inherit from an abstract class that contains all the shared `setUp()` and `tearDown()` code.
osimons
parents: 562
diff changeset
198 chrome={}, authname='joe',
9ae8f6a95d4b 0.6dev: Adding tests for [645], and also reworked web_ui testcase classes to inherit from an abstract class that contains all the shared `setUp()` and `tearDown()` code.
osimons
parents: 562
diff changeset
199 perm=PermissionCache(self.env, 'joe'))
9ae8f6a95d4b 0.6dev: Adding tests for [645], and also reworked web_ui testcase classes to inherit from an abstract class that contains all the shared `setUp()` and `tearDown()` code.
osimons
parents: 562
diff changeset
200 self.failUnless(module.match_request(req))
9ae8f6a95d4b 0.6dev: Adding tests for [645], and also reworked web_ui testcase classes to inherit from an abstract class that contains all the shared `setUp()` and `tearDown()` code.
osimons
parents: 562
diff changeset
201 try:
9ae8f6a95d4b 0.6dev: Adding tests for [645], and also reworked web_ui testcase classes to inherit from an abstract class that contains all the shared `setUp()` and `tearDown()` code.
osimons
parents: 562
diff changeset
202 module.process_request(req)
9ae8f6a95d4b 0.6dev: Adding tests for [645], and also reworked web_ui testcase classes to inherit from an abstract class that contains all the shared `setUp()` and `tearDown()` code.
osimons
parents: 562
diff changeset
203 except Exception, e:
9ae8f6a95d4b 0.6dev: Adding tests for [645], and also reworked web_ui testcase classes to inherit from an abstract class that contains all the shared `setUp()` and `tearDown()` code.
osimons
parents: 562
diff changeset
204 self.failUnless(isinstance(e, HTTPNotFound))
9ae8f6a95d4b 0.6dev: Adding tests for [645], and also reworked web_ui testcase classes to inherit from an abstract class that contains all the shared `setUp()` and `tearDown()` code.
osimons
parents: 562
diff changeset
205 self.assertEquals(str(e),
9ae8f6a95d4b 0.6dev: Adding tests for [645], and also reworked web_ui testcase classes to inherit from an abstract class that contains all the shared `setUp()` and `tearDown()` code.
osimons
parents: 562
diff changeset
206 "404 Not Found (Build '42' does not exist.)")
9ae8f6a95d4b 0.6dev: Adding tests for [645], and also reworked web_ui testcase classes to inherit from an abstract class that contains all the shared `setUp()` and `tearDown()` code.
osimons
parents: 562
diff changeset
207 return
9ae8f6a95d4b 0.6dev: Adding tests for [645], and also reworked web_ui testcase classes to inherit from an abstract class that contains all the shared `setUp()` and `tearDown()` code.
osimons
parents: 562
diff changeset
208 self.fail("This should have raised HTTPNotFound")
9ae8f6a95d4b 0.6dev: Adding tests for [645], and also reworked web_ui testcase classes to inherit from an abstract class that contains all the shared `setUp()` and `tearDown()` code.
osimons
parents: 562
diff changeset
209
629
f3bb52da9e3c 0.6dev: Adding support for attachments to configurations and build - full web implementation that mirrors what is available in Ticket and Wiki. Also added a new generic `<attach/>` command that enables attaching files to be part of a recipe and uploaded by slaves as part of build.
osimons
parents: 593
diff changeset
210
575
9ae8f6a95d4b 0.6dev: Adding tests for [645], and also reworked web_ui testcase classes to inherit from an abstract class that contains all the shared `setUp()` and `tearDown()` code.
osimons
parents: 562
diff changeset
211 class SourceFileLinkFormatterTestCase(AbstractWebUITestCase):
439
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
212
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
213 def test_format_simple_link_in_repos(self):
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
214 BuildConfig(self.env, name='test', path='trunk').insert()
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
215 build = Build(self.env, config='test', platform=1, rev=123, rev_time=42,
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
216 status=Build.SUCCESS, slave='hal')
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
217 build.insert()
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
218 step = BuildStep(self.env, build=build.id, name='foo',
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
219 status=BuildStep.SUCCESS)
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
220 step.insert()
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
221
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
222 self.repos.get_node = lambda path, rev: (path, rev)
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
223
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
224 req = Mock(method='GET', href=Href('/trac'), authname='hal')
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
225 comp = SourceFileLinkFormatter(self.env)
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
226 formatter = comp.get_formatter(req, build)
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
227
593
99831ab37fd3 0.6dev: Making source-linking work also for Windows-style file references (as output by Windows slaves). Thanks to Doug Patterson for updated regexp.
osimons
parents: 575
diff changeset
228 # posix
440
e660687ac89c Follow-up fix to [486]: trailing chars in auto-linked log messages was getting removed.
cmlenz
parents: 439
diff changeset
229 output = formatter(step, None, None, u'error in foo/bar.c: bad')
439
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
230 self.assertEqual(Markup, type(output))
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
231 self.assertEqual('error in <a href="/trac/browser/trunk/foo/bar.c">'
440
e660687ac89c Follow-up fix to [486]: trailing chars in auto-linked log messages was getting removed.
cmlenz
parents: 439
diff changeset
232 'foo/bar.c</a>: bad', output)
593
99831ab37fd3 0.6dev: Making source-linking work also for Windows-style file references (as output by Windows slaves). Thanks to Doug Patterson for updated regexp.
osimons
parents: 575
diff changeset
233 # windows
99831ab37fd3 0.6dev: Making source-linking work also for Windows-style file references (as output by Windows slaves). Thanks to Doug Patterson for updated regexp.
osimons
parents: 575
diff changeset
234 output = formatter(step, None, None, u'error in foo\\win.c: bad')
99831ab37fd3 0.6dev: Making source-linking work also for Windows-style file references (as output by Windows slaves). Thanks to Doug Patterson for updated regexp.
osimons
parents: 575
diff changeset
235 self.assertEqual(Markup, type(output))
99831ab37fd3 0.6dev: Making source-linking work also for Windows-style file references (as output by Windows slaves). Thanks to Doug Patterson for updated regexp.
osimons
parents: 575
diff changeset
236 self.assertEqual(r'error in <a href="/trac/browser/trunk/foo/win.c">'
99831ab37fd3 0.6dev: Making source-linking work also for Windows-style file references (as output by Windows slaves). Thanks to Doug Patterson for updated regexp.
osimons
parents: 575
diff changeset
237 'foo\win.c</a>: bad', output)
439
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
238
528
f3bf55de8a34 Prevent path highlighting from passing non-canonical paths to svn:
dfraser
parents: 503
diff changeset
239 def test_format_bad_links(self):
f3bf55de8a34 Prevent path highlighting from passing non-canonical paths to svn:
dfraser
parents: 503
diff changeset
240 BuildConfig(self.env, name='test', path='trunk').insert()
f3bf55de8a34 Prevent path highlighting from passing non-canonical paths to svn:
dfraser
parents: 503
diff changeset
241 build = Build(self.env, config='test', platform=1, rev=123, rev_time=42,
f3bf55de8a34 Prevent path highlighting from passing non-canonical paths to svn:
dfraser
parents: 503
diff changeset
242 status=Build.SUCCESS, slave='hal')
f3bf55de8a34 Prevent path highlighting from passing non-canonical paths to svn:
dfraser
parents: 503
diff changeset
243 build.insert()
f3bf55de8a34 Prevent path highlighting from passing non-canonical paths to svn:
dfraser
parents: 503
diff changeset
244 step = BuildStep(self.env, build=build.id, name='foo',
f3bf55de8a34 Prevent path highlighting from passing non-canonical paths to svn:
dfraser
parents: 503
diff changeset
245 status=BuildStep.SUCCESS)
f3bf55de8a34 Prevent path highlighting from passing non-canonical paths to svn:
dfraser
parents: 503
diff changeset
246 step.insert()
f3bf55de8a34 Prevent path highlighting from passing non-canonical paths to svn:
dfraser
parents: 503
diff changeset
247
f3bf55de8a34 Prevent path highlighting from passing non-canonical paths to svn:
dfraser
parents: 503
diff changeset
248 self.repos.get_node = lambda path, rev: (path, rev)
f3bf55de8a34 Prevent path highlighting from passing non-canonical paths to svn:
dfraser
parents: 503
diff changeset
249
f3bf55de8a34 Prevent path highlighting from passing non-canonical paths to svn:
dfraser
parents: 503
diff changeset
250 req = Mock(method='GET', href=Href('/trac'), authname='hal')
f3bf55de8a34 Prevent path highlighting from passing non-canonical paths to svn:
dfraser
parents: 503
diff changeset
251 comp = SourceFileLinkFormatter(self.env)
f3bf55de8a34 Prevent path highlighting from passing non-canonical paths to svn:
dfraser
parents: 503
diff changeset
252 formatter = comp.get_formatter(req, build)
f3bf55de8a34 Prevent path highlighting from passing non-canonical paths to svn:
dfraser
parents: 503
diff changeset
253
f3bf55de8a34 Prevent path highlighting from passing non-canonical paths to svn:
dfraser
parents: 503
diff changeset
254 output = formatter(step, None, None, u'Linking -I../.. with ../libtool')
f3bf55de8a34 Prevent path highlighting from passing non-canonical paths to svn:
dfraser
parents: 503
diff changeset
255 self.assertEqual(Markup, type(output))
f3bf55de8a34 Prevent path highlighting from passing non-canonical paths to svn:
dfraser
parents: 503
diff changeset
256 self.assertEqual('Linking -I../.. with ../libtool', output)
f3bf55de8a34 Prevent path highlighting from passing non-canonical paths to svn:
dfraser
parents: 503
diff changeset
257
439
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
258 def test_format_simple_link_not_in_repos(self):
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
259 BuildConfig(self.env, name='test', path='trunk').insert()
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
260 build = Build(self.env, config='test', platform=1, rev=123, rev_time=42,
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
261 status=Build.SUCCESS, slave='hal')
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
262 build.insert()
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
263 step = BuildStep(self.env, build=build.id, name='foo',
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
264 status=BuildStep.SUCCESS)
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
265 step.insert()
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
266
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
267 def _raise():
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
268 raise TracError('No such node')
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
269 self.repos.get_node = lambda path, rev: _raise()
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
270
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
271 req = Mock(method='GET', href=Href('/trac'), authname='hal')
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
272 comp = SourceFileLinkFormatter(self.env)
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
273 formatter = comp.get_formatter(req, build)
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
274
440
e660687ac89c Follow-up fix to [486]: trailing chars in auto-linked log messages was getting removed.
cmlenz
parents: 439
diff changeset
275 output = formatter(step, None, None, u'error in foo/bar.c: bad')
439
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
276 self.assertEqual(Markup, type(output))
440
e660687ac89c Follow-up fix to [486]: trailing chars in auto-linked log messages was getting removed.
cmlenz
parents: 439
diff changeset
277 self.assertEqual('error in foo/bar.c: bad', output)
439
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
278
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
279 def test_format_link_in_repos_with_line(self):
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
280 BuildConfig(self.env, name='test', path='trunk').insert()
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
281 build = Build(self.env, config='test', platform=1, rev=123, rev_time=42,
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
282 status=Build.SUCCESS, slave='hal')
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
283 build.insert()
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
284 step = BuildStep(self.env, build=build.id, name='foo',
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
285 status=BuildStep.SUCCESS)
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
286 step.insert()
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
287
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
288 self.repos.get_node = lambda path, rev: (path, rev)
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
289
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
290 req = Mock(method='GET', href=Href('/trac'), authname='hal')
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
291 comp = SourceFileLinkFormatter(self.env)
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
292 formatter = comp.get_formatter(req, build)
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
293
593
99831ab37fd3 0.6dev: Making source-linking work also for Windows-style file references (as output by Windows slaves). Thanks to Doug Patterson for updated regexp.
osimons
parents: 575
diff changeset
294 # posix
440
e660687ac89c Follow-up fix to [486]: trailing chars in auto-linked log messages was getting removed.
cmlenz
parents: 439
diff changeset
295 output = formatter(step, None, None, u'error in foo/bar.c:123: bad')
439
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
296 self.assertEqual(Markup, type(output))
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
297 self.assertEqual('error in <a href="/trac/browser/trunk/foo/bar.c#L123">'
440
e660687ac89c Follow-up fix to [486]: trailing chars in auto-linked log messages was getting removed.
cmlenz
parents: 439
diff changeset
298 'foo/bar.c:123</a>: bad', output)
593
99831ab37fd3 0.6dev: Making source-linking work also for Windows-style file references (as output by Windows slaves). Thanks to Doug Patterson for updated regexp.
osimons
parents: 575
diff changeset
299 # windows
99831ab37fd3 0.6dev: Making source-linking work also for Windows-style file references (as output by Windows slaves). Thanks to Doug Patterson for updated regexp.
osimons
parents: 575
diff changeset
300 output = formatter(step, None, None, u'error in foo\\win.c:123: bad')
99831ab37fd3 0.6dev: Making source-linking work also for Windows-style file references (as output by Windows slaves). Thanks to Doug Patterson for updated regexp.
osimons
parents: 575
diff changeset
301 self.assertEqual(Markup, type(output))
99831ab37fd3 0.6dev: Making source-linking work also for Windows-style file references (as output by Windows slaves). Thanks to Doug Patterson for updated regexp.
osimons
parents: 575
diff changeset
302 self.assertEqual(r'error in <a href="/trac/browser/trunk/foo/win.c#L123">'
99831ab37fd3 0.6dev: Making source-linking work also for Windows-style file references (as output by Windows slaves). Thanks to Doug Patterson for updated regexp.
osimons
parents: 575
diff changeset
303 'foo\win.c:123</a>: bad', output)
439
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
304
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
305 def test_format_link_not_in_repos_with_line(self):
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
306 BuildConfig(self.env, name='test', path='trunk').insert()
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
307 build = Build(self.env, config='test', platform=1, rev=123, rev_time=42,
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
308 status=Build.SUCCESS, slave='hal')
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
309 build.insert()
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
310 step = BuildStep(self.env, build=build.id, name='foo',
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
311 status=BuildStep.SUCCESS)
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
312 step.insert()
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
313
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
314 def _raise():
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
315 raise TracError('No such node')
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
316 self.repos.get_node = lambda path, rev: _raise()
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
317
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
318 req = Mock(method='GET', href=Href('/trac'), authname='hal')
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
319 comp = SourceFileLinkFormatter(self.env)
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
320 formatter = comp.get_formatter(req, build)
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
321
440
e660687ac89c Follow-up fix to [486]: trailing chars in auto-linked log messages was getting removed.
cmlenz
parents: 439
diff changeset
322 output = formatter(step, None, None, u'error in foo/bar.c:123: bad')
439
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
323 self.assertEqual(Markup, type(output))
440
e660687ac89c Follow-up fix to [486]: trailing chars in auto-linked log messages was getting removed.
cmlenz
parents: 439
diff changeset
324 self.assertEqual('error in foo/bar.c:123: bad', output)
439
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
325
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
326
410
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
327 def suite():
439
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
328 suite = unittest.TestSuite()
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
329 suite.addTest(unittest.makeSuite(BuildConfigControllerTestCase, 'test'))
575
9ae8f6a95d4b 0.6dev: Adding tests for [645], and also reworked web_ui testcase classes to inherit from an abstract class that contains all the shared `setUp()` and `tearDown()` code.
osimons
parents: 562
diff changeset
330 suite.addTest(unittest.makeSuite(BuildControllerTestCase, 'test'))
439
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
331 suite.addTest(unittest.makeSuite(SourceFileLinkFormatterTestCase, 'test'))
20ddfbb8e879 Fix for #154, added unit tests.
cmlenz
parents: 436
diff changeset
332 return suite
410
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
333
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
334 if __name__ == '__main__':
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents:
diff changeset
335 unittest.main(defaultTest='suite')
Copyright (C) 2012-2017 Edgewall Software