12041.2.4
by Brad Crittenden
Added tests for project group editing |
1 |
# Copyright 2010 Canonical Ltd. This software is licensed under the
|
2 |
# GNU Affero General Public License version 3 (see the file LICENSE).
|
|
3 |
||
4 |
"""Tests for project group views."""
|
|
5 |
||
6 |
__metaclass__ = type |
|
7 |
||
8 |
from zope.component import getUtility |
|
9 |
from zope.security.interfaces import Unauthorized |
|
10 |
from testtools.matchers import Not |
|
11 |
from canonical.launchpad.webapp import canonical_url |
|
12 |
from canonical.launchpad.webapp.interfaces import ILaunchBag |
|
13 |
from canonical.testing.layers import DatabaseFunctionalLayer |
|
14 |
from lp.registry.interfaces.person import IPersonSet |
|
15 |
from lp.testing import ( |
|
16 |
celebrity_logged_in, |
|
17 |
person_logged_in, |
|
18 |
TestCaseWithFactory, |
|
19 |
)
|
|
12156.5.1
by Benji York
- add a simple message when feature flags are changed |
20 |
from lp.testing.matchers import Contains |
12041.2.4
by Brad Crittenden
Added tests for project group editing |
21 |
from lp.testing.sampledata import ADMIN_EMAIL |
22 |
from lp.testing.views import create_initialized_view |
|
23 |
||
24 |
||
25 |
class TestProjectGroupEditView(TestCaseWithFactory): |
|
26 |
"""Tests the edit view."""
|
|
27 |
||
28 |
layer = DatabaseFunctionalLayer |
|
29 |
||
30 |
def setUp(self): |
|
31 |
super(TestProjectGroupEditView, self).setUp() |
|
32 |
self.project_group = self.factory.makeProject(name='grupo') |
|
33 |
||
34 |
def test_links_admin(self): |
|
35 |
# An admin can change details and administer a project group.
|
|
36 |
with celebrity_logged_in('admin'): |
|
37 |
user = getUtility(ILaunchBag).user |
|
12041.2.9
by Brad Crittenden
Fixed indentation issues per review |
38 |
view = create_initialized_view( |
39 |
self.project_group, '+index', principal=user) |
|
12041.2.4
by Brad Crittenden
Added tests for project group editing |
40 |
contents = view.render() |
41 |
self.assertThat(contents, Contains("Change details")) |
|
42 |
self.assertThat(contents, Contains("Administer")) |
|
43 |
||
44 |
def test_links_registry_expert(self): |
|
45 |
# A registry expert cannot change details but can administer a project
|
|
46 |
# group.
|
|
47 |
with celebrity_logged_in('registry_experts'): |
|
48 |
user = getUtility(ILaunchBag).user |
|
12041.2.9
by Brad Crittenden
Fixed indentation issues per review |
49 |
view = create_initialized_view( |
50 |
self.project_group, '+index', principal=user) |
|
12041.2.4
by Brad Crittenden
Added tests for project group editing |
51 |
contents = view.render() |
52 |
self.assertThat(contents, Not(Contains("Change details"))) |
|
53 |
self.assertThat(contents, Contains("Administer")) |
|
54 |
||
55 |
def test_links_owner(self): |
|
56 |
# An owner can change details but not administer a project group.
|
|
57 |
with person_logged_in(self.project_group.owner): |
|
58 |
user = getUtility(ILaunchBag).user |
|
12041.2.9
by Brad Crittenden
Fixed indentation issues per review |
59 |
view = create_initialized_view( |
60 |
self.project_group, '+index', principal=user) |
|
12041.2.4
by Brad Crittenden
Added tests for project group editing |
61 |
contents = view.render() |
62 |
self.assertThat(contents, Contains("Change details")) |
|
63 |
self.assertThat(contents, Not(Contains("Administer"))) |
|
64 |
||
65 |
def test_edit_view_admin(self): |
|
66 |
admin = getUtility(IPersonSet).getByEmail(ADMIN_EMAIL) |
|
67 |
browser = self.getUserBrowser(user=admin) |
|
68 |
browser.open(canonical_url(self.project_group, view_name='+edit')) |
|
69 |
browser.open(canonical_url(self.project_group, view_name='+review')) |
|
70 |
||
71 |
def test_edit_view_registry_expert(self): |
|
72 |
registry_expert = self.factory.makeRegistryExpert() |
|
73 |
browser = self.getUserBrowser(user=registry_expert) |
|
74 |
url = canonical_url(self.project_group, view_name='+edit') |
|
75 |
self.assertRaises(Unauthorized, browser.open, url) |
|
76 |
browser.open(canonical_url(self.project_group, view_name='+review')) |
|
77 |
||
78 |
def test_edit_view_owner(self): |
|
79 |
browser = self.getUserBrowser(user=self.project_group.owner) |
|
80 |
browser.open(canonical_url(self.project_group, view_name='+edit')) |
|
81 |
url = canonical_url(self.project_group, view_name='+review') |
|
82 |
self.assertRaises(Unauthorized, browser.open, url) |