~launchpad-pqm/launchpad/devel

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)