~launchpad-pqm/launchpad/devel

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
# Copyright 2010 Canonical Ltd.  This software is licensed under the
# GNU Affero General Public License version 3 (see the file LICENSE).

"""Test distributionsourcepackage views."""

__metaclass__ = type

from zope.component import getUtility

from canonical.testing.layers import (
    DatabaseFunctionalLayer,
    LaunchpadFunctionalLayer,
    )
from lp.app.enums import ServiceUsage
from lp.app.interfaces.launchpad import ILaunchpadCelebrities
from lp.soyuz.interfaces.archive import ArchivePurpose
from lp.testing import (
    celebrity_logged_in,
    test_tales,
    TestCaseWithFactory,
    )
from lp.testing.matchers import BrowsesWithQueryLimit
from lp.testing.views import create_view


class TestDistributionSourcePackageFormatterAPI(TestCaseWithFactory):

    layer = DatabaseFunctionalLayer

    def test_link(self):
        sourcepackagename = self.factory.makeSourcePackageName('mouse')
        ubuntu = getUtility(ILaunchpadCelebrities).ubuntu
        dsp = ubuntu.getSourcePackage('mouse')
        markup = (
            u'<a href="/ubuntu/+source/mouse" class="sprite package-source">'
            u'mouse in Ubuntu</a>')
        self.assertEqual(markup, test_tales('dsp/fmt:link', dsp=dsp))


class TestDistributionSourcePackageChangelogView(TestCaseWithFactory):

    layer = LaunchpadFunctionalLayer

    def test_packagediff_query_count(self):
        archive = self.factory.makeArchive(purpose=ArchivePurpose.PRIMARY)
        spph = self.factory.makeSourcePackagePublishingHistory(
            archive=archive)
        dsp = archive.distribution.getSourcePackage(
            spph.sourcepackagerelease.sourcepackagename)
        changelog_browses_under_limit = BrowsesWithQueryLimit(
            32, self.factory.makePerson(), '+changelog')
        self.assertThat(dsp, changelog_browses_under_limit)
        with celebrity_logged_in('admin'):
            for i in range(5):
                self.factory.makePackageDiff(
                    to_source=spph.sourcepackagerelease)
        self.assertThat(dsp, changelog_browses_under_limit)


class TestDistributionSourceView(TestCaseWithFactory):

    layer = DatabaseFunctionalLayer

    def setUp(self):
        super(TestDistributionSourceView, self).setUp()
        sourcepackagename = self.factory.makeSourcePackageName('mouse')
        distro = self.factory.makeDistribution()
        self.dsp = distro.getSourcePackage('mouse')

    def test_bugs_answers_usage_none(self):
        # The dict values are all False.
        view = create_view(self.dsp, '+index')
        self.assertFalse(view.bugs_answers_usage['uses_bugs'])
        self.assertFalse(view.bugs_answers_usage['uses_answers'])
        self.assertFalse(view.bugs_answers_usage['uses_both'])
        self.assertFalse(view.bugs_answers_usage['uses_either'])

    def test_bugs_answers_usage_bugs(self):
        # The dict values are True for bugs and either.
        with celebrity_logged_in('admin'):
            self.dsp.distribution.official_malone = True
        view = create_view(self.dsp, '+index')
        self.assertTrue(view.bugs_answers_usage['uses_bugs'])
        self.assertFalse(view.bugs_answers_usage['uses_answers'])
        self.assertFalse(view.bugs_answers_usage['uses_both'])
        self.assertTrue(view.bugs_answers_usage['uses_either'])

    def test_bugs_answers_usage_answers(self):
        # The dict values are True for answers and either.
        with celebrity_logged_in('admin'):
            self.dsp.distribution.answers_usage = ServiceUsage.LAUNCHPAD
        view = create_view(self.dsp, '+index')
        self.assertFalse(view.bugs_answers_usage['uses_bugs'])
        self.assertTrue(view.bugs_answers_usage['uses_answers'])
        self.assertFalse(view.bugs_answers_usage['uses_both'])
        self.assertIs(True, view.bugs_answers_usage['uses_either'])

    def test_bugs_answers_usage_both(self):
        # The dict values are all True.
        with celebrity_logged_in('admin'):
            self.dsp.distribution.official_malone = True
            self.dsp.distribution.answers_usage = ServiceUsage.LAUNCHPAD
        view = create_view(self.dsp, '+index')
        self.assertTrue(view.bugs_answers_usage['uses_bugs'])
        self.assertTrue(view.bugs_answers_usage['uses_answers'])
        self.assertTrue(view.bugs_answers_usage['uses_both'])
        self.assertTrue(view.bugs_answers_usage['uses_either'])