~launchpad-pqm/launchpad/devel

« back to all changes in this revision

Viewing changes to lib/lp/vostok/browser/tests/test_root.py

[rs=buildbot-poller] automatic merge from stable. Revisions: 14397,
        14398, 14399 included.

Show diffs side-by-side

added added

removed removed

Lines of Context:
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 browsing the root of the vostok skin."""
5
 
 
6
 
__metaclass__ = type
7
 
 
8
 
import os
9
 
 
10
 
from zope.publisher.defaultview import getDefaultViewName
11
 
 
12
 
from canonical.launchpad.testing.pages import (
13
 
    extract_text,
14
 
    find_tag_by_id,
15
 
    )
16
 
from lp.app.browser.tales import IMainTemplateFile
17
 
from canonical.testing.layers import (
18
 
    DatabaseFunctionalLayer,
19
 
    FunctionalLayer,
20
 
    )
21
 
from lp.testing import (
22
 
    TestCase,
23
 
    TestCaseWithFactory,
24
 
    )
25
 
from lp.testing.views import create_initialized_view
26
 
from lp.vostok.browser.root import VostokRootView
27
 
from lp.vostok.browser.tests.request import VostokTestRequest
28
 
from lp.vostok.publisher import (
29
 
    VostokLayer,
30
 
    VostokRoot,
31
 
    )
32
 
 
33
 
 
34
 
class TestRootRegistrations(TestCase):
35
 
    """Test the registration of views for `VostokRoot`."""
36
 
 
37
 
    layer = FunctionalLayer
38
 
 
39
 
    def test_root_default_view_name(self):
40
 
        # The default view for the vostok root object is called "+index".
41
 
        view_name = getDefaultViewName(VostokRoot(), VostokTestRequest())
42
 
        self.assertEquals('+index', view_name)
43
 
 
44
 
    def test_root_index_view(self):
45
 
        # VostokRootView is registered as the view for the VostokRoot object.
46
 
        view = create_initialized_view(
47
 
            VostokRoot(), name='+index', layer=VostokLayer)
48
 
        self.assertIsInstance(view, VostokRootView)
49
 
 
50
 
 
51
 
class TestRootView(TestCaseWithFactory):
52
 
    """Tests for `VostokRootView`."""
53
 
 
54
 
    layer = DatabaseFunctionalLayer
55
 
 
56
 
    def view(self):
57
 
        return create_initialized_view(
58
 
            VostokRoot(), name='+index', layer=VostokLayer)
59
 
 
60
 
    def test_distributions(self):
61
 
        # VostokRootView.distributions is an iterable of all registered
62
 
        # distributions.
63
 
        root_view = self.view()
64
 
        new_distro = self.factory.makeDistribution()
65
 
        self.assertIn(new_distro, list(root_view.distributions))
66
 
 
67
 
 
68
 
class TestRootTemplate(TestCaseWithFactory):
69
 
    """Tests for the templates used by views of `VostokRoot`."""
70
 
 
71
 
    layer = DatabaseFunctionalLayer
72
 
 
73
 
    def test_distribution_list(self):
74
 
        # The element with id 'distro-list' on the root page contains a list
75
 
        # of links to all registered distributions.
76
 
        v = create_initialized_view(
77
 
            VostokRoot(), name='+index', layer=VostokLayer)
78
 
        contents = v.render()
79
 
        link_list = find_tag_by_id(contents, 'distro-list')('a')
80
 
        distro_list = list(v.distributions)
81
 
        self.assertEqual(len(link_list), len(distro_list))
82
 
        for distro, link in zip(distro_list, link_list):
83
 
            self.assertEqual(distro.displayname, extract_text(link))
84
 
 
85
 
 
86
 
class TestVostokLayerToMainTemplateAdapter(TestCase):
87
 
 
88
 
    layer = FunctionalLayer
89
 
 
90
 
    def test_path(self):
91
 
        main_template_path = IMainTemplateFile(VostokTestRequest()).path
92
 
        self.assertIn('lp/vostok', main_template_path)
93
 
        self.assertTrue(os.path.isfile(main_template_path))